しかし実際には、検索結果やGoogleショッピングにおいて、価格や在庫、バリエーション情報を正しく表示するための大事な役割を担っています。
-本文中

(最終更新 2025年08月13日)

【Shopify豆知識】だからSEOに強いのか!構造化データ(JSON-LD)について解説

Shopifyの商品ページに自動実装されている構造化データの仕組みと役割を解説しました。特にoffersプロパティは、バリエーションごとのSKU、バーコード、在庫、価格、通貨コード、固有URLを検索エンジンに正確に伝え、検索結果やGoogleショッピングでの表示最適化に寄与します。メタフィールドを活用して項目を追加すれば、さらに精度の高い構造化データを実現できます。

Shopifyが世界中でECプラットフォームとして急成長を遂げ、シェアを広げている背景には、いくつかの理由があります。

その中でも「SEOに強い」という評価は、決して都市伝説ではなく、実際の成果に裏打ちされた事実です。

モバイルファーストな設計、高速なサイト表示といった基本性能の高さに加え、検索エンジンに正確な情報を伝えるための“構造化データ”の実装も、SEOにおける大きな強みとなっています。

今回は、Shopifyが「検索に強い」とされる理由のひとつである構造化データの役割と仕組み、そしてなぜそれがGoogleなどの検索エンジンに好まれるのかを、深掘りして解説していきます。

構造化データとは

構造化データとは、ウェブページに記載された情報を、検索エンジンがより正確かつ効率的に理解できるように、あらかじめ「意味づけ」された形で記述するデータのことです。

通常、私たちが書く商品紹介や説明文は人間にはわかりやすくても、検索エンジンには曖昧に見えることがあります。

たとえば「このシャツは3,000円で販売中!」という文章があっても、それが「商品名」「価格」「在庫情報」だと判断するのは、検索エンジンにとって簡単ではありません。

そこで活用されるのが「構造化データ」。Googleなどの検索エンジンは、「Schema.org」という共通の仕様に従って記述された構造化データを見ることで、ページ内の情報を「これは商品名」「これは価格」「これは画像URL」と正確に理解します。

構造化データをどのように伝えるのか

構造化データは、主にHTMLの中に特別な形式で埋め込むことで、検索エンジンに対して明示的に情報を伝えることができます。

その方法にはいくつかの種類がありますが、現在もっとも一般的で推奨されているのが「JSON-LD(JavaScript Object Notation for Linked Data)」という形式です。

JSON-LDは、HTMLの中に「<script type=”application/ld+json”>」というタグを使って書かれます。これにより、ページに表示されている情報とは別に、機械にわかりやすいかたちでデータを宣言することができます。

<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "プレミアムTシャツ",
"price": "3500"
}
</script>

たったこれだけでも、検索エンジンには「このページは商品で、名前はプレミアムTシャツ、価格は3,500円」という情報が伝わります。

実際のECサイトではこれに「画像」「在庫」「ブランド名」などの情報を追加して、より詳細に伝えるようにします。

Shopifyにはどこに埋め込まれている?

Shopifyでは、多くのテーマに構造化データ(JSON-LD形式)があらかじめ組み込まれており、特別な設定をしなくても検索エンジンに商品情報などを伝えることができるようになっています。

この構造化データは、Shopifyテーマ内のさまざまなテンプレートファイル(.liquidファイル)に埋め込まれており、ページの種類ごとに出力内容が変わるのが特徴です。

なかでも、検索結果のリッチスニペットとして活用されやすいのは、商品ページとブログ記事ページです。

・ブログ記事:main-article.liquid / 構造化データタイプ:@type:Article

・商品:main-product.liquid / 構造化データタイプ:@type: Product

これらは構造化データによって「価格」「レビュー」「公開日」などの情報を明示でき、SEO効果をもっとも発揮しやすいページと言えるでしょう。

なぜ「<scritpt></script>」で情報を渡すのか

初心者の方は、構造化データのコードが 「<script>」で囲まれているのを見て、「これはJavaScriptなの?」と思うかもしれません。

確かに「<script>」タグというと、JavaScriptを実行するときに使うイメージが強いですよね。

