本文へスキップ

FAQPage JSON-LDの実装と検算:Astroの本文FAQと構造化データを照合する

SHAYOUWORLD 更新 約3分

結論

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を対象に、次の検査を行えます。

Terminal window
npm run build
node 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で一致を確認します。

関連記事

関連して読む

この記事の情報・検証メモ
Tags
  • aeo
  • json-ld
  • structured-data
  • faq
  • ai-search
公開日
情報確認
参考リンク
3件
更新性
長く使える
更新管理

仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。

Primary sources

一次情報・参考リンク

About the author
SHAYOUWORLD

日本の公共データAPIを使うMCPサーバーを作って公開し、ローカルLLMを自分のGPUで測った記録を、一次情報・検証ログ・失敗例とあわせて整理します。