robots.txt 是蜘蛛在抓取前会读取的第一个文件,它决定哪些路径可以进入、哪些应当绕开。很多站点把它当成"屏蔽敏感目录"的工具,却忽略它对 URL 发现的连带影响:一条写得太宽的 Disallow,会让整段目录既不被抓取,也不再通过该路径暴露内链。
robots.txt 在抓取链路里的位置
蜘蛛的典型顺序是:读取 robots.txt,判断目标 URL 是否允许,再请求页面并解析页面内的链接。也就是说,它影响的是"能不能进门",而不是页面质量好不好。有两点容易被忽视:
- Disallow 只阻止抓取,不等于 noindex。如果该 URL 仍从别处被引用,它有可能以无描述的形式出现在结果里。
- 被 Disallow 的页面,蜘蛛不会去读它上面的链接,这一段内链等于被切断。
常见规则的核对点
路径匹配方式
多数爬虫按前缀匹配。写 Disallow: /search 会同时命中 /search、/search/result 甚至 /searching 这类地址。若只想限制某个目录,建议带上尾斜杠写成 Disallow: /search/,边界更清楚。
通配符与结尾符
部分爬虫支持 * 和 $,例如 Disallow: /*?print= 用来屏蔽打印参数。不支持这些符号的爬虫会把它们当作普通字符处理,实际效果与预期不同。规则上线后,最好用日志抽样核对真正被拦下的 URL 是否符合设想。
Crawl-delay 的实际效力
Crawl-delay 并非所有搜索引擎都遵循。Google 明确表示不使用该指令,抓取速度在搜索控制台里调整;Bing 等则部分支持。把限速完全寄托在这条指令上并不稳妥,服务器层面的限流、缓存与静态化才是更可靠的兜底。
Sitemap 声明与入口一致性
robots.txt 末尾常用 Sitemap: 行声明站点地图地址,这是发现新 URL 的一条捷径。核对时留意:
- 声明的地址要能正常访问,返回的是地图文件而不是登录页或错误页。
- 协议与域名要和规范地址一致,避免 http 与 https、www 与非 www 混用。
- 若某个目录已被 Disallow,就不要把该目录下的 URL 放进 Sitemap,两边冲突时容易白跑。
一份可执行的核对顺序
- 直接在浏览器打开 /robots.txt,确认返回 200 且是纯文本,而不是被前端路由接管的页面。
- 逐条阅读 Disallow,标出是否误伤站内搜索、分页、静态资源等路径。
- 用抓取日志抽样,看被拦的 URL 里是否存在本应被抓的详情页或列表页。
- 检查 Sitemap 声明与实际文件是否都能访问,内容是否为最新版。
- 改动后留出观察周期,对比抓取量与有效 URL 数的变化,再做下一轮调整。
把 robots.txt 当作抓取边界的说明文件,而不是万能开关。它能减少无效抓取,也可能顺手切断一条 URL 发现路径。