MENU
  • SEO実践
  • WordPress運用
  • サーバー・ツール比較
  • AI×SEO
  • 業種別SEO事例
  • EC集客
  • 雅〜WEB〜(本業)
  • プロフィール
  • お問合せ
現場で結果を出すSEOコンサルが、Web集客の最前線を発信
develop-life|SEO・Webマーケが伸びる成長メディア
  • SEO実践
  • WordPress運用
  • サーバー・ツール比較
  • AI×SEO
  • 業種別SEO事例
  • EC集客
  • 雅〜WEB〜(本業)
  • プロフィール
  • お問合せ
develop-life|SEO・Webマーケが伸びる成長メディア
  • SEO実践
  • WordPress運用
  • サーバー・ツール比較
  • AI×SEO
  • 業種別SEO事例
  • EC集客
  • 雅〜WEB〜(本業)
  • プロフィール
  • お問合せ
  1. ホーム
  2. EC集客
  3. ECの構造化データ実装ガイド2026|Product・Offerで検索結果を強くする

ECの構造化データ実装ガイド2026|Product・Offerで検索結果を強くする

2026 11/06
EC集客
2026年11月6日
商品ページから検索結果パネルへ、必須・推奨・送料返品・バリエーション・パンくず・検証の6段の階段が続き、最上段で商品カードが完成するイメージ

「商品ページに構造化データを入れたのに、検索結果に価格も在庫も出ない」「色違い・サイズ違いをどうマークアップすればいいか分からない」。先に言うと、ECの構造化データで最初に決めるのは「そのページで買えるかどうか」です。Googleは商品の見え方を「購入できないページ向け」と「自社で購入できるページ向け」の2つに分けて定義しており、必須・推奨のプロパティもそこで変わります。本記事は、自社ECの商品ページに入れるProduct・Offer・ProductGroup・BreadcrumbListを、Googleの公式ドキュメントのプロパティ名のまま、コピーして使える粒度まで落とします。

想定している読者は、自社EC(自社サイトで直接販売するネットショップ)の担当者と、その制作を受ける方です。楽天・Amazonのモール内ページは扱いません。ECのSEO全体像はECサイトのSEO対策 完全ガイドにあり、本記事は「商品ページの構造化データ」だけを深掘りします。構造化データの前提になる本文の作り方はECの商品ページSEOをご覧ください。

本記事の違いは、公式ドキュメントの「必須」と「推奨」をそのまま表に分けて示すことです。多くの解説記事は「Productを入れましょう」で止まるか、必須と推奨を混ぜて書いています。本記事では、送料・返品ポリシーの書き方、色・サイズ違いの扱い、パンくず、そして「入れたのに出ない」ときの切り分けまでを一続きで書きます。

私は前職で17年間、自社EC(DtoC)の事業運営に関わり、執行役員を務めました。広告費ゼロ・自然検索のみで年商1〜2億円を集客し、月間50,000検索のキーワードで10年間1位を守りました(2位は日本の時価総額1位企業の公式サイト、3位はAmazon)。2024年10月に独立し、神戸・芦屋でSEOコンサル「雅〜WEB〜」を運営しています(支援実績:miyabi-web.jp/production/)。公式ドキュメントの引用は2026年11月時点の確認値です。仕様は変わるので、実装前に公式ページで最新を確認してください。

※本記事には広告(アフィリエイト)リンクが含まれます。料金・特典は変動するため、申込前に各公式サイトで最新情報をご確認ください。

⏱️ 約16分で読めます

この記事でわかる4つのこと

  • Googleが定義する2つの見え方(プロダクト スニペットとマーチャント リスティング)と、自社ECがどちらを狙うか
  • Product・Offerの必須プロパティと推奨プロパティの一覧(公式ドキュメント準拠・コピーして使えるJSON-LD付き)
  • 送料(shippingDetails)・返品ポリシー(hasMerchantReturnPolicy)と、色・サイズ違い(ProductGroup)の書き方
  • リッチリザルト テストとSearch Consoleでの検証手順と、更新漏れを防ぐ運用(価格・在庫を手で入れると破綻する理由)

目次

  1. ECの構造化データは「購入できるページ」かどうかで書き分ける【結論】
  2. EC構造化データの2つの見え方|プロダクト スニペットとマーチャント リスティング
  3. Product・Offer構造化データの必須プロパティ|name・image・offers・price・priceCurrency
  4. Product構造化データの推奨プロパティ|availability・itemCondition・priceValidUntil・sku/gtin
  5. ECの送料・返品ポリシーの構造化データ|shippingDetailsとhasMerchantReturnPolicyの中身
  6. 色・サイズ違いの構造化データ|ProductGroupとvariesBy・hasVariant
  7. バリエーションURLの決め方|1ページ型と複数ページ型の正規URL
  8. ECのパンくず構造化データ(BreadcrumbList)|カテゴリ階層を検索結果に出す
  9. EC構造化データの検証と運用|リッチリザルト テスト・Search Console・更新漏れの防ぎ方
  10. EC構造化データのよくある質問
  11. まとめ|構造化データは「ページに書いてある事実」を機械に翻訳する作業
MY BELIEF

17年の運営で確信したのは、構造化データは「ページに書いてある事実」を機械に翻訳する作業であって、ページにない情報を盛る場所ではないということでした。価格と在庫を手で入れた瞬間に運用は破綻します。テンプレートから自動で出す以外に、続く方法はありませんでした。

目次

ECの構造化データは「購入できるページ」かどうかで書き分ける【結論】

商品ページの土台から、価格・在庫・送料の情報が整列したカードになって検索結果パネルへ翻訳されていくイメージ

