構造化データの実装方法|JSON-LDの書き方とテンプレート

構造化データとは、ページの内容を検索エンジンが理解しやすい形式で記述したものです。 「この数字は価格」「この文章は営業時間」と意味をラベル付けする作業だと考えてください。

先に期待値を調整しておきます。 構造化データ自体はランキング要因ではありません。 実装しても順位は直接上がりません。効果は次の2つです。
①検索結果での表示が充実し、クリック率が改善する
AI検索が内容を抽出する際の手がかりになる
作業量が少なく効果が確実なので、やっておいて損はないという位置づけです。

JSON-LDの基本

3つの記述方式のうち、JSON-LDを使う

構造化データにはJSON-LD、Microdata、RDFaの3方式がありますが、 JSON-LDを推奨します。Googleも推奨している方式です。

書く場所

<head> 内でも <body> 内でも構いません。 <script type="application/ld+json"> の中に記述します。

複数の型をまとめる書き方

1ページに複数の型を記述する場合、@graph を使うと1つのscriptにまとめられます。 このサイトも全ページでこの方式を使っています。

<script type="application/ld+json"> { "@context": "https://schema.org", "@graph": [ { "@type": "LocalBusiness", ... }, { "@type": "BreadcrumbList", ... }, { "@type": "FAQPage", ... } ] } </script>

最も重要なルール:ページに表示されていない情報を書かないこと。 構造化データはページ上に実際に表示されている内容と一致している必要があります。 ユーザーに見えない情報を記述するとスパムポリシー違反となり、 リッチリザルトの対象外になったり、手動対策を受ける可能性があります。 「評価★4.8」と構造化データにだけ書く、といった行為が典型例です。

構造化データの @graph 構造1つのJSON-LDブロックに複数の型を@graphでまとめ、@idで相互参照する構造。@graph1つのJSON-LDに複数の型をまとめる事業者OrganizationLocalBusinessサイトWebSiteBreadcrumbListコンテンツArticleFAQPage商品ProductOffer
型ごとにスクリプトを分けず、@graph に集約して @id で相互参照すると、関係が正しく伝わります。

テンプレート①:LocalBusiness(実店舗)

実店舗・訪問型サービスなら、まずこれを実装してください。 ローカルSEOの基礎になります。

{ "@context": "https://schema.org", "@type": "Dentist", // 業種に合わせて変更(下記参照) "name": "〇〇歯科医院", "image": "https://example.com/img/exterior.jpg", "url": "https://example.com/", "telephone": "+81-3-1234-5678", "priceRange": "¥¥", "address": { "@type": "PostalAddress", "postalCode": "140-0001", "addressCountry": "JP", "addressRegion": "東京都", "addressLocality": "品川区", "streetAddress": "〇〇1-2-3 〇〇ビル2階" }, "geo": { "@type": "GeoCoordinates", "latitude": 35.6284, "longitude": 139.7387 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Friday"], "opens": "09:00", "closes": "18:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": "Saturday", "opens": "09:00", "closes": "13:00" } ], "sameAs": [ "https://www.instagram.com/example/", "https://g.page/example" ] }

業種別の @type

代表的な業種と対応する型
業種@type
歯科医院Dentist
クリニックMedicalClinic
飲食店Restaurant
美容室・サロンBeautySalon / HairSalon
不動産会社RealEstateAgent
保険代理店InsuranceAgency
建設・工事GeneralContractor / RoofingContractor
修理店LocalBusiness
上記にない業種LocalBusiness(汎用)

テンプレート②:BreadcrumbList(パンくず)

全ページに実装してください。検索結果にパンくずが表示されるようになります。 実装の手間が最も少なく、効果が確実な型です。

{ "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "ホーム", "item": "https://example.com/" }, { "@type": "ListItem", "position": 2, "name": "診療案内", "item": "https://example.com/menu" }, { "@type": "ListItem", "position": 3, "name": "インプラント" // 最後のitemは省略可 } ] }

HTMLのパンくずも併せて設置してください。 構造化データだけでは、ユーザーには見えません。 HTMLのパンくずは内部リンクとしても機能しますので、両方が必要です。

テンプレート③:FAQPage(よくある質問)

ページ内にQ&Aがある場合に使います。 質問と回答が、ページ上に実際に表示されていることが条件です。

{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "治療費用はいくらですか?", "acceptedAnswer": { "@type": "Answer", "text": "インプラント1本あたり〇〇円(税込)です。..." } }, { "@type": "Question", "name": "駐車場はありますか?", "acceptedAnswer": { "@type": "Answer", "text": "医院前に3台分ございます。..." } } ] }

実装のコツ:回答の text は、 単体で読んで意味が通る完結した文章にしてください。 「上記のとおりです」のような参照はNGです。 AI検索が回答をそのまま引用する際にも、この形が有利になります

テンプレート④:Article(記事)

ブログ記事やお役立ち情報のページに使います。 著者情報を含められる点が、E-E-A-Tの観点で重要です。

