「商品ページに構造化データを入れておいて」と言われたけれど、Product schemaと検索すると「Product snippet」「Merchant listing」という聞き慣れない言葉が並んでいて、結局どちらを書けばいいのか分からない。

そういう状態のまま、この記事にたどり着いた方が多いのではないかと思います。

この記事は、Product schemaという言葉を今日はじめて調べた方を想定して書きました。2つの機能の違いから、コピペして試せる実装テンプレート、そして公開したあとに価格や在庫がずれていく理由まで、図解と会話をはさみながら進めます。

こんなふうに調べていませんか

  • ChatGPTに「Product schemaって何」と聞いたけれど、専門用語ばかりで説明が分からなかった
  • 「Product schema 書き方」で検索して、そのままコピペできるテンプレートを探している
  • 上司から「商品ページに構造化データ、入れておいて」と言われたが、何を書けばいいか分からない

この記事を読み終えたときに手に入るもの

  • Product snippetとMerchant listingで、必須プロパティが違う理由を説明できるようになります
  • 単一商品ページのJSON-LDを、自社の情報に置き換えてそのまま試せます
  • 公開後に価格・在庫がずれる3つの箇所と、防ぎ方が分かります

結論30秒でわかる、この記事の結論

  • Product schemaとは、商品名・価格・在庫状況をGoogleに伝える構造化データです。
  • 出口は2つ。レビュー中心のProduct snippetと、購入できる商品ページ向けのMerchant listingです。必須プロパティが違います。
  • この記事では、単一商品ページのコピペ用テンプレートと、公開後に価格・在庫がずれる3つの箇所まで解説します。
Product schemaで最初に決めるのはこの3つです在庫が古いままだと、それだけで信頼を失いますProduct schemaで最初に決めるのはこの3つです1つめ出口を決めるProduct snippetかMerchantlistingか2つめ必須プロパティを埋めるnameを基本に、offersやreviewを足す3つめ公開後もズレを防ぐ価格・在庫は商品マスタから自動生成鈴木さん在庫が古いままだと、それだけで信頼を失います
Product schemaで最初に決めるのはこの3つです — 在庫が古いままだと、それだけで信頼を失います

この記事では、ある会社のマーケティング部の2人と、専門家の会話をはさみながら進めます。あなたに近い立場の人の質問から読んでいただいて構いません。

  • 若葉さん(Web担当2年目)— 「そもそも、それって何ですか?」を聞く役
  • 高梨課長(マーケ課長)— 「誰が、どれくらいの手間でやるんですか?」を聞く役
  • 鈴木さん(AIO/SEOの専門家・本誌監修)— 答える役

01そもそもProduct schemaの書き方は、AI対策として何のためにあるんですか?

若葉さん
若葉さんの発言

あの、そもそもなんですが「Product schema」ってどんな時に使うものなんでしょうか。うちは記事のJSON-LDは入れているんですが、商品ページ用は初めてで…。

鈴木さん
鈴木さんの発言

はい、そこは記事の構造化データとは別物と考えるとすっきりしますよ。ひとことで言うと、Product schemaは、商品名・価格・在庫状況をGoogleに機械可読な形で伝えるための書き方なんです。

schema.orgの定義では、Product型は「提供される商品またはサービス」を表す型です。靴やコンサートチケット、車のレンタルなど、幅広い商品・サービスが対象になります。

Google公式ドキュメントは、Product構造化データを2つの機能に分けて説明しています。Product snippetは、直接購入できないページも含めレビュー情報を中心に扱います。Merchant listingは、実際に購入できる商品ページ向けで、配送やサイズ情報にも対応します。

対象になる業種も幅広く、単品を売るネットショップだけでなく、コンサートチケットのような日時が決まった商品や、車のレンタルのようなサービス型の商品にも同じProduct型が使われます。「モノを売っているか、サービスを売っているか」で書き方を大きく変える必要はありません。