結論から書きます。ECの構造化データで最初に決めるのは「そのページで商品を買えるかどうか」です。Googleの公式ドキュメントは、商品の構造化データが生む見え方を「プロダクト スニペット」(購入できないページ向け)と「マーチャント リスティング」(自社で購入できるページ向け)の2つに分けています。自社ECの商品ページは後者です。だから狙うのはマーチャント リスティングの必須項目で、プロダクト スニペットの要件は結果としてほぼ満たします。

本記事の要点を先に並べます。

  1. 必須は5つだけ。Productのname・image・offers、Offerのprice・priceCurrency。これが揃えば「表示される資格」を得ます(第3章)
  2. 推奨プロパティで差がつく。availability(在庫)・itemCondition(状態)・sku/gtin(識別子)・送料・返品ポリシーまで入れると、検索結果に出せる情報が増えます(第4〜5章)
  3. 色・サイズ違いはProductGroupで束ねる。親にvariesBy、子にskuとisVariantOf(またはhasVariant)。URLの持たせ方は1ページ型と複数ページ型で違います(第6〜7章)
  4. パンくずはBreadcrumbListで別に入れる。最後の項目はitemを省略できます(第8章)
  5. 価格・在庫・有効期限を手で入れない。カートの商品データからテンプレートで自動生成し、リッチリザルト テストとSearch Consoleで検証します(第9章)

先に注意を一つ。Googleは、正しくマークアップしてもリッチリザルトの表示を保証していません。構造化データを入れても順位が上がるわけでもありません。本記事で言えるのは「表示される資格を得る」「検索結果に価格や在庫が出れば、クリック率に影響し得る」までです。順位そのものの話は検索順位が上がらない15の原因で扱っています。

KEY TAKEAWAY
  • 自社ECの商品ページは「マーチャント リスティング」の必須項目を基準に書く
  • 必須5項目で資格を得て、推奨項目(在庫・識別子・送料・返品)で情報量を増やす
  • 表示も順位も保証されない。言えるのは「資格を得る」「クリック率に影響し得る」まで

EC構造化データの2つの見え方|プロダクト スニペットとマーチャント リスティング

2枚の検索結果パネルが並び、片方は星評価と価格だけの簡素な表示、もう片方は価格・在庫・送料まで付いた充実した表示を対比するイメージ

Googleの公式ドキュメント「Product 構造化データ」(2026年11月時点)は、商品の構造化データの用途を2つに分けて説明しています。自社ECの担当者が混乱しやすいのはここなので、最初に整理します。

見え方対象ページ検索結果に出るもの自社ECでの扱い
プロダクト スニペット商品を購入できないページ(レビュー記事・比較記事など)評価・価格・在庫などを含むテキスト検索結果ブログや比較記事で商品を紹介する場合に該当
マーチャント リスティング自社で購入できる商品ページ人気商品・ショッピング ナレッジパネル・画像検索などの商品表示商品ページはこちらを狙う

両者は重なっています。公式ドキュメントでは、マーチャント リスティングの必須項目を入れたページは、プロダクト スニペットの対象にもなり得るとされています。つまり自社ECの商品ページは、マーチャント リスティングの要件を満たしておけば両方の資格を得られます。

マーチャント リスティングの前提条件(公式ドキュメントより)

  • 購入できるページだけが対象。カテゴリ一覧や「販売終了」ページは対象外です
  • 価格は0円より大きいこと。無料サンプルや価格未定の商品は対象になりません
  • 通貨ごとにURLを分けること。1つのURLで円とドルを切り替える構成は推奨されていません
  • 画像はクロール・インデックスできること。robots.txtで画像フォルダを止めていると表示されません。推奨の縦横比は16:9・4:3・1:1です
  • 対象外の商材がある。銃器、娯楽目的の薬物、タバコ・電子タバコ、ギャンブル関連は対象外と明記されています

Merchant Centerのフィードと「併用」が推奨されている

もう一つ重要な点があります。公式ドキュメントは、ページ上の構造化データとMerchant Center(Googleに商品データを登録する無料の管理画面)のフィードを併用することを推奨しています。Merchant Centerに登録しているから構造化データは不要、という理解は逆です。Merchant Centerの商品データとページ上の構造化データが一致していると、Google側が商品ページを確認しやすくなります。

私の経験則として、Merchant Centerを使っていないEC(小規模な自社ECの多くがそうです)ほど、ページ上の構造化データが商品情報をGoogleに渡す唯一の手段になります。ここを整えないまま広告やSNSに予算を回しても、検索結果の商品表示には乗りません。

KEY TAKEAWAY
  • 「購入できないページ」はプロダクト スニペット、「購入できるページ」はマーチャント リスティング
  • 価格0円・通貨混在・画像のクロール不可・対象外商材は、マークアップ以前に対象外
  • Merchant Centerと構造化データは「どちらか」ではなく併用が推奨

Product・Offer構造化データの必須プロパティ|name・image・offers・price・priceCurrency

5つのブロックが土台として積まれ、その上に商品ボックスが安定して乗っている最小構成のイメージ

マーチャント リスティングの必須プロパティは、公式ドキュメント(2026年11月時点)ではProductに3つ、Offerに2つです。まずこの5つだけで動く最小構成を作り、動いたことを確認してから推奨プロパティを足します。最初から全部入れようとすると、どこでエラーになったか分からなくなります。

型プロパティ値の形注意点
Productname文字列ページに表示している商品名と一致させる
ProductimageURL(配列可)クロール・インデックスできるURL。16:9・4:3・1:1を揃えると表示先の選択肢が広がる
ProductoffersOfferマーチャント リスティングではAggregateOfferは不可。Offerのみ
Offerprice(または priceSpecification.price)数値0より大きい値。税込・税抜はページ表示と合わせる
OfferpriceCurrency(または priceSpecification.priceCurrency)ISO 4217の3文字日本円は「JPY」。「円」「¥」は不可

