ぱんだツールズぱんだツールズ

技術背景

FAQPageスキーマの書き方 — Googleのよくある質問リッチリザルトを表示する

約6分

Google検索でFAQが折りたたみ形式で展開表示されると、クリック前に答えが見える—— 検索結果ページのリアルエステートを広げる最も手軽な方法がFAQPageスキーマです。 この記事では、FAQPageスキーマ(JSON-LD形式)の正しい書き方と、 Googleのよくある質問リッチリザルトが表示される条件・注意点を実例付きで解説します。

FAQPageスキーマとは

FAQPageスキーマとは、ウェブページのFAQセクションの内容をGoogleが機械的に読み取れる形式で宣言するための構造化データです。 Schema.org(Googleなどが共同策定したデータ語彙の標準)で定義されており、 JSON-LD形式で記述してHTMLの<head>タグ内に埋め込みます。

Googleがこの構造化データを認識すると、検索結果ページで質問と回答のリストが 折りたたみ式で表示される「よくある質問リッチリザルト」が出ることがあります。 通常の青リンク1行に比べて表示領域が2〜5倍に広がり、クリック率(CTR)の向上が期待できます。

ただし、HTMLのFAQセクションが本文に実際に存在することが前提条件です。 JSON-LDだけを埋め込んで本文にFAQがない場合、Googleはリッチリザルトを表示しません。

リッチリザルトが表示される条件

Googleの公式ドキュメントに基づくと、よくある質問リッチリザルトが表示されるには次の条件を満たす必要があります。

  • 本文にFAQが存在すること—— HTMLページ上に質問と回答のテキストが実際に記述されていること。 JSON-LDの内容とHTMLのテキストが一致していることが重要です。
  • FAQ項目がGoogleポリシーに準拠していること—— 広告・プロモーションのみを目的としたFAQや、 不適切なコンテンツを含む場合は表示されません。
  • 回答が適切な長さであること—— 極端に短い回答(数語のみ)や、1000文字を超えるような長すぎる回答は 表示されないことがあります。 目安として1回答あたり50〜300文字が適切です。
  • 1ページに1つのFAQPageスキーマのみ設置すること—— 複数設置した場合は無効と判定されることがあります。

スキーマを正しく設定してもリッチリザルトが必ず表示されるとは限りません。 Googleは表示するかどうかを最終的に判断する裁量を持っており、 ページの品質評価や競合状況によって結果は異なります。

FAQPageスキーマのJSON-LD実例

次のコードは、2つのFAQ項目を持つFAQPageスキーマの最小構成例です。

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "FAQPageスキーマとは何ですか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "FAQPageスキーマとは、ウェブページのFAQセクションの内容を
Googleが機械的に読み取れる形式で記述するための構造化データです。"
      }
    },
    {
      "@type": "Question",
      "name": "設定すれば必ずリッチリザルトが表示されますか?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "いいえ、必ずしも表示されるわけではありません。ページ品質や
Googleの判断によって表示されない場合があります。"
      }
    }
  ]
}

各キーの役割を確認しておきます。@contextは スキーマの語彙として schema.org を使うことを宣言します。@type: "FAQPage"で このスキーマがFAQページであることを示し、mainEntityに Q&Aのリストを配列として格納します。 各質問は@type: "Question"、 回答はacceptedAnswerの中に@type: "Answer"で記述します。

FAQPageスキーマの設定手順

手順は大きく4ステップです。JSON-LD構造化データ生成ツールを使えば、コードを手書きせずに生成できます。

  1. FAQセクションをHTMLに作成する—— ページ本文に質問と回答のテキストを記述します。 HTMLにFAQが存在しない状態でJSON-LDだけ埋め込んでもリッチリザルトには反映されません。
  2. JSON-LDを生成する——JSON-LD構造化データ生成ツールでFAQPageを選択し、質問と回答を入力して「JSON-LDを生成する」をクリックします。 生成されたコードはJSON整形/検証ツールでバリデーションしてから使うと安心です。
  3. scriptタグをheadに貼り付ける—— 生成された<script type="application/ld+json">タグをHTMLの<head>内にコピーして貼り付けます。 bodyタグ内への配置でも技術的には動作しますが、headへの配置が一般的です。
  4. Googleリッチリザルトテストで検証する——GoogleリッチリザルトテストにURLまたはHTMLコードを入力し、「FAQPage」が検出されていれば設置完了です。 エラーや警告が表示された場合は内容に従って修正します。

よくある落とし穴

FAQPageスキーマを設定してもリッチリザルトが表示されない原因の多くは、 次のいくつかのパターンに当てはまります。

落とし穴症状・原因対処法
HTMLにFAQが存在しないJSON-LDだけ埋め込み、本文にQ&Aテキストがないページ本文にFAQセクションを追加する
回答が短すぎる「はい」「違います」など一言回答50文字以上の具体的な説明を加える
1ページに複数のFAQPageスキーマコンポーネントを複数配置して重複1つのFAQPageにmainEntityをまとめる
JSON-LDの構文エラーカンマ抜け・引用符のズレなどJSON整形ツールでバリデーションする
インデックスが古いスキーマ追加後にGoogleが再クロールしていないSearch ConsoleのURL検査からインデックス登録をリクエストする

Next.jsでの実装例

Next.js(App Router)では、generateMetadataと別に、layout.tsxまたは各ページのpage.tsx内で次のようにJSON-LDをscriptタグとして出力します。