しかし本来、「<script>」 には「スクリプト(台本、原稿)」という意味があり、ブラウザや検索エンジンに何らかの命令やデータを渡すための入れ物です。必ずしもJavaScriptだけを書くためのものではありません。

ポイントは 属性です。構造化データの場合、次のように書かれています。

<script type="application/ld+json">

これは、「このスクリプトはJavaScriptではなく、JSON形式のデータ(Linked Data)ですよ」という宣言です。

つまり、ここで書かれているのはJavaScriptのコードではなく、検索エンジンに渡すためのJSONデータなのです。

商品ページの構造化データ

では、実際に商品ページのテンプレートファイル(main-product.liquid)に実装されている構造化データコードを見てみたいと思います。

<script type="application/ld+json">
    {
      "@context": "http://schema.org/",
      "@type": "Product",
      "name": {{ product.title | json }},
      "url": {{ request.origin | append: product.url | json }},
      {% if seo_media -%}
        "image": [
          {{ seo_media | image_url: width: 1920 | prepend: "https:" | json }}
        ],
      {%- endif %}
      "description": {{ product.description | strip_html | json }},
      {% if product.selected_or_first_available_variant.sku != blank -%}
        "sku": {{ product.selected_or_first_available_variant.sku | json }},
      {%- endif %}
      "brand": {
        "@type": "Brand",
        "name": {{ product.vendor | json }}
      },
      "offers": [
        {%- for variant in product.variants -%}
          {
            "@type" : "Offer",
            {%- if variant.sku != blank -%}
              "sku": {{ variant.sku | json }},
            {%- endif -%}
            {%- if variant.barcode.size == 12 -%}
              "gtin12": {{ variant.barcode }},
            {%- endif -%}
            {%- if variant.barcode.size == 13 -%}
              "gtin13": {{ variant.barcode }},
            {%- endif -%}
            {%- if variant.barcode.size == 14 -%}
              "gtin14": {{ variant.barcode }},
            {%- endif -%}
            "availability" : "http://schema.org/{% if variant.available %}InStock{% else %}OutOfStock{% endif %}",
            "price" : {{ variant.price | divided_by: 100.00 | json }},
            "priceCurrency" : {{ cart.currency.iso_code | json }},
            "url" : {{ request.origin | append: variant.url | json }}
          }{% unless forloop.last %},{% endunless %}
        {%- endfor -%}
      ]
    }
  </script>

商品ページの構造化データを見ていくと、ほとんどの項目はLiquidの変数と値の対応がイメージできると思います。

しかし、少し複雑に見えるのが「offers:」の部分。本来商品の構造化データにて商品の購入条件(価格や在庫状況など)を記述するためのプロパティですが、Shopifyの場合、バリエーションごとの情報をまとめています。

①sku:バリエーションのSKU。Liquidで「variant.sku」を取得・表示

②gtin12 / gtin13 / gtin14:国際商品コード(バーコード桁数で判定)。Liquidで「variant.barcode」を取得し、桁数で条件分岐して表示

③availability:在庫ありかなし。Liquidで「variant.available」を取得・表示している。

④price:価格。Liquidで「variant.price」を取得・表示している。

④priceCurrency:通貨コード(JYP,USDなど)。Liquidで「cart.currency.iso_code」を取得・表示している。

⑥url:バリエーションの個別URL。Liquidで「variant.url」を取得・表示している。

※バリエーションのURL

Shopifyの商品には、色やサイズなど複数のバリエーションを設定でき、それぞれに固有のURLが割り当てられます。これをバリエーションURLと呼びます。

多くの場合、商品ページでバリエーションを選択すると、ブラウザのアドレス欄のURL末尾に「?variant=〇〇」という形のパラメータが追加されます。

この仕組みにより、構造化データで正しく検索エンジンに伝えることが可能になります。

以上、Shopifyの商品ページにおける構造化データの仕組みと、その中でも重要な「offers」プロパティについて解説しました。

普段SEOを意識していないと、このコードを見ても「たくさんあるJavaScriptのひとつかな?」と思ってしまいがちです。しかし実際には、検索結果やGoogleショッピングにおいて、価格や在庫、バリエーション情報を正しく表示するための大事な役割を担っています。

