深层链路失效,通常不是入口页面本身被拒绝抓取,而是从入口到目标页之间的某一段路径没有被爬虫继续走完。最有效的做法是:先选一条最短的入口到目标页路径,逐段检查每一跳的链接是否真实可抓、是否依赖交互、返回状态是否正常,再判断断点落在哪一跳。缺少完整日志或后台权限时,这个最小动作仍然可执行,但只能定位到“哪一跳可疑”,不能直接得出“整站规则配置错误”的结论。
入口页面正常、深层页面不出现,最常见的两种解释是:
这两种解释的处理方向完全不同:前者要修链接和规则,后者要收敛可发现 URL 的数量和层级。如果只凭“深层页没被抓”就改 robots.txt 或加大站点地图,很可能改错地方。
区分它们的关键证据是“每一跳是否独立可发现且可返回”。可以按下面的顺序取证:
<a href> 形式存在,而不是只在点击后由脚本插入。如果某一跳返回 200 且链接在源码中可见,但爬虫没有继续,问题更偏向抓取预算或优先级;如果某一跳返回 4xx/5xx、需要交互才出现,或被规则屏蔽,断点就在那一跳。
假设入口页 /a 正常,目标页是 /a/b/c。手动点击时,/a 上的链接指向 /a/b,而 /a/b 上的链接由脚本在滚动后生成。直接请求 /a/b 返回 200,但源码里没有指向 /a/b/c 的 <a href>。此时断点在第二跳到第三跳:不是入口页被拒,而是第三跳在初始 HTML 中不可发现。下一步应把该链接改为服务端输出或静态可发现形式,而不是去改入口页的规则。反过来,如果 /a/b 源码里有链接但返回 403,则断点在第二跳本身,应先处理该 URL 的可访问性。
没有抓取日志、没有搜索后台权限时,仍可执行的最小动作是:用浏览器开发者工具或直接请求,逐跳记录状态码、最终 URL 和源码中是否存在下一跳链接。这个动作能回答“链路是否可发现、是否可返回”,从而把断点缩小到具体一跳。
但它不能直接推出以下结论:
把断点定位到具体一跳后,下一步应针对该跳做最小修改并重新验证同一路径,而不是同时改动多个规则,否则无法判断是哪项改动起了作用。