GEO 内容可引用性体检:5 分钟检查页面是否容易被 AI 引用
GEO(生成式引擎优化)已经聊过概念和检查点,本篇解决实操缺口:怎么量化"可引用性"。给你一个可运行的体检脚本,把 AI 引用偏好翻译成 6 个可检测信号,输出"哪些页面最可能被 AI 引用"。
一、为什么需要"可引用性体检"
AI 引擎(Google AI Overviews、Perplexity 等)引用内容不是随机的:它倾向于引用结构化、自包含、有独有事实、有权威信号的段落。问题在于这些特征平时靠感觉判断,没法批量量化。
体检脚本把 6 个信号变成可检测项,30 秒扫完一批页面,输出评分与改进点。官方背景参考:How Search Works(理解 AI 如何与搜索结果协作)与搜索中心文档(内容质量规范)。
二、可引用性的 6 个信号
| # | 信号 | 检测方式 | 为什么重要 |
|---|---|---|---|
| 1 | FAQPage 结构化 | JSON-LD 是否含 FAQPage | 直接给 AI 提供问答对 |
| 2 | 段落自包含 | 是否含"见上文"类依赖词 | AI 摘录依赖独立段落 |
| 3 | 结构化密度 | H2/H3、列表、表格数量 | AI 偏爱可摘录结构 |
| 4 | 独有数据 | 数字/百分比/年份出现频率 | 引用需要"不可复制"的事实 |
| 5 | 权威署名 | 作者、日期、来源标记 | E-E-A-T 的一部分 |
| 6 | 明确结论 | 段首是否有结论句特征 | AI 直接引用结论句 |
三、体检脚本
脚本读取 urls.txt(每行一个 URL),逐页抓取并评分:
python
import re
import urllib.request
import urllib.error
def fetch(url):
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
try:
with urllib.request.urlopen(req, timeout=15) as resp:
return resp.read().decode("utf-8", "ignore")
except Exception:
return ""
def check_citability(url):
html = fetch(url)
if not html:
return url, "无法抓取", []
score = 0
notes = []
# 1. FAQPage 结构化
if "FAQPage" in html:
score += 20
notes.append("有FAQPage(+20)")
else:
notes.append("无FAQPage(0)")
# 2. 段落自包含
dependents = ["如上所述", "见上文", "见下文", "前面提到", "后面会讲"]
hits = [w for w in dependents if w in html]
if not hits:
score += 15
notes.append("无依赖词(+15)")
else:
notes.append(f"含依赖词{len(hits)}处(0)")
# 3. 结构化密度
h2s = len(re.findall(r"<h2", html, re.I))
lists = len(re.findall(r"<(ul|ol|table)", html, re.I))
if h2s >= 3 and lists >= 2:
score += 15
notes.append(f"H2={h2s} 列表/表格={lists}(+15)")
else:
notes.append(f"H2={h2s} 列表/表格={lists}(0)")
# 4. 独有数据(数字密度)
numbers = len(re.findall(r"\d+(?:\.\d+)?%|\d{4}|\d+ 个|\d+ 条|\d+ 美元|\d+ 元", html))
if numbers >= 3:
score += 20
notes.append(f"数字信号{numbers}处(+20)")
else:
notes.append(f"数字信号{numbers}处(0)")
# 5. 权威署名
if re.search(r"作者|author|发布于|更新于|来源[::]", html, re.I):
score += 15
notes.append("有署名/日期(+15)")
else:
notes.append("无署名/日期(0)")
# 6. 明确结论(段首句以结论词开头)
conclusion_words = ["结论", "总结", "答案是", "因此", "建议", "推荐"]
cw_hits = sum(1 for w in conclusion_words if w in html)
if cw_hits >= 2:
score += 15
notes.append(f"结论词{cw_hits}处(+15)")
else:
notes.append(f"结论词{cw_hits}处(0)")
return url, f"{score}/100", notes
with open("urls.txt", encoding="utf-8") as f:
urls = [line.strip() for line in f if line.strip()]
print("=== 可引用性体检 ===")
for u in urls:
url, score, notes = check_citability(u)
print(f"\n{url[:70]}")
print(f" 得分: {score}")
for n in notes:
print(f" {n}")
四、输出解读
| 得分 | 含义 | 动作 |
|---|---|---|
| 80-100 | 高可引用性 | 保持并监测被引用信号 |
| 50-79 | 中等 | 优先补 FAQPage 与独有数据 |
| 0-49 | 低可引用性 | 内容/结构改造后再评 |
注意:评分是参考信号,不是 Google 官方指标。它帮你批量发现"看起来最不容易被 AI 摘录"的页面,深挖方向与 GEO 检查点一致。
五、结构化改造清单
补结构化优先做 FAQPage:给每个核心内容页配 3-5 个真实问答(问题来自站内搜索/客服记录),用 JSON-LD 实现,规范见结构化数据文档,改完用 Rich Results Test 验证。
提醒:HowTo 结构化已弃用 (谷歌官方 2023 年宣布),别再花时间加;Article 结构化可加在核心文章页,见 Article 文档。
六、常见坑
| 坑 | 后果 | 正解 |
|---|---|---|
| 给 AI 做隐藏内容 | 操纵风险,反噬 | 只优化可见内容 |
| FAQ 问答题不对题 | 结构化无效甚至被降级 | 用真实用户问题 |
| 只补结构不补数据 | AI 无引用理由 | 结构+独有数据一起补 |
| 拿评分当官方指标 | 误导决策 | 当参考信号用 |
七、FAQ
Q1:体检脚本要装依赖吗?
不需要,标准库实现。Python 3.8+ 直接跑。
Q2:没有 FAQ 的页面能硬造吗?
不能硬造。FAQ 必须对应页面真实回答的问题,可从站内搜索词、客服记录里找。
Q3:AI 引用多少算成功?
没有官方标准。观察趋势:GSC 展示量变化、站外引用型链接增长、品牌词搜索上升,组合判断。
八、行动清单
- 准备 urls.txt(核心内容页优先),跑体检脚本。
- 对 50 分以下页面:补 FAQPage + 段首结论句 + 独有数据。
- 对 50-79 分页面:优先补 FAQPage,用 Rich Results Test 验证。
- 每月重跑一次,对比得分变化与 GSC 趋势。
完整版可引用性体检脚本(含批量导出评分表与 FAQ 生成模板)我整理成了 PDF,评论区扣「GEO体检」或私信我,免费发你。也欢迎一起交流 GEO 实战问题。