さらに、Shopifyではメタフィールドを活用して構造化データの項目を追加することも可能です。これにより、より精度の高いデータを検索エンジンに提供できるようになります。興味のある方は、ぜひ各自で調べて実装し、自社のSEO強化に役立ててみてください。

初めまして。運営者ホリと申します。

当ブログは「Shopifyを一緒に悩んで楽しむ仲間」に向けて情報を発信するブログです。

ここで扱うテーマは、構築やカスタマイズにとどまらず、SEOマーケティングやロジスティクスといった運営全般に広がります。

中でも最も重要視するのは、Shopifyを使った構築や運営に携わる中で「大掛かりな開発と投資に頼らなくても目的を達成できる工夫」。

確かな知識と経験を土台にしながら、日々の学びを記事にまとめて、同じように試行錯誤している方々とシェアしています。 日々の実践から得た知見を記事にまとめることで、Shopifyを使う仲間たちの小さなヒントや発想のきっかけになればうれしいです。

「ちょっと聞いてみたい」「これで大丈夫?」といった気軽な相談も大歓迎です。 Shopifyを通じて一緒に試行錯誤しながら、学び合える場として、このサイトを活用していただければ幸いです。

このブログと運営者について

お問い合わせ

BLOG More

SEO

1週間前

生成AI時代だから享受できるSEOのメリット4選

「SEOオワコン」「SEO死亡説」といった刺激的な言葉も目立つようになっています。..

SEO

3週間前

格安SEOの「なぜ?」外注の前に読んでおきたい、料金の差が生まれる理由

「高い=ぼったくり」「安い=怪しい」と単純に判断できるものではない‥..

Js

1か月前

【Shopify小技】ブログ記事内にコレクションカード(ショートコード)を設置する

記事自体のSEO効果も十分に期待できる施策になりますので、ぜひ活用してみてください。..

Js

1か月前

【Shopify小技】ブログ記事内に商品カード(ショートコード)を設置する

記事の途中で商品を紹介したい場面は多いのに、標準機能ではカード型で見栄えよく表示する仕組みがありません。..

Liquid

1か月前

【Shopifyの裏】フォーム(form)の仕組みについて

フォーム送信の裏側では Shopifyのエンドポイントが動いており、そこで行われる処理はブラックボックス..

Liquid

2か月前

【Shopify小技】あれ何で?DawnテーマでLine Item Propertiesが動作しない件

分割払いに関する入力情報を扱うためのもので、商品情報をカートへ送信する役割を持っていません。..

Js

2か月前

【第1回目】Shopify「cart.js」のトリセツ・まずざっくり全体像を掴もう!

① onChange() → ② updateQuantity() → ③ publish → ④ connectedCallback > onCartUpdate()という順番で動いています。..

Liquid

2か月前

【Shopify小技】折りたたみブロック(collapsible_tab)にアイコンを追加したい!

「少し見た目をユニークにしたい」「renderスニペットの動きを深く理解したい」..

Liquid

2か月前

【Shopify小技】タグで絞り込むコレクションページを実装!基本となるオブジェクト「current_tags」とは

Shopifyのコレクションページでは 複数タグの「AND」条件による絞り込みが自然に実現されており‥..

設定

2か月前

【Shopifyレポート】毎月の在庫と販売数を一目で確認したい!「商品別の毎日販売された在庫最」とは

おかげで、数字に超厳しい経理担当からもめちゃくちゃ褒められたほどです。..

Liquid

2か月前

【Shopify小技】パスワードをお忘れですか?を押しても遷移しない‥エラーのシンプルな解決方法

厳密にいえば、新しいページへ遷移しているわけではなく、同じページ内でJavaScriptとCSSを使い、二つのフォームを切り替えて見せているだけ..

Flow

3か月前

【Shopify小技】Cart attributesの内容は注文一覧で確認とれない‥その対策を考えてみた

残念ながら、注文一覧の「列」にCart attributesの値を直接取得・表示する機能が用意されていません。..

Js

3か月前

【Shopify小技】購入時ログイン必須の導線改善に役立つ「最近見た商品」一覧を作成

商品数が多かったり、購入までの導線が複雑なショップでは、ユーザーが途中で迷子になってしまうこともあります。..

設定

3か月前

Shopifyを使うなら検討してみたい発送代行システム「ロジレス」使い勝手と感想

