robots.txt 是站点根目录下的一个纯文本文件,二十多年来几乎每个网站都有一份,但它的规则被误读的比例高得惊人。

先说两件很多人不知道的事。

第一,它不是权限控制。 它是一份声明——你在上面说明哪些路径欢迎抓、哪些不欢迎。守规矩的爬虫会读它并照办,不守规矩的直接无视。真要挡住,得靠鉴权或者服务端拦截。

第二,它直到 2022 年 9 月才正式成为标准。 IETF 以 RFC 9309 确立了它的语法与匹配规则;在那之前的二十多年,它一直只是一份被广泛遵守的君子协定。这也是为什么各家实现至今仍有细微出入——大家是先做了二十年,才回过头把规矩写下来。

这篇只讲怎么读。想要一份可以直接抄的配置,见AI 爬虫 robots.txt 配置清单

一、一行一行拆

User-agent: Googlebot
Disallow: /admin/
Allow: /admin/public/

User-agent: *
Disallow: /*?sort=
Disallow: /tmp/

Sitemap: https://example.com/sitemap.xml

User-agent: 开启一个分组。 到下一个 User-agent: 为止的所有规则,都属于这一组。

Disallow: 声明不希望被抓的路径前缀。 /admin/ 会匹配 /admin//admin/x/admin/x/y,凡是以它开头的都算。

Allow: 在一片 Disallow 里开一个口子。 上面这份配置的意思是:/admin/ 整个别抓,但 /admin/public/ 可以。

*** 匹配任意字符。** /*?sort= 挡的是所有带 sort 参数的地址。

$ 锚定结尾。 /*.pdf$ 只挡以 .pdf 结尾的地址。*$ 不在最初的协议里,是各家陆续加的扩展,RFC 9309 把它们收编成了标准的一部分。

Sitemap: 是全局指令。 它不属于任何分组,放在文件的哪个位置都一样有效。

二、三条最容易读错的规则

规则一:爬虫只读最匹配自己的那一组,读完就不看别的组了。

这是最常见的误解——很多人以为 User-agent: * 是兜底,会和自己那一组叠加。不叠加。 上面那份配置里,Googlebot 只执行第一组,第二组里的 /*?sort=/tmp/ 对它完全无效。

所以如果你为某个爬虫单开了一组,就必须把通用规则在那一组里重写一遍,否则等于给它开了后门。

规则二:AllowDisallow 冲突时,比的是长度不是顺序。

RFC 9309 把这条写死了:必须采用最具体的那条匹配,而「最具体」的定义是字节数最多——和它们写在文件里的先后完全没有关系。两条等价时,Allow 优先。

Disallow: /admin/ 长度是 8,Allow: /admin/public/ 长度是 15,所以 /admin/public/index.html 走的是 Allow

规则三:Disallow 不等于不收录。

这条最反直觉。被 Disallow 的地址,如果被别的页面链到,引擎仍然可能把这个地址收进索引——它只是不去抓内容,于是搜索结果里出现一个只有网址、没有摘要的条目。

由此引出一个经典陷阱:

robots.txt 挡住某个页面 + 页面里写 noindex = 引擎永远读不到那个 noindex

因为 noindex 写在页面里,要抓下来才看得到。你在门口挂了「别进来」,然后把「别记我名字」的字条贴在了屋里。

真要不被收录,就得允许抓取,让引擎读到 noindex 顺带一提,Google 从 2019 年 9 月起不再支持写在 robots.txt 里的 noindex: 指令,那条路已经关了。

三、还有一件事:它是公开文件

任何人在浏览器里输入 你的域名/robots.txt 都能看到全文。

所以别把敏感路径写进去当作隐藏——那不是把门关上,是把地图交出去。Disallow: /admin-secret-2019/ 这种写法,等于向所有人公告了后台地址在哪。

四、落回 GEO:AI 爬虫是另外一批 UA

这是这篇最要紧的一段。

AI 爬虫有自己一整套 User-Agent,和搜索爬虫不是同一批名字。搜索侧的老面孔之外,还有一批专门为 AI 服务的抓取器,它们和喂搜索索引的那些各走各的。

大量站点的 robots.txt 是从几年前的模板抄来的,那时候这批 UA 还不存在。于是常见两种情况:

  • 误挡:一条为反爬写的宽泛规则,把 AI 爬虫一起挡在门外——等于对 AI 隐身,而你从搜索排名上完全看不出来
  • 漏配:只给几个知名爬虫开了单独分组,按规则一,其余爬虫走 * 那组,而那组恰好写得很紧

完整的 18 个 UA 清单和一份可以直接抄的模板,见AI 爬虫 robots.txt 配置清单

要提醒的是,robots.txt 只管到五道关里的第二关。放行了不等于会来抓,来抓了不等于会存——整条链路见GEO 怎么做:先过搜索引擎的五道关

常见疑问

问:Disallow 了,为什么这个地址还出现在搜索结果里?

因为 Disallow 管的是「不要抓」,不是「不要收录」。被别的页面链到时,引擎仍可能把这个地址收进索引,只是没有内容可展示,于是出现一条只有网址的结果。要真正不被收录,得允许抓取并在页面里写 noindex

问:AllowDisallow 冲突时听谁的?

听匹配路径更长的那条,和写在文件里的先后顺序无关。两条长度相同时 Allow 优先。这是 RFC 9309 明确规定的匹配规则。

**问:User-agent: * 那一组是兜底吗?**

不是。每个爬虫只执行最匹配自己的那一组,执行完就不再看其他组,规则之间不叠加。如果你为某个爬虫单开了一组,必须把通用规则在那一组里重写一遍。

问:robots.txt 能挡住不守规矩的爬虫吗?

不能。它是一份声明,靠对方自觉遵守。要真正拦住,只能用鉴权、频率限制或者服务端按 UA 与 IP 拦截。把 robots.txt 当安全措施是危险的,因为它还是一份公开文件,等于把你不想让人看的路径列了个清单。

问:挡掉 AI 爬虫,会影响搜索排名吗?

取决于挡的是谁。有些公司的搜索爬虫和 AI 爬虫是两个独立的 UA,挡掉后者通常不影响搜索收录;但也有搜索与 AI 共用一套抓取的情况,一挡就是两头都挡。所以必须按 UA 逐个确认,不能凭公司名字一刀切。

---

想知道你的 robots.txt 有没有误挡 AI 爬虫?免费诊断一次,我们会读你站点的可抓取性与收录状况并给出清单。