「商品ページに構造化データを入れておいて」と言われたけれど、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つの箇所まで解説します。
この記事では、ある会社のマーケティング部の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も同じで、書いたコードを一度確認しただけで終わらせず、値札を貼り替えるように定期的に見直すという感覚を持っておくと、後半の話がすんなり入ってきます。
この章のまとめ
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 snippet | Merchant listing |
|---|---|---|
| name | 必須 | 必須 |
| review/aggregateRating/offers | いずれか1つ以上必須 | offers(Offer型)が必須 |
| offers.price | offersを使う場合は必須 | 必須(0より大きい値) |
| offers.priceCurrency | 推奨 | 必須 |
| image | 推奨 | 必須 |
この章のまとめ
狙う出口によって必須プロパティが変わります。実際に販売しているページなら、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の書き方ガイド』で解説しています。
この章のまとめ
テンプレートの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のままというズレは、ガイドライン違反にあたります。
この章のまとめ
availabilityは、書いて終わりのプロパティではありません。在庫状況が変わるたびに、表示と一致させる運用が要ります。
06Product schemaを実装すれば、LLMOやAI検索で引用されやすくなりますか?
高梨課長ここまでの作業、結構な手間になりそうです。これをやれば、AI検索に引用されやすくなるという理解でいいですか。
鈴木さんそこは、正直に言うとまだ証明されていません。SSRNで公開された検証論文では、構造化データの有無とAI引用の関連が、交絡要因を補正すると統計的に消えています。
Product schemaを実装すればAI検索に引用されやすくなる、という因果関係は現時点で証明されていません。詳細は別記事『Schema markupとAI引用の相関|SSRN論文検証』で解説しています。この実装はAI検索最適化(LLMOとも呼ばれます)の一環として語られることがありますが、確認できた範囲では効果を保証する根拠ではありません。
この章のまとめ
引用されやすくなるという因果関係は、現時点では証明されていません。実装の理由を引用効果だけに置かないでください。
07Product schemaに書く価格と在庫のズレは、AI検索最適化の効果より先に直すべきなんですか?
商品ページには、他ジャンルにない事情があります。価格・在庫という、時間とともに変わる情報を扱う点です。古い価格や在庫がAIに引かれる事故は、引用されるかどうか以前の実害になります。
記事の内容が多少古くても、読者が気づかないまま読み終えることは珍しくありません。しかし価格や在庫は、読者がその場で確認しようとする情報です。ズレていればすぐに気づかれ、信頼を損ねます。
EC事業者が引用条件そのものを整理したい場合は、別記事『EC事業者のPerplexity対策|商品ページ引用の条件整理』をあわせてご覧ください。
この章のまとめ
引用効果の証明を待つ必要はありません。価格・在庫が実態と一致しているかどうかは、証明を待たずに今すぐ確認できることです。
08Product schemaを実装したあと、AIOの運用として何もしなくて大丈夫ですか?
高梨課長コードを書いて公開したら、それで完了と考えていいんでしょうか。
鈴木さんいえ、そこがこの実装でいちばん見落とされるところです。 商品ページの構造化データは、1回書いて終わりにならない点が記事ページとの最大の違いなんですよ。
公開前にリッチリザルトテストを通していても、それは通した時点の状態を確認しただけです。商品ページの価格と在庫は、そのあとも動き続けます。
価格・在庫は、セールの開始・終了や入荷のタイミングで、担当者がページの表示だけを急いで書き換えることがあります。構造化データ側のテンプレートまで手が回らず、そのまま取り残されるというのが、実務でよく起きる崩れ方です。
この章のまとめ
公開前の検証は、その時点の確認にすぎません。書いて終わりにはなりません。
09公開後にschemaが崩れる3か所は、AI対策の運用でどう防ぐんですか?
検証を通過したあと、実務で崩れるのは次の3か所です。
| 崩れる箇所 | 起きること | 確認方法 |
|---|---|---|
| price | セール価格が表示だけ変わり、構造化データは通常価格のまま | セール中の商品ページで表示価格とJSON-LDの値を突合する |
| availability | 在庫切れ表示なのにInStockが残る | 在庫切れ商品を1点選び、JSON-LDのavailabilityを確認する |
| aggregateRating | レビュー削除後も件数・評点が更新されない | レビュー数が変動した商品で値の追随を確認する |
在庫と価格は、商品マスタから構造化データを自動生成する設計にしておくのが基本です。手作業で構造化データだけを更新する運用は、商品点数が増えた時点で更新漏れが避けられなくなります。
なお、JavaScriptで動的にマークアップを生成している場合、Google公式ドキュメントは「Shoppingのクロール頻度と信頼性が下がる可能性がある」と注意を促しています。自動生成にする場合も、サーバー側で出力する方式を優先してください。
この章のまとめ
公開した瞬間から、構造化データは実態とずれ始めます。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項目ですが、実務でつまずくのは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対策です。
今日この順でやります
狙う出口を決める
実際に販売しているならMerchant listingの要件を優先します
テンプレートを自社の情報に置き換える
この記事のコピペ例で、@context・@typeはそのまま、プロパティだけ書き換えます
在庫切れの商品を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検索で…」の章で、証明されていることといないことを分けて説明しています
次に読むなら、この記事です