先给结论:把“入口正常”当作起点而不是结论,沿着站内链接、状态码、渲染后内容、抓取限制四条线逐层往下走,哪一层开始出现“入口有链接、深层拿不到有效内容”,断点就在那一层。入口页面能被抓取,只能证明这个URL本身可达,不能证明它指向的深层页面同样可达。
不要一上来就全站排查。选一条从入口到目标深层的真实路径,比如首页 → 栏目页 → 列表页 → 详情页,只保留四到五跳。把每一跳的URL、返回状态、页面里指向下一跳的链接形式记下来,形成一条对照链。
判断标准很直接:如果第N跳能正常返回并被抓取,但第N+1跳在页面源码里找不到可跟随的链接,断点就在第N跳的链接输出环节;如果链接存在但第N+1跳返回异常状态,断点就在目标页本身。这个区分决定你接下来改模板还是改单页,动作方向完全不同。
深层链路失效最常见的原因,不是深层页面不存在,而是入口到深层的链接“看着有、实际不可跟随”。需要逐项确认:
<a href>;nofollow、rel属性或事件绑定替代了真实跳转;如果入口页面渲染后能看到链接,但抓取工具拿到的初始HTML里没有,那断点属于渲染依赖,而不是页面缺失。此时要做的动作是让关键深层链接在初始响应中就可跟随,或者确认渲染服务能稳定执行到链接出现的那一步。做完这一步后,再回看深层URL是否开始被正常访问,才能判断是否还有第二处断点。
深层链路失效有两种表现容易混淆:一种是抓取请求根本到不了目标页,另一种是到了但拿到的是空壳或跳转页。用状态码和重定向链可以把两者分开。
假设一个场景:某详情页在浏览器里正常,但抓取时被301到栏目首页。这时断点不在详情页内容,而在重定向规则——可能是参数规范化或大小写处理把深层URL改写了。修正规则后,下一步应重新观察该详情页是否以200返回自身内容,而不是直接去改详情页模板。
robots.txt 的抓取限制不等于可靠的索引移除,反过来也一样:它可能只挡住深层而放行入口,造成“入口正常、深层失效”的假象。检查时注意区分:
站点地图不保证收录,它只是候选清单。如果深层URL同时出现在站点地图里、又被抓取规则挡住,优先解决冲突,而不是反复提交地图。解决后观察抓取请求是否开始落到深层路径,这是验证动作是否生效的直接依据。
一次定位结束后,把这条链路的检查顺序固定下来:先确认入口到深层的链接在初始HTML中可跟随,再确认深层URL的状态码与重定向链,然后确认抓取限制没有只挡深层,最后确认深层内容不依赖不稳定渲染。任何一步的结果都会改变下一步的动作:链接不可跟随就改输出方式,状态异常就改跳转或下线处理,限制冲突就改规则,渲染不稳就改渲染路径。
需要提醒的是,抓取量或请求量归零并不能单独证明某一处处理正确,它也可能是抓取预算转移、外部链接变化或站点整体改版造成的。只有当链路中每一跳都能被独立验证可达、可跟随、可返回有效内容时,才能说这条深层链路的断点已经排除。