// app/tools/[slug]/page.tsx の例
const faqSchema = {
  '@context': 'https://schema.org',
  '@type': 'FAQPage',
  mainEntity: faqItems.map((item) => ({
    '@type': 'Question',
    name: item.q,
    acceptedAnswer: {
      '@type': 'Answer',
      text: item.a,
    },
  })),
}

export default function ToolPage() {
  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(faqSchema) }}
      />
      {/* ページ本文 */}
    </>
  )
}

faqItemsの配列を単一ソースとしてHTMLのFAQセクションとJSON-LDの両方に使うと、 内容のズレが起きにくくなります。 ぱんだツールズでもこのパターンを採用しています。

まとめ

  • FAQPageスキーマはQ&Aを構造化データとしてGoogleに宣言し、リッチリザルト表示を狙う仕組み
  • JSON-LD形式で記述し、HTMLの<head>内のscriptタグに埋め込む
  • ページ本文にFAQセクションが存在しない場合、リッチリザルトには反映されない
  • 1ページに設置するFAQPageスキーマは1つのみ。複数配置すると無効になる
  • 回答は50〜300文字程度が目安。極端に短い回答は避ける
  • 設定後はGoogleリッチリザルトテストで検証し、Search Consoleで再クロールをリクエストする
  • JSON-LD構造化データ生成ツールを使えばFAQPageスキーマをコード不要で生成できる

よくある質問

FAQPageスキーマとは何ですか?

FAQPageスキーマとは、ウェブページ上のよくある質問(FAQ)セクションの内容をGoogleが機械的に読み取れる形式で記述するための構造化データです。JSON-LD形式で記述し、HTMLの<head>タグ内に埋め込みます。Googleがこの構造化データを認識すると、検索結果ページでFAQの質問と回答が折りたたみ形式で表示される「リッチリザルト」が出ることがあります。ページ本体がFAQセクションを持っていることが前提条件です。

FAQPageスキーマを設定すれば必ずリッチリザルトが表示されますか?

いいえ、必ずしも表示されるわけではありません。Googleはスキーマが技術的に正しくても、以下の条件が揃わない場合はリッチリザルトを表示しないことがあります。①ページのコンテンツが低品質と判断された場合、②FAQ項目がページ本文に実際に存在しない場合、③Googleがそのページのインデックスをまだ作成していない場合、④モバイル検索では表示されないケースもある場合。スキーマの設定はリッチリザルト表示のための必要条件であって、十分条件ではありません。

FAQとAccordion(アコーディオン)UIの違いは何ですか?

FAQとAccordionはそれぞれ異なる概念です。FAQは「よくある質問」というコンテンツの種類を指します。Accordionは「クリックで開閉できるUI部品」を指します。AccordionでFAQを実装することはよくありますが、必須ではありません。FAQPageスキーマを設定する際に重要なのは「FAQが本文に存在する」ことであり、UIがAccordionかどうかは問いません。ただし、Google Search ConsoleのリッチリザルトテストではHTMLに質問と回答のテキストが実際に存在するかどうかを確認されます。

FAQ回答の文字数に制限はありますか?

Googleの公式ガイドラインには「回答が長すぎる場合、リッチリザルトに表示されない可能性がある」という記載があります。一般的には1回答あたり300文字程度が目安とされています。また、回答が極端に短い(10文字未満など)場合も品質評価に影響することがあります。リッチリザルトで表示されるのは最初の数問のみの場合もあるため、最も重要な質問を先頭に配置することを推奨します。

複数のページに同じFAQを置いてよいですか?

技術的には問題ありませんが、推奨されません。Googleは各ページに固有のコンテンツがあることを好みます。全ページに同一のFAQを置くと、内容の薄さ(thin content)と判断されてリッチリザルトが表示されにくくなったり、ページの評価が下がったりすることがあります。FAQ項目はそのページのテーマに合わせた内容にするのが最善です。サイト全体の共通FAQ(プライバシー・返金ポリシーなど)は別途まとめページを作るとよいでしょう。

FAQPageスキーマを設定してから反映されるまでどれくらいかかりますか?

Googleがページを再クロールしてインデックスを更新するまでの期間に依存します。新規ページで流入が少ない場合は数日〜数週間かかることがあります。すでにインデックスされているページに追加した場合は、通常1〜7日程度でSearch Consoleの「リッチリザルト」レポートに変化が現れます。Google Search ConsoleのURL検査機能から「インデックス登録をリクエスト」を送ることで再クロールを促すことができます。

1つのページに複数のFAQPageスキーマを設置してよいですか?

いいえ、1ページに複数のFAQPageスキーマを設置してはいけません。Googleは1ページにつき1つのFAQPageスキーマのみを推奨しており、複数設置した場合は無効と判定されることがあります。複数のFAQセクションがある場合は、1つのFAQPageスキーマの中に全てのQ&Aをまとめて記述してください。mainEntityの配列に複数のQuestionオブジェクトを追加するだけで対応できます。

JSON-LDの生成はサーバーに送信されますか?

いいえ、ファイルやテキストはサーバーに送信されません。ぱんだツールズのJSON-LD構造化データ生成ツールはすべての処理をブラウザ内で完結させており、入力した質問・回答テキストは外部サーバーへ一切送信されません。機密情報を含むFAQを作成する場合でも安心してお使いいただけます。

この記事で紹介したツール