先给结论:入口页面能被抓取,只能证明该URL本身可达,不能证明从它出发的深层链路也能被走通。定位断点时,应把“发现路径”和“抓取执行”分开验证,优先检查深层URL是否真的出现在可被跟随的链接或站点地图中,再检查这些URL返回给Baiduspider的状态与内容是否与入口一致。下面用一个假设情境串起整个判断过程。
假设某站点结构为 /a/、/a/b/、/a/b/c/。日志显示 Baiduspider 频繁抓取 /a/,返回 200 且内容完整;但 /a/b/ 与 /a/b/c/ 几乎没有抓取记录。此时“入口正常”只说明第一层没问题,断点可能出现在三个位置:链接未被输出、链接被输出但不可跟随、链接可跟随但深层响应异常。三者对应的证据完全不同,不能混在一起判断。
区分方法很直接:查看深层URL是否以可抓取形式出现在入口页的HTML中。用抓取工具或直接查看源码,确认 <a href="/a/b/"> 是否存在,而不是仅由脚本在点击后生成。
nofollow、onclick 跳转或需登录才显示,断点在可跟随性:链接存在但不可被稳定跟随。这一步的实际动作是“源码对照日志”:如果源码缺失链接,下一步应修模板输出;如果链接存在但日志无记录,下一步应查robots.txt与服务器对Baiduspider的响应,而不是改模板。动作不同,后续排查方向完全不同。
面对深层失效,常见两种做法:一是放宽robots.txt或移除页面级限制,二是修复链接输出与响应。两者成立条件不同。
选择放宽限制的条件:证据显示深层URL确实被robots.txt屏蔽,或被meta robots、X-Robots-Tag阻断,且移除后链路本身可正常返回200与完整内容。代价是:放宽限制会让原本被挡住的URL暴露给抓取,若这些页面是重复内容或参数页,可能带来新的抓取浪费。需要说明的是,robots.txt的抓取限制不等于可靠的索引移除,解除限制也不保证深层一定被收录。
选择修复链路的条件:证据显示深层URL未被输出为可跟随链接,或返回状态异常。此时放宽robots.txt没有意义,因为抓取请求根本没被发出或响应不可用。代价是修复模板或服务端逻辑的改动量更大,但这是唯一能让链路真正走通的方向。
判断依据可以归结为一句:先确认断点在“请求未发出”还是“请求已发出但失败”。前者改发现路径,后者改响应质量。
站点地图可以列出深层URL,但它不保证收录,也不保证Baiduspider会按地图逐条抓取。因此站点地图只能作为“声明存在”的证据,不能作为“链路已通”的证据。验证时应把三组数据放在一起看:
若站点地图包含深层URL,但日志中完全没有抓取尝试,合理解释包括:地图未被读取、抓取配额被其他URL占用、或深层URL在robots.txt中被挡。不能仅凭“地图里有”就断定链路正常。若日志中有抓取但返回5xx,说明断点在服务端,应优先查该路径的渲染或权限逻辑,而不是继续调整地图。
假设 /a/b/ 在源码中由前端框架在客户端渲染后插入链接,服务端返回的初始HTML里没有该链接。此时入口 /a/ 可被抓取,但 /a/b/ 从未出现在可跟随HTML中,日志自然没有抓取记录。实际动作是:把该链接改为服务端输出或预渲染,使其出现在初始HTML中。结果如何影响下一步:如果改完后日志出现对 /a/b/ 的抓取且返回200,断点确认在发现层;如果日志仍无记录,则需继续检查robots.txt与服务器是否对该路径返回了非200状态,排查方向转向抓取执行层。
这个例子的关键不是“客户端渲染一定有问题”,而是:当入口正常而深层缺失时,先找到链接是否以可跟随形式存在,再决定是改发现路径还是改响应质量。把这两层混为一谈,就会在错误的方向上反复调整,既看不到日志变化,也无法确认断点是否真的被修复。