robots.txt 通常只有几行,却是爬虫访问站点时最先读取的文件之一。它不控制页面能否被索引,只控制爬虫能不能抓取某个路径。一旦写错,轻则部分目录长期不被发现,重则整站抓取量骤降,而页面本身看起来完全正常,排查时很容易被忽略。
这个文件为什么容易出问题
它改动成本极低,谁都能改,也常常没人记得改过。上线新功能时顺手加一条 Disallow,测试完忘了删;把预发环境的规则复制到正式站;交接时只改了域名没改路径。这些操作都不会报错,页面照样正常访问,问题只体现在抓取和 URL 发现上,可能要过几周才从数据里看出来。
自查时重点确认的几件事
1. 是否误封整站或关键目录
- 顶部的 Disallow: / 是否存在,是否有意为之。
- 栏目、商品、文章详情等需要被抓取的目录,有没有被一条宽泛规则覆盖。
- Disallow 的路径是前缀匹配,写 /news 会连带屏蔽 /news-2024 这类同前缀地址。
2. 通配符与结尾符号
* 匹配任意字符串,$ 表示路径结束,两者用不好会扩大屏蔽范围。例如 Disallow: /*? 会屏蔽所有带参数的地址,而筛选页、分页往往依赖参数,容易把正常内容一起挡掉。建议逐条用真实 URL 推演一遍匹配结果。
3. Sitemap 是否声明正确
在文件末尾写 Sitemap 只是辅助发现,但漏写或写成相对路径,会让蜘蛛少一条发现线索。确认协议、域名、路径完整,并且该地址能正常返回 200。
4. 文件本身能否正常读取
- 返回 200,Content-Type 为 text/plain,不要返回 HTML 页面或 302 到登录页。
- 如果返回 404,多数爬虫会视为允许抓取;返回 403 则可能被理解为完全禁止,两者含义并不相同。
- 路径必须是根目录下的 /robots.txt,大小写敏感,子目录里的同名文件通常不被读取。
5. 别把它当权限工具
robots.txt 是约定,不是访问控制。敏感目录、后台地址应通过登录鉴权、IP 限制等方式保护。另外,用 Disallow 想阻止页面被索引并不可靠:如果其他站点链接了该地址,它仍可能出现在结果里,只是摘要缺少内容。抓取与索引是两件事,需要分开处理。
怎么验证改动是否生效
- 用浏览器直接访问 /robots.txt,确认内容和状态码。
- 选几条有代表性的 URL,对照规则手工推演是否被抓取。
- 改动后观察服务器日志里该目录的抓取记录变化,注意给爬虫留出反应时间。
- 把本次改动、时间和原因记在运维记录里,避免下次又靠猜。
规则写得越细,出错面越大。能用站点结构解决的问题,不要靠一长串 Disallow 补丁来兜。
一份简单的检查清单
- 没有遗留的整站屏蔽指令;
- 关键目录与详情页处于可抓取状态;
- 通配符和 $ 的用法经过真实 URL 验证;
- Sitemap 地址完整且可访问;
- 文件状态码与类型正确,位于根目录;
- 改动有记录,验证有依据。
把这几步做完通常只要十几分钟,却能避免很多“内容明明在,蜘蛛却像没来过”的困惑。定期复查一次,比出问题后再翻日志省事得多。