先给结论:入口正常只能说明爬虫到达了第一层,不能证明第二层之后的链接被发现、被允许抓取或被正确解析。要定位断点,应把“入口→一级链接→二级链接”拆成可分别验证的三段,再决定保留现有结构、改写链接路径,还是退出这套内链方案。下面按这个顺序展开。
入口页面返回 200 且内容完整,只代表该 URL 可抓取。深层链路失效通常有两种性质完全不同的原因:一是链接压根没被爬虫发现,二是链接被发现但抓取被拒绝或失败。两者的证据不同,处理动作也不同。
判断依据是服务器访问日志中深层 URL 的请求记录是否存在。如果完全没有记录,先查发现路径;如果有记录但状态异常,先查响应本身。这一步决定了后面所有动作的方向,不要跳过。
假设站点是三级结构:首页→分类页→详情页。入口(首页)正常,但详情页不出现。可以按下面这个假设例子逐层验证,数字仅用于说明比较方法:
<a href>,确认分类页链接是服务端输出的,而不是脚本注入的。这个动作的结果会直接改变下一步:源码里没有链接,就要改输出方式;源码里有链接但没被抓,就要查 robots.txt、站点地图和链接是否被 nofollow 等属性阻断。
定位到断点后,处理方式不是唯一的。以下三种取舍各有成立条件,按实际情况选择,不必全部采用。
适用前提是断点集中在一处,且深层 URL 本身可正常访问。例如只有分类页的链接被写进了需要点击才加载的组件,而详情页 URL 直接访问是好的。此时把链接改为服务端可输出的形式,或补一条静态可达路径即可。保留的代价是结构不变,后续新增页面仍要遵守同一套输出规则。
适用前提是中间层(如筛选页、分页组件)本身不稳定或大量依赖脚本。此时可以增加一条从入口直达深层内容集合的链接,例如在入口页补充指向内容聚合页的静态链接。改写会改变站内链接分布,需要重新观察深层 URL 的抓取记录是否出现,而不是假设改完就一定生效。
适用前提是这条内链路径长期不可控,或它指向的内容本身不应被抓取。此时可以不再依赖该链路,改用站点地图提交深层 URL。需要注意:站点地图不保证收录,它只是提供发现线索;robots.txt 的抓取限制也不等于可靠的索引移除,两者解决的是不同问题。
断点定位过程中,有些现象容易被当成结论,但还有别的解释:
如果常规做法都试过仍未解决,按下面顺序做一遍,重点是记录每步结果如何影响下一步:
走完这四步,你会得到断点所在的明确层级。此时再决定保留、改写还是退出,依据是断点性质而不是猜测。定位动作本身不会自动修复链路,但它能把后续修改限定在真正失效的那一跳上,避免在正常环节反复调整。