FAQPage JSON-LD 必须严格符合规范:@type 为 "FAQPage",嵌入 script 标签,mainEntity 为 Question 数组,每项含 acceptedAnswer 对象,text 为纯文本且 UTF-8 编码,单页仅一个脚本块,长度≤10 条。

FAQPage JSON-LD 必须用 @type 声明类型,不是随便加个 script 就生效
Google 仅识别符合 FAQPage 类型规范的 JSON-LD,且必须嵌入在 <script type="application/ld+json"> 中。常见错误是漏写 @type 或拼错为 "FAQ"、"FAQPageSchema" 等非标准值——这会导致完全不触发富摘要。
-
@type必须严格为"FAQPage"(首字母大写,无空格,无前缀) - 外层对象不能套在
mainEntity或articleBody里;必须是顶层直接结构 - 整个 JSON-LD 必须是合法 JSON:引号用双引号,末尾不能多逗号,
@context必须是"https://schema.org" - 页面 URL 必须与当前页面一致——
url字段若填错或留空,Google 可能拒绝索引该 FAQ 结构
每个 mainEntity 必须是 Question 类型,且含 acceptedAnswer
FAQ 列表里的每一项都得是一个独立 Question 对象,且必须带 acceptedAnswer 字段。只写 name 和 text 不够,Google 明确要求答案字段存在且非空。
-
acceptedAnswer是必填对象,不能是字符串;内部必须有@type: "Answer"和text字段 -
text内容需简洁——超过 500 字可能被截断,且含 HTML 标签(如<div>)会被忽略或报解析错误 - 避免在
text中使用、<br>等格式控制符;纯文本最稳妥 - 问题
name应为完整问句(如"如何重置我的密码?"),不能是关键词堆砌
多个 FAQ 条目要扁平放在 mainEntity 数组里,别嵌套或拆分脚本块
一个页面只允许一个 FAQPage JSON-LD 脚本块,所有问题必须作为数组元素放在 mainEntity 下。有人为“便于维护”把每个 FAQ 单独写一个 <script>,结果 Google 只取第一个,其余全丢弃。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
-
mainEntity必须是数组(哪怕只有一个 FAQ),不能是单个对象 - 数组长度建议 ≤ 10 条——超过后部分条目可能不展示,且加载过长 JSON-LD 会影响 LCP
- 不要用 JavaScript 动态注入 JSON-LD;Google 抓取时只读静态 HTML 中的
<script> - 测试时用 URL 检查工具 查看「富媒体搜索结果」卡片是否出现,而非只看结构化数据测试工具里的解析成功
中文 FAQ 需注意编码和标点,否则 text 字段易被截断或乱码
JSON-LD 的 text 字段若含中文,必须确保 HTML 页面声明了 UTF-8 编码(<meta charset="utf-8">),且 JSON 字符串本身未被服务器或 CMS 错误转义。
立即学习“前端免费学习笔记(深入)”;
- 常见陷阱:
"text": "为什么登录失败?"被转成"text": "为什么登录失败?"——?是问号实体,Google 不识别,导致答案为空 - CMS 如 WordPress、Hexo 若开启自动转义,需关闭 JSON-LD 所在区块的过滤,或改用
raw标签包裹 - 避免使用全角标点替代英文标点(如用“?”代替 "?"),虽然显示正常,但某些旧版解析器会卡在非 ASCII 符号上
- 发布后至少等 24–48 小时再查效果;Google 不实时刷新富摘要,且需页面有真实用户点击行为才会逐步放量展示


















