動的コンテンツのJSON-LD構造化データ実装:SEO効果を高める設定方法と注意点

Published on: | Last updated:

みんな、聞いてー!👋 最近、仕事で「動的コンテンツ」の構造化データについて色々調べてて、結構面白い発見があったからシェアさせて!

ECサイトの商品レビューとか、イベントページの残席情報みたいに、ページを開くたびに内容が変わる部分のことね。これをちゃんとGoogleに伝えるの、意外と奥が深いんだよね…。🤔

結論から言うと、動的JSON-LDはマジで大事。でも注意点も…

いきなり結論から。動的に生成されるコンテンツ(ユーザーレビューとか、在庫状況とか)にJSON-LDで構造化データを設定するのは、SEO的に「やった方がいい」っていうか、もう「必須」レベルだと思う。👍

ちゃんと設定できれば、検索結果にリッチリザルト(星評価とか価格とか)が表示されやすくなるし、クリック率アップも期待できる。でも、やり方を間違えると、Googleに全然認識されなかったり、最悪の場合、間違った情報がインデックスされちゃうこともあるから、そこは注意が必要かな。まさに諸刃の剣って感じ。😅

実際、Googleってどこまで見てるの?【実例】

「JavaScriptで後から生成したJSON-LDって、本当にGooglebotは読んでくれるの?」って疑問、あるよね。答えは「イエス」なんだけど、少し条件があるんだ。

GoogleはページをレンダリングしてJavaScriptを実行するから、クライアントサイドでJSON-LDを埋め込んでも基本的には認識してくれる。実際に、多くのSPA(Single Page Application)サイトがこの方法でリッチリザルトを表示させてるしね。

ただ、注意したいのが、Googleの公式ドキュメントでは「サーバーサイドレンダリング(SSR)や静的サイト生成(SSG)を推奨する」ってニュアンスが強いこと。 これは、クライアントサイドでのレンダリングはGooglebotのリソースを余分に消費するし、実装によってはレンダリングに失敗するリスクがあるからだと思う。まあ、Google側の都合だよね(笑)。

面白いのは、海外のドキュメント、例えばGoogle Developersのサイトなんかを見ると、「とにかく正確なデータを渡してくれれば、方法は問わない」というスタンスが強いように感じる。 でも、日本の大手ECサイトの実装とかを見ていると、Googleが定義していない独自のプロパティを追加して、内部でのデータ管理に役立てているケースを見かけることがあるんだ。これは、純粋なSEO目的だけじゃなくて、社内のデータ分析とかにも構造化データを活用してるってことなんだろうね。この辺は文化の違いというか、活用の幅の違いが見えて面白いポイント。

動的JSON-LDが生成されてGoogleに認識されるまでの流れ(イメージ)
動的JSON-LDが生成されてGoogleに認識されるまでの流れ(イメージ)

じゃ、どうやって実装するの?【コピペOK?】

さて、具体的な実装方法。一番シンプルなのは、JavaScriptを使って動的にJSON-LDを生成して、それを内に挿入する方法かな。

例えば、商品の情報をAPIから取ってきて、その内容でJSON-LDを作る感じ。こんなコードになると思う。


<script type="text/javascript">
  // 商品情報をAPIから非同期で取得する関数(仮)
  function fetchProductData(productId) {
    // 実際にはここでfetch()などを使ってAPIを叩く
    return Promise.resolve({
      name: "すごい動的なTシャツ",
      image: "https://example.com/t-shirt.jpg",
      description: "着るたびに色が変わる(かもしれない)未来のTシャツです。",
      sku: "DYN-TSHIRT-001",
      brand: {
        name: "ミライウェア"
      },
      review: {
        reviewRating: {
          ratingValue: "4.8", // この値が動的に変わる
          reviewCount: "125"  // この値も動的に変わる
        }
      },
      offers: {
        price: "2980",
        priceCurrency: "JPY",
        availability: "https://schema.org/InStock" // 在庫状況も動的
      }
    });
  }

  // ページが読み込まれたら実行
  document.addEventListener('DOMContentLoaded', () => {
    const productId = '12345'; // 実際にはURLなどから取得
    fetchProductData(productId).then(productData => {
      // JSON-LDオブジェクトを作成
      const schema = {
        "@context": "https://schema.org",
        "@type": "Product",
        "name": productData.name,
        "image": productData.image,
        "description": productData.description,
        "sku": productData.sku,
        "brand": {
          "@type": "Brand",
          "name": productData.brand.name
        },
        // ここがポイント!動的なレビュー情報
        "review": {
          "@type": "Review",
          "reviewRating": {
            "@type": "Rating",
            "ratingValue": productData.review.reviewRating.ratingValue,
            "bestRating": "5"
          },
          "author": {
            "@type": "Person",
            "name": "匿名ユーザー"
          }
        },
        "aggregateRating": {
          "@type": "AggregateRating",
          "ratingValue": productData.review.reviewRating.ratingValue,
          "reviewCount": productData.review.reviewRating.reviewCount
        },
        "offers": {
          "@type": "Offer",
          "url": window.location.href,
          "priceCurrency": productData.offers.priceCurrency,
          "price": productData.offers.price,
          "availability": productData.offers.availability,
          "seller": {
            "@type": "Organization",
            "name": "すごいショップ"
          }
        }
      };

      // scriptタグを生成してheadに追加
      const script = document.createElement('script');
      script.type = 'application/ld+json';
      script.text = JSON.stringify(schema);
      document.head.appendChild(script); // これで注入完了!
      
      console.log('JSON-LDを動的に注入しました!');
    });
  });