お店の値札にたとえると、こうなります貼って終わりではなく、貼り替える作業がある点も同じですお店の値札にたとえると、こうなります貼って終わりではなく、貼り替える作業がある点も同じですお店の値札でいうとProduct schemaでいうと値札に書く商品名name(商品名の必須プロパティ)在庫を確認するシールoffers.availability(在庫状況)レジ横の「口コミ4.5」ポップaggregateRating(評価点・件数)値札を貼り替える作業価格・在庫の更新運用
お店の値札にたとえると、こうなります — 貼って終わりではなく、貼り替える作業がある点も同じです

値札だけを見て安心してしまうと、裏の在庫確認シールが古いままになっていることには気づけません。Product schemaも同じで、書いたコードを一度確認しただけで終わらせず、値札を貼り替えるように定期的に見直すという感覚を持っておくと、後半の話がすんなり入ってきます。

この章のまとめ

Product schemaとは、商品名・価格・在庫状況を機械可読な形で伝える構造化データです。出口はProduct snippetとMerchant listingの2つに分かれます。

02Product snippetとMerchant listing、AI検索対策ではどっちを目指せばいいんですか?

高梨課長
高梨課長の発言

鈴木さん、うちは商品を直接販売しているECサイトです。この場合、2つのうちどちらを実装すればいいんでしょうか。

鈴木さん
鈴木さんの発言

実際に販売しているページなら、Merchant listingの要件を満たす実装を優先するのが基本です。ただ、必須プロパティが増えるので、まず違いを整理しますね。

先に決めるべきは、書き方ではなく狙う出口です。Merchant listingは「販売者が自ら直接販売していること」が前提で、Product snippetにはその制約がありません。この分岐で必須プロパティが変わります。

nameは両機能に共通の必須プロパティです。Product snippetでは、これに加えてreview・aggregateRating・offersのいずれか1つ以上が必須になります。

プロパティProduct snippetMerchant listing
name必須必須
review/aggregateRating/offersいずれか1つ以上必須offers(Offer型)が必須
offers.priceoffersを使う場合は必須必須(0より大きい値)
offers.priceCurrency推奨必須
image推奨必須
必須プロパティの重さが違いますMerchant listingのほうが、埋める項目が増えます必須プロパティの重さが違いますMerchant listingのほうが、埋める項目が増えますProduct snippetnameは必須review・aggregateRating・offersのいずれか1つ以上画像(image)は推奨にとどまる購入できないページにも使えるMerchant listingnameに加えoffers(Offer型)が必須price・priceCurrencyも必須imageも必須になる販売者が直接販売していることが前提
必須プロパティの重さが違います — Merchant listingのほうが、埋める項目が増えます

この章のまとめ

狙う出口によって必須プロパティが変わります。実際に販売しているページなら、Merchant listingの要件を満たす実装を優先します。

03AI検索最適化の現場で使うProduct schemaの書き方は、実際どう書くんですか?

若葉さん
若葉さんの発言

違いは分かってきました。それで、実際のコードって、そのままコピペして使ってもいいものなんでしょうか。

鈴木さん
鈴木さんの発言

大丈夫です。 ここでは、単一商品を販売するページを想定したテンプレートを用意しました。自社の情報に置き換えれば、そのまま使えます。

以下は、単一商品を販売するECサイトの商品ページを想定したテンプレートです。

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "商品名をここに入力",
  "image": [
    "https://sample.example.com/images/product-main.jpg"
  ],
  "description": "商品説明文をここに入力",
  "sku": "SAMPLE-0001",
  "brand": {
    "@type": "Brand",
    "name": "ブランド名"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://sample.example.com/products/0001",
    "priceCurrency": "JPY",
    "price": "9800",
    "availability": "https://schema.org/InStock"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "120"
  }
}

offersはOffer型を入れ子にし、price・priceCurrency・availabilityを記述します。availabilityの値は、schema.orgが定義する列挙値から選ぶ必要があります。

skuは、社内の在庫管理番号を機械可読な形で示すプロパティです。descriptionには、商品ページ本文に書かれている説明文と同じ内容を入れます。表示されている情報と、構造化データに書く情報は一致させるのが基本の考え方です。

