JSON-LD 構造化データ
商品ページの JSON-LD 構造化データ (schema.org) の仕組みと設定
JSON-LD 構造化データ
JSON-LD とは何か
JSON-LD は、ページの内容を検索エンジンにわかりやすく伝えるためのデータ形式です。 見た目のための HTML とは別に、「このページは商品ページです」「これは価格です」「これは在庫状況です」のような意味を、機械向けに整理して渡します。
このとき使う共通ルールが schema.org です。
schema.org には Product、Article、BreadcrumbList などの型があり、Google などの検索エンジンはこれを読んでページ内容を理解します。
SEO の観点では、JSON-LD を入れることで次のような効果が期待できます。
- 商品ページが Google 検索で商品情報として理解されやすくなる
- 価格や在庫などが商品スニペットとして扱われやすくなる
- パンくずリストが検索結果に反映されやすくなる
- 記事ページが Article として認識されやすくなる
実装上は、HTML の中に次のような形で埋め込みます。
<script type="application/ld+json">
{ ...JSONデータ... }
</script>
これは画面には表示されません。 ユーザー向けではなく、検索エンジン向けの「説明データ」です。
このサイトで使われている JSON-LD の種類
Takazudo Modular では、主に次の 4 種類を使っています。
| 種類 | 対象ページ | 主な内容 |
|---|---|---|
Product | 商品詳細ページ | 商品名、価格、在庫、画像、ブランド、配送、返品ポリシー |
ItemList | 商品一覧ページ | 商品リスト(順番、名前、URL、画像) |
BreadcrumbList | 全ページ | パンくずリスト(ナビゲーション階層) |
Article | 記事・ガイドページ | タイトル、説明、公開日、著者 |
Product JSON-LD の詳細
このサイトでは Product が最重要です。
Google に「このページは商品ページで、販売情報もある」と伝える中心部分だからです。
基本フィールド
| フィールド | 内容 |
|---|---|
name | 商品名 |
url | 商品ページの正規 URL |
description | 商品説明(省略可) |
image | 商品画像 URL(/images/p/{slug}/1200w.webp) |
brand | ブランド名(Brand 型) |
画像は相対パスで渡された場合でも、最終的には絶対 URL に変換されます。
Offers
価格がある商品では、offers を出力します。
ここが検索結果の「価格」「在庫」まわりに特に重要です。
price が存在する場合だけ offers を出力します。
価格未設定の商品には offers 自体が付きません。
在庫状況マッピング
在庫状況は mercariStatus から変換しています。
mercariStatus | 出力される availability | 意味 |
|---|---|---|
| 未設定 / その他 | https://schema.org/InStock | 販売中 |
sold | https://schema.org/OutOfStock | 売り切れ |
discontinued | https://schema.org/OutOfStock | 販売終了 |
unavailable | https://schema.org/OutOfStock | 販売不可 |
incoming | https://schema.org/PreOrder | 入荷予定・予約受付 |
seller
販売者は固定で Takazudo Modular です。
shippingDetails
配送情報は日本国内向けとして出しています。
| 項目 | 値 |
|---|---|
| 配送先国 | JP |
| 送料 | 0 JPY(商品価格に含む) |
| 発送準備 | 1〜3 営業日 |
| 配送 | 1〜3 営業日 |
PreOrder(予約商品)の場合は shippingDetails ブロックごと省略します。
予約商品は「すぐ発送できる商品ではない」ため、配送情報を出すのは不正確であり、Google の構造化データ仕様でも shippingDetails を出すなら deliveryTime が必須となるためです。availability: PreOrder だけで「まだ発送できない」という情報は伝わります。
hasMerchantReturnPolicy
返品ポリシーは「返品不可」です。
{
"@type": "MerchantReturnPolicy",
"applicableCountry": "JP",
"returnPolicyCategory": "https://schema.org/MerchantReturnNotPermitted"
}
出力例
以下は、このサイトの実装に沿った Product JSON-LD の出力例です。
{
"@context": "https://schema.org",
"@type": "Product",
"name": "ADDAC107 T-Networks",
"url": "https://takazudomodular.com/products/addac107-t-networks-intro/",
"description": "ADDAC107 T-Networks は 3 系統のツインピークフィルターを備えたユーロラックモジュールです。",
"image": "https://takazudomodular.com/images/p/addac107/1200w.webp",
"brand": {
"@type": "Brand",
"name": "ADDAC System"
},
"offers": {
"@type": "Offer",
"price": 27800,
"priceCurrency": "JPY",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "Takazudo Modular"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "JP"
},
"shippingRate": {
"@type": "MonetaryAmount",
"value": 0,
"currency": "JPY"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 3,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 3,
"unitCode": "DAY"
}
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "JP",
"returnPolicyCategory": "https://schema.org/MerchantReturnNotPermitted"
}
}
}
予約商品(incoming)の場合は、availability が PreOrder になり、shippingDetails ブロックごと出力されません。
ItemList
ItemList は商品一覧ページで使います。
「このページには複数の商品が順番つきで並んでいる」と検索エンジンに伝えるためのものです。
各商品について次の情報を出しています。
| フィールド | 内容 |
|---|---|
position | 一覧内の順番 |
name | 商品名 |
url | 商品詳細ページ URL |
image | OGP 用画像 URL |
detailHref がある商品だけが対象です。
BreadcrumbList
BreadcrumbList はパンくずリストの構造化データです。
検索エンジンにページ階層を伝えます。
商品ページでの階層例:
- ホーム
- ブランド一覧
- ブランド名
- 商品名
通常の記事ページではコンポーネント側で自動生成され、必要に応じてカテゴリも入ります。
Article
Article は記事ページやガイドページ用です。
| フィールド | 内容 |
|---|---|
headline | 記事タイトル |
description | 記事説明 |
image | OGP / ヒーロー画像 |
datePublished | 公開日 |
dateModified | 更新日 |
author | Takazudo |
publisher | Takazudo Modular |
schemaType は基本 Article ですが、必要に応じて WebPage や AboutPage も使える設計です。
確認方法
Google Rich Results Test
Rich Results Test に URL を入れて確認します。
確認すること:
- JSON-LD が正しく読み取られているか
Productとして認識されているか- price / availability / image などにエラーがないか
- 必須項目不足や形式エラーがないか
Google Search Console
Search Console では、Google が実際に構造化データをどう認識しているかを確認できます。
確認すること:
- 商品ページがリッチリザルト対象として認識されているか
- エラーや警告が出ていないか
- クロール後に構造化データが正しく取り込まれているか
運用としては、まず Rich Results Test でページ単位の確認を行い、その後 Search Console でサイト全体の状態を見るのがよいです。
コンポーネントファイル
| ファイル | 用途 |
|---|---|
src/astro/components/shared/product-json-ld.astro | Product 構造化データ |
src/astro/components/shared/product-list-json-ld.astro | ItemList 構造化データ |
src/astro/components/shared/breadcrumb-json-ld.astro | BreadcrumbList 構造化データ |
src/astro/components/shared/article-json-ld.astro | Article 構造化データ |
呼び出し元:
| ファイル | 用途 |
|---|---|
src/astro/pages/products/[slug].astro | 商品詳細ページ(JA) |
src/astro/pages/en/products/[slug].astro | 商品詳細ページ(EN) |
src/astro/pages/products/index.astro | 商品一覧ページ |
src/astro/pages/notes/[slug].astro | 記事ページ |
まとめ
- JSON-LD は「検索エンジン向けの説明データ」
- 画面には見えないが、SEO には重要
- 商品ページでは
Productが最重要 - 価格、在庫、送料、返品不可などを機械的に明示している
- 在庫は
mercariStatusから自動で変換している - 予約商品では配送日数をあえて出さない
- 確認は Rich Results Test と Search Console を使う