优先怀疑“链接发现层”而不是“页面内容层”:入口页能被抓取,只说明百度蜘蛛拿到了这一页,并不代表它愿意沿页面里的链接继续走到深层。先用日志或抓取工具确认蜘蛛是否真的请求过第二跳 URL,再决定是修链接结构还是修单页可访问性。若日志显示第二跳 URL 有请求但返回异常,结论就要反过来,断点落在响应层而非发现层。
这两种情况的修复动作完全不同。入口页正常时,深层链路失效通常只有两种表现:
判断依据是同一时间窗内的服务端访问日志,按百度蜘蛛 UA 过滤后,对比入口页 URL 与深层 URL 的请求条数。如果深层 URL 请求数为零,不要急着改页面正文,先检查入口页里那条链接的写法。
链接写在 HTML 里不等于蜘蛛会跟随。以下写法会让深层 URL 停在入口页之外:
<a href>。rel="nofollow" 或 robots meta 限制跟随。动作:用“以百度蜘蛛 UA 请求入口页”的方式取回原始 HTML,而不是看浏览器渲染后的结果。在返回的 HTML 源码里搜索深层 URL 是否以可点击链接形式存在。若源码中没有该链接,结果就是“没走到”,下一步应把关键深层入口改为服务端输出的 <a href>,再观察日志中第二跳请求是否出现。这一步的结果直接决定后续:链接出现后仍无请求,才需要继续查响应层。
如果日志显示第二跳 URL 被请求过,断点通常在响应本身。按代价从低到高排查:
这里有一个反例会让上面的顺序失效:如果入口页本身是低频更新的列表页,深层 URL 请求数为零也可能只是抓取预算还没轮到,而不是链路断了。区分方法是换一个已知高频被抓取的入口页做同样测试;若那个入口页的深层 URL 有请求,说明原入口页的问题更可能是优先级或更新频率,而非链接不可跟随。
确认断点后,常见取舍是“先补入口链接”还是“先修深层页面响应”。选择条件如下:
不要用 robots.txt 限制抓取来“清理”失效链路,抓取限制不等于可靠的索引移除;站点地图存在也不保证深层 URL 会被抓取。若深层 URL 依赖 HTTPS,也要知道 HTTPS 不保证安全无漏洞或排名,它只解决传输层问题,不解决链接发现和响应内容问题。
选一个入口页和一个深层 URL,分别记录三件事:入口页对百度蜘蛛返回的源码中是否存在可跟随链接、深层 URL 在同一时间窗内是否有请求、该请求的状态码与正文是否有效。把这三项写成一行结论,例如“源码无链接、深层无请求”或“深层有请求、返回 200 但正文为空”。结论落在哪一项,下一步就只改那一层,改完后用同一组 URL 再取一次日志对照,确认请求记录或响应内容是否发生变化,再决定是否扩大到同类模板。