FAQ页面必须使用<script type="application/ld+json">格式的JSON-LD结构化数据,Google仅稳定支持该格式;每个mainEntity对应一个问答对,问题用name、答案用acceptedAnswer.text(纯文本,需转义);须置于HTML源码顶部、服务端渲染,且通过Rich Results Test验证。

FAQ页面必须用script type="application/ld+json"结构化数据
搜索引擎(尤其是Google)只认JSON-LD格式的FAQ结构化数据,HTML标签本身不触发富文本展示。用<div>或<details>写问答内容只是视觉呈现,对搜索结果无影响。
关键点:
- 必须在页面
<head>或<body>顶部插入<script type="application/ld+json">块 - 每个
mainEntity对应一个问答对,name是问题,acceptedAnswer.text是答案(纯文本,不支持HTML标签) - 问题和答案长度建议控制在200字符以内,过长可能被截断或拒收
- 同一页面最多标记10组FAQ,超出部分不会被索引
常见错误:用itemscope或itemprop微数据替代JSON-LD
Schema.org微数据(如<div itemscope itemtype="https://schema.org/FAQPage">)理论上可行,但Google明确表示仅稳定支持JSON-LD格式的FAQ。实测中微数据几乎从不触发富文本展示。
典型翻车场景:
立即学习“前端免费学习笔记(深入)”;
- 把JSON-LD写成
text/javascript类型(必须是application/ld+json) - 答案字段用了
<p>或换行符——JSON-LD里得转义成\n或空格连接 - 问题里含问号以外的标点(如“?”,全角符号),导致解析失败
- 页面URL没被Google收录就急着提交结构化数据
验证和调试必须用Google Rich Results Test
别信浏览器开发者工具里的结构化数据预览,它常显示“有效”但实际不触发富文本。唯一可靠方式是用https://search.google.com/search/about/rich-results(Rich Results Test)实时抓取线上URL验证。
注意几个硬性门槛:
- 页面需有足够权威性(新站、低权重站即使代码正确也大概率不展示)
- FAQ区块必须在HTML源码中靠前(最好在首屏内),延迟加载的内容不被识别
- 同一域名下不同页面的FAQ不能重复——Google会去重,只选最相关的一个展示
- 若页面同时存在
HowTo和FAQ结构化数据,优先展示HowTo
动态生成FAQ时,JSON-LD必须随HTML一起输出
用React/Vue等框架时,不能靠客户端JS拼接并注入<script>标签——Googlebot不执行JS,只读取初始HTML响应。服务端渲染(SSR)或静态生成(SSG)是硬性要求。
如果必须前端生成:
- 确保
<script type="application/ld+json">在HTML字符串中已存在,而非运行时插入 - Next.js用
next/head,Nuxt用head()钩子,直接写死在模板里 - 避免用
JSON.stringify()动态拼接——容易漏转义引号或斜杠,直接手写JSON更稳
富文本是否出现,不取决于代码多漂亮,而取决于Google是否认为这个页面够可信、这个FAQ够独特、这个答案够直接。代码只是门槛,不是通行证。



















