構造化データ(JSON-LD)は、ページの内容を検索エンジンに機械で読める形で伝えるコードです。記事・パンくずリスト・ローカルビジネス・商品などはGoogle検索のリッチリザルト(検索結果の見た目)の対象になります。一方、FAQのリッチリザルトは2026年5月7日以降、HowToは2023年9月以降Google検索に表示されず、GoogleはAI Overview(AIによる概要)などの生成AI機能に構造化データは必要ないとしています。
「構造化データ」という言葉は難しく聞こえますが、実際にはHTMLファイルに数行のJSONコードを追加するだけです。本記事では、プログラミング初心者でも理解できるよう、構造化データの基礎から4種類のテンプレート、WordPress・Next.jsでの実装方法まで、ステップバイステップで解説します。
構造化データの基礎知識
そもそも構造化データとは?
Webページには2種類の情報があります。
| 情報の種類 | 対象読者 | 例 |
|---|---|---|
| HTMLコンテンツ | 人間が読む | 見出し・本文・画像など |
| 構造化データ | 機械(Google・AI)が読む | 「これはFAQページです」「著者は〇〇です」 |
Googleのクローラーや生成AIは、Webページのテキストを「意味」まで完全に理解することが難しい場合があります。構造化データを追加することで、「このページが何を提供しているか」を機械語で直接伝えられるのです。
構造化データを実装するとどうなるか
| 実装するSchema | Google検索での変化 | AI検索での変化 |
|---|---|---|
| FAQPage | FAQのリッチリザルトは2026年5月7日以降表示されない | AIによる概要に載るための条件ではない(Googleの説明) |
| Article | 記事のタイトルや画像の表示に使われる | 引用率が上がるという公式の説明はない |
| LocalBusiness | ナレッジパネルにビジネスの詳細情報が出ることがある | 店舗情報を正確に伝える補助 |
| HowTo | HowToのリッチリザルトは2023年9月に終了 | AIによる概要に載るための条件ではない |
(出典:Google検索セントラルの更新履歴、Google検索セントラル ブログ、生成AI機能向けの最適化ガイド、いずれも2026年10月20日確認)
JSON-LDとは?なぜ推奨されるのか
構造化データの記述形式には3種類ありますが、Googleが最も推奨するのはJSON-LD形式です。
| 形式 | 特徴 | Google推奨 | 難易度 |
|---|---|---|---|
| JSON-LD | scriptタグ内に独立して記述 | 最推奨 | 低(既存HTMLに影響しない) |
| Microdata | HTMLタグの属性として記述 | 対応 | 中(既存HTMLの修正が必要) |
| RDFa | HTMLタグの属性として記述 | 対応 | 中〜高 |
JSON-LDが推奨される理由は、「既存のHTMLコードを変更せずに追加できる」からです。scriptタグを1つ追加するだけで実装できるため、CMSやフレームワークを問わず導入しやすいです。
JSON-LDの基本構造
共通の書き方
すべてのJSON-LDスキーマに共通する基本構造は以下の通りです。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "スキーマのタイプ名",
"プロパティ名": "値"
}
</script>
| 要素 | 意味 | 必須 |
|---|---|---|
@context | スキーマの仕様書URL(新しく書くならhttps://schema.org。http://schema.orgも当面は広く理解される) | 必須 |
@type | ページの種類(FAQPage・Article等) | 必須 |
| 各プロパティ | ページの具体的な情報 | タイプによって必須・任意が異なる |
4種類のJSON-LDテンプレート
テンプレート1: FAQPage(本文のFAQと一致させて使う)
FAQページやFAQセクションに実装するスキーマです。FAQのリッチリザルトは2026年5月7日以降Google検索に表示されず、AI Overviewに載るための条件でもありません。本文のFAQを機械にも伝える補助として、本文と一致させて入れます(今ある記事から外す必要はありません)。
主なプロパティ:
| プロパティ | 説明 |
|---|---|
@type: "FAQPage" | FAQページであることを宣言 |
mainEntity | FAQ項目の配列 |
@type: "Question" | 質問項目であることを宣言 |
name | 質問文 |
acceptedAnswer | 回答のオブジェクト |
text | 回答文 |
FAQPageのテンプレートコード:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "質問文1をここに記入",
"acceptedAnswer": {
"@type": "Answer",
"text": "回答文1をここに記入。100〜200文字程度が理想的です。"
}
},
{
"@type": "Question",
"name": "質問文2をここに記入",
"acceptedAnswer": {
"@type": "Answer",
"text": "回答文2をここに記入。"
}
}
]
}
</script>
注意点: FAQ項目は最低2問(推奨3〜10問)。同じページに複数のFAQPageスキーマを実装しないこと。
テンプレート2: Article(ブログ・コンテンツページ)
ブログ記事・コラム・ニュース記事に実装するスキーマです。著者情報・公開日・更新日をGoogleに正確に伝えられます。Googleの文書では、Articleに必須のプロパティはなく、下の表の推奨プロパティを、ページに当てはまる範囲でできるだけ設定するよう案内されています(Google検索セントラル「記事(Article)の構造化データ」、2026年10月20日確認)。
Articleの主要プロパティ:
| プロパティ | 説明 | Googleの扱い |
|---|---|---|
@type | "Article"または"BlogPosting" | 種類の指定 |
headline | 記事タイトル(簡潔に。長いと一部の端末で切り捨てられる) | 推奨 |
image | アイキャッチ画像URL | 推奨 |
author | 著者情報(name・url) | 推奨 |
publisher | 発行者情報 | 推奨の表にはない(任意) |
datePublished | 公開日(ISO 8601形式) | 推奨 |
dateModified | 更新日(ISO 8601形式) | 推奨 |
ArticleのテンプレートコードとISO 8601形式(YYYY-MM-DD):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "記事タイトルをここに入力(簡潔に)",
"image": "https://example.com/images/article-image.jpg",
"author": {
"@type": "Person",
"name": "著者名",
"url": "https://example.com/author/"
},
"publisher": {
"@type": "Organization",
"name": "会社名・メディア名",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2026-04-04",
"dateModified": "2026-04-04",
"description": "記事の説明文を160文字以内で記入"
}
</script>
テンプレート3: LocalBusiness(店舗・地域ビジネス)
実店舗を持つビジネス(飲食店・美容室・士業・クリニック等)で優先して検討したいスキーマです。店舗名・住所・営業時間などを、検索エンジンやAIが正確に読み取る助けになります。
LocalBusinessの主要プロパティ:
| プロパティ | 説明 | 必須 |
|---|---|---|
@type | ビジネスタイプ("Restaurant"、"BeautySalon"等) | 必須 |
name | ビジネス名 | 必須 |
address | 住所(PostalAddressオブジェクト) | 必須 |
telephone | 電話番号(国際形式推奨) | 推奨 |
openingHours | 営業時間(Mo-Su HH:MM-HH:MM形式。Googleの文書では openingHoursSpecification を推奨) | 推奨 |
url | 公式サイトURL | 推奨 |
image | 店舗写真URL | 任意 |
geo | 緯度・経度 | 推奨 |
LocalBusinessのテンプレートコード:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "店舗名",
"image": "https://example.com/shop-image.jpg",
"url": "https://example.com/",
"telephone": "+81-3-1234-5678",
"address": {
"@type": "PostalAddress",
"streetAddress": "〇〇町1-2-3",
"addressLocality": "渋谷区",
"addressRegion": "東京都",
"postalCode": "150-0001",
"addressCountry": "JP"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 35.6580,
"longitude": 139.7016
},
"openingHours": ["Mo-Fr 11:00-22:00", "Sa-Su 10:00-23:00"],
"priceRange": "¥¥"
}
</script>
@typeの主なビジネスタイプ一覧:
| ビジネスタイプ | @type値 |
|---|---|
| 飲食店・レストラン | Restaurant |
| カフェ | CafeOrCoffeeShop |
| 美容院・理容院 | BeautySalon / HairSalon |
| 歯科医院 | Dentist |
| 整体・カイロプラクティック | MedicalBusiness |
| 弁護士・法律事務所 | LegalService |
| 会計士・税理士 | AccountingService |
| 一般会社・事務所 | LocalBusiness |
テンプレート4: HowTo(手順・ハウツーコンテンツ)
手順を説明するハウツー記事に実装するスキーマです。HowToのリッチリザルトは2023年9月に終了しており、Google検索でステップリストは表示されません。AI検索での引用率が上がるという公式の説明もないため、入れる場合は本文の手順と一致させる補助として扱います。
HowToの主要プロパティ:
| プロパティ | 説明 | 必須 |
|---|---|---|
@type: "HowTo" | ハウツーコンテンツを宣言 | 必須 |
name | ハウツーのタイトル | 必須 |
step | 手順の配列 | 必須 |
HowToStep.name | 各ステップの名前 | 必須 |
HowToStep.text | 各ステップの説明 | 必須 |
totalTime | 所要時間(ISO 8601 duration形式) | 推奨 |
HowToのテンプレートコード:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "〇〇の方法(タイトル)",
"description": "このハウツーの概要説明",
"totalTime": "PT30M",
"step": [
{
"@type": "HowToStep",
"name": "ステップ1のタイトル",
"text": "ステップ1の詳細な説明をここに記入。"
},
{
"@type": "HowToStep",
"name": "ステップ2のタイトル",
"text": "ステップ2の詳細な説明をここに記入。"
},
{
"@type": "HowToStep",
"name": "ステップ3のタイトル",
"text": "ステップ3の詳細な説明をここに記入。"
}
]
}
</script>
WordPressでの実装方法
プラグインを使った実装(推奨)
プログラミング知識がない場合は、プラグインを使うのが最も簡単です。
| プラグイン名 | 対応スキーマ | 料金 | おすすめ度 |
|---|---|---|---|
| Yoast SEO(Premium) | Article・FAQ・HowTo等 | 有料(料金は公式サイトで確認) | ★★★★★ |
| Rank Math(Pro) | 28種類以上のスキーマ | 有料(料金は公式サイトで確認) | ★★★★★ |
| Schema Pro | 20種類以上 | 有料(料金は公式サイトで確認) | ★★★★☆ |
| WP Schema Markup Light | 基本的なスキーマのみ | 無料 | ★★★☆☆ |
Yoast SEOでFAQPageを実装する手順:
| ステップ | 操作 |
|---|---|
| 1 | 記事編集画面でYoast SEOブロックを追加 |
| 2 | 「FAQ」ブロックを選択 |
| 3 | 質問文と回答文を入力 |
| 4 | 保存・公開するとJSON-LDが自動生成される |
手動でコードを追加する方法
テーマのfunctions.phpまたはheadタグ内に直接コードを追加する方法です。
functions.phpに追加する場合(ページ別に切り替え):
function add_schema_markup() {
if ( is_page('faq') ) {
echo '<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [...]
}
</script>';
}
}
add_action( 'wp_head', 'add_schema_markup' );
Next.jsでの実装方法
App RouterでのJSON-LD実装
Next.js 14(App Router)では、各ページのレイアウトまたはページコンポーネント内でJSON-LDを実装します。
ページコンポーネントへの実装例(page.tsx):
export default function FaqPage() {
const faqSchema = {
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "質問文1",
"acceptedAnswer": {
"@type": "Answer",
"text": "回答文1"
}
}
]
};
// < を \u003c に置き換え、文字列に </script> が入っても script 要素が途中で閉じないようにする(Next.js の JSON-LD の手引き)
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqSchema).replace(/</g, '\\u003c') }}
/>
{/* ページのコンテンツ */}
</>
);
}
MDXブログ記事でのArticleスキーマ実装(layout.tsx):
export default function BlogLayout({ children, params }) {
const articleSchema = {
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "記事タイトル",
"datePublished": "2026-04-04",
"author": {
"@type": "Organization",
"name": "会社名"
}
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(articleSchema).replace(/</g, '\\u003c') }}
/>
<article>{children}</article>
</>
);
}
実装後の確認・テスト方法
Googleのリッチリザルトテストの使い方
| ステップ | 操作 | URL |
|---|---|---|
| 1 | ブラウザで「リッチリザルトテスト」にアクセス | search.google.com/test/rich-results |
| 2 | テストしたいURLを入力してテスト実行 | — |
| 3 | エラー・警告の確認 | — |
| 4 | 「有効なリザルト」が表示されれば実装成功 | — |
リッチリザルトテストで確かめられるのは、Googleのリッチリザルトの対象の種類(記事・パンくずリスト・ローカルビジネス・商品など)です。FAQPage・HowToはリッチリザルトが終わっているため、Schema.orgの「Schema Markup Validator」で構文を確かめます。
よくあるエラーと修正方法
| エラーメッセージ | 原因 | 修正方法 |
|---|---|---|
| 必須プロパティ「address」がありません | LocalBusinessにaddressなし | address(PostalAddress)を追加 |
| 値の型が正しくありません(日付) | 日付のフォーマットが誤り | YYYY-MM-DD形式に修正 |
| 画像のURL形式が無効 | 相対パスや綴りの誤ったURLを指定 | 「https://」で始まる正しい絶対URLに修正 |
| @contextが見つかりません | @contextの記述漏れ | "https://schema.org"を追加 |
構造化データ実装の優先順位
どのページに何のスキーマを実装すべきか、優先順位をまとめます。
| 優先度 | スキーマタイプ | 実装すべきページ | 期待効果 |
|---|---|---|---|
| 最優先 | LocalBusiness | トップページ・会社概要・店舗情報ページ | ローカル検索・Googleマップ対策 |
| 高 | Article/BlogPosting | ブログ記事全ページ | 著者・日付を正確に伝える(リッチリザルトの対象) |
| 中 | BreadcrumbList | 全ページ(パンくずリスト) | サイト構造の明確化(リッチリザルトの対象) |
| 中 | Organization | トップページ | 企業情報のナレッジパネル |
| 補助 | FAQPage | FAQ集・サービスページ・ブログ記事(FAQセクション) | 本文のFAQを機械に伝える(リッチリザルトは2026年5月に終了) |
| 補助 | HowTo | 手順説明・ガイド系コンテンツ | 本文の手順を機械に伝える(リッチリザルトは2023年9月に終了) |
まとめ
構造化データ(JSON-LD)は、「コンテンツを書く労力に比べて実装コストが低く、リッチリザルトの対象になる種類では検索結果の見た目を整えられる」 という特徴があります。
今日から実施できる3ステップ:
| ステップ | 内容 | 目安時間 |
|---|---|---|
| 1 | トップページにLocalBusinessスキーマを追加 | 30分 |
| 2 | ブログ記事にArticle(BlogPosting)スキーマを追加 | 30分 |
| 3 | Googleリッチリザルトテストでエラーがないか確認 | 10分 |
まずこの3ステップを実施し、その後BreadcrumbList・Organizationなどを順次追加していくことを推奨します。
関連記事
AIO対策・構造化データ実装をプロに依頼したいですか?
構造化データの設計・実装から、AI検索で自社の情報が正しく扱われるためのコンテンツ設計まで、AIO対策をまとめて支援。月額のスタンダード300,000円・プレミアム500,000円(税抜・別途初期費用150,000円〜・最低6ヶ月、以降1ヶ月単位で自動更新)で、どちらも初月にAIO診断(AI検索での自社の扱われ方の調査・競合比較・改善提案レポート)を行います。AIO対策サービスの詳細はこちら →