「次回のレクチャーまでにこの動画を数本観ておいてくださいね」といった“宿題(?)”も出されます。..

Liquid

3か月前

【Shopify小技】PCとスマホで違うメニュー構成にする簡単な方法

「linklists.mobile-menu.links」ではなく「linklists['mobile-menu'].links」のようにブラケット記法で記述するのが安全..

Liquid

3か月前

【Shopify小技】メタフィールドで解決!商品ごとに手動でおすすめ一覧を作成

メタフィールドでは「.value」を使って直接オブジェクト配列を扱うのが正しい方法です。..

Liquid

3か月前

【Shopify小技】関連・おすすめ商品(recommendations)から特定の商品を手動で除外する

テーマエディタで選んだ商品(除外対象)のIDを配列にまとめ、その配列に含まれていない商品だけを「unless」を使って表示する..

設定

4か月前

【Shopify豆知識】テーマレイアウトをカスタマイズしたい?なら「grid-template」を知っておくべき

「スマホではロゴを左側に、PCではロゴを中央に」といった調整も、「grid-template」の設定次第で柔軟に実現できます。..

Liquid

4か月前

【Shopify小技】PC版に左のサイドバーを設置!まず「theme.liquid」の構造を知ろう

もし「type」を設定しなかったり、誤って設定したりしてしまうと、Shopifyはそのセクションをどの領域に表示すべきか判断できません。..

設定

4か月前

【Shopify小技】商品ページごとのFAQをメタオブジェクトで実装してみた

実際には「ピックアップ可能な店舗情報」や「割れやすい商品の配送注意点」など、商品ごとに異なる補足情報‥..

Liquid

5か月前

【Shopify Liquid】テーマで実際使用される「render」の引数と渡り値 その役割を解説

それぞれの変数の意味を押さえておけば、ある程度は読み解くことができると思います。..

アプリ

5か月前

【Shopifyアプリ】シンプル&レスポンシブ!直感的に使えるカレンダー「The Shop Calendar」でイベント・営業日を表示

The Shop Calendarは、カレンダー形式・一覧形式に加え、現在(2025年9月時点)β版としてアコーディオン形式にも対応しています。..

アプリ

5か月前

写真ギャラリーが複数作成できる!Shopify無料アプリ「GA Image Gallery」

ただし、「Advanced Setup」の方は動画を見ても最初はすんなり理解しづらいかもしれません。..

Liquid

6か月前

【Shopify豆知識】スキーマ設定(JSON)「t:」から始まる文字列とは‥実は変数パスではない?

Shopifyは「"t:"」以下のパスをたどって "label" の値(ここでは「クマさんのお顔」)を取得し、テーマエディタ上で表示します。..

Liquid

6か月前

【Shopify Liquid】スニペットファイルを呼び出す「render」引数と渡り値とは?

この仕組みによって、スニペットは渡されたデータに基づき、表示ロジックに沿って商品画像や商品名、価格などを表示できるようになります。..

制作アイディア

6か月前

Shopify構築をフリーランスへ代行依頼する手順(1~6)と選ぶポイント

私自身の体験としておすすめしたいのが「電話対応ができるフリーランス」を選ぶことです。..

Liquid

6か月前

【Shopify Liquid】オブジェクトの絞り込みに用いる「where」フィルタとは

たとえば、「販売元(vendor)」が「Nintendo」の商品だけを抽出したい場合は、以下のように書きます。..

制作アイディア

6か月前

Shopify構築をフリーランスへ依頼するメリットは費用だけではない!課題点も紹介

その「必死さ」や「ファイティングスピリット」は、柔軟かつ誠実な対応として依頼主にとって大きな安心材料となることも..

制作アイディア

6か月前

【リアルレポート】Shopify構築をフリーランスに依頼する際の相場と費用内訳

ECストアは今や単なる販売ツールではなく、実店舗と同じ、あるいはそれ以上に重要性と存在感を持つものとなっています。..

Js

7か月前

Shopifyにおける「カート追加」の仕組みを理解する!form送信 vs fetch API活用

fetch APIに用いられる「/cart/add.js」は、form送信の「/cart/add」と同様、「仮想的なエンドポイント」になります。..