最小構成のJSON-LD(必須のみ)

JSON-LD(HTMLの中にscriptタグで埋め込む構造化データの書き方。Googleが推奨している形式)で書くと、必須のみの最小構成は次の通りです。商品名・価格・画像URLをご自身のものに置き換えてください。

<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "本革ビジネスシューズ ストレートチップ ブラック",
  "image": [
    "https://example.com/photos/1x1/shoes-black.jpg",
    "https://example.com/photos/4x3/shoes-black.jpg",
    "https://example.com/photos/16x9/shoes-black.jpg"
  ],
  "offers": {
    "@type": "Offer",
    "price": 19800,
    "priceCurrency": "JPY"
  }
}
</script>

必須項目で止まりやすい3つのミス

  • offersをAggregateOfferにしてしまう。「最安〜最高」の価格帯を書きたくなりますが、マーチャント リスティングでは対象外です。商品ページでは単一のOfferにします
  • priceに「19,800円」と書く。数値(19800)だけにします。通貨はpriceCurrencyで別に渡します
  • imageがカートの管理画面URLやCDNの一時URLになっている。公開されていてクロールできる固定URLにします

カートによっては、この最小構成を商品テンプレートが自動で出力します。ただし「どこまで自動で出るか」はカートとテーマごとに違い、今回Shopify・BASEの公式ヘルプで出力範囲を確認できませんでした。確実なのは、ご自身の商品ページのソースを開いて「application/ld+json」を検索することです。出ていれば中身を本章の表と照らし、出ていなければテーマに追加します。カート選びの段階で確認したい方はShopify・BASE・STORES徹底比較も合わせてご覧ください。

KEY TAKEAWAY
  • 必須はProductのname・image・offers、Offerのprice・priceCurrencyの5つ
  • offersはOfferのみ。AggregateOfferはマーチャント リスティングの対象外
  • まず必須のみで動かし、ソースの「application/ld+json」でカートの自動出力を確認する

Product構造化データの推奨プロパティ|availability・itemCondition・priceValidUntil・sku/gtin

最小構成の商品ボックスの周りに、在庫タグ・バーコード・カレンダー・ブランドラベルのパーツが浮かび、順に取り付けられていくイメージ

必須の5つで資格は得られますが、検索結果に出せる情報は限られます。推奨プロパティを足すと、在庫の有無や商品の識別子など、Googleが商品を正しく理解するための材料が増えます。公式ドキュメント(2026年11月時点)の推奨プロパティを、Offer側とProduct側に分けて示します。

Offer側の推奨プロパティ

プロパティ意味値の例
availability在庫状況https://schema.org/InStock / OutOfStock / PreOrder など
itemCondition商品の状態https://schema.org/NewCondition / UsedCondition
priceValidUntil価格の有効期限2026-12-31(ISO 8601形式)。過去日だと表示されないことがある
urlこの商品を買えるページのURLhttps://example.com/products/shoes-black
shippingDetails送料・配送日数第5章で解説
hasMerchantReturnPolicy返品ポリシー第5章で解説
validFrom / validThroughセール価格などの有効期間期間限定価格のときに使う

Product側の推奨プロパティ

プロパティ意味自社ECでの入れ方
sku自社の商品コード在庫管理で使っている型番をそのまま。バリエーションごとに一意にする
gtin(gtin8/gtin12/gtin13/gtin14)・isbn・mpn世界共通の商品識別子JANコード(13桁)があればgtin13に。自社オリジナル商品で取得していない場合は無理に入れない
brand.nameブランド名自社ブランドならブランド名。仕入れ商品ならメーカーのブランド名
description商品説明ページの説明文と同じ内容。長文を別に書かない
color / size / material / pattern色・サイズ・素材・柄バリエーション商品で使う(第6章)
category商品カテゴリサイトのカテゴリ名をそのまま
aggregateRating / review評価・レビューページに表示している実際の顧客評価がある場合のみ。自作の評価を入れるのはガイドライン違反(本記事では扱わない)
inProductGroupWithID / isVariantOf所属する商品グループバリエーション商品で使う(第6章)
hasAdultConsideration / hasCertification / audience / subjectOf成人向け・認証・対象者・関連コンテンツ該当する商品だけ。多くの自社ECでは不要

全部入れない。入れる順番を決める

ここが実務で一番大事な判断です。商品数が数百〜数千あるサイトで「全商品に推奨プロパティを全部」は現実的ではありません。私の経験則として、順番は次の通りです。

  1. availability・sku・brand・description・urlを全商品に。これらはカートの商品データに標準で入っているので、テンプレートで自動出力できます
  2. gtinはJANコードを持つ商品だけに。持たない商品に空欄やダミーを入れない
  3. priceValidUntilは、カートが価格変更に連動して自動で更新できる場合だけ入れる。手で入れると過去日のまま残り、表示が止まります
  4. 送料・返品ポリシーは全商品共通なら1回の設定で済むので、第5章の方法で入れる

前職のECでは、priceValidUntilを手で入れていた時期があり、価格改定のたびに古い有効期限が残って検索結果の価格表示が消える、という事故を起こしました。この経験から、値が変わるプロパティは、カートの商品データから自動で生成できるものだけ入れると線引きしています。売上上位の型番から順に入れ、効果を確認してから対象を広げる進め方が、運用として続きました。

KEY TAKEAWAY
  • 推奨プロパティはOffer側(在庫・状態・有効期限・送料・返品)とProduct側(識別子・ブランド・説明)に分かれる
  • 全商品に全部は入れない。カートの商品データから自動出力できるものを優先する
  • priceValidUntilは自動更新できるときだけ。手入力は過去日が残って表示が止まる
QUICK CHECK

「入れたのに出ない」の原因切り分けだけでもご相談ください