商品の売り手情報を補強したい場合は、別記事『Organization schemaの書き方|企業情報の伝え方』のsellerプロパティ実装例もあわせて参照してください。記事ページとの実装の違いは、別記事『Article・BlogPosting schemaの書き方ガイド』で解説しています。

Productの中には、3つの部品が入れ子になっています波括弧を1つ足すだけで、それぞれの型を表現しますProductの中には、3つの部品が入れ子になっています波括弧を1つ足すだけで、それぞれの型を表現しますoffersOffer型price・priceCurrency・availabilityaggregateRatingAggregateRating型評価点(ratingValue)と件数(reviewCount)brandBrand型ブランド名を入れ子で記述
Productの中には、3つの部品が入れ子になっています — 波括弧を1つ足すだけで、それぞれの型を表現します

この章のまとめ

テンプレートのoffers・aggregateRating・brandは、それぞれ別の型を入れ子にした形です。price・priceCurrency・availabilityはOffer型の中に書きます。

04在庫が変わったら、Product schemaのavailabilityはAI対策でどの値に書き換えるんですか?

高梨課長
高梨課長の発言

在庫はしょっちゅう変わります。availabilityって、その都度書き換える必要があるんでしょうか。

鈴木さん
鈴木さんの発言

そのとおりです。 ここを放置している商品ページは意外と多いので、順番を決めておくと安心ですよ。

availabilityプロパティは、商品の在庫状況を示す項目です。schema.orgは12種類の列挙値を定義しています。以下は、そのうちECサイトで使用頻度が高い6種です。

意味
InStock在庫あり
OutOfStock在庫切れ
PreOrder予約受付中
BackOrder取り寄せ中
Discontinued販売終了
LimitedAvailability在庫が限られている

この章のまとめ

書ける値は決まっています。独自の文言ではなく、この列挙値から選びます。

05在庫と表示がずれたら、Product schemaをAI検索対策としてどの順番で直すんですか?

在庫状況が変わった際は、availabilityの値も忘れずに更新する必要があります。表示上は在庫切れなのに、構造化データがInStockのままというズレは、ガイドライン違反にあたります。

在庫が変わったときにやることこの3ステップを、在庫が動くたびに繰り返します在庫が変わったときにやることこの3ステップを、在庫が動くたびに繰り返します1実際の在庫状況を確認する表示ページとJSON-LDの両方を見ます2対応するavailability値を選ぶInStock・OutOfStockなど、schema.orgの列挙値から3JSON-LDを更新して公開する表示価格・在庫と値が一致しているか確認
在庫が変わったときにやること — この3ステップを、在庫が動くたびに繰り返します

この章のまとめ

availabilityは、書いて終わりのプロパティではありません。在庫状況が変わるたびに、表示と一致させる運用が要ります。

06Product schemaを実装すれば、LLMOやAI検索で引用されやすくなりますか?

高梨課長
高梨課長の発言

ここまでの作業、結構な手間になりそうです。これをやれば、AI検索に引用されやすくなるという理解でいいですか。

鈴木さん
鈴木さんの発言

そこは、正直に言うとまだ証明されていません。SSRNで公開された検証論文では、構造化データの有無とAI引用の関連が、交絡要因を補正すると統計的に消えています。

Product schemaを実装すればAI検索に引用されやすくなる、という因果関係は現時点で証明されていません。詳細は別記事『Schema markupとAI引用の相関|SSRN論文検証』で解説しています。この実装はAI検索最適化LLMOとも呼ばれます)の一環として語られることがありますが、確認できた範囲では効果を保証する根拠ではありません。

この章のまとめ

引用されやすくなるという因果関係は、現時点では証明されていません。実装の理由を引用効果だけに置かないでください。

07Product schemaに書く価格と在庫のズレは、AI検索最適化の効果より先に直すべきなんですか?

商品ページには、他ジャンルにない事情があります。価格・在庫という、時間とともに変わる情報を扱う点です。古い価格や在庫がAIに引かれる事故は、引用されるかどうか以前の実害になります。

記事の内容が多少古くても、読者が気づかないまま読み終えることは珍しくありません。しかし価格や在庫は、読者がその場で確認しようとする情報です。ズレていればすぐに気づかれ、信頼を損ねます。

