先给有条件的结论:如果入口页面能被抓取、深层页面却拿不到,而 robots 文件本身返回 200 且语法可解析,那么断点通常不在“入口是否被允许”,而在“从入口到深层页的路径是否被某条规则、某个中间层或某次渲染截断”。这个结论只在入口页与深层页同属一个可抓取目录、且你确认入口页返回的是可索引内容时成立。反例是:入口页返回 200 但正文依赖客户端渲染,robots 文件又禁止了渲染所需的脚本路径,此时入口“正常”只是假象,断点其实在资源层,而非链接层。
入口页面正常,可能只意味着 HTTP 状态码正常。要定位深层断点,需要把入口正常拆成三层分别确认:
三层里任何一层不成立,深层失效的原因就不同。只看到第一层成立就断定 robots 文件没问题,会漏掉后两层。
选一个入口页和一个已知失效的深层页,按固定顺序走一遍:
Disallow 命中。<a href> 还是脚本生成。这个顺序的价值在于:它把“robots 规则命中”和“链接不存在”两类原因分开。若第一步就命中 Disallow,断点明确在规则层;若规则未命中而链接缺失,断点在渲染或模板层。
假设某站 robots 文件允许 /catalog/ 下全部抓取,入口页 /catalog/ 返回 200。深层页 /catalog/item/123 在浏览器可访问,但抓取工具拿不到。按上面顺序检查发现:入口页的列表链接由前端脚本请求接口后渲染,而 robots 文件禁止了 /api/ 路径。此时深层页本身没有被 Disallow 命中,但通往它的链接在抓取时不存在,断点落在脚本资源被禁这一层。这个例子只说明比较方法:规则命中与资源被禁是两种不同证据,不能因为目标 URL 未被禁止就排除 robots 文件的影响。
抓取量下降、站点地图中深层 URL 未被处理、入口页在结果中可见,这些都不能单独证明断点在哪。抓取量下降可能来自服务器限速、内容更新频率变化或抓取预算重新分配;站点地图未处理可能只是提交延迟;入口页可见可能只代表入口被索引,不代表深层链路可达。要区分这些解释,需要回到逐跳请求的结果,而不是看汇总数字。
另外,robots 文件的抓取限制不等于可靠的索引移除。即使深层页被 Disallow,已索引的 URL 仍可能以无摘要形式出现。定位断点时不要把“没被移除”误判为“规则没生效”。
完成逐跳请求后,按结果分流:如果某一跳返回 3xx 并指向被 Disallow 的路径,下一步是核对跳转目标是否必须经过该路径;如果入口页链接由脚本生成且脚本被禁,下一步是确认这些脚本是否为渲染所必需,而不是直接放开整个目录。放开脚本路径后重新走一遍链路,若深层页可到达,说明断点在资源层;若仍不可到达,则继续检查中间页模板是否对抓取工具输出了不同链接。每次只改一个条件,才能把结果归因到具体环节,而不是把多个变量的变化混在一起。