很多站点把 robots.txt 当成一个开关:要么全站放开,要么一刀切禁止。实际上它是蜘蛛进入站点时最先读到的说明文件,同时承担两个角色——告诉蜘蛛哪些路径暂时不用抓,以及告诉蜘蛛去哪里找 URL 清单。这两件事写得好不好,直接影响后面的 URL 发现是否顺畅。
蜘蛛读 robots.txt 的顺序
蜘蛛访问一个站点,通常会先请求根目录下的 robots.txt,再根据其中的规则决定接下来的抓取路径。这个文件的响应状态不同,蜘蛛的处理方式也不一样。
- 返回 200:按规则执行,同时读取其中的 Sitemap 行。
- 返回 404:多数蜘蛛视为没有限制,但也就失去了 Sitemap 这一入口信息。
- 返回 5xx 或超时:部分蜘蛛会暂时收敛抓取,等下次再试,抓取节奏可能被打断。
所以这个文件本身要足够轻:静态输出、纯文本、不要经过登录态或复杂跳转。
把 Sitemap 写进 robots.txt
在 robots.txt 末尾单独一行写 Sitemap,是最直接的 URL 清单入口之一。它省去蜘蛛额外试探的步骤,对新站或内链较浅的栏目更有帮助。需要注意:这一行只是告知,是否抓取、抓多少仍由蜘蛛自己决定,写了不等于会被收录。
如果站点有多个 Sitemap 索引文件,可以并列写多行。用索引文件时,最好确认索引里引用的每个分片都返回 200,否则蜘蛛顺着索引走下去,只会拿到一串死链,反而浪费一次抓取机会。
Disallow 挡住的不只是“页面”
常见的误配置,是用 Disallow 屏蔽后台、搜索结果页或带参数页面,却顺手把某条内链路径也关掉了。蜘蛛无法抓取被禁止的 URL,也就无法顺着它继续发现更深层的地址。
几个容易忽略的点
- 路径前缀匹配:写 /search 时,/search-tips 这类同前缀地址也可能被一并挡掉,写成 /search/ 更稳妥。
- 通配符与结尾符:* 和 $ 能提高精确度,但写错也容易收紧过度或放宽过度。
- 禁止抓取不等于不收录:被 Disallow 的地址若从别处获得外链,仍有可能出现在结果里,只是内容由外部信息推断,准确性无从保证。
如果目标是“不要被抓”,用 robots.txt;如果目标是“不要被收录”,robots.txt 往往不是合适的工具。
抓取频率与规则缓存
robots.txt 会被缓存一段时间,改动之后未必立刻生效。Crawl-delay 一类字段各家支持程度不同,不适合当作流量控制的总开关;真正的抓取节奏更多取决于站点响应速度、错误率和内容更新频率。响应快、错误少的站点,蜘蛛通常愿意多走几条链接。
一份简短的巡检清单
- robots.txt 是否返回 200,内容是否为纯文本。
- Sitemap 行是否指向可访问的索引或清单文件。
- Disallow 的路径前缀是否误伤了正常栏目。
- 被屏蔽的目录里,是否存在希望被发现的内链。
- 改动后是否在抓取日志里确认蜘蛛重新读取了该文件。
改动之后怎么观察
与其反复调整规则,不如看日志:蜘蛛请求 robots.txt 的时间、抓取 Sitemap 的频次、被禁止路径出现的 403 记录,都能反映配置是否落地。连续观察几天再决定下一步,通常比频繁改动更稳妥。