自社の商品ページを検索結果で見たとき、「価格やレビュー評価が表示されている競合サイトがあるのに、うちのサイトには何も出ていない」と感じたことはないでしょうか。あの星マークや価格表示は、HTMLに少しのコードを追加するだけで実現できます。それが構造化データと呼ばれる仕組みです。

この記事では、商品ページに特化した構造化データの書き方を、実際に動くコードサンプル付きで解説します。とくにProduct型とAggregateRating(総合評価)の組み合わせに焦点を当て、Google検索結果でリッチリザルトとして表示させるまでの手順を一つひとつ説明していきます。

構造化データで商品情報を検索結果に表示する仕組み

そもそも構造化データとは何か

Webページは人間が読むために作られていますが、検索エンジンは文章の「意味」を完全には理解できません。たとえば「青汁 3,980円」というテキストがページにあっても、Googleはそれが商品名なのか、価格なのか、あるいはただの説明文なのかを正確に判断できないことがあります。

構造化データは、ページ上の情報に「これは商品名です」「これは価格です」といったラベルを付けることで、検索エンジンがコンテンツの意味を正確に理解できるようにする仕組みです。世界共通の語彙体系であるschema.orgが定義したルールに従って記述します。

リッチリザルトが表示されるまでの流れ

構造化データをページに追加してから、実際に検索結果ページ(SERP)にリッチリザルトが表示されるまでには、いくつかの段階があります。

  1. HTMLに構造化データのコードを追加する
  2. Googleのクローラーがページを巡回し、構造化データを読み取る
  3. Googleが構造化データの内容を検証し、ガイドラインに準拠しているか確認する
  4. 準拠している場合、検索結果にリッチリザルト(星評価・価格・在庫状況など)が表示される

重要なのは、構造化データを追加したからといって必ずリッチリザルトが表示されるわけではないという点です。Googleはあくまで「表示する可能性がある」という立場を取っており、最終的な表示判断はアルゴリズムに委ねられています。それでも、構造化データがなければリッチリザルトが表示される可能性はゼロですから、実装する価値は十分にあります。

なぜJSON-LD形式が推奨されるのか

構造化データの記述形式には、JSON-LD、Microdata、RDFaの3種類があります。このうちGoogleが公式に推奨しているのがJSON-LDです。

JSON-LDが推奨される理由は、HTMLの本文とは独立した<script>タグ内に記述できるため、既存のページ構造を一切変更せずに導入できる点にあります。MicrodataやRDFaはHTML要素に直接属性を追加する方式のため、テンプレートの変更が必要になり、デザイン崩れのリスクも伴います。JSON-LDなら、ページの<head><body>の末尾にスクリプトブロックを1つ追加するだけで済みます。

Product構造化データの必須プロパティと書き方

最低限必要な4つのプロパティ

GoogleのProduct構造化データの公式ドキュメントによると、商品のリッチリザルトを表示させるには、最低限以下の4つの情報が必要です。

  1. name — 商品名
  2. image — 商品画像のURL(推奨サイズ: 160×90px〜1920×1080px)
  3. offers または review または aggregateRating — 価格情報、レビュー、総合評価のいずれか1つ以上

この3番目の条件がポイントです。価格だけでもよいし、レビューだけでもよいし、総合評価だけでもよい。ただし、3つすべてを含めたほうがリッチリザルトの情報量が増え、クリック率の向上が期待できます。

推奨プロパティで情報を充実させる

必須プロパティに加えて、以下の推奨プロパティを設定すると、Googleが商品をより正確に識別できるようになります。

brandは商品のブランド名を指定するプロパティです。自社ブランドがある場合は必ず設定しましょう。descriptionは商品の説明文で、検索結果の補足情報として使われることがあります。skugtin(JANコード)、mpn(型番)は商品の一意な識別子で、これらがあるとGoogleは同じ商品の重複を避けやすくなります。

実装コード全体像