EC事業者が引用条件そのものを整理したい場合は、別記事『EC事業者のPerplexity対策|商品ページ引用の条件整理』をあわせてご覧ください。

「引用されるか」と「合っているか」は、別の話です証明を待たずに着手できるのは、右側です「引用されるか」と「合っているか」は、別の話です証明を待たずに着手できるのは、右側です引用されるかどうかまだ因果関係が証明されていないSSRN論文では交絡要因の補正後に相関が消えた研究として発展途上の領域証明を待ってから動く必要はない価格・在庫が合っているかどうか表示と構造化データが一致しているか古い情報が事故として実害になる証明を待たずに今すぐ確認できる商品ページ特有の、実害に近い論点
「引用されるか」と「合っているか」は、別の話です — 証明を待たずに着手できるのは、右側です

この章のまとめ

引用効果の証明を待つ必要はありません。価格・在庫が実態と一致しているかどうかは、証明を待たずに今すぐ確認できることです。

08Product schemaを実装したあと、AIOの運用として何もしなくて大丈夫ですか?

高梨課長
高梨課長の発言

コードを書いて公開したら、それで完了と考えていいんでしょうか。

鈴木さん
鈴木さんの発言

いえ、そこがこの実装でいちばん見落とされるところです。 商品ページの構造化データは、1回書いて終わりにならない点が記事ページとの最大の違いなんですよ。

公開前にリッチリザルトテストを通していても、それは通した時点の状態を確認しただけです。商品ページの価格と在庫は、そのあとも動き続けます。

価格・在庫は、セールの開始・終了や入荷のタイミングで、担当者がページの表示だけを急いで書き換えることがあります。構造化データ側のテンプレートまで手が回らず、そのまま取り残されるというのが、実務でよく起きる崩れ方です。

この章のまとめ

公開前の検証は、その時点の確認にすぎません。書いて終わりにはなりません。

09公開後にschemaが崩れる3か所は、AI対策の運用でどう防ぐんですか?

検証を通過したあと、実務で崩れるのは次の3か所です。

崩れる箇所起きること確認方法
priceセール価格が表示だけ変わり、構造化データは通常価格のままセール中の商品ページで表示価格とJSON-LDの値を突合する
availability在庫切れ表示なのにInStockが残る在庫切れ商品を1点選び、JSON-LDのavailabilityを確認する
aggregateRatingレビュー削除後も件数・評点が更新されないレビュー数が変動した商品で値の追随を確認する

在庫と価格は、商品マスタから構造化データを自動生成する設計にしておくのが基本です。手作業で構造化データだけを更新する運用は、商品点数が増えた時点で更新漏れが避けられなくなります。

なお、JavaScriptで動的にマークアップを生成している場合、Google公式ドキュメントは「Shoppingのクロール頻度と信頼性が下がる可能性がある」と注意を促しています。自動生成にする場合も、サーバー側で出力する方式を優先してください。

更新の運用を変えると、崩れなくなります商品点数が増えても、手間が変わらない形にします更新の運用を変えると、崩れなくなります商品点数が増えても、手間が変わらない形にします手作業で更新する運用セール価格が表示だけ変わり、JSON-LDは取り残される在庫切れ後もavailabilityがInStockのまま商品点数が増えるほど更新漏れが増える商品マスタから自動生成する運用表示価格とJSON-LDの値が常に一致する在庫が変わった瞬間にavailabilityも変わる商品点数が増えても運用の手間が変わらない
更新の運用を変えると、崩れなくなります — 商品点数が増えても、手間が変わらない形にします

この章のまとめ

公開した瞬間から、構造化データは実態とずれ始めます。price・availability・aggregateRatingの3か所を、商品マスタからの自動生成で防ぐのが基本です。

10公開前に、Product schemaの書き方をAI検索対策としてどう確認するんですか?