マークアップは正しいのに検索結果に価格や在庫が出ない場合、原因は画像のクロール可否や価格0円など、構造化データの外にあることが多いです。商品ページのURLを教えていただければ、リッチリザルト テストとSearch Consoleの結果を一緒に見て、必須・推奨の抜けと表示されない原因を整理してお返しします。相談は無料です。

無料で相談する(develop-life.com/contact/)→

ECの送料・返品ポリシーの構造化データ|shippingDetailsとhasMerchantReturnPolicyの中身

配送トラックと返品用の箱が商品カードの両側に置かれ、それぞれから配送日数と返品期限を示すラベルが検索結果パネルへ伸びるイメージ

送料と返品ポリシーは、Offerの推奨プロパティの中でも中身が深いので章を分けます。この2つはお客様が購入を決める直前に見る情報で、検索結果に出せれば「送料がいくらか分からないからクリックしない」という離脱を減らせる可能性があります。公式ドキュメント「マーチャント リスティングの構造化データ」(2026年11月時点)の必須・推奨は次の通りです。

shippingDetails(OfferShippingDetails)の必須・推奨

区分プロパティ中身
必須shippingRateMonetaryAmount。currencyと、value(固定額)またはmaxValue(上限額)。送料無料は0
必須shippingDestinationDefinedRegion。addressCountryに2文字のISOコード(日本は「JP」)
必須deliveryTimeShippingDeliveryTime。handlingTime(出荷までの日数)とtransitTime(配送日数)をQuantitativeValueで。minValue・maxValue・unitCode=DAY
推奨addressRegion または postalCode地域別送料があるとき。両方は入れない(公式ドキュメントの注意)

hasMerchantReturnPolicy(MerchantReturnPolicy)の必須・推奨

区分プロパティ中身
必須applicableCountry返品を受け付ける国(2文字ISO、最大50か国)
必須returnPolicyCategoryMerchantReturnFiniteReturnWindow(期限あり)/ MerchantReturnNotPermitted(返品不可)/ MerchantReturnUnlimitedWindow(無期限)のいずれか
推奨(期限ありなら必須)merchantReturnDays返品可能な日数(例:14)
推奨returnFeesFreeReturn(無料)/ ReturnShippingFees(送料お客様負担)など
推奨returnMethodReturnByMail(郵送)/ ReturnInStore(店頭)など
推奨returnShippingFeesAmountreturnFeesがReturnShippingFeesのときの金額

Offerに入れ子にした書き方(日本国内・送料660円・14日返品の例)

"offers": {
  "@type": "Offer",
  "price": 19800,
  "priceCurrency": "JPY",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "url": "https://example.com/products/shoes-black",
  "shippingDetails": {
    "@type": "OfferShippingDetails",
    "shippingRate": { "@type": "MonetaryAmount", "value": 660, "currency": "JPY" },
    "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "JP" },
    "deliveryTime": {
      "@type": "ShippingDeliveryTime",
      "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
      "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
    }
  },
  "hasMerchantReturnPolicy": {
    "@type": "MerchantReturnPolicy",
    "applicableCountry": "JP",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnDays": 14,
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn"
  }
}

送料・返品は「構造化データ以外」でも渡せる。優先順位がある

ここを知らずに実装して混乱するケースが多いです。公式ドキュメントは、送料と返品ポリシーの情報源が複数あるときの優先順位を次のように定めています(強い順)。

  1. 商品単位のMerchant Centerフィード
  2. Content APIの設定
  3. Merchant CenterまたはSearch Consoleの設定(送料・返品の設定画面)
  4. 商品単位の構造化データ(Offerに入れ子にしたもの)
  5. 組織単位の構造化データ(Organizationに入れ子にしたもの)

実務での判断はこうなります。全商品で送料・返品の条件が同じなら、Search Consoleの設定か組織単位の構造化データで1回入れれば済みます。商品ごとに送料が違う(大型商品・冷蔵便など)なら、その商品だけOfferに入れ子で上書きします。両方入れたときは上の順位が勝つので、「設定画面とページの値が食い違って検索結果に古い送料が出る」事故は、この優先順位を知っていれば防げます。送料の設計そのもの(無料ラインの決め方)は、別記事で扱う予定です。

KEY TAKEAWAY
  • shippingDetailsの必須はshippingRate・shippingDestination・deliveryTimeの3つ。送料無料は0
  • 返品ポリシーの必須はapplicableCountryとreturnPolicyCategory。期限ありならmerchantReturnDaysも必須
  • 情報源が複数あるときはMerchant Center → Search Console設定 → 商品単位 → 組織単位の順で強い

色・サイズ違いの構造化データ|ProductGroupとvariesBy・hasVariant

1つの親ボックスから、色とサイズの違う子ボックスが枝分かれして並び、それぞれに固有のタグが付いた入れ子構造のイメージ

アパレルや雑貨の自社ECで一番詰まるのが、色違い・サイズ違いの扱いです。Googleは2024年2月から商品バリエーションの構造化データに対応しており、公式ドキュメント「商品バリエーションの構造化データ」(2026年11月時点)ではProductGroup(親)とProduct(子=各バリエーション)の入れ子で表現します。

ProductGroupの必須・推奨プロパティ

