本文约 4,965 字,预计阅读 13 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:标记全绿,搜索结果却没有任何变化
不少站长最近都遇到同一个落差:页面按照 schema.org 的写法加上了 FAQPage,Rich Results Test 里结构校验一路绿灯,可上线三个月,Google 搜索结果里什么富媒体形态都没出现,Search Console 也看不到任何 FAQ 相关的展示数据。于是有人判断”插件坏了”,有人换插件重标一遍,还有人干脆把标记删掉——这三种反应其实都源于同一个误解:把”结构化数据能被解析”和”Google 会展示对应富媒体结果”当成了同一件事。事实是,自 2023 年 8 月 Google 公开调整政策后,FAQ 富媒体结果的展示范围被大幅收窄,绝大多数网站即使标注完全正确,也不会再拿到 FAQ 的折叠展开形态。但这不等于 FAQPage 标记失去了全部意义,也不等于你可以随便标注。真正需要理清楚的是三件事:政策到底改了什么、标注的合规底线在哪里、以及在 WordPress 上怎么既不多输出又不虚标。
原理分析:展示政策与标记规范是两条独立的线
Google 对结构化数据的处理分两层。第一层是”抓取与理解”:只要你在页面里提供了符合 schema.org 词汇表的 JSON-LD,爬虫就会解析它,用来辅助理解页面实体与段落语义。第二层是”富媒体结果资格”:在某个类型是否配得上一个 UI 形态这件事上,Google 保留完全的政策裁量权,可以随时收紧或下线某一类展示。FAQ 的变化发生在第二层,而不是第一层。
| 维度 | 结构化数据标记 | 富媒体结果展示 |
|---|---|---|
| 决定方 | 站点自己 | Google 政策 |
| 是否必须 | 否 | 否 |
| 变化频率 | 跟随 schema.org 词汇表,很慢 | 可单方面公告调整,很快 |
| FAQ 当前状态 | 可正常标注并被解析 | 仅限少量权威政府与医疗健康站点展示 |
| 出错后果 | 不影响排名 | 可能被发手动处罚或在 GSC 报表报错 |
所以正确的预期管理是:把 FAQPage 当成”给机器补语义”的长期投资,而不是”换一段折叠 UI”的短线手段。而只要你决定保留它,就必须遵守 Google 的通用结构化数据规范,其中与 FAQ 直接相关的三条是:一是被标记的内容必须真实出现在页面上并对用户可见,不能把答案藏在 <details> 折叠区以外的地方或脚本里;二是只能标记自家内容,不能替第三方聚合问答;三是不得用 FAQPage 包装促销文案、虚假评价或与当前页面无关的热门问题——这类做法过去被不少站点当成”蹭富媒体”的手段,现在虽然没有展示收益,却依然可能触发”结构化数据不符合准则”的人工处理措施。明白了这条边界,就可以谈具体写法了。配套的清理顺序可以参考避免结构化数据重复输出的方案。
保姆级实操
第一步:先确认这个页面真的配得上 FAQPage
打开页面,肉眼检查是否存在成段的问答对照:有没有用户真实会问的问题、答案是不是在同一页面上就能读到。如果答案需要跳转、需要点击”查看更多”才从接口拉回来,那就不该标。FAQPage 的主实体是若干 Question,每个 Question 的 acceptedAnswer 文本必须能在页面 DOM 里找到对应文字。
第二步:盘点当前页面已经输出了几个 JSON-LD
很多站点不是没有标记,而是有太多重复标记。用命令行直接抓 HTML 数一下:
curl -sL "https://mimangfei.com/sample-post/" | grep -o 'application/ld+json' | wc -l
curl -sL "https://mimangfei.com/sample-post/" | python -c "import sys,re;print(re.findall(r'\"@type\"\s*:\s*\"(\w+)\"',sys.stdin.read()))"
如果同一个页面里出现了两个 FAQPage(比如 Yoast 生成一份、主题 functions.php 又注入一份),需要先做去重,否则 GSC 会报重复字段冲突。
第三步:写一份合身的 FAQPage JSON-LD
注意几个被忽略的细节:acceptedAnswer 的 text 允许包含有限的 HTML 标签,mainEntity 是数组,@URL 要用绝对地址。
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://mimangfei.com/sample-post/#faq",
"mainEntity": [
{
"@type": "Question",
"name": "WordPress 站点可以同时使用多个 SEO 插件吗?",
"acceptedAnswer": {
"@type": "Answer",
"text": "不建议。多个 SEO 插件会在同一个页面重复输出 Organization、WebSite、FAQPage 等 JSON-LD,造成字段冲突与解析歧义。",
"url": "https://mimangfei.com/sample-post/#faq-1"
}
},
{
"@type": "Question",
"name": "FAQPage 标记会影响页面排名吗?",
"acceptedAnswer": {
"@type": "Answer",
"text": "它帮助 Google 理解页面问答结构,2023 年后不再为普通站点带来折叠式富媒体展示,也不构成直接排名因子。"
}
}
]
}
第四步:在 WordPress 里按条件输出
不要全站铺开。FAQ 标记只应该出现在确实有问答区的文章页,用 is_singular + 自定义字段做闸门,并用 wp_json_encode 统一转义,避免手写字符串拼接导致的引号炸裂。
add_action( 'wp_head', function () {
if ( ! is_singular( 'post' ) ) {
return;
}
$faq = get_post_meta( get_the_ID(), '_mimangfei_faq_items', true );
if ( empty( $faq ) || ! is_array( $faq ) ) {
return;
}
$url = get_permalink() . '#faq';
$entities = [];
foreach ( $faq as $i => $row ) {
$entities[] = [
'@type' => 'Question',
'name' => wp_strip_all_tags( $row['q'] ),
'acceptedAnswer' => [
'@type' => 'Answer',
'text' => wp_kses_post( $row['a'] ),
],
];
}
$graph = [
'@context' => 'https://schema.org',
'@type' => 'FAQPage',
'@id' => $url,
'mainEntity' => $entities,
];
echo '<script type="application/ld+json">' . wp_json_encode( $graph, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) . '</script>';
}, 20 );
第五步:校验与长期观测
把 URL 丢进 Rich Results Test,重点不是看有没有”预览窗格”,而是看”检测到的结构化数据类型”里 FAQPage 是否被正确识别、Warnings 里是否出现字段缺失。随后在 Search Console 的富媒体结果区域观察一周,若出现”缺少字段 acceptedAnswer”之类的错误,说明题面与答案至少一个为空。
常见踩坑
- 把整个栏目页标成 FAQPage:栏目页主体是文章列表,标 FAQPage 属于”标记内容与页面主旨不符”,是最容易被判违规的一类。
- 答案内容与页面可见文字不一致:常见的情形是页面上只写”详见下载文档”,JSON-LD 里却塞了 500 字答案,Google 明确要求两者一致。
- 同一个页面堆叠多个 FAQPage:插件和主题双份输出时,Google 可能挑任意一份,甚至因为字段冲突全部忽略。
- 翻译站点只标了英文版:多语言站点必须在每个版本各自标注对应语言的问与答,只标一份会被视为内容与语言不匹配。
- 为了凑结构把评论区内容当 FAQ:评论区是用户生成内容,质量不可控,且常常不是问答结构,不建议标记。
- 案例:某外贸独立站原本给产品页批量挂了 12 条 FAQ,其中 5 条是从竞争对手站点抄来的通用行业问答,页面上压根没有对应文字。调整政策后它没有拿到任何 FAQ 展示,反而在 Search Console 收到”含有违规结构化数据”的通知,要求修正。整改方案是把无关的 5 条删掉,只保留页面本身”如何安装””多久发货”的真问答,两周后该页面的富媒体提醒消失。教训是:政策收紧并不代表监管放松。
- 用 rel=canonical 指向别的页面还标 FAQ:被 canonical 排除的页面,其结构化数据一并不被采用,白标。
总结
判断标准很简单:页面上有真实、可见、与本页主题一致的问答区,才考虑 FAQPage;页面上没有,就一个字都别标。至于要不要投入时间去做,取决于你的目的是什么——想拿折叠 UI 的,现在基本可以放弃;想让搜索引擎和 AI 抓取更好地理解页面语义的,值得做,且成本不过几十行 PHP。行动清单:盘点 JSON-LD 输出份数 → 删掉不合主题的问答 → 用 wp_json_encode 单点输出 → Rich Results Test 校验字段 → GSC 观察错误收敛。后续还想扩展富媒体收益,可以转向Product / Offer 结构化数据配置或BreadcrumbList 结构化数据实现这类仍有稳定展示的类型。
