第 0010 课 · AI crawler 控制
谁有资格拿你来训练
经典 SEO 只需讨好一个 bot。AI 时代多出了一整群——还多了一个按厂商来做的决定: 拿我训练、引用我、还是都不行?
回顾:第 0002 课用 robots.txt 控制一个 crawler——Googlebot。这一课用同一个文件回答一个 Googlebot 从未提出的问题:如今有十几个 AI crawler 在抓你的页面,你放哪些进来、又为了什么目的?
这里没有 PASS/FAIL。放行还是屏蔽一个 AI crawler 是策略选择,不是 bug——所以目标是把你当前的姿态看清楚,并有意识地设定它,而不是继承你的 CMS 出厂时给的默认值。
一次抓取可以干三种不同的活
误区是把“AI bot”当成一个东西。一次抓取落在三个桶之一,而你对每个桶的态度可以不同:
| 用途 | 这次抓取喂给什么 | 例子 bot |
|---|---|---|
| train(训练) | 模型的训练语料 | GPTBot、Google-Extended、CCBot、ClaudeBot、Bytespider |
| retrieve(检索) | 一个它将引用的实时答案 | OAI-SearchBot、PerplexityBot |
| user-fetch(用户触发) | 用户主动要的某一个页面 | ChatGPT-User、Claude-Web |
Disallow GPTBot、Google-Extended、CCBot、ClaudeBot。
保持 OAI-SearchBot、PerplexityBot 和 Googlebot 开放。
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 吹成“给 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"
- 离线自检:
python3 tools/ai_bots.py --demo - 读出你自己的姿态:
python3 tools/ai_bots.py https://your-site.example/ - 有意识地决定:你是否在控制训练(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,所以把这份名册当作“截至目前”,而非永久。工具替你回答不了、却唯一要紧的那个问题是:你想让什么被拿去训练,又想让什么被引用?
提取练习 · 不许偷看
报告姿态,而非对错
凭记忆作答——正是这份努力让知识留得住。每题只有一次机会;在看其他选项前先选。
robots.txt 里的 Google-Extended 控制的是……robots.txt 照爬不误。所以 robots.txt 是……llms.txt 是……Google 正式说明 AI 功能如何挑选内容、以及如何控制是否被纳入——为 Google-Extended 这条区分提供依据的一手来源。