FAQPage JSON-LDの実装と検算:Astroの本文FAQと構造化データを照合する
結論
FAQPageは、ページにある質問と回答の対応を記述する型です。本稿ではCodeAgentのAstro実装を使い、frontmatterからJSON-LDを出力し、本文FAQと一致させる方法を示します。検索画面のFAQ表示やAIからの引用増加を約束するものではありません。
まず、何を実装するのか
Schema.orgのFAQPageでは、ページのmainEntityにQuestionを並べ、質問文をname、回答をacceptedAnswer.textへ入れます。下の例なら、質問は「入力したJSONは送信されますか?」、答えは「ブラウザー内で処理します。」です。これは説明用の架空のツールのFAQで、すべてのツールの通信仕様を表すものではありません。
{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "入力したJSONは送信されますか?", "acceptedAnswer": { "@type": "Answer", "text": "ブラウザー内で処理します。" } }]}質問だけあって答えがない、ページの説明と関係がない、画面では「送信する」と説明しているのにJSON-LDでは「送信しない」と書く、といった不一致は、構文が通っても残ります。まず人が読む本文で答えを完結させ、その同じ内容をマークアップします。
Googleの表示機能とAI引用を分ける
Googleの更新履歴では、2026年5月7日からFAQリッチリザルトが表示されなくなり、6月15日に関連ドキュメントを削除したと説明しています。古い「政府・医療の一部サイトなら表示される」という案内を、現在の表示対象の説明として使わないでください。
また、GoogleのAI機能の案内では、AI機能への掲載に特別な構造化データは不要としています。型を正しく記述できること、検索に掲載されること、AIに引用されることは別の確認です。本稿で確かめるのはHTMLの出力内容です。FAQPageを増やすことを検索成果の目標にせず、読者が詰まる操作や制約に答えるために使います。
CodeAgentのAstro実装
この記事のfaqは、MDXのfrontmatterに質問qと回答aの配列として保存しています。src/components/BaseHead.astroは次の形でJSON-LDに変換し、headへ出力します。型定義と日付などを省いた、変換部分の抜粋です。
const faqJsonLd = faq?.length ? { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faq.map(f => ({ '@type': 'Question', name: f.q, acceptedAnswer: { '@type': 'Answer', text: f.a }, })),} : null;{faqJsonLd && ( <script is:inline type="application/ld+json" set:html={JSON.stringify(faqJsonLd)} />)}ここでfaqから自動生成するのはJSON-LDだけです。PostLayout.astroは可視FAQを自動生成しておらず、この記事では末尾に質問と回答をMDXで記述しています。そのため、回答を変更したらfrontmatterと本文の両方を直す必要があります。二重管理を解消するなら、可視FAQも同じ配列から描画する部品へ移す方法がありますが、既存の本文と重複しないよう記事ごとに移行します。
生成HTMLで確認する順番
ソースを読むだけでは、配列の渡し忘れや、古い本文だけが残る問題を見落とします。この記事ではビルド後のdist/posts/faqpage-structured-data-aeo/index.htmlを対象に、次の検査を行えます。
npm run buildnode scripts/verify-faq-article.mjs検査はHTMLを解析し、FAQPageを持つJSON-LDを1件取得して、各Question.nameとacceptedAnswer.textが本文の「よくある質問」に同じ組で存在するかを照合します。サンプルコード内にFAQPageという文字があるだけでは合格にしません。実際のscript[type="application/ld+json"]をJSONとして読みます。
出力件数は3問です。1問だけ直してfrontmatterと本文がずれた場合や、JSON-LDを出力しなくなった場合は検査が失敗します。この検査が通っても、回答が現行仕様に合っているか、検索への掲載やAI引用が増えるかは別途確認が必要です。AEOチェッカーも、HTML上の技術項目を確認する補助として使ってください。
よくある質問
FAQPageを入れるとGoogleのFAQ表示が出ますか?
Google Search Centralの更新履歴では、FAQリッチリザルトは2026年5月7日から表示されなくなったと案内されています。Schema.orgの型として記述できることと、検索画面での表示機能は別です。
AI検索からの引用を増やせますか?
この記事では引用率を測定していません。GoogleはAI機能への掲載に特別な構造化データは不要と説明しています。FAQPageの追加による引用向上は保証できません。
このサイトでは本文FAQも自動生成していますか?
現状は自動生成していません。frontmatterのfaqからBaseHeadがJSON-LDを生成し、可視FAQはMDX本文に別に記述しています。両方を直し、生成HTMLで一致を確認します。
関連記事
関連して読む
-
aeo・ai-searchを続けて読む
· 参考リンク 3件AEOの効果測定:GA4でChatGPT・Geminiからの流入を確認する手順と参照元の分類スクリプト
GA4の「AI アシスタント」チャネルと参照元/メディアで、ChatGPT・Geminiなどからの来訪を確認する手順。公式ヘルプの判定ルール、通信しない自作の分類スクリプトとテスト11件、直接・(not set)と混ぜない集計、参照元が届かない経路などの限界をまとめます。
-
aeo・ai-searchを続けて読む
· 参考リンク 16件AIクローラーのUser-Agent一覧とrobots.txtの書き方【2026年9月版】
OpenAI・Anthropic・Perplexity・Google・Apple・Meta・Amazon・Common Crawl・BingのAIクローラーを、目的・robots.txtの扱い・IP範囲の公開有無とともに公式ページで一覧化。方針別の書き方とCloudflareでの制御も2026年9月14日に確認。
この記事の情報・検証メモ
- aeo
- json-ld
- structured-data
- faq
- ai-search
- 公開日
- 情報確認
- 参考リンク
- 3件
- 更新性
- 長く使える
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。