做蜘蛛池的人常遇到一种情况:入口页正常、链接也放对了,但目标URL 始终不见抓取记录。排查到最后才发现,目标站自己的 robots.txt 里有条 Disallow,把整站或某个目录挡住了。这时候问题已经不在蜘蛛池这一侧了。
先把发现、抓取、索引三件事分开
这三件事经常被混在一起说,但它们的负责人完全不同:
- 发现:搜索引擎从某个页面拿到一个 URL,知道它存在。蜘蛛池主要作用在这一层。
- 抓取:爬虫真正去请求这个 URL,拿到状态码和内容。这一步受 robots.txt、服务器状态、抓取预算影响。
- 索引:抓到的内容经过处理进入索引库。这一步由搜索引擎自己判断,外部无法直接决定。
蜘蛛池能做的是让发现这一步发生得更频繁一些,但它不改变后两步的规则。把这一点记住,很多排查就能少走弯路。
发现不等于抓取,抓取不等于索引。这是排查 URL 问题时最容易混淆的一条线。
目标站的 robots.txt 会拦住抓取
robots.txt 是放在被抓取站点根目录下的文件,遵守协议的爬虫在请求之前会先读取它。如果目标URL 落在 Disallow 范围内,即使爬虫已经从入口页知道了这个地址,也不会发起抓取请求。目标站日志里看不到请求,索引里自然也不会有。
这里有个容易忽略的细节:robots.txt 拦的是抓取,不是发现。所以 URL 仍然可能以某种形式出现在结果里,只是缺少描述和快照,或者干脆不展示。不少人因此误以为页面已经被索引,其实是两回事。
入口页的 robots.txt 是另一份文件
入口页自己所在的域名也有一份 robots.txt。如果入口页被 Disallow,爬虫根本读不到页面内容,链接自然也拿不到。这两份文件互不替代,需要分别确认,而不是只看其中一份就下结论。
几种常见情况怎么判断
- 目标站整站 Disallow:爬虫完全不请求目标URL。此时蜘蛛池带来的发现没有出口,应该先去目标站处理 robots 设置。
- 只屏蔽了部分目录:未被屏蔽的页面仍可能被抓取,可以优先把入口页的链接指向可抓取的路径。
- robots.txt 写错或返回 5xx:不同爬虫的处理方式不完全一致,有的会短暂保守处理。建议先让这个文件稳定返回 200,且内容没有明显语法问题。
- 入口页自己被 Disallow:换一个可抓取的入口页,或者调整入口页自身的 robots 设置,再观察日志。
怎么快速确认
- 直接访问目标站根目录的 robots.txt,逐行看 User-agent 和 Disallow 的写法。
- 翻目标站服务器日志,看有没有爬虫请求。没有请求,比有请求但没索引更值得警惕。
- 用搜索引擎自带的 URL 检查工具看抓取状态,通常能直接提示是否被 robots 拦下。
- 对照入口页日志,确认爬虫确实来过入口页,也确实看到了那条链接。
几个容易踩的坑
第一,robots.txt 只对遵守协议的爬虫有效,但它依然是排查的第一站。第二,一边把目标URL 写进 Disallow,一边希望通过蜘蛛池让页面被抓取,这两件事本身互相矛盾。第三,入口页数量再多、更新再勤,也改变不了目标站自身的抓取许可。第四,如果目标URL 返回 404,或者重定向到了别的地址,即使在允许抓取的范围内,爬虫拿到的也不是你期望的内容。
总结一下:蜘蛛池管的是发现,robots.txt 管的是抓取许可,索引由搜索引擎自己决定。目标URL 被 robots 拦住时,先修目标站,再谈入口页怎么安排。