区分プロパティ中身
必須name商品グループの名前(例:コットンクルーネックTシャツ)。必須はこれだけ
推奨productGroupID親SKU。各バリエーションのinProductGroupWithIDと一致させる
推奨variesBy何で違うか。schema.orgのフルURLで指定(https://schema.org/color など)。対応値はcolor・size・suggestedAge・suggestedGender・material・pattern
推奨hasVariant各バリエーション(Product)の配列。子側にisVariantOfを置く形でもよい
推奨brand / descriptionグループ共通のブランド・説明
推奨url1ページ型のみ。バリエーション未選択の正規URL(第7章)
推奨aggregateRating / reviewグループ全体の実際の顧客評価がある場合のみ

各バリエーション(子のProduct)は、skuやgtinで一意に識別できる必要があります。同じskuを2つのバリエーションに使うと、Googleはどれがどれか判別できません。また子のProductには、第3章の必須プロパティ(name・image・offers)がそれぞれ必要です。

ProductGroup+hasVariantの入れ子イメージ(1ページ型・サイズ違い2点)

{
  "@context": "https://schema.org/",
  "@type": "ProductGroup",
  "name": "コットンクルーネックTシャツ",
  "description": "厚手のコットン生地で、洗濯後も型崩れしにくいベーシックTシャツ",
  "url": "https://example.com/products/tshirt",
  "brand": { "@type": "Brand", "name": "ExampleBrand" },
  "productGroupID": "TS-100",
  "variesBy": ["https://schema.org/size"],
  "hasVariant": [
    {
      "@type": "Product",
      "sku": "TS-100-M",
      "name": "コットンクルーネックTシャツ M",
      "image": "https://example.com/photos/tshirt-white.jpg",
      "size": "M",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/tshirt?size=M",
        "price": 3300,
        "priceCurrency": "JPY",
        "availability": "https://schema.org/InStock"
      }
    },
    {
      "@type": "Product",
      "sku": "TS-100-L",
      "name": "コットンクルーネックTシャツ L",
      "image": "https://example.com/photos/tshirt-white.jpg",
      "size": "L",
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/products/tshirt?size=L",
        "price": 3300,
        "priceCurrency": "JPY",
        "availability": "https://schema.org/OutOfStock"
      }
    }
  ]
}

バリエーションで起きやすい3つのミス

  • variesByを「color」と文字だけで書く。公式ドキュメントはschema.orgのフルURL(https://schema.org/color)を指定しています
  • 色とサイズで変わるのに、variesByに片方しか書かない。変わる軸はすべて配列で列挙します
  • 在庫切れのサイズをhasVariantから消す。消すと「そのサイズは存在しない」と解釈されます。availabilityをOutOfStockにして残します

私の経験則として、バリエーションが多い商品(色5×サイズ5=25通りなど)は、この入れ子を手で書くのは不可能です。カートの商品データ(親商品とバリエーションのテーブル)からテンプレートで自動生成する前提で、まず売れ筋の1商品で出力を確認し、リッチリザルト テストが通ってから全商品に広げます。

KEY TAKEAWAY
  • 色・サイズ違いはProductGroup(親)+Product(子)の入れ子。親の必須はnameだけ
  • variesByはschema.orgのフルURLで、変わる軸をすべて列挙する
  • 各バリエーションはskuで一意に。在庫切れは消さずOutOfStockで残す

バリエーションURLの決め方|1ページ型と複数ページ型の正規URL

左は1枚のページから複数の選択肢が分岐する構成、右は選択肢ごとに独立したページが並ぶ構成を、2本の道として対比するイメージ

バリエーションの構造化データで、カート設計と直結するのがURLの持たせ方です。公式ドキュメントは「1ページ型」と「複数ページ型」の2つの構成を区別し、それぞれで書き方を変えるよう求めています。カートによってはどちらになるかが決まっているので、第6章の実装前に確認します。

構成URLの持ち方ProductGroupのurl各バリエーションのurl
1ページ型1つの商品ページで色・サイズを選ぶ。選択後はパラメータ(?size=M)やフラグメントが付く入れる。バリエーション未選択のベースURL(正規URL)を1つ選択済みの個別URL(例:/products/tshirt?size=M)をOfferのurlに
複数ページ型バリエーションごとに別ページがある(/tshirt-m、/tshirt-l)入れない各ページに自己完結したマークアップを置く。他のバリエーションのURLも列挙して発見を助ける

1ページ型:正規URLは「何も選んでいない状態」

1ページ型では、ProductGroupのurlに「バリエーションを選んでいない状態のURL」を入れます。これが正規URL(canonical=同じ内容のページが複数あるとき、代表として扱ってほしいURL)になります。各バリエーションのOfferには、選択済みの個別URLを入れます。ここで多いミスは、ProductGroupのurlに「?size=M」のような選択済みURLを入れてしまうことです。親は常に未選択のURLです。

複数ページ型:各ページが自己完結する

複数ページ型では、各バリエーションのページがそれぞれ完結したマークアップを持ちます。Mサイズのページには、Mサイズの商品のProductと、所属するProductGroupの情報を置きます。公式ドキュメントは、他のバリエーション(LサイズやXLのページ)のURLも列挙するよう推奨しています。Googleが残りのページを見つけやすくなるためです。

カート移行で構造化データごと消える

1ページ型と複数ページ型は、カートを乗り換えると変わることがあります。移行先のカートが構造化データを出さない、またはURL構成が変わって正規URLがずれる、という事故は珍しくありません。リニューアル・カート移行の際は、移行前の商品ページでリッチリザルト テストの結果を保存しておき、移行後に同じ商品で比較します。移行全体の注意点はECサイトリニューアルで検索順位を落とさない方法にまとめています。

KEY TAKEAWAY
  • 1ページ型はProductGroupに未選択の正規URL、各バリエーションに選択済みURL
  • 複数ページ型はProductGroupにurlを入れず、各ページで自己完結+他バリエーションURLを列挙
  • カート移行で構成が変わる。移行前にリッチリザルト テストの結果を残しておく

ECのパンくず構造化データ(BreadcrumbList)|カテゴリ階層を検索結果に出す

トップから大分類・小分類・商品へと続く階段状の経路に、順番を示す番号札が並び、最後の段だけ札が省略されているイメージ

商品ページには、Productとは別にパンくず(BreadcrumbList)の構造化データを入れます。検索結果でURLの代わりに「メンズ › ビジネスシューズ › ストレートチップ」のような階層が表示される資格を得るためです。カテゴリ階層の設計そのものはECのカテゴリページSEOで扱っているので、ここでは構造化データの書き方だけに絞ります。

BreadcrumbListの必須・推奨(公式ドキュメント 2026年11月時点)

プロパティ区分中身
itemListElement必須ListItemの順序付き配列。最低2件
ListItem.item必須(最後の項目は省略可)そのパンくずのURL。最後の項目で省略すると、そのページ自身のURLが使われる
ListItem.name公式ページに必須・推奨の明示なし(全サンプルに含まれる)パンくずに表示する名前
ListItem.position公式ページに必須・推奨の明示なし(全サンプルに含まれる)1から始まる順番

商品ページのパンくず(3階層の例)

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "メンズ", "item": "https://example.com/mens/" },
    { "@type": "ListItem", "position": 2, "name": "ビジネスシューズ", "item": "https://example.com/mens/business-shoes/" },
    { "@type": "ListItem", "position": 3, "name": "本革ストレートチップ ブラック" }
  ]
}

