你给 600 篇文章加了 ## FAQ 段。ArticleLayout 提取并发 FAQPage JSON-LD。等了 6 周——Search Console 显示 FAQ 页”Eligible”但 SERP 的 FAQ rich result 几乎不出现。在 Google Rich Results Test 测一个 URL——“No items detected”——尽管 JSON-LD 就摆在 source 里。JSON-LD 和 Google 提取器之间有什么没对上。
FAQ schema 三重脆弱:JSON-LD 结构必须精确(Question / acceptedAnswer / Answer 嵌套)、可视化正文必须和 schema 内容足够匹配让 Google 信任、页面必须可索引且不重复。修法:在已知好/坏 URL 上跑 Rich Results Test、diff schema、收紧 FAQ 提取器。
常见原因
1. JSON-LD 结构略错
常见错误:acceptedAnswer 写成 answer、Answer(类型)写成 Text、缺 mainEntity 或写成单数。JSON 合法但不是合法的 FAQPage schema。
如何判断:把 URL 贴到 Google Rich Results Test(https://search.google.com/test/rich-results)。“No items detected” 或 “FAQPage detected with errors” —— schema 结构错。
正确形状:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Why does my image alt text matter?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Alt text is read by screen readers and used by image search engines..."
}
}
]
}
2. 问/答文本和可视化正文不匹配
Google 要求 FAQ schema 的问答文本和可视化内容足够接近匹配。提取器拉 ### Question? 标题 + 后续段落、但 JSON-LD 只含第一句——Google 标”schema content doesn’t match page”并悄悄丢 rich result。
如何判断:比 JSON-LD 的 text 字段和实际渲染 HTML 的正文段。JSON-LD 短得多或被改造——就是这个。
3. 页 noindex(或在 noindex collection 里)
Rich result 要求页可索引。页有 <meta name="robots" content="noindex"> 或被 canonical 到别处——都没 rich result。
如何判断:view-source 查 name="robots" 和 rel="canonical"。必须可索引 AND 自指 canonical。
4. 站/页未过 Google rich result 质量门槛
即便 schema 合法——Google 可能在低权威站或薄内容页压住 rich result。无报错——页就是没被处理。
如何判断:查 Search Console -> Enhancements -> FAQ。列为”Eligible”——Google 可以显示但选择不;列为”Valid”——可以 + 真有印象在发生。Eligible 多但印象很少——质量/权威问题,不是 schema。
5. 同页有重复 FAQ schema
有些插件单独发 FAQ schema、和你自定义提取器并行——一页两块 FAQPage 让 Google 困惑、可能两块都压。
如何判断:view-source 数 "@type": "FAQPage"。超过 1——去重。
curl -s https://site.com/en/articles/foo/ | grep -c '"@type": "FAQPage"'
6. 提取器没匹配上 FAQ 段结构
提取器期望 ### Question? 后跟段落,但文章用 **Question?** 后跟 bullet。提取器找不到问题——JSON-LD 空。
如何判断:view-source 看发出的 JSON-LD。mainEntity 数组空——提取失败。
最短修复路径
Step 1:抽样跑 Rich Results Test
5-10 篇期望有 FAQ rich result 的文章每篇:
- 打开 https://search.google.com/test/rich-results
- 贴 URL
- 读判定:"No items detected" / "FAQPage detected" / "FAQPage detected with errors"
- 有错——读具体错误消息
分清”schema 未检测到”和”schema 检测到但 Google 选择不显示”。
Step 2:修 schema 结构
统一标准形状。在 ArticleLayout 的 FAQ 提取器:
function extractFaq(bodyMdx: string) {
const items = [];
const re = /^### (.+\?)\s*\n+((?:(?!^### |^## ).+\n?)+)/gm;
let m;
while ((m = re.exec(bodyMdx))) {
items.push({
"@type": "Question",
name: m[1].trim(),
acceptedAnswer: {
"@type": "Answer",
text: m[2].trim().replace(/\n+/g, " "),
},
});
}
if (items.length === 0) return null;
return {
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: items,
};
}
发出:
{faq && (
<script type="application/ld+json" set:html={JSON.stringify(faq)} />
)}
Step 3:保证可视化正文匹配 schema 文本
JSON-LD 的 text 字段必须忠实代表正文。不要砍到一句、不要剥代码。正文用了 markdown 格式——JSON-LD text 字段剥掉但保留实质。
function stripMarkdown(s: string) {
return s
.replace(/`([^`]+)`/g, "$1")
.replace(/\*\*([^*]+)\*\*/g, "$1")
.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
}
Step 4:验证页可索引
view-source 看一个问题 URL:
curl -s https://site.com/en/articles/foo/ | grep -E 'robots|canonical'
Robots 不能是 noindex,canonical 必须指自己(不是别处)。
Step 5:去重 schema 发射
grep layout 和插件中的 FAQ schema:
grep -rn '"FAQPage"' src/
多于一处——挑一个、删另一个。
Step 6:重测 + 重提
修完——再跑 Rich Results Test、然后在 Search Console 请求 indexing。Eligible -> Valid 状态转换要几天——印象可能要几周。
预防
- FAQ JSON-LD 单一真相源(layout 的提取器、无插件)
- 每次模板改动后用 Rich Results Test 验提取器
- prebuild 脚本数每页发出的 FAQPage 块——>1 就 fail
- 有
## FAQ段的文章自动校验至少有一个### Question?子标题 - 新文章在推到主导航前在 Rich Results Test 抽测
- 季度回顾 Search Console FAQ Enhancements 报告
相关
- Content Site Image Alt Missing Bulk
- Content Site Canonical Points to Self Wrong
- Content Site Hreflang Tags Misconfigured
- Search Console Low Value URLs
- Many Pages Few Impressions
- Content Site Translation Pages Mismatched
标签: #内容运营 #站点质量 #站点审计 #排查 #FAQ Schema