先に結論からお伝えします。ChatGPTやPerplexityが「この商品の価格はいくらか、在庫はあるか、仕様はどうなっているか」と回答するとき、参照する情報は商品ページの見た目から「読んだ」ものではなく、ほとんどの場合Product Schemaから取得したものです。構造化データがなければ、AIはページ内に散在する文章から価格や在庫を推測するしかありません。推測を誤れば、比較検討中の見込み顧客に対し、3か月前の価格や、すでに再入荷しているのに「在庫切れ」のままになっている情報を事実として伝えてしまいます。
これはB2B、とりわけSaaSにとって深刻な問題です。プランは継続的に変わり、価格も随時改定される一方、Webページ上の数値は四半期に1度しか更新されないこともあります。AIが取得したスナップショットに価格の有効期限が明記されていなければ、その数値がいつ失効するのか判断できず、古い価格を使い続けかねません。Product Schemaの役割は、「機械がどの数値を正しいものとして扱うべきか」を曖昧さのないフィールドに記述し、モデル任せの推測を避けることです。
AIエンジンが構造化データを重視する理由
AIエンジンと人間では、Webページの読み方が異なります。人は文字組みや視覚的な階層から要点をつかみますが、モデルが求めるのは「主体・属性・値」の組み合わせとして明確に抽出できる事実です。Product Schemaは、商品名、ブランド、SKU、価格、通貨、在庫状況をJSON-LDのキーと値で記述します。つまり、段落から推測させることなく、モデルへ回答を直接渡すようなものです。複数の情報源で仕様が食い違う場合は、構造化データがあり、内容にも一貫性がある情報が優先される傾向にあります。MicrodataではなくJSON-LDを使う理由は、構造化データをscriptブロックに集約し、表示用のHTMLから分離できるためです。改修時に壊れにくく、GoogleとBingも公式に推奨しています。
必要最小限のProduct Schemaテンプレート
まずは、コピーして値を書き換えるだけで公開できる最小構成を紹介します。次のJSONを、typeをapplication/ld+jsonに設定したscriptタグで囲み、商品ページに追加してください。AIが特に参照しやすいのは、name、brand、price、priceCurrency、availability、priceValidUntilです。SaaSのサブスクリプションを販売している場合は、@typeをProductからSoftwareApplicationへ変更できます。offersの書き方は同じです。
フィールド別解説:AIが実際に参照する項目
- name:商品の正式名称を記述します。ページのメインタイトルと一致させ、マーケティング用のキャッチコピーは含めません。AIが引用する際、この値がそのまま「商品名」として使われます。
- brand:ブランドを表すオブジェクトで、@typeにはBrandを指定します。B2Bでは、AIが「どの企業・ブランドの商品か」を判断するための重要なフィールドです。
- skuとgtin:商品を一意に識別するための識別子です。SKUは社内管理に使います。GTINがある場合、AIは複数サイトの情報を照合し、同一商品かどうかを判断できます。
- priceとpriceCurrency:価格と通貨は別々のフィールドに記述します。priceには純粋な数値だけを入れます(39000とし、NT$39,000のような通貨記号やカンマは付けません)。priceCurrencyにはISO 4217のコードを使い、台湾ドルはTWD、米ドルはUSDと記述します。
- availability:在庫状況には、https://schema.org/InStock、OutOfStock、PreOrderなど、schema.orgで定義された列挙値を使います。「在庫あり」のような独自の文言は記述しません。
- priceValidUntil:その価格が有効な最終日です。見落とされがちですが、B2Bでは特に記載すべきフィールドです。これがなければ、AIは見積価格がいつ失効するのか判断できません。

AIが誤りやすい2つの項目:価格と在庫
価格が誤って伝えられる原因の90%は、書式の問題です。priceに指定できるのは数値だけです。通貨記号やカンマを含む文字列にすると解析に失敗し、AIがoffers全体を読み飛ばしてしまうため、マークアップした意味がなくなります。在庫情報の誤りで多いのは、画面上の表示を変更してもSchemaが更新されていないケースです。たとえば、管理画面で商品を販売停止にしてページには在庫切れと表示されているのに、構造化データにはInStockが残っている状態です。こうした不一致はAIの誤回答を招くだけでなく、Googleから誤解を招く表示と判断され、商品の評価が下がる可能性もあります。現実的な対策は、price、availability、priceValidUntilをテンプレートへ手入力するのではなく、商品データベースに基づいて動的に生成することです。価格改定や在庫変動が発生したとき、Schemaも自動で同期されるようにします。
評価やレビューも追加すべきか
aggregateRatingやreviewを追加すると、引用される可能性が高まり、AIの回答に社会的証明を含めてもらいやすくなります。ただし、越えてはいけない線が2つあります。まず、構造化データ内の評価は、ユーザーがページ上で実際に確認できるレビューと一致していなければなりません。ページには存在せず、Schemaにだけ記載された評価はGoogleが明確に禁止しており、違反すると手動による対策の対象になります。次に、B2B SaaSでは公開レビューが十分に集まっていないことも多く、無理に評価点を付けるのはメリットよりリスクが上回ります。実在するレビューがないなら、追加しないでください。仕様、価格、在庫の3項目を明確に記述することへ注力したほうが、引用される可能性は高まります。
AIが商品ページを引用する理由は、デザインが美しいからではありません。誤りがないと最も確信できる数値の組み合わせだからです。Product Schemaの役割は、その信頼できる数値を自社の情報として明確に示すことにあります。— Tenten GEO
公開後、AIが実際に読み取ったかを確認する方法
- GoogleのリッチリザルトテストまたはSchema Markup ValidatorにURLを入力し、ProductとOfferにエラーがなく、必須フィールドにも不足がないことを確認します。
- Search Consoleの商品関連レポートを確認し、Googleが正常に解析できていること、警告が出ていないことを確かめます。
- AIに直接質問します。ChatGPTやPerplexityで「この商品の価格はいくらですか」といった質問を試してください。
- 価格改定や在庫変更のたびに再テストし、構造化データとページ上の表示が同時に更新されていることを確認します。ここは最も起こりやすく、見落とされやすい問題です。
マークアップ全体を無効にする3つのミス
- 価格を記号付きの文字列で記述する(例:NT$39,000):解析に失敗し、AIがoffers全体を無視します。
- Schemaとページ表示が一致していない:画面では在庫切れなのにInStockと記述すると、誤解を招く情報と判断されます。
- 1ページに複数の商品があるのに、1商品しかマークアップしていない:プラン比較ページや一覧ページではItemListを使うか、各プランをそれぞれProductとして記述します。
Product Schemaを整備することは、GEOの技術実装において特に費用対効果の高い施策です。実装コストが低く、AIはマークアップした数値をほぼ即座に利用できます。難しいのはJSONを書くことではなく、サイト内の全ページで構造化データを漏れなく正しく実装し、画面上の表示と同期し続けることです。これは、私たちがGEO監査を行う際にページ単位で確認する重点項目でもあります。商品ページのフィールドに不足や誤記がないか分からない、あるいはAIが現在、自社の商品や価格をどう説明しているか確認したい場合は、30分間のGEO診断をご予約ください。実際の商品についてAIへ質問し、現状のギャップと、優先して対応すべき項目をお見せします。



