结论有前提:如果入口页在抓取诊断里返回正常、robots.txt 也允许抓取,而深层链接持续失败,那么断点通常不在入口规则本身,而在“入口到深层”的中间环节——最可能是站内链接路径被规则挡住、参数或路径被规范化改写、或服务端对深层请求返回了非预期状态。反例是:入口页本身只是被缓存或由 CDN 静态返回,而深层请求走的是另一套源站逻辑,这时入口正常不能证明源站可达,必须把两者分开验证。
入口正常至少有两种解释,指向完全不同的排查方向。第一种是入口页与深层页共用同一套路由和同一份 robots.txt,那么入口正常意味着规则层大体可用,断点更可能出在链接发现或中间跳转。第二种是入口页由缓存、CDN 或独立静态文件响应,深层页才真正打到应用服务器,那么入口正常只能说明边缘节点健康,不能推出源站对深层路径的行为。判断方法很简单:对入口页和深层页分别请求一次,比较响应头里的缓存标记、服务端标识和状态码是否来自同一层。如果入口带强缓存标记而深层没有,就应把深层请求当作独立对象重新验证。
缺少完整日志或后台权限时,仍可执行一个最小动作:构造一条从入口到深层的完整跳转链,逐跳记录状态码与最终 URL。具体做法是取入口页 HTML 中指向深层的第一个链接,手动请求它,再请求它跳转后的地址,直到抵达目标深层页或失败为止。这个动作的结果会直接决定下一步:
每一步都要记录请求的完整 URL 和响应状态,不要只看最终结果。中间跳的状态码往往才是断点所在。
深层链路失效有两种常被混为一谈的原因:一是 robots.txt 或访问规则明确挡住了抓取,二是深层链接从未被入口页有效暴露,导致抓取根本没走到那里。两者的证据不同。规则挡住时,对深层 URL 的直接请求会得到明确的禁止信号;没被发现时,直接请求往往正常,但入口页 HTML 里找不到指向深层的可抓取链接。检查入口页源码中深层链接是否为纯文本、是否由脚本动态插入、是否被 nofollow 或 onclick 包裹,能帮助区分。若链接存在但由脚本生成,而抓取环境不执行脚本,那么断点就在“链接暴露方式”,而不是规则层。这个区分很重要,因为前者要改规则,后者要改链接输出方式,动作完全不同。
假设某站点结构为首页 → 栏目页 → 详情页,首页和栏目页抓取正常,详情页持续失败。按上面的最小动作逐跳请求:首页返回 200,栏目页返回 200,但栏目页中指向详情页的链接实际指向一个带会话参数的中间地址,该地址返回 302 并跳回栏目页。此时可以判断断点在中间跳转的会话参数处理,而不是详情页本身。下一步动作是检查该参数是否对所有深层链接统一附加、是否在跳转时被丢弃。若丢弃后无法回到详情页,就应优先修复参数传递或改用稳定路径。这个例子中的数字仅用于说明比较方法,不代表任何真实站点的表现。
请求量或抓取量下降、某个深层 URL 返回异常,都不能单独证明是 robots.txt 规则处理正确或错误。抓取量变化还可能来自站点整体可达性、内容更新频率、外部链接变化或抓取预算分配,这些与规则是否合理是不同问题。同样,站点地图里列出了深层 URL 也不保证它会被抓取或收录,站点地图只是发现线索,不是抓取指令。若涉及多个搜索引擎,还需分别核查各自对规则和路径的支持情况,不能用一个引擎的表现推断另一个。HTTPS 只说明传输层加密,不保证深层链路在权限、跳转或渲染上没有问题。
完成逐跳定位后,下一步动作是把失败的那一跳固定成一条可复现的最小请求:只保留必要的路径和参数,去掉会话、跟踪和随机值,重复请求观察结果是否稳定。如果去掉某参数后请求恢复正常,该参数就是断点的直接嫌疑;如果仍然失败,断点更可能在服务端对该路径的处理逻辑。把这个最小请求连同响应状态记录下来,再决定是调整规则、修正链接输出,还是排查服务端路由。只有断点被固定成可复现的请求,后续修改才有明确的验证对象,否则容易在多个环节之间反复猜测而无法收敛。