SEO·AEO 给开发者

第 0010 课 · AI crawler 控制

谁有资格拿你来训练

经典 SEO 只需讨好一个 bot。AI 时代多出了一整群——还多了一个按厂商来做的决定: 拿我训练、引用我、还是都不行?

回顾:第 0002 课robots.txt 控制一个 crawler——Googlebot。这一课用同一个文件回答一个 Googlebot 从未提出的问题:如今有十几个 AI crawler 在抓你的页面,你放哪些进来、又为了什么目的?

这里没有 PASS/FAIL。放行还是屏蔽一个 AI crawler 是策略选择,不是 bug——所以目标是把你当前的姿态看清楚,并有意识地设定它,而不是继承你的 CMS 出厂时给的默认值。

本课收获: 读出你的站点对每个主流 AI crawler 的确切 ALLOW/BLOCK 姿态——并理解那条决定“屏蔽到底帮了你、还是悄悄让你丢掉 citation”的关键区分(train 对 retrieve)。

一次抓取可以干三种不同的活

误区是把“AI bot”当成一个东西。一次抓取落在三个桶之一,而你对每个桶的态度可以不同:

用途这次抓取喂给什么例子 bot
train(训练)模型的训练语料GPTBotGoogle-ExtendedCCBotClaudeBotBytespider
retrieve(检索)一个它将引用的实时答案OAI-SearchBotPerplexityBot
user-fetch(用户触发)用户主动要的某一个页面ChatGPT-UserClaude-Web
真正要做的决定: citation——来自第 0001 课的那个 AEO 赢点——来自 retrieve bot。训练来自 train bot。它们是不同的 crawler,所以你可以拒绝训练、同时仍然可被引用。屏蔽 train bot,放行 retrieve bot:退出语料库,又不在答案里隐身。
屏蔽以退出训练

Disallow GPTBotGoogle-ExtendedCCBotClaudeBot

你的内容不再喂给模型训练。
放行以保持可被引用

保持 OAI-SearchBotPerplexityBot 和 Googlebot 开放。

你仍有资格被 retrieve 并在答案里被引用。
Google-Extended 的陷阱: Google-Extended 只控制你的内容是否用于训练 Gemini / Vertex AI。它影响 Google Search,也控制 AI Overviews——后两者走正常的 indexing。[1] 为了“把 AI 挡在外面”而屏蔽 Google-Extended,并不会把你从 Search 里移除,也阻止不了 AI Overviews 引用你已 index 的页面。它和大家以为的是不同的杠杆。

robots.txt 是请求,不是墙

这里的每一条指令都是自愿遵守的。守规矩的 crawler 会读 robots.txt 并照办;恶意 scraper 则完全无视它。[2] 如果你必须强制一个屏蔽,那是服务器端的活——WAF、限流、或按 UA/IP 的规则——而不是文本文件里的一行。

# robots.txt — opt out of training, stay citable
User-agent: GPTBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: OAI-SearchBot
Allow: /          # keep retrieval open → still citable
关于 llms.txt: 你会看到有人把 llms.txt 吹成“给 AI 的 robots.txt”。它是个提案,不是标准——没有主流引擎强制执行,Google 也公开说过它没必要。想放就放(无害),但别把它当成一个今天真能起作用的控制项。

技能:读出你的姿态

tools/ai_bots.py 像每个 AI crawler 那样读你的 robots.txt——用 urllib.robotparser 按 user-agent 回答 can_fetch(bot, "/")——并探测 llms.txt

# the heart of it — ask robots.txt, once per AI bot
rp = urllib.robotparser.RobotFileParser()
rp.parse(robots_text.splitlines())
for ua, vendor, kind in AI_BOTS:
    posture = "ALLOW" if rp.can_fetch(ua, "/") else "BLOCK"
现在就做——
  1. 离线自检:python3 tools/ai_bots.py --demo
  2. 读出你自己的姿态:python3 tools/ai_bots.py https://your-site.example/
  3. 有意识地决定:你是否在控制训练(train bot 按需设置)的同时保持可被引用(retrieve bot 放行)?去设定它,别继承它。
$ python3 tools/ai_bots.py https://acme.test/

AI-crawler posture: https://acme.test
──────────────────────────────────────────────
[FAIL] BLOCK · OpenAI       · GPTBot          train
[PASS] ALLOW · OpenAI       · OAI-SearchBot   retrieve
[PASS] ALLOW · Anthropic    · ClaudeBot       train
[FAIL] BLOCK · Google       · Google-Extended train
[PASS] ALLOW · Perplexity   · PerplexityBot   retrieve
[FAIL] BLOCK · Common Crawl · CCBot           train
[WARN] none  · (extra)      · llms.txt        non-standard
──────────────────────────────────────────────
VERDICT: 8/12 AI crawlers allowed. robots.txt is voluntary — only honored by bots that choose to.

要知道的天花板:这报告的是声明的姿态,而非强制执行后的现实——无视 robots.txt 的 bot 会径直绕过它。而且 bot 名单是动态的;厂商会新增和重命名 crawler,所以把这份名册当作“截至目前”,而非永久。工具替你回答不了、却唯一要紧的那个问题是:你想让什么被拿去训练,又想让什么被引用?

提取练习 · 不许偷看

报告姿态,而非对错

凭记忆作答——正是这份努力让知识留得住。每题只有一次机会;在看其他选项前先选。

第 1 / 4
robots.txt 里的 Google-Extended 控制的是……
第 2 / 4
你想让 ChatGPT 和 Perplexity 引用(cite)你,但不想被训练(train)。你应该……
第 3 / 4
某个 crawler 无视你的 robots.txt 照爬不误。所以 robots.txt 是……
第 4 / 4
llms.txt 是……
一手来源 — 接下来读这个 (≈12 分钟)
“AI features and your website” — Google Search Central

Google 正式说明 AI 功能如何挑选内容、以及如何控制是否被纳入——为 Google-Extended 这条区分提供依据的一手来源。

卡住了,或者好奇? 这个 agent 就是你的老师。尽管问——“给我看一个真实的 robots.txt”、“Claude 和 Perplexity 的 retrieve 方式不一样吗?”——追问是学得最快的方式。