パンくずで押さえる3つの原則

  • URL構造ではなく「お客様がそのページに至る典型的な経路」を表す。公式ドキュメントはこの考え方を明記しています。URLのフォルダをそのまま並べる必要はありません
  • トップ(ドメイン)と現在のページ自体はListItemにしなくてよい。上の例では「ホーム」を入れていません。入れても誤りではありませんが、必須ではありません
  • 1ページに複数の経路を指定できる。「メンズ › 革靴」と「ブランド › 革靴」の2経路があるなら、BreadcrumbListを2つ入れられます

画面上のパンくずと構造化データのパンくずは一致させます。画面には3階層あるのに構造化データは2階層、という食い違いは、ページに書いていない情報をマークアップしているのと同じ扱いになります。

KEY TAKEAWAY
  • 必須はitemListElement(最低2件)。最後の項目のitemは省略できる
  • URL構造ではなく「お客様の典型的な経路」を表す。トップと現在ページは入れなくてよい
  • 画面のパンくずと構造化データのパンくずは一致させる

EC構造化データの検証と運用|リッチリザルト テスト・Search Console・更新漏れの防ぎ方

検査装置を通過した商品カードにチェックマークが付き、横のモニターにエラーと警告の件数が表示されるイメージ

実装したら検証します。使うのは2つ、Googleの「リッチリザルト テスト」とGSC(Google Search Console=検索結果での順位や流入を確認できる無料ツール)です。公式ヘルプ(2026年11月時点)に沿って手順を書きます。

手順1:リッチリザルト テストで1ページずつ確認する

  1. リッチリザルト テストを開き、商品ページのURLを入力して実行します(コードを直接貼り付けて試すこともできます)
  2. URLで試す場合、ページが匿名で見られる状態である必要があります。公開前のパスワード保護ページや、IP制限のあるテスト環境はテストできません。その場合はコード貼り付けで検証します
  3. 結果の「エラー」は、リッチリザルトの対象外になる問題です。先に直します
  4. 結果の「警告」は、推奨プロパティの不足です。表示は制限される可能性があるので、第4章の優先順位で埋めます
  5. ユーザー エージェントはスマートフォンがデフォルトです。パソコン表示だけ構造化データを出している場合は、ここで気づけます

手順2:Search Consoleでサイト全体の状態を見る

Search Consoleには、商品の構造化データに対応するレポートがあります。公式ブログ(2022年9月・2023年の発表)によると、「商品スニペット」と「販売者のリスティング」の2つのレポートに分かれ、検索パフォーマンスの「検索での見え方」でも両者を分けて確認できます。画面上の表記は変わることがあるので、実際の管理画面の名称でご確認ください。見る順番は次の通りです。

  • 「無効」の件数と理由。「必須フィールドがありません」「値が無効です」などの理由ごとに、該当URLの一覧が出ます。1件直せば同じテンプレートの全ページが直ることが多いので、理由単位で潰します
  • 「有効(警告あり)」の内訳。推奨プロパティの不足です。送料・返品ポリシーの不足はここに出ます
  • 検索パフォーマンスの「検索での見え方」。商品表示の表示回数とクリック数が、通常の検索結果と分けて見られます。実装の前後で比較します

「マークアップは正しいのに出ない」ときの切り分け

私が相談を受ける中で、マークアップ自体は正しいのに商品表示が出ないケースの原因は、構造化データの外にあることがほとんどでした。実際にあった原因は次の通りです(具体の社名は伏せます)。

症状実際の原因確認方法
テストは「有効」なのに画像付きで出ない画像フォルダがrobots.txtでブロックされていたSearch ConsoleのURL検査で画像URLを調べる
一部の商品だけ価格が出ない価格未定の商品にprice: 0が出力されていたSearch Consoleの「無効」理由で価格の値を確認
ある日から価格表示が消えたpriceValidUntilが過去日のまま残っていたソースの有効期限と今日の日付を比べる
在庫ありなのに「在庫切れ」と出る在庫連動していない固定値のavailabilityを入れていた在庫を切り替えて出力が変わるか見る

運用で破綻しないための線引き

第4章でも触れましたが、構造化データの運用が止まる原因は、ほぼ「手で入れた値が古くなる」ことです。私が前職で続けられた線引きは次の3つでした。

  • 価格・在庫・有効期限は、カートの商品データからテンプレートで自動生成する。手入力の欄を作らない
  • 送料・返品ポリシーは、全商品共通なら1か所(Search Consoleの設定か組織単位のマークアップ)で持つ。商品ごとに持つのは例外だけ
  • 月に1回、Search Consoleの「無効」件数を見る。増えていればテンプレートの変更が原因なので、直近の変更を戻す
