入口页和链接结构安排好了,还是经常有人问:robots.txt 要不要写、sitemap 要不要放。这两个文件不是开关,写错了反而会把本来能抓的路径挡掉,等于自己给爬虫关门。
robots.txt 在蜘蛛池里的实际作用
它只是一个约定,遵守与否取决于爬虫方。真正有用的地方是减少无效抓取,把有限的抓取次数留给想被发现的入口页和目标页。
- 先保证没写错:Disallow 后面跟的是路径,不是完整网址;不同 user-agent 组之间用空行分隔,否则前一组规则会把后一组吞掉。
- 别顺手全站禁止:测试环境留下的 Disallow: / 忘了删,是日志里抓取量突然归零最常见的原因之一。
- 挡掉该挡的:后台路径、站内搜索结果页、带排序和筛选的无限参数、重复的打印页,放出来只会消耗抓取配额。
- 留出入口页目录:如果入口页集中在某个目录下,确认它没有被别的规则意外覆盖。
- 声明 sitemap 位置:在文件末尾用 Sitemap 指向地址,成本很低,顺手写上没坏处。
还要注意 robots.txt 和 meta robots 的分工:前者管整站路径,后者管单个页面。meta robots 里的 noindex 只对已经抓到页面的爬虫起作用,如果 robots.txt 先把路径挡住,爬虫可能压根看不到那条 noindex,两套规则别互相打架。
sitemap 值不值得放
它的作用是把地址主动列出来,减少爬虫自己摸索的成本。入口页只有几十条时收益有限;几百上千条时,它能让发现路径更直一些。
放什么地址
- 只放入口页和少量高价值目标页,不要把整站所有地址一股脑塞进去。
- 同一批地址不要在多份 sitemap 里重复出现,重复本身就是噪音。
- 状态码要干净:列表里出现 404,或者 301 跳到完全不相干的地方,整份文件的可信度都会下降。
分片与更新
单份文件建议控制在几万条以内,超了就拆成索引加子文件。更新频率跟着入口页的实际变化走,内容没动就没必要每天重写时间戳。
几个常见误区
- 用 robots.txt 挡目标页,却指望入口页把爬虫带过去——被挡的路径爬虫不会主动访问,这条链路是断的。
- sitemap 里塞大量跳转地址,爬虫跟过去拿到的是另一套内容,反而浪费了抓取。
- 改完 robots.txt 就以为抓取会立刻变化。生效有延迟,日志要观察几天再下结论。
落地时的检查顺序
- 浏览器直接打开这两个地址,确认能正常访问,不是 404,也不是登录页。
- 逐条核对 Disallow 规则,确认没有覆盖入口页目录。
- 从 sitemap 里抽查五到十条地址,看看返回的状态码。
- 过几天翻日志,看被抓的路径是否落在预期范围内。
这两个文件解决的是“让爬虫少走弯路”,不解决“愿不愿意抓”。抓取量最终取决于入口页本身的更新、结构和被访问的价值。
所以别把它们当成优化按钮。规则写清楚、别自相矛盾、别挡住自己要走的路,这部分工作就算做到位了。