Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】The Shopify zero-price bug that breaks Merchant Center feeds

2026年08月24日に「Dev.to」が公開したITニュース「The Shopify zero-price bug that breaks Merchant Center feeds」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Shopifyで商品価格が0とGoogleに認識され、Googleショッピングで表示されない問題がある。原因は、バリアント価格の未入力、またはテーマのJSON-LDが空の価格を読み込むコードのバグだ。エラーは見落としやすいため、Rich Results Testで実価格を確認し、データかコードを修正する。

ITニュース解説

インターネット上で商品を販売する際、その商品を多くの人に知ってもらうために、Google検索結果のショッピングタブや広告に表示させることは非常に重要だ。この表示を実現するために、ECサイトの商品は「Google Merchant Center(マーチャントセンター)」というGoogleのサービスに登録される。しかし、Shopifyを使っている多くのECサイトで、商品がGoogleショッピングに表示されなくなったり、「Invalid value for category [price](価格カテゴリの値が無効です)」というエラーメッセージが表示されたりする問題が発生している。このエラーは、Googleが受け取る商品の価格が「0」である場合に発生する。Googleは「0」という価格を、実質的な販売価格や商取引のオファーとして認めないため、対象の商品はショッピングの対象から外されてしまうのだ。

この「価格が0」という問題には、唯一の例外がある。それは、契約プロモーションの一部として販売される携帯電話のような特定のモバイルデバイスの場合だけだ。それ以外のあらゆる商品においては、価格が「0」であるとGoogleに認識されると、その商品は無効と判断され、Googleショッピングに表示されなくなる。

Shopifyを使っているECサイトでこの「価格0」の問題が発生する主な原因は二つある。一つは「データの入力ミス」、もう一つは「テーマのコードのバグ」だ。

一つ目の原因は、商品のバリアント価格が未入力であるケースだ。Shopifyでは、TシャツのS・M・Lサイズや、赤・青・緑といった色の違いなど、一つの商品に対して複数の「バリアント」を設定できる。このとき、誰かが商品の作成時に仮の価格を設定したまま、あるいは後からバリアントを追加した際に、そのバリアントの価格を空白のままにしてしまった、という状況がこれに該当する。管理画面で商品の価格を確認すると、確かにそのバリアントの価格が設定されていないことが分かる。これはコードのバグではなく、データ入力の問題であるため、単に正しい価格を入力し直せば解決する。特に注意すべきは、商品の一番最初のバリアントには価格が正しく入力されていても、後から追加した二番目や三番目のバリアントの価格が0のままである場合があるという点だ。一見すると商品ページは正常に見えるため、このような細かな見落としが問題を引き起こす。

二つ目の原因は、ShopifyテーマのJSON-LDスニペットが間違った価格変数を参照しているケースだ。この場合、Shopifyの管理画面で確認すると、商品のすべてのバリアント価格は正しく設定されているにもかかわらず、Googleが受け取る価格が「0」になってしまう。これは、ウェブページに構造化データ(JSON-LD形式)として埋め込まれている、商品の価格情報をGoogleに伝えるためのコードに問題があるためだ。具体的には、テーマのコードが「空になる可能性のある変数」から価格を読み込んでいることが原因となる。例えば、Liquidテンプレート言語で{{ product.selected_or_first_available_variant.price | money_without_currency }}のような、現在選択されている、または最初に利用可能なバリアントの価格を確実に取得する変数ではなく、在庫切れや未公開のバリアントの場合に「nil」(空)になる可能性があるような変数を参照していると、この問題が発生する。これはコードのバグであり、データの問題ではないため、管理画面でいくら価格を修正しても問題は解決しない。テーマのコードを修正する必要がある。このバグは一つの商品だけでなく、そのテーマを使用しているすべての商品ページに影響を及ぼす可能性があるため、コードレビューで特に注意すべき点となる。

このバグが厄介なのは、見つけにくいという性質を持っていることだ。問題は、多くの店舗で発生しているものの、それぞれの店舗ではごく一部の商品にしか影響しない。例えば、9万件以上のShopify製品ページを調査した結果、約5店舗に1店舗の割合で、少なくとも1ページが構造化データで「0」の価格を送信していたことが判明しているが、影響を受けるページは、その店舗のカタログ全体のごく一部に過ぎない。このため、管理画面でいくつかの商品をランダムに確認する「スポットチェック」では、問題のある商品を見つけることはほとんどできない。

では、自分のストアでどちらの種類の問題が発生しているのか、どのように特定すればよいのだろうか。まず、問題が発生している可能性のある商品のURLをGoogleの「リッチリザルトテスト」というツールに入力して実行する。このツールは、Googleが実際に認識しているウェブページの構造化データを表示してくれるので、ここで商品の価格フィールドが「0」になっていないかを確認する。これが、Googleが受け取っている「真の価格」だ。次に、Shopifyの管理画面を開き、対象商品の「商品」→「価格」に進み、すべてのバリアントの価格が正しく入力されているかを確認する。もし、いずれかのバリアントに価格が設定されていない場合は、それが原因1の「データ入力ミス」である。そのバリアントに正しい価格を入力すれば問題は解決する。しかし、もしすべてのバリアント価格が管理画面で正しく表示されているにもかかわらず、リッチリザルトテストで価格が「0」と表示されるのであれば、それは原因2の「テーマのコードのバグ」である。この場合は、テーマのJSON-LDスニペットがproduct.selected_or_first_available_variant.priceのような正しい変数を参照しているかを確認する必要がある。

具体的な修正方法について、データ入力ミスが原因の場合は、見つかった未入力のバリアントに正しい価格を入力するだけで解決する。一方、テーマのコードバグが原因の場合は、JSON-LDスニペット内の変数を修正する。これにより、そのテーマを使用しているすべての商品ページの価格情報が一度に修正されるため、個々の商品ページを修正するよりも効率的で根本的な解決となる。修正が完了したら、必ず再度リッチリザルトテストで価格が正しく表示されていることを確認することが重要だ。その上で、クライアントに解決を報告し、Google Merchant Centerのフィードが更新されるのを待つか、手動でフィードを再アップロードする。これにより、影響を受けていた商品はMerchant Centerの「要対応」タブに表示されなくなり、Googleがフィードを再クロールした後に正常に認識されるようになる。

最後に、一つの商品だけでなく、クライアントのカタログ全体をチェックする方法の重要性についても触れておく。Merchant Centerの「要対応」タブは、すでにフィードに登録されている商品しか表示しない。そのため、そもそもフィードに一度も登録されなかった商品が「0」の価格情報を持っていたとしても、そのレポートには表示されない可能性がある。クライアントのストアを監査する際には、Merchant Centerの診断レポートだけでなく、実際に公開されている商品ページの構造化データを直接確認することが最も確実な情報源となる。これは、新しいテーマを導入する際や、Merchant Centerの監査を行う際のチェックリストに必ず含めるべき項目であり、安価で簡単に確認できるにもかかわらず、見落とされやすい重要なポイントだ。この「ゼロ価格」の問題は、ページと構造化データの価格が一致しない「価格不一致」や、価格は有効だが情報が古い「古い価格」とは異なり、ページと構造化データが両方とも「0」という無効な価格を示している点に特徴がある。

関連コンテンツ

関連IT用語