入口页上线一段时间,日志里能看到搜索蜘蛛来过,但目标 URL 的抓取记录一直没出现。这种时候很多人第一反应是“入口页不够多”或者“目标站被惩罚了”,其实更常见的是一两个具体的技术细节把跟进路径掐断了。判断顺序比数量更重要。
先分清“跳过”是哪种表现
日志里的“来过”和“抓了”是两件事,先把现象归类,后面的排查才不至于乱。
- 入口页被抓,页面里的链接一条都没被请求:问题多半出在链接本身或页面解析环节。
- 入口页被抓,部分链接被请求,目标 URL 没有:可能是链接位置、数量或页面体量导致抓取中断。
- 链接被请求了,目标 URL 返回异常或请求失败:问题在目标站一侧。
入口页侧的排查
链接是否真的能被解析出来
把入口页 HTML 直接拉下来看源码,而不是看浏览器渲染后的效果。常见问题包括:链接由 JavaScript 动态插入、锚点写成按钮、href 为空或写成井号、被前端框架包在需要交互才展开的容器里。搜索蜘蛛拿到的是原始 HTML,看不到点击之后才出现的东西。
页面的响应与状态
确认入口页返回的是 200,不是 302 跳去别处,也不是带 noindex 的页面。如果入口页本身把蜘蛛导向了另一个地址,蜘蛛会去抓那个地址,入口页里的链接自然无人问津。
链接是否过于集中
一个页面塞几百条链接、正文几乎没有,蜘蛛可能只抓前面一小部分就离开。链接数量和页面体积的取舍属于抓取预算问题,和目标站质量无关。
目标站侧的排查
- 目标 URL 是否可正常访问:状态码是否正常、跳转链是否过长、是否对部分 UA 返回不同内容。
- robots.txt 是否屏蔽了对应目录或蜘蛛。
- 页面是否自带 noindex,或者 canonical 指向了别的地址。
- 目标站服务器是否对陌生来源的请求做了限速或拦截,导致蜘蛛请求失败。
这一侧的特征是:链接被请求过,但返回结果不理想,或者请求直接失败。和入口页没关系,继续加入口页也解决不了。
用日志做交叉验证
- 按 UA 过滤出搜索蜘蛛的请求行,先确认入口页确实被抓过。
- 在入口页被抓的时间点之后,查同一蜘蛛 IP 段是否请求过目标 URL。
- 把请求结果状态码一起看:是 200、404、5xx,还是根本没请求。
- 对比不同入口页:如果所有入口页的链接都没被跟进,问题偏向入口页;如果只有某一个入口页的没被跟进,问题多半在这一页。
几个容易误判的情况
一是时间窗口太短。发现链接和真正抓取本来就不是同一个动作,隔几个小时看没动静不代表失败,建议观察几天再下结论。二是把“蜘蛛来过首页”当成“蜘蛛扫过全站”,很多入口页只被抓了根地址,内页链接还没轮到。三是只看第三方工具的数据,工具抽样和真实日志有出入,以自己服务器的日志为准。
排查顺序建议固定下来:先确认现象属于哪一类,再看入口页能否被解析和抓取,最后才查目标站。反过来查,很容易在目标站上白折腾半天,真正的问题却在入口页的一行 HTML 里。
如果两边都排查过仍然没有跟进记录,可以把入口页数量、链接形态、目标站状态整理成一份对照表,小范围改动后再观察,而不是一次性全量调整——否则改完之后你也不知道是哪一步起了作用。