</script>

こんな感じで、APIから取得したデータを使ってschemaオブジェクトを組み立てて、それを新しい

Related to this topic:

Comments

  1. Guest 2025-11-24 Reply
    最近あんまり気力ないけど、ふと思い出した話。自分、今ウェブ制作会社でSEOやってて、ほんとに静かにこなす毎日なんだけど…動的コンテンツのJSON-LD構造化データの実装がこの前ちょっと面倒だったんだよね。CMSから毎回違うページ出てくるたび、schemaどうやって分けようかなって少し迷子になったし、まあ正直混乱した。本音言うと途中で「全部一緒じゃダメかな」みたいな雑念も…。 結局さ、一個ずつ地道にschemaテストツールで確認するしかなくて…ひたすらチェックしてる最中、自分何してんだろうって思ったり。でもリッチリザルト出現率が急に増え始めて「あれ?ちゃんと反映されてる?」みたいな驚き。検索画面で見え方変わると、本当にアクセスも伸びてきたりするから、小さい設定バカにならないって身をもって感じた。 ただGoogleの仕様さ、急に変わる時あるでしょ?その度ちょっと憂鬱になるけど…まあ結局は慣れる以外手段ないから、それが現実かもしれないね。
  2. Guest 2025-11-20 Reply
    正直に言ってさ、動的なコンテンツにJSON-LDの構造化データを載せるって話を最初に聞いたとき、うーん、本当に意味あるのかな?って、ちょっと疑ってた。SEOが良くなるみたいなことはよく言われるけど、でも実際そんな劇的に変わる?みたいな感じ。あーそうだ、前にSPAで、もう全部JavaScriptでゴリゴリ動かしてるやつにJSON-LD足してみたことあるんだけどさ…検索エンジンへの反映も遅いし、「え、それ認識されてないの?」っていう情報も普通に出てきて。自分がちゃんとマークアップしたのになんか空振りみたいな感じ?うまく行かないこと多かった記憶。Googlebotだって絶対全部見抜いてくれるわけじゃないしね。それに加えて仕様変更とかもまぁ頻繁で…メンテする側の立場からしたら本当に面倒なんだよね。正直、「だったら最初からHTMLで静的なschema.org書いとけばこんな苦労もしないのにな」って今でも思っちゃう瞬間ある。でもまあ最近はSSR(サーバーサイドレンダリング)とか出てきたりして多少は便利になったけど、それでも「これでもう安心!」みたいなのとはちょっと違うというか…やっぱり不安残るんだよね…。
  3. Guest 2025-09-29 Reply
    SEOの世界、JSON-LDって本当に面白いですよね!海外のプロジェクトでも感じたんですけど、検索エンジンとのコミュニケーション、奥が深いんです。最近のトレンド、気になります!
  4. Guest 2025-08-15 Reply
    うーん、子供のネット検索、SEOって難しいよね。でも、こういう技術で子供たちがより良い情報にアクセスできるなんて、親としてはワクワクするかも!
  5. Guest 2025-07-26 Reply
    うーん、JSON-LDって本当に万能なの?SEOの魔法の杖みたいに言われてるけど、実際はもっと複雑だと思うんだよね。結局のところ、検索エンジンの目まぐるしい変化についていけるかどうかが肝心だと思うし…
  6. Guest 2025-04-16 Reply
    JSON-LDってすごいですね!私も動的コンテンツにどう活用できるか考えているんですが、実際の成功事例があると安心感があります。みんなの取り組みをもっと知りたいです!
  7. Guest 2025-04-14 Reply
    「動的コンテンツにJSON-LDって本当に効果あるんですかね?うちのサイトみたいに更新頻度が高い場合、実装コストに見合うかちょっと不安で...。導入事例の具体的な数値とかあればもっと説得力あるんですけど、どうでしょう?」