FAQ構造化データ(FAQPage)の実装ガイド|JSON-LDコード付きで徹底解説

FAQPage構造化データとは

FAQPage構造化データは、ページ内のよくある質問(FAQ)セクションを検索エンジンやAIシステムに正確に伝えるためのSchema.orgマークアップです。正しく実装すると、Google検索結果にFAQリッチリザルトとして質問と回答が直接表示される可能性があります。

従来のSEOだけでなく、AI検索エンジン(Google AI Overview、ChatGPT、Perplexityなど)にとっても、構造化されたQ&Aデータは解析・引用・参照しやすい形式です。FAQPage構造化データは、SEOとGEO/AIOの両方に効果がある、費用対効果の高い施策といえます。

FAQPage構造化データの最大のメリットは、検索エンジンとAIシステムの両方に対して「このページにはこういうQ&Aがある」と明確に伝えられることです。通常のテキストだけでは、機械がQ&Aのペアを正確に識別するのは困難ですが、構造化データを使えば確実に伝達できます。

FAQリッチリザルトの表示条件

Googleは以下の条件を満たすFAQPage構造化データをリッチリザルトとして表示する可能性があります。

  • ページの内容がFAQ形式(質問と回答のペア)であること
  • 質問と回答がページ上に実際に表示されていること(タブやアコーディオンの中にデフォルトで隠されているのはNG)
  • 1つの質問に対して1つの回答が対応していること
  • 広告やプロモーション目的のコンテンツでないこと

重要: 2023年8月以降、GoogleはFAQリッチリザルトの表示を大幅に制限しました。政府機関や医療機関のサイトでは引き続き表示されますが、一般サイトでは表示頻度が大幅に下がっています。ただし、構造化データ自体はBing、AI検索エンジン、音声アシスタントで引き続き活用されるため、実装する価値は十分にあります。

Googleが表示を制限した背景には、FAQリッチリザルトを悪用して検索結果での占有面積を不当に広げるサイトが増えたことがあります。しかし、構造化データ自体が無効になったわけではなく、Googleの内部的なコンテンツ理解には引き続き活用されています。

JSON-LDによるFAQPage実装コード

基本的な実装例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "SEOとは何ですか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SEO(Search Engine Optimization)とは、検索エンジンの検索結果でWebサイトをより上位に表示させるための施策の総称です。キーワード最適化、コンテンツの質の向上、技術的な改善などが含まれます。"
      }
    },
    {
      "@type": "Question",
      "name": "GEOとは何ですか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "GEO(Generative Engine Optimization)とは、AIによる検索結果や回答生成で自サイトのコンテンツが引用・参照されるよう最適化する施策です。構造化データの実装やE-E-A-Tの強化、明確な事実ベースのコンテンツが有効な戦略です。"
      }
    }
  ]
}
</script>

回答にHTMLを含む例

回答文にリンクや強調表示を含めたい場合、textプロパティ内でHTMLを使用できます。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "構造化データの検証方法は?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Googleの<a href='https://search.google.com/test/rich-results'>リッチリザルトテスト</a>で検証できます。URLを入力するかHTMLコードを貼り付けて、<strong>FAQPage</strong>が正しく認識されるか確認してください。"
      }
    }
  ]
}
</script>

プロパティの詳細

プロパティ役割必須
@type: "FAQPage"ページ全体がFAQであることを宣言はい
mainEntityQuestionオブジェクトの配列はい
@type: "Question"各質問を定義はい
name質問文のテキストはい
acceptedAnswer回答オブジェクトはい
@type: "Answer"回答であることを宣言はい
text回答文のテキスト(HTML使用可)はい

Next.js / Reactでの実装方法

Next.jsのApp RouterでFAQ構造化データを実装する例です。

export default function FaqPage() {
  const faqs = [
    {
      question: "SEOスコアはどのように計算されますか?",
      answer: "15項目の技術的SEO要素を分析し、各項目を配点に応じて採点します。"
    },
    {
      question: "無料で利用できますか?",
      answer: "はい、すべての機能を無料でご利用いただけます。"
    }
  ];

  const faqJsonLd = {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    mainEntity: faqs.map((faq) => ({
      "@type": "Question",
      name: faq.question,
      acceptedAnswer: {
        "@type": "Answer",
        text: faq.answer,
      },
    })),
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(faqJsonLd) }}
      />
      {/* FAQ表示コンポーネント */}
    </>
  );
}

