先给结论:当收录入口本身能访问、返回正常,而更深的页面或链接层级迟迟没有进入索引时,断点通常不在“入口是否可达”,而在“从入口到深层节点之间,爬虫是否被引导、被允许、被正确解析”。要定位它,不能只看入口状态码,而要沿链路逐跳验证“发现—允许—可解析—可索引”四个环节,哪一跳开始出现只有部分节点通过的现象,断点就在那一跳。
入口页面返回 200,只证明这一个 URL 对爬虫可见。它不证明入口上的链接被解析、不证明深层 URL 被加入抓取队列、也不证明深层页面通过了索引判断。常见矛盾是:入口页在索引里,入口页指向的分类页或详情页却没有。此时问题往往出在入口到深层之间的“传递”环节,而不是入口本身。
一个容易被忽略的条件是:入口页可能对用户正常渲染,但链接是脚本运行时才插入的。爬虫拿到初始 HTML 时,链接尚未出现,于是深层节点从未被发现。这种情况下入口状态码永远正常,深层链路却始终断着。
深层链路失效,先分成两类互斥解释,能大幅缩小排查面。
这两类的处理方向完全不同:前者要修“发现路径”,后者要修“页面本身或索引信号”。如果混在一起查,很容易在入口页反复确认状态码,却始终碰不到真正的断点。
关键是拿到“深层 URL 有没有被请求过”的证据,而不是只看最终是否被索引。
需要提醒的是:日志里没有请求记录,不能单独证明“爬虫从未发现”。日志可能被轮转、被采样、被过滤,或爬虫请求走了另一台机器。反过来,抓取量归零也不能直接证明处理正确。要结合多个信号交叉判断,而不是把单一现象当结论。
假设某站入口页 /list 正常且已被索引,它指向的详情页 /item/123 长期未收录。按上面的方法走一遍:
/item/ 路径下没有任何爬虫请求记录——偏向解释一。/list 的初始 HTML,发现详情链接由前端脚本在交互后插入,初始源码里没有 <a href="/item/123">。<a> 形式放进初始 HTML,或补进站点地图。/item/ 是否开始出现爬虫请求。若出现请求但仍未索引,说明断点已从“发现”移到“索引判断”,排查方向随之切换到解释二。这个例子的价值在于:每一步动作都改变了下一步的观察对象,而不是停在入口页反复确认。
定位断点时,有几个前提必须分清,否则会把正常现象当成故障。
定位断点的核心动作始终是:先判断深层 URL 有没有被请求,再决定修发现路径还是修索引信号。只要这一步的证据方向明确,后续排查就不会在入口页原地打转。