只要运营网站,几乎每天都会和 robots.txt 打交道。这个放在域名根目录下的纯文本文件,相当于给搜索引擎爬虫画了一张游览地图:哪里能去,哪里免进。配置得当,爬虫的抓取预算能集中用在刀刃上,新页面的收录速度往往会有立竿见影的提升;可一旦路径或标点写岔了,整站从搜索结果里“隐身”的事故也时有发生。下面就从零开始,把这份文件的语法细节和容易踩的坑系统说一遍。
想看自己网站的配置,直接在浏览器地址栏输入“域名 + /robots.txt”就行,比如 https://example.com/robots.txt。它的职责是给爬虫划出一条抓取路线,本身并不直接决定页面是否进索引。换句话说,它更像是个引路员,不是最终裁决者。如果你想让某个网页彻底从搜索结果中消失,还得靠页面上的 noindex 标签。一个常被忽略的细节是:即便你用 robots.txt 挡住了某个页面的抓取,只要其他站上有它的链接和内容副本,搜索引擎仍有可能把这个页面收录进结果里,只是展示来源换了渠道。
另外要清楚,这份君子协议只对守规矩的爬虫有效。主流搜索引擎的蜘蛛一般都会照章办事,但那些专门采集数据、刷接口的攻击程序,根本不理会 robots.txt 写了什么。所以,凡是涉及用户隐私、订单记录、后台管理的目录,一定要叠加登录校验、IP 白名单或者防火墙策略,不能把安全底线寄托在一纸协议上。
整个文件由若干规则组构成,每个组都要以 User-agent 开头。字段书写统一用“名称: 值”的格式,冒号请用英文半角,冒号后面跟一个空格。虽然很多搜索引擎容错能力不错,但规范书写能少很多莫名奇妙的麻烦。
这一行指定当前规则组是写给哪个爬虫的。比如只想限制谷歌的蜘蛛,就写 User-agent: Googlebot;想对全网搜索引擎一视同仁,用通配符 User-agent: * 最省事。你也可以建立多个规则组,给不同的爬虫分配不同的抓取权限,互不干扰。
Disallow 用来声明禁止抓取的路径,Allow 则相反,声明允许抓取的路径,两者往往配合使用。有一个关键的细节常常被忽略:如果 Disallow 后面什么都不写(写成 Disallow:),代表解除全部限制,爬虫可抓取全站。当同一个 URL 同时被 Allow 和 Disallow 匹配时,搜索引擎默认采用“最长匹配优先”的原则,也就是说,谁的路径写得具体,听谁的。举个例子:你写了 Disallow: /api/ 又写了 Allow: /api/public/,因为后者的路径更长更具体,public 目录下的资源依然可以正常被抓取。
Sitemap 指令用来填写站点地图的完整网址,方便爬虫直接找到整站内容入口,一般放在文件末尾。Crawl-delay 则用来限制爬虫的抓取间隔,但注意,谷歌搜索爬虫并不支持这个指令,设置了对它基本无效,更多是作用于其他搜索引擎或特定服务,使用时需知晓各自兼容性。
语法本身不复杂,真正让人头疼的是那些不显眼的细节。以下是根据实战经验总结的几个高频坑,值得逐一对照排查。
在实践中,按下面的流程操作能明显减少出错率:先梳理网站目录结构,明确哪些路径需要被抓取、哪些必须屏蔽;再按规则组写好配置,并对每个规则组的路径匹配做一次自查;最后用浏览器的隐身模式访问 /robots.txt,或者借助搜索平台的抓取测试工具做实际验证。
一个常见但很实用的验证思路是:直接查看自己的抓取报告,看目标页面是否被正常抓取,若发现某页面迟迟不被收录,先回头检查是不是被 robots.txt 误伤了。如果暂时找不到原因,还可以临时关闭某条规则测试对比,观察抓取行为是否恢复正常,以此确认问题根源。
只要页面内容指向性强且被其他站点引用,搜索引擎可能拿到页面副本并展示。robots.txt 拦的是抓取,不拦收录。想让页面彻底从搜索结果消失,得用 noindex 标签,并确保页面还能被抓取到,让搜索引擎读取到 noindex 标记。
会。路径中的非 ASCII 字符需要做 URL 编码,空格最好写成 %20。直接写中文或留空格容易导致解析异常,规则无法正确匹配,该屏蔽的通通没被屏蔽。
同一个爬虫只能匹配一个规则组。匹配顺序一般是:先找完全匹配的 User-agent,找不到再匹配通配符 *。也就是说,如果你写了 Googlebot 规则组,又写了 * 规则组,Googlebot 只认前者,不会叠加两个组的规则。
配置 robots.txt 的核心是认清它的边界,再严谨地维护路径规则。建议你从今天起做三件事:第一,给现有 robots.txt 做一次全面体检,确认有没有空白 Disallow、无效注释和失效路径;第二,把敏感目录的防护措施补上,别指望协议解决安全问题;第三,建立定期审核机制,每隔一两个月重看一遍规则,确保它始终与网站现状匹配。稳妥操作能省去不少不必要的收录麻烦,让爬虫把力气花在你最想展示的内容上。