重要なルール: 構造化データの内容と、ページ上に実際に表示されるQ&Aテキストは必ず一致させてください。JSON-LDに含まれているがページ上に表示されていない質問がある場合、Googleのスパムポリシーに抵触する可能性があります。

この「一致ルール」は非常に重要です。FAQの質問と回答のデータを1か所で管理し、構造化データの出力とページ上の表示の両方に同じデータソースを使う設計にすると、不一致を防ぎやすくなります。上記のコード例では、faqs配列がその役割を果たしています。

WordPressでの実装方法

WordPressサイトでは、プラグインを使う方法とテーマに直接記述する方法があります。

プラグインを使う場合

  • Yoast SEO:FAQ構造化データブロックを提供。エディタ上でQ&Aを入力するだけで自動的にJSON-LDが出力される
  • Rank Math:FAQ Schema機能を内蔵。専用のFAQブロックでGUI操作による設定が可能
  • Schema Pro:GUI操作でFAQマークアップを柔軟に設定可能

プラグインを使う場合のメリットは、コードを書かなくてもFAQ構造化データを実装できることです。ただし、プラグインが生成するJSON-LDが正しいかどうかは、リッチリザルトテストで必ず確認してください。

テーマに直接記述する場合

functions.phpwp_headアクションにJSON-LDを出力するコードを追加するか、テンプレートファイルに直接<script>タグを配置します。プラグインに依存したくない場合や、より細かい制御が必要な場合に有効です。

テーマに直接記述する場合は、FAQの内容を更新した際に構造化データも忘れずに更新する必要があります。カスタムフィールド(ACFなど)を使ってFAQデータを管理し、テンプレート側で動的にJSON-LDを生成する方法がおすすめです。

よくあるエラーと対処法

1. mainEntityが配列でない

// NG: オブジェクトが直接入っている
"mainEntity": { "@type": "Question", ... }

// OK: 質問が1つでも配列にする
"mainEntity": [{ "@type": "Question", ... }]

質問が1つだけの場合でも、mainEntityは必ず配列として記述します。オブジェクトを直接渡すと、バリデーションエラーになります。

2. acceptedAnswertextがない

// NG: textプロパティが欠落
"acceptedAnswer": { "@type": "Answer" }

// OK: text を必ず含める
"acceptedAnswer": { "@type": "Answer", "text": "回答内容をここに記述します。" }

textプロパティは必須です。空のacceptedAnswerオブジェクトは無効な構造化データとして扱われます。

3. ページ上の表示と構造化データの内容が不一致

構造化データに記述したすべてのQ&Aペアは、ページ上にも対応する要素が表示されている必要があります。ページに表示されていない質問を構造化データに含めるのは、構造化データスパムとみなされ、手動対策(ペナルティ)の対象になる可能性があります。

4. @context@typeの記述漏れ

意外と多いのが、@contexthttps://schema.org)や@typeの記述を忘れるケースです。これらが欠けていると、構造化データとして認識されません。コピー&ペーストで実装する際に、冒頭部分を削ってしまうミスに注意してください。

5. JSONの構文エラー

カンマの過不足、引用符の閉じ忘れ、括弧の対応ミスなど、JSONの構文エラーがあると構造化データ全体が無効になります。実装後は必ずバリデーションツールで構文チェックを行いましょう。

実装後の検証方法

実装した構造化データは、以下のツールで検証できます。

  1. Google リッチリザルトテスト — FAQリッチリザルトの表示可否を確認。URLを入力するかコードを貼り付けてテストできる
  2. Schema.org Validator — JSON-LDの文法エラーをチェック。構文上の問題を事前に発見できる
  3. Google Search Console — 「拡張」セクションでFAQの検出状況を確認。エラーや警告があればここに表示される

検証の際は、以下の点を確認してください。

  • エラーや警告が出ていないこと
  • 検出されたQ&Aの数が、実際にページに表示されているQ&Aの数と一致していること
  • @typeが正しくFAQPageになっていること(QAPageではない)

また、IndexReadyの分析ツールでも構造化データの有無と妥当性をチェックできます。URLを入力するだけで、FAQPageを含む構造化データの実装状況が確認可能です。