運用の型まで決まったら、公開の直前に次を確認します。最後の項目にあるリッチリザルトテスト(search.google.com/test/rich-results)は、URLまたはコードを入力すると、検出された型とエラー・警告を返します。詳しい使い方は、別記事『構造化データのテスト・検証ツールの使い方|旧ツールとの違いも解説』で解説しています。

  • nameと、review・aggregateRating・offersのいずれか1つ以上を実装している
  • offers.price・offers.priceCurrencyを正しい形式で記述している
  • availabilityの値をschema.orgの列挙値から選び、在庫の実態と一致させている
  • Merchant listingを狙う場合、priceが0より大きい値になっている
  • マークアップの内容がページの表示情報と一致している
  • price・availabilityを商品マスタから自動生成する設計になっている
  • リッチリザルトテストでエラー・警告がないことを確認している
公開前に、ここを確認してください7項目のうち、特に事故が起きやすいのはこの5つです公開前に、ここを確認してください7項目のうち、特に事故が起きやすいのはこの5つですnameと、review・aggregateRating・offersのいずれか1つ以上を実装しているProduct snippetの必須条件offers.price・offers.priceCurrencyを正しい形式で記述しているMerchant listingでは両方とも必須在庫切れなのに、availabilityの更新を忘れている在庫切れページにはOutOfStockを反映させますマークアップの内容が、ページの表示情報と一致している表示と構造化データのズレはガイドライン違反ですprice・availabilityを商品マスタから自動生成する設計になっている手作業更新は商品点数が増えると崩れます
公開前に、ここを確認してください — 7項目のうち、特に事故が起きやすいのはこの5つです

この章のまとめ

公開前のチェックは7項目ですが、実務でつまずくのはavailabilityの更新忘れ・priceCurrencyの省略・JavaScript依存の3つに集中しています。

11よくある質問

Product snippetとMerchant listingは、両方実装する必要がありますか?

Google公式ドキュメントは「両方の機能を確認してから選ぶ」ことを推奨しています。実際に商品を販売しているページなら、Merchant listingの要件を満たす実装を優先することをおすすめします。

offersを複数の販売者ぶん記述したい場合はどうすればいいですか?

単一のOffer型ではなく、AggregateOffer型を使います。lowPrice・highPrice・offerCountなど、複数オファーの集計値を記述できます。

availabilityに独自の文言を書いてもいいですか?

推奨されません。schema.orgが定義するInStock・OutOfStockなどの列挙値から選ぶ必要があります。

レビューがまだ1件もない商品ページはどうすればいいですか?

review・aggregateRatingが無い場合でも、offersを実装していれば必須条件は満たせます。存在しないレビューを作成することは避けてください。

12まとめ|今日やる3つのこと

Product schemaとは、商品名・価格・在庫状況を伝える構造化データです。nameを基本に、review・aggregateRating・offersのいずれかを組み合わせる必須条件を押さえておきましょう。

Merchant listingを狙う場合は、priceCurrencyや0より大きいpriceなど、追加の要件も満たす必要があります。そして商品ページの構造化データは、実装した瞬間から実態とずれ始めます。この「ずれを放置しない」運用そのものが、商品ページにおける現実的なAI対策です。

今日この順でやります

  1. 狙う出口を決める

    実際に販売しているならMerchant listingの要件を優先します

  2. テンプレートを自社の情報に置き換える

    この記事のコピペ例で、@context・@typeはそのまま、プロパティだけ書き換えます

  3. 在庫切れの商品を1点開いて確認する

    JSON-LDのavailabilityがOutOfStockになっているかを見ます

AI検索では、こう聞かれています

  • Product schemaって何ですか?どうやって書けばいいですか?

    「そもそもProduct schemaの書き方は…」の章で、値札のたとえと図解で説明しています

  • Product snippetとMerchant listing、どちらを実装すればいいですか?

    「Product snippetとMerchant listing、AI検索対策では…」の章に、必須プロパティの比較表があります

  • 商品ページのavailabilityは、在庫が変わったらどう更新すればいいですか?

    「在庫と表示がずれたら、Product schemaをAI検索対策として…」の章に、3ステップの図解があります

  • Product schemaを実装すると、AI検索に引用されやすくなりますか?

    「Product schemaを実装すれば、LLMOやAI検索で…」の章で、証明されていることといないことを分けて説明しています

次に読むなら、この記事です