直接回答:面向 AI 搜索的 robots.txt,正确做法是默认放行、按用途分类、只精确屏蔽你确实不想给的那一类。绝大多数站点不需要拦任何爬虫;而用一条 Disallow: / 一刀切,会把检索和引用链路一起切断。
默认放行,除非你有明确理由
先说一个前提:robots.txt 是君子协定,靠爬虫自行遵守,没有强制力。它拦不住不守规矩的采集者,也拦不住已经部署在 CDN 层的拦截规则。
它真正的作用是表达意图:告诉守规矩的爬虫"这里欢迎你,那里请不要来"。
对一个以内容为主的站点,合理的默认姿态是放行。理由有三个:
- 你希望内容被引用,而引用依赖检索,检索依赖抓取
- 训练类抓取即使拦掉,也无法验证效果,收益不明确
- 规则越多,写错的机会越大——一条写错的规则可能同时挡掉好几个爬虫
**只有当你有明确诉求时,才需要精确屏蔽。**比如站点包含内部文档、付费内容目录,或者公司对内容用途有明确规定。
爬虫要先按用途分类,再决定放不放
同样叫"AI 爬虫",职责差别很大。三类爬虫的作用范围见《AI 引用和 AI 训练是两件事》,这里只给配置结论:
| 类别 | 配置建议 | 原因 |
|---|---|---|
检索 / 索引类(OAI-SearchBot、PerplexityBot、Googlebot、Bingbot) |
必须放行 | 直接决定能否被 AI 引用 |
用户触发类(ChatGPT-User、Perplexity-User) |
放行 | 代表真实用户正在读你的页面 |
训练类(GPTBot、CCBot、Google-Extended、Bytespider) |
默认放行,有诉求再单独屏蔽 | 不影响引用,但同样无法验证收益 |
**判断顺序是:先问"拦掉它我会损失什么",再问"拦掉它我能得到什么"。**如果损失是确定的、收益是不确定的,就不要拦。
一份可以照抄的配置
下面这份配置可以做起点,把域名换成你自己的:
1 | # 站点地图写在这里,方便爬虫一次找到 |
几点说明:
Sitemap:是唯一写绝对地址的指令,其他规则写路径即可- 路径区分大小写,
/Search/和/search/是两条规则 - 每条
User-agent后面跟的规则属于这一组,组之间要有明确的空行分隔(严格来说是靠User-agent行划分,空行只是可读性) - 想屏蔽某个爬虫,把
Allow: /换成Disallow: /即可,其他组不受影响
本站的配置就是按这个思路生成的,完整内容可以直接访问 /robots.txt 对照。
五条最容易写错的规则
第一,User-agent: * 里的 Disallow: / 会误伤一大片。 通配组是所有没被单独列出的爬虫的默认行为。你只想屏蔽某个采集者,却让几十个爬虫一起出局,这是最常见的事故。
**第二,匹配规则是"最长匹配优先",不是"先写先算"。**同一组里有多条规则时,路径匹配最长的那条生效;长度相同时 Allow 优先。所以 Allow: /blog/ 和 Disallow: /blog/draft/ 同时存在时,草稿目录仍然会被挡住——这符合直觉,但很多人以为后面的规则会覆盖前面的。
第三,robots.txt 必须放在域名根目录。 https://example.com/robots.txt 有效,https://example.com/blog/robots.txt 对主站无效。子目录站点(比如托管在二级路径下的博客)没有独立的 robots.txt 可用。
第四,规则是路径前缀匹配,不是正则。* 是通配符、$ 表示结尾,这两个的支持比较普遍,但更复杂的表达式(比如带括号、量词的写法)各爬虫支持程度不一,不要依赖。
第五,爬虫名拼错等于没写。PerplexityBot 写成 Perplexity-Bot、ClaudeBot 写成 Claude-Bot,规则就不会被匹配。名称大小写不敏感,但拼写必须准确。
配置写完,一定要验证
写完不验证,等于没写。三步走:
第一步,确认文件本身可访问、内容正确:
1 | curl -s https://example.com/robots.txt | head -40 |
返回 404 或返回了 HTML,说明文件位置或服务器配置有问题。
第二步,用爬虫身份请求一个内容页,确认没有被服务器层拦住:
1 | curl -s -o /dev/null -w "%{http_code}\n" \ |
返回 200 才算真正放行。robots.txt 允许不代表能访问——CDN 的防机器人模式、WAF 规则、限速配置都可能在这一层把请求挡下来。
**第三步,过一段时间回来看日志。**只有日志里出现真实的爬虫访问,才说明整条链路是通的:
1 | # 统计最近访问过的 AI 爬虫与次数 |
如果某个爬虫一次都没出现,回到第一步重新验证,别急着改内容。
常见问题(FAQ)
不写 robots.txt 会怎样?
等同于默认全部允许。搜索引擎和多数 AI 爬虫在没有该文件时按"可以抓取"处理。所以不写文件本身没有风险,但你会失去表达意图的能力——比如声明站点地图、屏蔽搜索结果页这类不该被索引的地址。
我想屏蔽 AI 训练,应该只加一条 Disallow: GPTBot 吗?
只针对你想屏蔽的对象配置,别用通配规则。需要注意训练语料来源不止一家:CCBot(Common Crawl)的数据常被多个模型复用,屏蔽了 OpenAI 却放行 CCBot,内容仍可能间接进入训练集。如果你的诉求是"尽量不被用于训练",需要把这一类别里的主要爬虫逐条列出。
robots.txt 能阻止内容被抓取吗?
只能阻止愿意遵守规则的爬虫。它没有技术强制力,对不守规矩的采集者无效。如果你的诉求是"技术上不被抓",需要靠服务器层的鉴权、频次限制或访问控制,而那些手段同样会影响正常读者和搜索引擎。
改了 robots.txt 多久生效?
爬虫通常会在下次抓取时重新读取该文件,时间从几小时到几天不等。如果之前已经被屏蔽,恢复抓取往往还需要额外几周——这也是不要随意屏蔽的原因:一次误操作的成本可能是一个月。
小结
- 默认放行、按用途分类、只精确屏蔽必要的对象,是稳妥的默认姿态。
- 检索类爬虫直接决定能否被引用,用户触发类代表真实读者,这两类都别拦。
- 通配组里的
Disallow: /是误伤重灾区,精确屏蔽优于一刀切。 - 规则是路径前缀匹配、最长匹配优先,且必须放在域名根目录。
- 写完必须验证:文件可访问、爬虫 UA 能拿到 200、日志里能看到真实访问。
如果你的 robots.txt 配置完还是不见爬虫来,欢迎到留言板贴出配置和日志片段,一起看看卡在哪一层。