第 0004 课 · Retrieve + Generate 阶段
为检索而写
answer engine(答案引擎)引用的单元是一个自足(self-contained)的<em>段落(passage)</em>,而不是一整个页面。所以要去打磨这个段落——而且有一套经过实测的打法,告诉你哪些改动才真正有效。
回顾第 0003 课:0002 让页面通过了 crawl(抓取)+ index(索引)这两道门;0003 用 JSON-LD 给页面里的事实打上了标签。两者都让一个页面变得有资格。今天讲的是文字本身——让它成为 AI answer engine(答案引擎)会摘取并署名的那部分内容。
answer engine 并不会”读你的页面”然后给它排名。它把网络切成一个个 passage(段落),做 embedding(嵌入),retrieve(检索)出最相关的少数几个,再合成(synthesize)出一个答案——并引用它用到的那些 passage。[1]所以你真正的优化单元是 passage:一个能独立、完整地回答某个问题、且形态可被摘取的 chunk(块)。
geo_lint.py,得到一份 6 个信号的评分卡——统计数据、引用来源、引语、答案先行、分块、不堆砌关键词——每一项都是研究表明能提升引用可见度的一种改动。 同样的事实,两种形态
信息是完全相同的。只有形态不同——而只有其中一种容易被孤立地检索和引用。
关于 indexing 有很多事情要考虑,很多人对此感到困惑,老实说 crawling 也是这幅图景的一部分,所以当你在想你的页面会不会出现时,你得整体地、随着时间去思考所有这些相互作用的因素……
没有可独立成立的答案。引擎没法在不带上这一整段啰嗦上下文的情况下引用这里的某一句话。crawlable 和 indexable 是一回事吗?不是——它们是两道独立的门。crawlable(可抓取)意味着机器人可以获取这个页面;indexable(可索引)意味着引擎会把它保留下来。
按 Google 的说法,在 robots.txt 里屏蔽一个 URL 并不会把它从 index 里移除——机器人根本读不到那个 noindex。
什么才真正推动引用——实测出来的打法
GEO 论文(Aggarwal 等人,KDD 2024)在一个真实查询的基准集上,针对生成式引擎对内容改动做了 A/B 测试。有三种改动脱颖而出,带来了最高约 40% 的相对可见度提升。[1]它们不是风格上的问题——它们让一个 passage 更可引用。
| 改动 | 为什么有效 | 实测结果 |
|---|---|---|
| 引用来源 | 一个有出处的论断,引擎重复并署名起来更安全。 | 顶级 |
| 加入引语 | 来自权威的逐字引语,本身就是一个现成、可摘取的单元。 | 顶级 |
| 加入统计数据 | 一个具体的数字比一个含糊的形容词更可引用。 | 顶级 |
| 关键词堆砌 | 老一套的 SEO 条件反射。研究发现它没有帮助——而且往往有害。 | 负面 |
在此之上再叠加可摘取性:答案先行(answer-first)(先给答案,再展开——也就是倒金字塔),以及分块(带标题、自足的小节,引擎可以一次只检索其中一个)。0003 里的 FAQPage 标记就是这条原则在结构上的体现——每一个问答对都是一个预先分好块的答案。
llms.txt 或只面向 AI 的标记能帮你买到引用。[2]检索形态是对 0002–0003 这两课的叠加,而不是替代。一个打磨得再漂亮的 passage,若处在一个 noindex 页面上,被引用的次数依然是零。 实操技能:在发布前给草稿做 lint
在这个工作区里你有 tools/geo_lint.py。只用标准库。它会拿三个 GEO 信号,外加答案先行、分块、以及一项堆砌检查来给文本/markdown 打分——把”这篇是不是为检索而写的?“变成一个可以塞进发布流水线的、快速且可重复的循环。
# the three evidence-backed signals, as code
pcts = re.findall(r"\d+%", text) # STATISTICS
links = re.findall(r"https?://\S+", text) # CITE SOURCES
quote = re.findall(r'"[^"]{15,}"', text) # QUOTATIONS
# + answer-first (short lead block) + chunked (headings) + anti-stuffing
亲自感受一下对比:
- 自检(离线):
python3 tools/geo_lint.py --demo - 对你自己的真实草稿做 lint:
python3 tools/geo_lint.py your-draft.md - 修好一个 WARN——加一个统计数据并附上出处,或者把一大段散文拆成一个带标题、答案先行的 chunk——然后重新运行。看着分数往上爬。这个修改循环就是这一课的精髓。
$ python3 tools/geo_lint.py weak-draft.md GEO / retrieval-readiness lint ────────────────────────────────────────────── [WARN] STATISTICS few/no numbers — add concrete stats [WARN] CITE SOURCES thin sourcing — back claims with references [WARN] QUOTATIONS no quotations — a verbatim quote is highly liftable [PASS] ANSWER-FIRST opens with a 36-word answer block [WARN] CHUNKED 0 headings — break into self-contained chunks [WARN] NO STUFFING 'seo' is 42% of content words (10x) — reads as stuffing ────────────────────────────────────────────── VERDICT: 1/6 signals — weak — restructure before publishing.
要知道它的上限:这些是是否存在的启发式判断,而不是质量评判者——linter 能确认你引用了一个来源,但不能确认那个来源好不好、那个论断真不真。它给形态打分;内容实质仍然由你负责。而且高分能提高被引用的几率,并不能保证一定被引用。
提取练习 · 不许偷看
为引擎塑形
凭记忆作答——正是这份努力让知识留得住。每题只有一次机会;在看其他选项前先选。
读摘要 + 方法表——三个信号和那个约 40% 的数字都出自这里,在厂商噪音之下的那个中立基线也在这里。搭配 Google 的<a href="https://developers.google.com/search/docs/fundamentals/ai-optimization-guide">《为生成式 AI 功能做优化》</a>一起读(也就是那篇"这依然是 SEO"的文档)。