ここまでの内容を踏まえた、実際に使えるJSON-LDコードの全体像を示します。

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "国産有機青汁 30包入り",
  "image": "https://example.com/images/aojiru-product.webp",
  "description": "九州産の有機大麦若葉を使用した青汁です。1包あたり食物繊維3.2gを含みます。",
  "brand": {
    "@type": "Brand",
    "name": "ヘルシーグリーン"
  },
  "sku": "HG-AOJIRU-30",
  "gtin13": "4560000000000",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/aojiru",
    "priceCurrency": "JPY",
    "price": "3980",
    "availability": "https://schema.org/InStock",
    "seller": {
      "@type": "Organization",
      "name": "ヘルシーグリーン公式オンラインショップ"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.3",
    "bestRating": "5",
    "ratingCount": "128"
  }
}

このコードを<script type="application/ld+json">タグで囲み、商品ページのHTML内に配置するだけで構造化データの実装は完了します。<head>タグ内でも<body>の末尾でも、どちらに配置しても問題ありません。

AggregateRatingでレビュー評価を表示する

AggregateRatingの必須プロパティ

AggregateRating(総合評価)は、複数のユーザーレビューをまとめた評価スコアを表すための構造化データです。検索結果に星マークとレビュー件数が表示されるため、クリック率への影響が大きい要素です。

必須プロパティは以下の2つです。

  1. ratingValue — 平均評価点(例: 4.3)
  2. ratingCount または reviewCount — 評価件数またはレビュー件数のどちらか1つ

bestRating(最高評価点)は省略すると自動的に5として扱われますが、5段階評価であることを明示するために記述しておくことをお勧めします。

ページ表示との完全一致ルール

AggregateRatingの実装で最も重要なルールがあります。構造化データに記述した評価値は、ページ上に実際に表示されている数値と完全に一致しなければなりません。

たとえば、構造化データでratingValueを4.3と記述しているのに、ページ上に評価点が表示されていなかったり、ページ上では4.5と表示されていたりすると、Googleのガイドライン違反となります。違反が検出されるとManual Action(手動対策)の対象となり、リッチリザルトが表示されなくなるだけでなく、最悪の場合は検索順位にも悪影響を及ぼします。

ページのデザインを更新するときや、レビューシステムのデータベースを変更するときは、構造化データの値も必ず同期させてください。

レビュー評価を構造化データに含める際の注意点

Googleはユーザーが自発的に投稿したレビューのみを正当な評価として扱います。サイト運営者が自作したレビューや、関連のない第三者のレビューを商品に紐付けることは禁止されています。

また、AggregateRatingは特定の1つの商品に紐付ける必要があります。カテゴリページや商品一覧ページに「サイト全体の平均評価」として設定することはできません。商品詳細ページにのみ実装してください。

健康食品・サプリメントECでの実装上の注意

薬機法を踏まえたdescriptionの書き方

健康食品やサプリメントの商品ページに構造化データを実装する場合、descriptionプロパティの記述には特別な注意が必要です。

日本の薬機法(医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律)では、健康食品に対して医薬品的な効能効果を標ぼうすることが禁止されています。これは構造化データのdescription内でも同様です。「血圧を下げる」「がんを予防する」「免疫力を高める」といった表現は使用できません。

代わりに、栄養成分の含有量や原材料の産地といった客観的な事実を記述しましょう。「九州産の有機大麦若葉を使用した青汁です。1包あたり食物繊維3.2gを含みます」のように、測定可能な数値と事実だけで構成すれば、薬機法に抵触するリスクを避けられます。

定期購入商品のoffers設定

健康食品ECでよくある定期購入プランの場合、offersプロパティをどう設定するかが悩みどころです。Googleは1つのProduct内に複数のOfferを含めることを許可しています。通常購入と定期購入の両方を提示したい場合は、以下のようにoffers配列で記述します。

