Productの構造化データの書き方|商品ページに価格・在庫・レビューを入れるJSON-LDの例
公開日: / カテゴリ: 構造化データ / 執筆: エラバレル

「ネットショップの商品ページに構造化データを入れたほうがいいと聞いたけれど、何をどう書けばいいのか分からない」「価格や在庫の情報を、検索結果やAIに正しく伝えたい」。自分でネットショップを運営している方から、こうした相談をよく受けます。
先に結論をお伝えします。**商品ページには Product の構造化データを入れ、その中に価格と在庫を offers、口コミの評価を aggregateRating として書きます。** 最低限、商品名・画像・説明・価格・通貨・在庫の6つがそろえば、検索エンジンやAIが「何を、いくらで、今買えるのか」を読み取れる状態になります。
選ばれるAI診断で22業種・2,296件の公式サイトを診断したところ、ページの内容の種類が構造化データで伝わっていないサイトが91%ありました。商品ページも例外ではありません。
この記事では、Productの構造化データの役割から、必須の項目、コピーして使えるコード、レビューやバリエーションの書き方、よくある間違い、確認の手順までを、順番に解説します。
この記事でわかること
- Productの構造化データとは何か、入れると何が変わるのか
- Googleが求める項目と、入れておきたい項目
- コピーして使えるJSON-LDのコード(基本形・レビューつき・中古品)
- 価格・在庫・ブランド・JANコードの書き方
- よくある間違いと、ガイドラインで禁止されていること
- 入れたあとの確認の手順
Productの構造化データとは?
構造化データとは、ページに書かれている情報を、検索エンジンやAIが間違いなく読み取れる決まった書き方で、ページに埋め込むものです。書き方の決まりは schema.org という共通の語彙で定められていて、GoogleやBingなどが使っています。基本の考え方は構造化データとは?の記事で説明しています。
Product は、その中で「商品」を表す型です。商品名、画像、説明、ブランド、価格、在庫、口コミの評価などを、1つのまとまりとして伝えられます。
人が商品ページを見れば、どれが商品名で、どれが価格かはすぐに分かります。しかしプログラムから見ると、「3,980円」が商品の価格なのか、送料なのか、関連商品の価格なのかを、ページの見た目だけで判断するのは簡単ではありません。構造化データは、それを1つずつはっきりさせるための仕組みです。
「Product」と「Offer」の関係
Product は商品そのもの(名前・画像・ブランドなど)、Offer は「その商品を、いくらで、どんな条件で売っているか」を表します。同じ商品でも、店によって価格や在庫は違うので、2つは分けて書く決まりになっています。Productの中の offers という項目に、Offerを入れる形です。
入れると何が変わるのか
Productの構造化データを入れると、Googleの検索結果で、商品名の下に価格・在庫の状況・星の評価などが表示されることがあります(リッチリザルトと呼ばれる表示です)。Googleの画像検索やショッピングの枠で、商品の情報として扱われる可能性もあります。
AI検索でも、「〇〇の価格は?」「〇〇は今買える?」といった質問に答えるとき、構造化データの情報は読み取りやすい材料になります。ただし、構造化データを入れれば必ず特別な表示になる、というわけではありません。表示するかどうかは、検索エンジンが決めます。
Googleが求める項目と、入れておきたい項目
Googleの説明では、商品の構造化データの使い方は大きく2つに分かれます。
- 商品スニペット:商品の紹介やレビューのページで、評価や価格を表示するもの。
nameに加えて、review・aggregateRating・offersのどれか1つが必要 - 販売者のリスティング:実際に商品を買えるページで、価格や在庫、送料などを表示するもの。
name・image・offers(価格と通貨)が必要
ネットショップの商品ページなら、両方を満たす書き方をしておくのが無難です。項目を整理すると、次のようになります。
| 項目 | 意味 | 書き方の例 | 重要度 |
|---|---|---|---|
| name | 商品名 | "手織りの麻ストール" | 必須 |
| image | 商品の画像のURL(複数可) | "https://example.com/img/stole.jpg" | 必須 |
| offers.price | 価格(数字だけ) | "3980" | 必須 |
| offers.priceCurrency | 通貨 | "JPY" | 必須 |
| offers.availability | 在庫の状況 | "https://schema.org/InStock" | 強くすすめる |
| description | 商品の説明 | "滋賀県で手織りした麻100%のストール。" | すすめる |
| brand | ブランド名 | {"@type": "Brand", "name": "〇〇工房"} | すすめる |
| sku | 店の商品番号 | "ST-001" | すすめる |
| gtin13 | JANコード(13桁) | "4900000000000" | あれば入れる |
| aggregateRating | 口コミの平均と件数 | 下のコードを参照 | 口コミがあれば |
availability には、在庫ありの InStock、在庫切れの OutOfStock、予約受付中の PreOrder、取り寄せの BackOrder などがあります。どれも https://schema.org/ から始まる形で書きます。
そのまま使えるJSON-LDのコード
構造化データの書き方はいくつかありますが、Googleがすすめているのは JSON-LD という形式です。ページのHTMLの中に <script type="application/ld+json"> で囲んだコードを置くだけで、見た目には影響しません。JSON-LDの基本の書き方はJSON-LDの書き方の記事で説明しています。
基本形(新品・在庫あり)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "手織りの麻ストール(生成り)",
"image": [
"https://example.com/img/stole-1.jpg",
"https://example.com/img/stole-2.jpg"
],
"description": "滋賀県の工房で一枚ずつ手織りした、麻100%のストールです。幅50cm、長さ180cm。",
"sku": "ST-001",
"brand": {
"@type": "Brand",
"name": "〇〇工房"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/st-001",
"price": "3980",
"priceCurrency": "JPY",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "〇〇工房オンラインショップ"
}
}
}
</script>
価格は、カンマや「円」をつけずに数字だけで書きます。ページに表示している価格(税込)と同じ金額にすることが、いちばん大事な決まりです。
小さなネットショップでの使い方の例
〇〇工房(手作りの布小物を販売、商品は約40点)の場合
やること:①売れ筋の10商品から、上の基本形をもとにコードを作る ②商品名・画像・説明・価格・在庫を、ページの表示と同じ内容で埋める ③口コミが載っている商品だけ、評価の項目を足す ④リッチリザルトテストで1商品ずつ確かめる。
気をつけること:在庫が1点だけの商品は、売れたら在庫の状況を忘れずに書き換える。
口コミの評価つき
商品ページに口コミが載っている場合は、aggregateRating(平均の評価と件数)を足します。個別の口コミを review として書くこともできます。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "手織りの麻ストール(生成り)",
"image": "https://example.com/img/stole-1.jpg",
"offers": {
"@type": "Offer",
"price": "3980",
"priceCurrency": "JPY",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "27"
},
"review": [{
"@type": "Review",
"author": {"@type": "Person", "name": "M.K."},
"datePublished": "2026-08-12",
"reviewRating": {"@type": "Rating", "ratingValue": "5"},
"reviewBody": "肌ざわりがよく、夏の冷房よけにちょうどいいです。"
}]
}
</script>
ratingValue は平均点、reviewCount は口コミの件数です。どちらも、ページに表示している数字と一致させてください。口コミの構造化データのルールは、口コミ・レビューの構造化データの記事で詳しく説明しています。
中古品・一点ものの場合
中古品は itemCondition を UsedCondition にします。一点ものが売れたあとは、availability を SoldOut か OutOfStock に変えます。
"offers": {
"@type": "Offer",
"price": "12000",
"priceCurrency": "JPY",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/UsedCondition"
}
ページに見えている情報だけを書く
構造化データに書く内容は、そのページで利用者が見られる情報と一致している必要があります。ページには表示していない「本当は安い価格」や、存在しない口コミの評価を書くことは、Googleのガイドライン違反になります。
価格・在庫・ブランド・JANコードの書き方のコツ
価格は「税込」でページと合わせる
日本では、消費者向けの価格は税込の総額で表示するのが決まりです。構造化データの price も、ページに表示している税込の価格と同じにしておくと、食い違いが起きません。セール中は、セール後ではなく「今の価格」を書きます。セールの終わる日が決まっているなら、priceValidUntil(価格が有効な最終日)を書き添えることもできます。
在庫は、在庫の管理と連動させる
在庫切れなのに InStock のままだと、検索結果で「在庫あり」と表示され、お客さんをがっかりさせてしまいます。構造化データは「書いたら終わり」ではなく、商品の状態に合わせて更新するものだと考えてください。手で書いている場合は、在庫を変えるたびに構造化データも直す必要があります。ネットショップの仕組みが在庫と連動して自動で出力してくれるなら、それを使うのがいちばん確実です。
ブランドとJANコード
自社で作っている商品なら、brand には自社のブランド名を書きます。仕入れた商品なら、メーカーのブランド名です。JANコード(商品のバーコードの13桁の番号)がある商品は、gtin13 に入れておくと、同じ商品をほかの店と照らし合わせやすくなります。手作りの商品などでJANコードがない場合は、書かなくて構いません。
色やサイズ違いがある場合
色やサイズ違いを1つのページで売っている場合は、それぞれを別の Product として書く方法と、ProductGroup(商品のまとまり)を使って、バリエーションをまとめる方法があります。最初は、ページで選ばれている状態の1つ(たとえばいちばんよく売れる色)を基本形で書くだけでも構いません。
どこに、どうやって入れるか
入れ方は、ネットショップを作っている仕組みによって違います。
- ネットショップの作成サービス・カートの仕組みを使っている場合:多くの場合、商品ページの構造化データは自動で出力されています。まずは確認ツールで、すでに入っているかを確かめてください。WordPressのWooCommerceにも、商品ページの構造化データを出力する機能があります
- WordPressで、商品を普通の投稿や固定ページで紹介している場合:SEOプラグインの設定や、ページごとにコードを貼れる機能を使って入れます。ブロックエディタの「カスタムHTML」ブロックに貼る方法もありますが、テーマやプラグインによっては貼ったコードが消されることがあるので、保存後にページのソースで確かめてください
- HTMLを自分で書いている場合:商品ページの
<head>の中か、<body>の最後に、上のコードを貼ります
二重に出力されていないかに注意
カートの仕組みが自動で出力している構造化データに加えて、自分でも同じ商品のコードを貼ると、Productが2つあるページになり、価格が食い違うことがあります。自分で足す前に、必ず今の状態を確認してください。
よくある間違い
Productの構造化データで、よく見かける間違いをまとめました。
- 価格に「円」やカンマを入れている:
"3,980円"ではなく"3980"と書きます - 通貨を書いていない:
priceCurrencyがないと、何の通貨の価格か伝わりません。日本円は"JPY"です - 在庫の書き方が独自:
"在庫あり"ではなく"https://schema.org/InStock"のように決まった値を使います - カテゴリの一覧ページにProductを入れている:Productは、1つの商品を説明するページに使います。商品が並んでいる一覧のページは対象ではありません
- お店の口コミを商品の評価として書いている:お店全体の評判と、その商品の口コミは別のものです
- サービスにProductを使っている:施術や工事のような「サービス」は、Productではなく
Serviceで書くほうが内容に合います。書き方はServiceの構造化データの記事で説明しています
入れたあとの確認の手順
構造化データは、入れて終わりではなく、正しく読めるかを確かめることが大切です。
- Googleのリッチリザルトテストを開き、商品ページのURLを入れて確かめる。「商品スニペット」や「販売者のリスティング」が検出されれば、Googleに読める状態です
- エラー(赤い表示)が出たら、必須の項目が足りていないので直す。警告(黄色の表示)は、入れておくとよい項目の案内です
- Schema Markup Validator でも同じURLを確かめ、書き方そのものに間違いがないかを見る
- Search Consoleに登録している場合は、「拡張」や「ショッピング」の項目で、エラーが出ていないかをときどき確認する
確認ツールの使い方は構造化データの確認方法の記事で、入れたのに反映されないときの原因は構造化データが反映されないときの記事で説明しています。
商品ページの構造化データのチェックリスト
- 商品名・画像・説明が入っている
- 価格が数字だけで書かれ、ページの税込価格と一致している
- 通貨が "JPY" になっている
- 在庫の状況が、実際の在庫と合っている
- 口コミの評価は、ページに表示している口コミの平均と件数と一致している
- 同じ商品のProductが、1ページに2つ出力されていない
- リッチリザルトテストで、エラーが出ていない
よくある質問
Productの構造化データを入れると、必ず価格や星が表示されますか?
いいえ。構造化データは、表示の候補になるための条件です。実際に表示するかどうかは、検索エンジンがページの内容や検索の状況を見て決めます。ただし、入れていなければ候補にもなりません。
ネットショップの作成サービスを使っています。自分で入れる必要はありますか?
多くのサービスでは、商品ページの構造化データが自動で出力されています。まずはリッチリザルトテストで、すでに入っているかを確かめてください。足りない項目がある場合に、サービスの設定や追加の機能で補えるかを確認します。
口コミがまだない商品はどうすればいいですか?
aggregateRating と review は書かずに、offers で価格と在庫を伝えます。口コミがないのに評価を書くことはできません。
送料や返品の条件も書けますか?
書けます。shippingDetails(送料や配送の日数)や hasMerchantReturnPolicy(返品の条件)という項目があります。まずは基本の項目を整えてから、必要に応じて足してください。
会社の構造化データと一緒に入れても大丈夫ですか?
大丈夫です。サイト全体に会社やお店の情報(Organization)を入れ、商品ページにはProductを入れる、という組み合わせはよく使われます。Offerの seller に、サイト全体で使っている会社の情報と同じ名前を書いておくと、「どの店が売っている商品か」がつながって伝わります。
AI検索にも効果がありますか?
構造化データは、AIが商品名・価格・在庫などを正確に読み取るための手がかりになります。ただ、AIがどの情報をどう使うかは公開されていないので、構造化データだけに頼らず、ページの文章にも価格や特徴をはっきり書いておくことが大切です。
まとめ
Productの構造化データは、商品の「何を、いくらで、今買えるのか」を、検索エンジンとAIに正確に伝えるためのものです。
この記事のまとめ
- 商品ページには
Productを入れ、価格と在庫はoffers、口コミの評価はaggregateRatingに書く - 最低限そろえたいのは、商品名・画像・説明・価格・通貨・在庫の6つ
- 価格は数字だけで、ページの税込価格と一致させる。在庫は実際の状態と合わせる
- ページに見えていない価格や、存在しない口コミの評価は書かない
- カートの仕組みが自動で出力していることも多いので、自分で足す前に今の状態を確かめる
- 入れたらリッチリザルトテストとSchema Markup Validatorで確認する
構造化データが入っているかどうかは、まず診断で確かめてみてください。選ばれるAI診断なら、URLを入れるだけで、22項目の判定と理由を無料で確認できます。
自分のサイトを、無料で診断する会社やお店の構造化データは、入力欄に書き込むだけで作れるツールも用意しています。
構造化データ作成ツールを使う(無料)参考にした資料
- 商品(Product、Review、Offer)の構造化データ(Google 検索セントラル)
- Product(schema.org)
- Offer(schema.org)
- 構造化データに関する一般的なガイドライン(Google 検索セントラル)
調査の方法:選ばれるAI診断(2026年10月2日に見直した採点基準)で、22業種の公式サイト2,296件を再診断し、「ページの内容を構造化データで伝えているか」が「不足」または「一部不足」と判定されたサイトの割合を集計しました。個別のサイト名と点数は公開していません。