定义
robots.txt 协议是网站用来向自动客户端(即爬虫)传达抓取许可的一套规范,其载体是存放在网站顶级目录下的一个纯文本文件[4]。该文件的名称固定为 robots.txt,统一使用小写,必须采用 UTF-8 编码,媒体类型为纯文本[4]。协议声明的是网站主人对抓取行为的选择,文件本身既是机器可读的,也便于人直接阅读。
在标准文件中,该协议的正式名称是漫游器排除协议,缩写为 REP[4]。协议相关的查询遵循「scheme:[//authority]/robots.txt」的路径形式,在 HTTP 或 FTP 环境下即表现为对应主机的 robots.txt 位置[4]。
原理
robots.txt 文件由一个或多个组构成,每个组以 user-agent 行开头,指定该组规则适用的爬虫名称[2]。随后的 allow 与 disallow 行分别声明允许和禁止访问的路径[4]。爬虫在抓取前先下载并解析该文件,再据此判断某个网址是否可抓取。
匹配规则可以概括为:爬虫以不区分大小写的方式找到与自身产品标识相符的组,若同时命中多个组,则合并这些组的规则;若无匹配组,则采用 user-agent 为「*」的通用组;若两者都不存在,则视为没有任何规则约束[4]。在组内比较路径时,匹配区分大小写,从路径第一个字节开始比对,采用最具体(匹配字节最多)的那条规则;长度相同时 allow 优先于 disallow[4]。没有任何规则匹配到某个网址时,该网址默认允许抓取,robots.txt 自身也被视为隐式允许[4]。其判定过程可表示为:
flowchart TD
A[爬虫取得 robots.txt] --> B{存在与自身标识匹配的组?}
B -- 是 --> C[合并并采用该组规则]
B -- 否 --> D{存在 user-agent 为 * 的组?}
D -- 是 --> E[采用通用组规则]
D -- 否 --> F[不受规则约束]
C --> G[在组内按最长匹配比较路径]
E --> G
G --> H[得出允许或禁止]
当服务器以重定向回应 robots.txt 请求时,爬虫至少应跟随 5 次连续重定向;若在 5 次内取到文件,应依据初始主机的上下文抓取、解析并遵循其规则,超过 5 次则可视为该文件不可用[4]。除协议规定的记录外,爬虫还可以解释其他记录,例如站点地图(Sitemaps),但不能因此影响对规定记录的解析[4]。
发展历程
robots.txt 几乎与互联网同期出现:HTML 于 1991 年问世,首批浏览器出现在 1992 年,robots.txt 则在 1994 年诞生,比 1998 年成立的 Google 更早。该协议最初由 Martijn Koster 于 1994 年定义,用于让服务方控制自动客户端如何访问其提供的内容[1]。
此后约 25 年间,该格式几乎未发生实质变化;若只考虑被爬虫普遍支持的规则,期间仅增加了 allow 一条[5]。2007 年,搜索引擎宣布引入站点地图指令,成为格式扩展的一个例子。经过约 3 年的全球社区参与,该协议于 2022 年成为 IETF 提议标准,编号 RFC 9309。到标准化时,它已被数十亿台主机和几乎全部主要爬虫运营者采用[6]。
应用
robots.txt 的主要用途是管理流向网站的爬虫流量,例如在抓取会导致服务器过载,或存在大量不重要、重复页面时加以限制[3]。网站也可以借它屏蔽图片、视频、音频等资源文件,以免这些内容出现在搜索结果中[3]。配合站点地图指令,网站还可以在文件中指明站点地图的位置,方便爬虫发现页面[7]。
在爬虫一端,遵循 robots.txt 属于通行做法,开发者可以借助现成的开源库支持该协议,数量超过 1000 个。一些未曾纳入 RFC 9309 的指令,如用于控制抓取频率的 crawl-delay 和用于处理重复参数的 clean-param,被部分搜索引擎支持,但不被 Google 搜索支持[5]。站点地图指令同样不在 RFC 9309 之内,却被所有主要搜索引擎支持[5]。
随着面向人工智能用途的爬虫出现,robots.txt 也被用来表达网站对这类抓取的选择。互联网架构委员会曾就此设立研讨会,讨论该协议是否适合用于控制人工智能爬虫,并指出内容创作者或主机有时难以区分用于搜索索引的爬虫与用于模型数据摄入的爬虫[8]。
局限
robots.txt 中的指令并不能强制约束爬虫行为,是否遵循由爬虫一方自行决定;正规爬虫通常会遵守,但其他爬虫未必如此[3]。不同爬虫对语法的解析也可能不一致,某些指令可能不被理解[3]。因此若目的是阻止信息被抓取,更可靠的做法是采用服务器端身份验证等其他机制[9]。
它管理的是抓取而非索引:被 disallow 的网页,若在站外存在指向它的链接,仍可能被搜索引擎找到并收录,网址甚至可能连同锚文本一起出现在结果中[3]。若希望某页面明确不进入索引,应改用 noindex 标记或响应头,并且此时不应在 robots.txt 中屏蔽该页,因为爬虫必须先抓取页面才能读到标记[9]。
该文件本身是公开可读的,若把不宜公开的目录或文件名列入其中,等于对外昭示这些位置。此外,robots.txt 在解析出错时通常只会被忽略错误规则,爬虫无法揣摩网站未明确表达的意图。
参见
参考资料
- RFC 9309: Robots Exclusion Protocol [引用日期2026-10-14]
- create-robots-txt [引用日期2026-10-14]
- intro [引用日期2026-10-14]
- RFC 9309: Robots Exclusion Protocol [引用日期2026-10-14]
- robots-future [引用日期2026-10-14]
- RFC 9309: Robots Exclusion Protocol | RFC Editor [引用日期2026-10-14]
- An introduction to robots.txt files [引用日期2026-10-14]
- slides-120-iabopen-ai-control-workshop-00 [引用日期2026-10-14]
- 什么是 Robots.txt?| Google 搜索中心 | 文档 | Google for Developers [引用日期2026-10-14]