"offers": [
  {
    "@type": "Offer",
    "name": "通常購入",
    "price": "3980",
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock"
  },
  {
    "@type": "Offer",
    "name": "定期購入(毎月お届け)",
    "price": "3480",
    "priceCurrency": "JPY",
    "availability": "https://schema.org/InStock"
  }
]

この場合、検索結果には最も低い価格(この例では3,480円)が表示される傾向があります。

実装後の検証とモニタリング

Rich Results Testでの事前検証

コードを本番環境に公開する前に、必ずGoogleのリッチリザルトテストで検証を行いましょう。このツールにURLまたはコードスニペットを入力すると、構造化データが正しく認識されるか、エラーや警告がないかを即座に確認できます。

検証の手順は3ステップです。

  1. リッチリザルトテストのページを開く
  2. 「コード」タブを選択し、JSON-LDを含むHTMLを貼り付ける(または公開済みURLを入力)
  3. 「テストを実行」をクリックし、結果を確認する

エラーが表示された場合は、必須プロパティの欠落やデータ型の不一致(数値を文字列にしている等)が原因であることがほとんどです。警告は必須ではない推奨プロパティの不足を示しており、可能な範囲で対応すれば十分です。

Google Search Consoleでの継続監視

構造化データを公開した後は、Google Search Consoleの「拡張」セクションで、商品の構造化データが正しくインデックスされているかを継続的にモニタリングします。

Search Consoleでは、有効なアイテム数、警告のあるアイテム数、エラーのあるアイテム数がグラフで表示されます。エラーが突然増えた場合は、テンプレートの変更やCMSのアップデートが原因であることが多いため、該当箇所のHTMLを確認してください。

リッチリザルトが表示されない12の原因

構造化データを正しく実装したはずなのにリッチリザルトが表示されない場合、以下の12パターンのいずれかに該当している可能性があります。

  1. JSON-LDの記述にシンタックスエラーがある(カンマの過不足、括弧の閉じ忘れ)
  2. JSON-LDとMicrodataなど複数フォーマットが混在している
  3. 構造化データの内容がページ上に表示されていない(隠しテキスト扱い)
  4. robots.txtやnoindexでクロールインデックスがブロックされている
  5. ページの読み込み速度が極端に遅い、またはモバイル非対応
  6. トップページに実装している(Googleは商品詳細ページでのみサポート)
  7. 検索クエリと構造化データの内容が一致しない
  8. 画像が推奨サイズ要件(160×90px以上)を満たしていない
  9. ページがまだGoogleにインデックスされていない
  10. Googleのアルゴリズムが表示不要と判断した(裁量的な非表示)
  11. 過去のガイドライン違反によりManual Actionを受けている
  12. Googleのポリシー変更により、該当する構造化データタイプのサポートが終了した

とくに多いのは1番のシンタックスエラーと3番の非表示コンテンツです。リッチリザルトテストでエラーが出ていないのに表示されない場合は、3番から6番を順に確認してみてください。

まとめ — 構造化データは「検索エンジンへの翻訳」

構造化データは、人間向けに書かれた商品ページの情報を、検索エンジンが理解できる形式に「翻訳」する作業です。とくにProduct型とAggregateRatingの組み合わせは、検索結果に価格・在庫状況・星評価を表示できるため、クリック率の改善に直結します。

実装の手順をあらためて整理します。

  1. 商品ページに必要なプロパティ(name、image、offers、aggregateRating)を洗い出す
  2. JSON-LD形式でコードを作成する
  3. リッチリザルトテストで検証する
  4. 本番環境にデプロイする
  5. Search Consoleで継続的にモニタリングする

健康食品ECの場合は、descriptionの薬機法対応と、定期購入のoffers設定に気を配れば、他業種と同じように構造化データの恩恵を受けられます。

構造化データの実装は一度やれば終わりではなく、商品情報の更新やレビュー数の変化に合わせて継続的にメンテナンスしていくことが大切です。まずは自社の主力商品ページ1つから試してみてください。検索結果に星マークが表示されたとき、その効果を実感できるはずです。