很多人在做蜘蛛池时,把精力都放在入口页能不能吸引搜索蜘蛛上,却忽略了一个前提:入口页只负责“发现”,真正被读取、被处理的是目标 URL 自己。日志里出现了蜘蛛 UA,却看不到目标 URL 被抓成功的记录,问题常常不在入口页,而在目标 URL 的配置上。
先分清两件事:被发现和被抓取
搜索蜘蛛顺着入口页的链接走到目标 URL 时,会经历几次判断:能不能访问、返回什么状态、内容是否需要渲染、这个地址是否允许被处理。任何一步不通过,这次抓取就停在半路,但入口页那一侧的日志可能看起来完全正常。
入口页解决的是“蜘蛛怎么知道有这个 URL”,目标 URL 解决的是“蜘蛛来了以后愿不愿意读”。两者是两套问题,排查时不要混在一起。
目标 URL 侧最常见的拦截点
1. robots.txt 与 meta robots
- 站点根目录的 robots.txt 如果对蜘蛛 UA 做了 Disallow,蜘蛛可能连请求都不会发出,日志里自然也看不到。
- 页面 head 里的 meta robots 写了 noindex,或者 X-Robots-Tag 响应头带了 noindex,页面会被抓取但不会被保留。
- 有些站点对非浏览器 UA 单独做了规则,测试时用普通浏览器能打开,不代表蜘蛛能拿到同样结果。
2. 状态码与跳转
- 目标 URL 返回 404、410,说明这个地址在服务器端已经不存在,入口页挂再多也没意义。
- 301 会改变最终落地地址;如果跳转链太长,或最终地址又在 robots 里被禁止,抓取同样会中断。
- 返回 5xx 时蜘蛛通常会退避重试,短时间失败不代表 URL 被放弃,但持续报错会降低抓取频率。
3. 内容加载方式
如果目标 URL 的核心内容依赖 JavaScript 渲染,而渲染资源被拦截、接口需要登录,或者首屏只有一个空壳,蜘蛛拿到的可能就是一个几乎没内容的页面。这种“抓到了但等于没抓到”的情况,日志里往往显示 200,很容易被误判为正常。
4. canonical 与重复地址
- 同一内容有多个地址(带参数、大小写不同、结尾斜杠差异)时,canonical 指向哪个地址,会影响蜘蛛最终保留哪个版本。
- 如果入口页指向的版本恰好是被 canonical 排除的那个,抓取行为本身没问题,但预期效果会落空。
一个可以照着走的自查顺序
- 先用支持自定义 UA 的工具模拟蜘蛛抓一次目标 URL,看响应码和首屏 HTML 是否完整。
- 检查 robots.txt 和页面级 noindex 设置,确认没有互相矛盾的规则。
- 确认跳转链路的终点地址、状态码正常,且终点也没有被禁止抓取。
- 把日志中的蜘蛛请求记录与服务器访问日志对照,看请求到底有没有到达目标 URL。
- 核对 canonical、参数版本和站内链接,确认入口页指向的是你希望被保留的那个地址。
几个容易被忽略的细节
- 登录墙与验证码:有些站点把蜘蛛也挡在了验证页,返回 200 但内容无效。
- CDN/WAF 规则:拦截页通常也返回 200,需要看响应体而不是只看状态码。
- 为蜘蛛单独放行:如果确实要放行,规则尽量写在明确的段位里,避免影响到正常访客。
把目标 URL 这一侧理顺之后,再看入口页的链接是否被跟进,判断会清晰很多:入口页负责把路口打开,目标 URL 负责把门打开,任何一边拧着,抓取都会停在半路。