KEY TAKEAWAY
  • リッチリザルト テストで1ページ、Search Consoleのレポートでサイト全体を見る
  • 「正しいのに出ない」原因は画像のブロック・価格0円・過去日の有効期限など、構造化データの外にある
  • 価格・在庫・有効期限は自動生成のみ。月1回「無効」件数を見る

EC構造化データのよくある質問

Q. 構造化データを入れれば検索順位は上がりますか?

上がりません。Googleは構造化データを順位の要素とは説明しておらず、リッチリザルトの表示も保証していません。得られるのは「検索結果に価格や在庫を出す資格」で、出れば検索結果での目立ち方とクリック率に影響し得る、というところまでです。順位が上がらない原因の切り分けは検索順位が上がらない15の原因と対策チェックリストをご覧ください。

Q. JSON-LDとMicrodata、どちらで書くべきですか?

これから入れるならJSON-LDです。Googleが推奨している形式で、HTMLの表示部分と分離して書けるため、テンプレートからの自動生成と検証がしやすいです。既にMicrodataで動いているサイトを無理に書き換える必要はありませんが、バリエーション(ProductGroup)のような入れ子はJSON-LDの方が管理しやすいです。

Q. レビューがまだない商品にaggregateRatingは入れられますか?

入れられません。aggregateRatingとreviewは、ページに表示している実際の顧客評価がある場合だけ使えます。評価を自作して入れる、社内で付けた星を入れる、といった方法はガイドライン違反で、手動対策の対象になり得ます。レビューを集める仕組みと、集まってからのマークアップは別記事で扱う予定です。

Q. 売り切れの商品ページは構造化データを消すべきですか?

消さず、availabilityをOutOfStock(再入荷予定ならBackOrder等)にします。消すと商品の情報がなくなり、在庫が戻ったときに再評価されるまで時間がかかります。バリエーションの一部が売り切れの場合も、hasVariantから消さずにOutOfStockで残します。ページ自体を残すかどうかの判断は別記事で扱う予定です。

Q. 制作会社に依頼するとき、何を伝えればいいですか?

次の5点をそのまま渡してください。①マーチャント リスティングの必須5項目(第3章の表)を全商品に出す、②価格・在庫・有効期限は商品データから自動生成し手入力欄を作らない、③色・サイズ違いはProductGroupで束ね、variesByはschema.orgのフルURLで指定する、④パンくずはBreadcrumbListで別に出す、⑤納品前にリッチリザルト テストで売れ筋3商品の結果(エラー0件)を提出する。この5点が要件になっていれば、後から直す場面はかなり減ります。

用語集|この記事に出てきた言葉

構造化データ
ページの内容(商品名・価格・在庫など)を、検索エンジンが読める決まった形式で書いたもの。schema.orgという共通の語彙を使う。
JSON-LD
構造化データの書き方の一つ。HTMLの中にscriptタグで埋め込む。Googleが推奨している形式。
リッチリザルト
通常の青いリンクより情報が多い検索結果の表示。商品なら価格・在庫・評価などが付く。
プロダクト スニペット
商品を購入できないページ(レビュー記事など)向けの商品表示。Googleの公式ドキュメントの区分。
マーチャント リスティング
自社で商品を購入できるページ向けの商品表示。自社ECの商品ページはこちらを狙う。
Product/Offer
schema.orgの型。Productが商品そのもの、Offerがその商品の販売条件(価格・在庫・送料など)を表す。
ProductGroup
色・サイズ違いのバリエーションを束ねる親の型。variesBy(何で違うか)とhasVariant(各バリエーション)を持つ。
SKU
在庫管理用の商品コード。バリエーションごとに一意に振る。
GTIN/JANコード
世界共通の商品識別番号。日本のJANコード(13桁)はgtin13として書く。
ISO 4217
通貨を3文字で表す国際規格。日本円は「JPY」。
canonical(正規URL)
同じ内容のページが複数あるとき、代表として扱ってほしいURLをGoogleに伝える仕組み。
Merchant Center
Googleに商品データを登録する無料の管理画面。ショッピング広告や無料の商品リスティングに使う。
GSC(Google Search Console)
検索結果での順位や流入、構造化データのエラーを確認できるGoogleの無料ツール。

まとめ|構造化データは「ページに書いてある事実」を機械に翻訳する作業

商品ページから検索結果パネルへ、必須・推奨・送料返品・バリエーション・パンくず・検証の6段の階段が続き、最上段で商品カードが完成するイメージ

本記事で書いたことを、実装の順番に並べ直します。

順番やること章
1そのページで買えるか確認。買えるならマーチャント リスティングの要件で書く第1〜2章
2必須5項目(name・image・offers・price・priceCurrency)だけで動かす第3章
3自動生成できる推奨項目(availability・sku・brand・description・url)を足す第4章
4送料・返品ポリシーを1か所で持つ。商品ごとの例外だけOfferに入れ子第5章
5色・サイズ違いはProductGroup。1ページ型か複数ページ型かでURLを決める第6〜7章
6BreadcrumbListを別に入れる。画面のパンくずと一致させる第8章
7リッチリザルト テストとSearch Consoleで検証。月1回「無効」件数を見る第9章

構造化データは、ページに書いてある事実を機械に翻訳する作業です。ページにない価格、ない在庫、ない評価を書く場所ではありません。だから本文がきちんと書けている商品ページほど、構造化データは短時間で入ります。本文の作り方はECの商品ページSEO、EC全体の設計はECサイトのSEO対策 完全ガイドに戻ってご確認ください。

最後に一つ。公式ドキュメントの仕様は年に数回変わります。本記事の内容は2026年11月時点の確認値なので、実装の直前にはGoogle検索セントラルの該当ページで最新の必須・推奨を見てから進めてください。

