robots.txt 常被当成一个一劳永逸的开关,但它实际只做一件事:告诉遵守规则的蜘蛛,哪些路径不必来抓。它既不控制页面是否被收录,也不是访问权限工具。很多站点的问题不在于没写这个文件,而是写了一行语义含糊的规则,把本来该抓的路径一起挡在了外面。
先分清职责边界
被 Disallow 的 URL 并不会自动从结果里消失。如果它此前被抓取过,或者有外链指向它,仍可能以别的方式出现,只是内容不是来自本站的实时抓取。反过来,想让某个页面不进入索引,更合适的做法是在页面里返回 noindex;想限制访问,则要用登录校验或 IP 限制。把这三件事混在一起处理,最容易出问题。
常见的几类误配置
整站被挡
- Disallow: / —— 等于告诉蜘蛛整个站点都不用抓,多发生在测试环境配置被同步到线上的时候。
- 测试阶段用的域名被写进规则,正式域名下同一份文件被原样复制过去。
通配符范围过宽
Disallow: /*? 会挡掉所有带查询参数的 URL,筛选页、分页、排序版本会一起消失。如果列表页的翻页本身就依赖参数,蜘蛛就断在半路。写通配符之前,先把站内用到的参数列出来,确认哪些真的不需要被访问。
Allow 与 Disallow 同时命中
同一条路径既被 Allow 又被 Disallow 覆盖时,通常按最长匹配决定;长度相同时,Allow 优先。所以想放开某个子目录,把 Allow 写得更具体就够了,不一定非要把父级规则删掉重写。
大小写与结尾斜杠
robots.txt 里的路径区分大小写,/Search/ 与 /search/ 是两条不同规则。结尾斜杠同样有区别,写成 Disallow: /tag 会挡住 /tag 以及所有以 /tag 开头的路径,覆盖面可能比预期宽不少。
顺手挡掉了 CSS 和 JS
渲染依赖样式和脚本的站点,如果把 /assets/ 或 /static/ 一并挡掉,蜘蛛取到的页面结构可能和用户看到的相差很远,页面里的链接发现也会受影响。这类目录通常不应该出现在 Disallow 列表里。
它和 Sitemap、noindex 怎么配合
- robots.txt:划定抓取范围,减少无意义的请求。
- Sitemap:提供 URL 的发现入口,可以在 robots.txt 里用 Sitemap 指令声明它的位置。
- noindex:控制页面是否进入索引,和抓取范围是两件事。
- canonical:处理同一内容多版本并存的问题。
不要用 Disallow 去清理重复内容。URL 被挡住之后,蜘蛛读不到页面里的 noindex,反而可能长期保留一个没有内容的空壳。
改动前后可以做的检查
- 直接访问 /robots.txt,确认状态码正常、返回的是纯文本而不是错误页。
- 逐条读规则,标出每条实际影响的目录,特别留意通配符的位置。
- 确认 Sitemap 的声明地址可以访问,且内容与当前 URL 结构一致。
- 改动后用日志验证:被挡的路径蜘蛛不再请求,该抓的路径请求量没有明显下滑。
- 观察一到两周,看各目录的抓取分布是否出现异常倾斜。
从日志里确认规则的效果
规则是否按预期生效,最终要落到请求日志上。按目录统计蜘蛛请求量,改动前后各取一段做对比,能看出哪些目录被放开了、哪些彻底安静了。如果发现某个栏目请求量突然归零,先回头看 robots.txt,再排查是否有其他拦截层在起作用。
把 robots.txt 当成一份需要定期复核的配置,而不是写完就忘的文本文件,蜘蛛的抓取路径通常会稳定很多。