AI検索時代のFAQ構造化データの価値

GoogleがFAQリッチリザルトの表示を制限した2023年以降も、FAQ構造化データの実装には以下の大きな価値があります。

  • AI Overview:質問と回答が明確に構造化されていると、AI Overviewの回答ソースとして引用されやすくなる。Q&A形式はAIが回答を生成する際に最も利用しやすいフォーマットのひとつ
  • Bing検索:BingはFAQリッチリザルトを引き続き表示しており、Google以外の検索エンジンでの可視性を高められる
  • ChatGPT / Perplexity:AIシステムは構造化データを参考にコンテンツの内容と構造を理解する。明確なQ&Aペアは引用されやすい
  • 音声検索:Q&A形式は音声アシスタント(Siri、Googleアシスタント、Alexa)の回答に最適。質問と回答が明確に対応していることで、音声での応答に使われやすくなる

FAQ構造化データは単なるSEO施策にとどまらず、GEO/AIO戦略の基盤となる要素です。Googleのリッチリザルト表示が減ったからといって構造化データを削除するのは、長期的に見て大きな損失です。

AI検索エンジンが情報を抽出する際、構造化データはコンテンツの「目次」のような役割を果たします。AIがページの内容を効率的に把握し、適切な引用を行うためには、この「目次」が正確であることが重要です。

FAQ構造化データのベストプラクティス

FAQ構造化データの効果を最大化するために、以下のベストプラクティスを意識してください。

  • 回答は簡潔かつ具体的に: 長すぎる回答はAIが抽出しにくくなります。200〜300文字程度の簡潔な回答が理想的です
  • 質問はユーザーの検索意図に合わせる: 実際にユーザーが検索しそうな疑問文を使いましょう。Google Search ConsoleやKeyword Plannerで実際の検索クエリを調べるのが有効です
  • 回答に具体的な数値やデータを含める: 「〇〇は△△です」だけでなく、「〇〇は△△です(2026年時点で××%)」のように数値を含めると、AI引用の確率が上がります
  • ArticleスキーマとFAQPageスキーマを併用する: 記事ページの末尾にFAQセクションを設ける場合、ArticleとFAQPageの両方のスキーマを1ページに実装できます

よくある質問

FAQPageとQAPageの違いは何ですか?

FAQPageは「サイト運営者が自ら用意した質問と回答」のマークアップです。ヘルプセンターやサービスのFAQページなどが該当します。一方、QAPageは「ユーザーが投稿した質問に対して複数のユーザーが回答する」形式(Yahoo!知恵袋やStack Overflowのような)に使います。自社サイトのFAQセクションにはFAQPageを使用してください。

1ページに何個まで質問を入れられますか?

技術的な上限はありませんが、Googleは過剰なFAQを好みません。実用的には5〜10個程度が推奨です。それ以上の質問がある場合は、カテゴリ別にページを分けることを検討してください。質問数を絞ることで、各回答の質も高められます。

FAQリッチリザルトが表示されないのはなぜですか?

2023年8月以降、Googleは一般サイトでのFAQリッチリザルト表示を大幅に制限しました。構造化データが正しくても、リッチリザルトが表示されないのはGoogleの方針による制限であり、実装のエラーではありません。構造化データを取り除く必要はありません。BingやAI検索エンジンでは引き続き活用されるため、実装を維持してください。

回答にHTMLリンクを含めても大丈夫ですか?

はい、textプロパティ内で<a>タグや<strong>タグなど基本的なHTMLを使用できます。関連ページへのリンクを含めることは問題ありませんが、過度な広告リンクや宣伝目的のリンクを詰め込むとスパムとみなされる可能性があるため、注意が必要です。

FAQ構造化データはブログ記事にも使えますか?

はい、ブログ記事にも使えます。記事の末尾に「よくある質問」セクションを設けてFAQPage構造化データを実装するのは、多くのサイトで採用されている効果的なパターンです。記事本文の内容を補完するQ&Aを3〜5個程度追加することで、記事の情報量が増え、AI引用の可能性も高まります。ただし、Articleスキーマも同時に実装し、ページが記事であることをGoogleに伝えることも忘れないでください。

あなたのサイトもチェックしてみませんか?

URLを入力するだけで、SEO・GEO対策の状況を無料で診断できます。

無料で採点する