先澄清一个常见误解
在蜘蛛池和站点运营里,有一种很常见的判断方式:只要服务器日志里出现了搜索蜘蛛的 UA,访问了入口页,就认定入口页里的目标链接已经被发现和跟进。这个结论其实跳了一步。
搜索蜘蛛抓取一个页面,和它从页面里提取链接、排队、再抓取那些目标 URL,是两个独立动作。入口页被抓,只能说明这个页面本身进入了抓取队列;目标 URL 是否被跟进,还要看链接有没有被解析、有没有被过滤、有没有排上队。
日志里应该看哪几个信息
第一,请求的 URL 是不是目标 URL
很多日志把入口页和目标页混在一起看,容易误判。建议先把入口页 URL 单独标记出来,再筛选目标 URL 的请求记录。如果目标 URL 从来没有出现过,说明至少在当前观察周期内没有被实际抓取。
第二,状态码和响应大小
- 200 且响应体有正常内容:通常说明目标页被真实抓取了
- 200 但响应体极小,比如只有几字节:可能是空页或者被拦截
- 301 或 302:说明抓取请求发生了,但落到了跳转上,需要看跳转终点
- 403、429、503:多半是被服务器拒绝或限流,不等于被正常抓取
- 404、410:被抓了,但目标已经不存在
第三,抓取时间线
把入口页的抓取时间点和目标 URL 的首次抓取时间点放在一条时间线上看。合理的情况是入口页被抓之后,目标 URL 在一段时间内陆续出现。如果入口页反复被抓、目标 URL 却一直没有任何记录,问题更可能出在入口页本身,而不是目标站。
入口页被抓了、目标没被跟进的常见原因
- 链接写在 JavaScript 里,而抓取端没有执行渲染,链接根本没被解析出来
- 链接带了 nofollow,或者页面级存在 noindex、nofollow 指令
- 入口页链接数量过多,目标排到了队列很靠后的位置
- 目标 URL 本身在 robots.txt 里被禁止抓取
- 目标站响应慢或频繁返回 5xx,抓取被推迟甚至放弃
- 入口页返回的内容与日志中看到的不一致,比如按 UA 返回了不同版本
这些原因里,只有最后一条属于比较隐蔽的情况,其余都可以通过查看入口页 HTML 源码和 robots.txt 快速排除。
一套可执行的验证流程
- 选定一到三个入口页,记录下页面里所有目标 URL,形成对照清单。
- 在服务器日志中按时间范围筛选,统计入口页和目标 URL 各自的请求次数与状态码。
- 检查入口页 HTML 源码,确认目标链接是真实的 a 标签,且没有 nofollow 等限制。
- 检查目标站 robots.txt,确认没有把目标路径整体屏蔽。
- 观察至少一到两周,看目标 URL 是否开始出现抓取记录。
- 如果仍然为零,优先怀疑入口页的输出方式,而不是继续加量投放。
需要说明的是,被抓取和进入索引是两件事,本文只讨论抓取路径的验证,不涉及也无法保证收录结果。
几个容易踩的坑
- 只看蜘蛛 UA 的总访问量,不看具体 URL,把入口页的抓取误当成目标页的抓取
- 用第三方统计工具代替服务器日志,采样和过滤导致数据缺失
- 观察周期太短,抓取排队本身就有延迟,几天没动静不代表有问题
- 入口页被频繁抓取就不断加链接,反而让抓取预算被入口页本身消耗掉
小结
入口页被搜索蜘蛛抓取,只是 URL 发现链条上的第一步。真正要确认的是目标 URL 有没有出现在日志里、以什么状态码出现、出现在什么时间点。把这三件事看清楚,再判断是继续优化入口页结构,还是回头检查目标站自身的可抓取性,方向会清晰很多。