先给结论:入口正常只说明抓取链路的第一跳可用,断点通常出现在第二跳之后。定位方法是把“从入口到目标页”的每一跳单独验证,而不是反复检查入口。具体做法是取一条真实深层路径,逐跳请求并记录状态码与响应体,找到第一个与预期不符的节点,再决定是修服务端、修前端路由,还是改内链结构。
深层链路失效有两种常见形态,处理方向完全不同。
区分方法很直接:对同一路径分别请求原始 HTML 和渲染后的 DOM,比较正文是否出现。若原始 HTML 为空但渲染后有内容,属于第二类;若某跳直接报错,属于第一类。这个判断决定了下一步是查日志还是查前端。
不要拿首页当样本。从站点地图或内链中挑一条层级最深的 URL,例如列表页到详情页再到分页,把它拆成跳数。
一个假设例子:入口页 A 正常,A 到 B 的链接写在 <a href="/b"> 中,B 返回 200,但 B 到 C 的链接由点击事件触发,HTML 里没有对应 href。逐跳检查时,C 这一跳在原始 HTML 中根本不存在,断点就在 B 的链接输出方式上。这个判断只是说明比较方法,不代表任何真实站点的结果。
找到断点后,常见有两条路,选择取决于断点性质。
href,让每一跳在原始 HTML 中可达。代价是改动模板或组件,可能影响现有交互;收益是链路对不执行脚本的抓取也稳定。选择条件:若断点是链接缺失且页面本身是静态内容,优先修链接输出;若页面内容确实依赖异步接口且无法预渲染,才考虑渲染层,并单独确认渲染后的正文可见。两种做法都要在改动后重新跑一遍逐跳清单,确认断点消失。
状态码归零或某跳恢复 200 不能单独证明链路已通。还有几种合理解释:请求被缓存返回旧响应、网关对特定 UA 返回不同结果、或目标页返回 200 但正文仍为空。因此修复后要同时核对响应体是否包含预期正文,而不只看状态码。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。若断点涉及这些配置,应把它们当作独立变量分别验证,不要因为某一项改动后抓取量变化就断定因果。
定位完成后,输出一份最小处理单:断点所在跳数、该跳的 URL、请求方式、实际状态码与响应体特征、预期状态、修复动作、复验方法。这样开发或运维接手时不需要重新走一遍排查。
复验时用同一条路径重跑,并额外抽查两条同层级路径,确认修复不是只对单页生效。若同层级路径仍断,说明问题在模板或路由层,而不是单页数据。这个结果会直接决定下一步是扩大修复范围,还是回到逐跳清单重新定位。