FREE CONSULTATION

商品ページの構造化データを、
必須・推奨の抜けと「出ない原因」まで一緒に見ます

「入れたのに検索結果に出ない」「色・サイズ違いをどう書けばいいか分からない」「カート移行で構造化データが消えた」という方へ。商品ページのURLを拝見し、リッチリザルト テストとSearch Consoleの結果から、必須・推奨の抜け、表示されない原因、制作会社に渡す要件の3点をお返しします。ご案内するのは私のSEOコンサル(自社サービス)です。順位・表示の約束はしません。神戸・芦屋を中心に、オンラインでも対応しています。相談は無料です。

構造化データの無料相談はこちら(develop-life.com/contact/)→

関連記事

  • ECサイトのSEO対策 完全ガイド 2026|自社EC・D2Cの検索集客
  • ECの商品ページSEO|検索で売れる商品ページの書き方
  • ECのカテゴリページSEO|階層設計と絞り込み検索でクロールを守る実装
  • ECサイトリニューアルで検索順位を落とさない方法|失敗パターンと対策
  • Shopify・BASE・STORES徹底比較 2026|D2Cカートの選び方
  • 検索順位が上がらない15の原因と対策チェックリスト 2026
  • 月5万検索キーワードで10年1位|自社ECが検索でAmazonに勝てた理由
AUTHOR
高井雅人 / Masato Takai

この記事を書いた人

高井 雅人Masato Takai

神戸・芦屋の SEO コンサルティング「雅〜WEB〜」運営/ develop-life.com 編集長

神戸・芦屋拠点 月間50,000検索で1位獲得 ピアノ教室4年で生徒20倍 EC 月商7桁達成支援 BtoB +736セッション/月

個人教室・中小事業者・EC サイトの SEO 支援を中心に、複数業種で「数字で語れる成果」を積み上げてきた現役コンサル。本記事のクライアント「みゆき音楽教室(4年で生徒2→40名)」のほか、ヘアアクセサリー EC(広告依存から脱却し月商7桁達成)、BtoB 企業(半年で月間+736セッション)など、業種を問わずローカル SEO・コンテンツ SEO の両軸で成果を出しています。当メディア「develop-life.com」では、現役コンサルとしての実体験ベースで Web 集客の実践情報を発信中。

雅〜WEB〜公式サイト(無料相談) プロフィールを詳しく見る

運営者のSEO実戦録(note)

Amazonに検索で勝って、1位を10年守った話

広告費ゼロ・自然検索だけで自社ECを運営した10年の実務を、手順と失敗談つきでnoteにまとめています。何から読むかは、下の入口記事に整理しました。

noteの実戦録を読む ↗
EC集客
D2C ECサイト SEO JSON-LD Product ProductGroup バリエーション パンくず マーチャントリスティング リッチリザルト 構造化データ
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
  • 大阪の飲食店のローカルSEO|ミナミ・キタで予約を取るMEO実践2026

関連記事

  • 4段の階段に階層・リンク・絞り込み制御・ページ送りの要素が置かれ、頂上で整ったカテゴリ棚が金色の光を受けているイメージ
    ECのカテゴリページSEO|階層設計と絞り込み検索でクロールを守る実装
    2026年11月4日
  • 守りの移行を土台に、ECサイトリニューアル後の成長へ進む全体像のイメージ
    ECサイトリニューアルで検索順位を落とさない方法|失敗パターンと301リダイレクト・移行チェックリスト
    2026年9月23日
  • AIの下書きに人が独自情報を足して商品ページを仕上げる全体像をまとめたイメージ
    EC×AI活用術|商品説明文・カテゴリページをAIで量産する方法と品質管理の全手順
    2026年9月22日
  • 小さく作って検索で育てるD2Cブランドの成長ステップをまとめたイメージ
    個人・小規模から始めるD2Cブランドの作り方 2026|企画から集客・法規・損益分岐まで
    2026年9月21日
  • ECのコンテンツマーケティングが指名検索という資産に育つまとめのイメージ
    ECサイトのコンテンツマーケティング|ブログで指名検索を増やす方法と商品ページへの動線設計
    2026年9月20日
  • 売上から逆算するECキーワード戦略のチェックリストと成果への階段のイメージ
    ECのキーワード選定|「買うキーワード」と「調べるキーワード」の見分け方と受けページの決め方
    2026年9月19日
  • 商品ページ運用のチェックリストと上位表示への階段のイメージ
    ECの商品ページSEO|検索で売れる商品ページの書き方と説明文の型を実務から解説
    2026年9月18日
  • BASEで始めて検索集客の土台を作り、Shopifyへ成長していく階段のイメージ
    Shopify・BASE・STORES徹底比較 2026|SEOのやりやすさで選ぶD2Cカート
    2026年9月17日
MASATO TAKAI
現役SEOコンサルタント
神戸・芦屋で月額制SEOコンサル「雅〜WEB〜」運営/2児のパパ/月間50,000検索KWで検索1位獲得など実績多数。現場の一次情報を発信中。
無料SEO相談
関連リンク
  • 本業:雅〜WEB〜(神戸・芦屋SEOコンサル)↗
  • SEO実績事例ページ ↗
  • 無料SEO相談 ↗
  • 運営者プロフィール
  • サイトへのお問い合わせ
カテゴリー
  • SEO実践
  • WordPress運用
  • サーバー・ツール比較
  • AI×SEO
  • 業種別SEO事例
  • EC集客
  • サイトマップ
  • プライバシーポリシー
  • 運営者の本業:雅〜WEB〜(神戸・芦屋のSEOコンサル)

© develop-life|SEO・Webマーケが伸びる成長メディア.

目次