robots.txt是网站根目录下一个纯文本指令文件,专门用来告知搜索引擎爬虫哪些页面可以抓取、哪些路径应当跳过。配置得当,爬虫会把有限的抓取额度集中在关键页面上,新内容被收录的速度也会有明显提升。但一旦语法写错或路径判断有误,轻则部分页面无法被抓取,重则整站陷入抓取异常。掌握它的运行逻辑和那些容易被忽略的坑,是每个站点维护者绕不开的一课。
robots.txt对爬虫而言是一份请求性指引,不具备任何强制力。任何人都可以直接通过浏览器访问“你的域名/robots.txt”来查看全部内容。它好比一张园区导览图,告诉访客哪里可以走,但真正存放核心数据的后台,光靠地图是挡不住人的。
这份文件只控制爬虫是否发起抓取请求,至于已经抓到的页面是否进入索引,它说了不算。举例来说,一个被robots.txt屏蔽的页面,如果外部链接足够多,搜索引擎依然可能把它纳入索引,只是展示的快照可能来自缓存或摘要片段。
另外要牢记,这套协议全靠爬虫自觉。主流搜索引擎都会遵守,但大量第三方采集器和垃圾爬虫根本不理会。凡涉及用户隐私、支付流程或管理后台,必须同时启用登录验证、IP白名单或防火墙等硬性拦截,别把安全全部押在“君子协定”上。
robots.txt由若干规则组构成,每个规则组必须以User-agent开头,声明适用范围。指令格式统一为“名称: 值”,冒号务必用英文半角符号,之后建议保留一个空格。虽然多数爬虫容错度尚可,但规范的写法能减少日后解析异常的概率。
这一行决定规则组约束谁。只针对谷歌,写User-agent: Googlebot;想统一对待所有引擎,用通配符User-agent: *。你也可以拆分多个规则组,对不同搜索引擎区别处理,比如对谷歌全放开,给必应设置更严的抓取限制。
Disallow用于声明禁止路径,Allow用于放行路径,两者经常结伴出现。容易忽略的是:当Disallow后面留空,意味着撤销全部限制,爬虫可自由抓全站。当一条URL同时匹配多条规则,搜索引擎按“最长匹配优先”处理——路径越长越具体,优先级越高。比如同时存在Disallow: /api/和Allow: /api/public/,因为后者更具体,public子目录会被放行。
Sitemap指令声明站点地图的完整URL,帮爬虫快速了解内容结构,通常放在文件末尾。Crawl-delay设置两次抓取的间隔秒数,但谷歌的蜘蛛不支持该指令,它的抓取频率由自身算法决定。建议通过观察服务器日志来评估抓取压力,而非依赖这条指令。
robots.txt只支持两种通配符:*代表任意长度字符,$代表路径末尾。很多刚上手的人误以为它支持正表达式,随手写类似Disallow: /page?id=\d+的内容,结果整条规则失效。正确做法是把动态参数直接列出,或者屏蔽整个参数目录。
另一个高发错误是随手写Disallow: /,却以为只屏蔽某个子目录。这条指令等价于拒绝抓取全站,会让搜索收录近乎停滞。如果目标是屏蔽某个文件夹,应该写Disallow: /文件夹名/,末尾斜杠也能减少误匹配。还有人在Allow中指定文件后缀如Allow: .css$,这类写法容易被部分爬虫忽略,建议改用完整路径。
文件写好后不要直接上线,先在搜索引擎站长后台使用robots测试工具,粘贴内容并输入一条测试URL,查看最终抓取判定。这一步能快速发现语法错误和逻辑矛盾。同时注意文件大小不要超过500KB,每个规则组内尽量精简,避免冗余。
上线后也要定期检查。建议每隔一两个月查看抓取统计报告,观察被屏蔽页面的占比是否异常。如果发现某个重要目录收录量骤减,优先排查 robots.txt 是否有误写。常见做法是把规则变更记录在版本日志里,便于回溯。对于新品上线或大版本更新,可以在发布前临时用 Allow 放行关键路径,确认收录正常后再收紧限制。
会。如果误屏蔽了正在被收录的页面,爬虫会逐渐停止抓取,页面会从索引中逐步移除,排名随之消失。发现后应立即修正并提交抓取请求,一般几周内可以恢复。
不能。它只建议爬虫别来,但没有强制力,恶意的脚本或人工访问仍可获取。用户数据必须用登录认证、权限控制和服务器层面的访问限制来保护。
遵循最长匹配优先:最具体的路径获胜。如果两条规则长度相同,则按文件中的先后顺序决定。建议把更精确的规则放在前面,减少误解。
robots.txt的核心价值在于引导抓取资源、提升收录效率,而非充当安全屏障。动手配置时,先明确规则组的对象,再谨慎组合Allow与Disallow,避免滥用通配符和正则。每次修改后都应当用测试工具验证,并持续观察收录数据。把这些基础动作做扎实,就能让这份小文件为站点稳定出力。