做蜘蛛池和 URL 发现的人,经常盯着日志看。最常见的困惑是:入口页的访问日志里明明出现了搜索蜘蛛的 UA,也返回了 200,但目标站那边始终没有对应的抓取记录。这种情况不一定是"蜘蛛池没用",多数时候是某一个环节把链路断掉了。下面按排查顺序拆开说。
先区分三份日志
在排查之前,先确认你看的是哪一份日志,否则很容易得出错误结论。
- 入口页服务器日志:能看到蜘蛛是否来过、抓的是哪个 URL、返回什么状态码。
- 目标站服务器日志:能看到蜘蛛是否真的请求了目标 URL、返回什么状态码。
- 抓取频率的间接证据:比如入口页日志里蜘蛛的访问间隔、抓取条数、是否反复回访。
只有入口页日志、没有目标站日志,说明蜘蛛来过但没顺着链接走;两份日志都有,只是时间差几小时到几天,那属于正常的调度延迟,不算问题。
蜘蛛来了却没抓目标 URL 的常见原因
1. 链接不在初始 HTML 里
如果目标链接是前端 JS 渲染后才出现的,蜘蛛拿到的原始 HTML 里可能根本没有这个 URL。判断方法很简单:用 curl 或者关闭 JS 的浏览器抓一次入口页源码,搜索目标域名。源码里搜不到,就别指望蜘蛛能发现。
2. 入口页本身抓取频率极低
新入口页、权重低的域名、被判定为低质量的页面,蜘蛛可能只抓一次首页就再不来了。只抓一次的时候,它倾向于抽取页面里少量链接,未必会覆盖全部目标 URL。
3. 目标 URL 被某种规则挡住
- 链接带 rel="nofollow":蜘蛛可能不抓,或者抓了也不传递任何信号。
- 目标站自己的 robots.txt 屏蔽了对应目录或参数。
- 目标站防火墙对蜘蛛 UA 或 IP 做了拦截,请求被 403/503 挡回,日志里可能看不到完整记录。
- 链接经过 301/302 链,中间某一跳被拦截或跳到了不允许抓取的地址。
4. 入口页返回状态有问题
入口页返回 200 但内容为空,或者 CDN 缓存了旧版本,蜘蛛看到的就是旧页面。新加进去的目标链接自然不会被抓。
5. 就是调度延迟
URL 被发现和真正抓取之间隔几天很常见。特别是目标站响应慢、站点整体抓取预算有限时,蜘蛛会把新发现的 URL 排进队列慢慢抓。
建议的排查顺序
- 确认入口页返回 200,且缓存已刷新到最新版本。
- 用 curl 抓源码,确认目标 URL 确实出现在 HTML 里。
- 检查链接是否带 nofollow、是否被 JS 改写或隐藏。
- 检查目标站 robots.txt 和防火墙是否放行蜘蛛。
- 对比入口页日志和目标站日志的时间戳,判断是不是延迟。
- 如果以上都正常,观察一到两周,别急着改结构。
几个容易被误判的情况
蜘蛛抓了入口页却没抓目标 URL,就说明蜘蛛池无效?不一定。发现和抓取是两步,入口页被频繁抓取本身就说明链路存在,只是还没轮到目标 URL。
日志里看不到蜘蛛,就是被屏蔽了?也可能是日志采样、CDN 不回源,或者蜘蛛使用压缩请求导致日志格式不同。
把入口页当成"链接的存放处",而不是"抓取加速器",很多预期落差会小很多。蜘蛛池能影响的是 URL 被看到的机会,不是抓取和收录的结果。
小结
蜘蛛访问入口页、没抓目标 URL,最常见的原因依次是:链接不在源码里、入口页本身抓取频率低、目标 URL 被规则挡住,以及正常的调度延迟。按上面的顺序逐条排除,比反复调整入口页结构更有效。也别忘了,URL 被发现只是第一步,能不能被收录,还要看目标页自身的内容质量。