{ "@context": "https://schema.org", "@type": "Article", "headline": "インプラント治療の流れと費用", "description": "インプラント治療の手順を...", "image": "https://example.com/img/article.jpg", "inLanguage": "ja", "datePublished": "2026-07-31", "dateModified": "2026-07-31", "author": { "@type": "Person", "name": "山田 太郎", "jobTitle": "院長・歯科医師", "url": "https://example.com/doctor" // 著者ページ }, "publisher": { "@type": "Organization", "name": "〇〇歯科医院", "logo": { "@type": "ImageObject", "url": "https://example.com/img/logo.png" } }, "mainEntityOfPage": "https://example.com/blog/implant" }

テンプレート⑤:Product / Offer(商品・料金)

ECサイトの商品ページや、料金が明示されているサービスページで使います。

{ "@context": "https://schema.org", "@type": "Product", "name": "エアコンクリーニング(壁掛けタイプ)", "description": "分解洗浄による本格クリーニング...", "image": "https://example.com/img/aircon.jpg", "brand": { "@type": "Brand", "name": "〇〇クリーニング" }, "offers": { "@type": "Offer", "price": "12000", "priceCurrency": "JPY", "availability": "https://schema.org/InStock", "url": "https://example.com/menu/aircon" } }

レビュー(aggregateRating)の扱いには注意してください。 自社サイトに掲載した自社商品のレビューは、 Googleのリッチリザルトの対象外とされる場合があります。 また実在しないレビューを記述するのは明確なポリシー違反です。 迷ったら、レビュー関連のプロパティは書かないのが安全です。

検証方法

検証ツールの使い分け
ツール用途
リッチリザルト テスト Googleがリッチリザルトとして認識するかを確認。実装直後はこれ
スキーマ マークアップ検証ツール schema.org の仕様に沿っているかを網羅的に確認
Search Console
「拡張」レポート
サイト全体のエラーを継続的に監視

実装後の流れ

  1. リッチリザルト テストで、エラーと警告を確認
  2. エラーを修正(警告は任意項目なので必須ではない)
  3. 数日〜数週間後、Search Console の「拡張」レポートに反映される
  4. 以降は月次でエラーの有無を確認

「エラー」と「警告」は別物です。 エラーは必須項目の欠落で、修正が必要です。 警告は推奨項目が入っていないだけなので、すべて埋める必要はありません。 情報がないものを無理に埋めると、かえって不正確になります。

よくあるエラーと対処

頻出エラーと原因
エラー原因対処
構文エラー(JSONが不正) カンマの過不足、引用符の閉じ忘れ JSONバリデータで確認
必須項目がありません 型ごとの必須プロパティ不足 エラーに出た項目を追加
日付の形式が不正 「2026年7月31日」と書いている 2026-07-31 形式にする
価格に通貨記号が含まれる "price": "¥12,000" "price": "12000" と数値のみに
同じ型が重複している プラグインと手動実装が両方出力 どちらか一方に統一
ページの内容と不一致 表示されていない情報を記述 ポリシー違反。即修正

WordPressで最も多いのは「重複」です。 SEOプラグイン(Yoast、All in One SEO等)が自動で構造化データを出力しているのに、 テーマやfunctions.phpでも手動出力していると、同じ型が2つ存在する状態になります。 実装前に、既存の出力があるかを必ず確認してください。 ページのソースを表示して application/ld+json を検索すれば分かります。

構造化データより先に、やることがあります

構造化データは順位を直接上げません。まずキーワード選定内部対策を固めてください。
地域名を含む複合キーワードなら、1キーワード月額5,000円(税抜)で対策できます。

キーワードの空きを確認する 入力3ステップ・約1分/費用は発生しません

よくある質問

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

上がりません。Googleは構造化データをランキング要因ではないと説明しています。効果は「検索結果での見え方が良くなる(クリック率の改善)」と「AI検索が内容を抽出しやすくなる」の2つです。順位対策としてではなく、クリック率対策として位置づけてください。

どの型から実装すべきですか?

優先順位はこうなります。

  1. BreadcrumbList(全ページ・実装が最も簡単)
  2. LocalBusiness(実店舗があるなら必須)
  3. FAQPage(Q&Aがあるページ)
  4. Article(ブログ記事)
  5. Product(商品・料金ページ)

1と2だけでも実装しておく価値は十分あります。

WordPressならプラグインで十分ですか?

基本的な型(Article、BreadcrumbList、Organization)はプラグインで十分です。ただしLocalBusinessの詳細情報(営業時間、緯度経度、業種別の型)は手動での調整が必要なことが多くあります。プラグインの出力内容をリッチリザルト テストで確認し、足りない部分だけ補うのが効率的です。

実装したのにリッチリザルトが表示されません。

次の順で確認してください。

  1. リッチリザルト テストでエラーが出ていないか
  2. 実装から十分な時間が経っているか(数日〜数週間)
  3. そのページがインデックスされているか

なお構造化データが正しくてもリッチリザルトが表示される保証はありません。表示するかどうかはGoogleが判断します。実装は「表示される資格を得る」ことであり、確約ではありません。

構造化データを実装すると順位は上がりますか?

構造化データ自体はランキング要因ではありません。ただし検索結果での表示が充実し(リッチリザルト)、クリック率が改善する効果があります。またAI検索が内容を抽出する際の手がかりにもなるため、実装する価値はあります。

JSON-LDとMicrodataはどちらを使うべきですか?

JSON-LDを推奨します。GoogleもJSON-LDを推奨しており、HTMLの構造から独立して記述できるため保守しやすく、既存のデザインに影響を与えません。head内かbody内にscriptタグとして1箇所にまとめて書けます。

構造化データにページに書いていない情報を入れてもいいですか?

いけません。構造化データはページ上に実際に表示されている内容と一致している必要があります。ユーザーに見えない情報を記述するとスパムポリシー違反となり、リッチリザルトの対象外になったり手動対策を受ける可能性があります。

関連ページ

キーワードの空きを確認