先给结论:路径大小写差异引发的 robots 协议问题,绝大多数不能靠“再写一条规则”解决,而要先判断服务器是否把 /Private/ 与 /private/ 当成同一资源。统一映射的正确做法是让爬虫看到的 URL 与服务器实际解析的 URL 保持同一套大小写,而不是在 robots.txt 里堆叠大小写变体。缺少完整日志或服务器权限时,最小可执行动作是:取一个已知受影响的目录,用它的大小写变体分别请求,观察返回状态与最终地址,再决定保留、改写还是退出当前规则。
这两类原因的处置方向完全相反,但表面现象都是“规则写了却没生效”。可用一组对照请求来区分,假设目标目录为 /Private/:
/Private/page 与 /private/page,若两者返回同一内容且状态码相同,说明服务器把路径视为等价,此时 robots 规则只需覆盖其中一种写法即可达到限制效果。这一步的结论会直接决定下一步。观察到服务器不区分大小写,就可以保留现有规则并停止扩张;观察到区分大小写且两套都能访问,就必须进入映射统一阶段,而不是继续加规则。
保留是成本最低的选项,但它有明确前提:站点对外暴露的链接、站点地图、内链和重定向目标都只使用一种大小写写法,且服务器对另一种写法返回重定向或 404,而不是返回正常页面。
满足这个前提时,robots 里保留一种写法即可,不需要为每种大小写组合各写一条。判断依据可以看两点:一是站内可点击链接是否只出现一种写法,二是外部可访问的另一种写法是否被 301 到规范写法。若这两点都成立,路径大小写差异不会持续制造新问题。
若只有 robots 规则统一、而页面本身仍以两种写法对外提供内容,保留就只是掩盖问题。此时爬虫仍可能通过内链或外链进入未限制的那一套路径。
当服务器区分大小写、且两种写法都能返回有效内容,而短期内又无法做重定向收敛时,改写 robots 规则是可接受的过渡手段。做法是为真实存在的每一种路径写法分别声明,并确保它们指向同一逻辑目录。
这里要注意一个常见误判:robots.txt 的抓取限制不等于可靠的索引移除。即使两套路径都被 Disallow,已经被抓取并建立索引的 URL 仍可能留在结果中,因为限制的是抓取,不是删除。若目标是让某一套路径从索引中消失,需要的是页面级处理,例如规范标签、重定向或移除请求,而不是只改 robots。
改写后应验证规则是否真的覆盖到目标路径。缺少日志权限时,最小动作是直接请求 robots.txt,确认返回内容与预期一致,再用受影响的 URL 做一次抓取测试,观察是否被规则拦截。这个动作只能证明规则被读取和匹配,不能证明索引状态已经改变,后者需要另行观察。
如果两套大小写路径分别对应不同的应用、不同的后端路由,甚至返回的是不同业务内容,那么它们本质上不是同一个资源的两种写法。此时继续用 robots 去“统一”,会把两个不同对象混为一谈。
退出指的是放弃用 robots 解决这个问题,转而在更上层处理:确认哪一套是规范路径,把另一套做重定向或下线,再回到 robots 只保留规范路径。这个顺序不能颠倒,因为 robots 无法改变服务器对路径的解析结果。
退出的判断依据是:两种写法返回的内容在语义上不同,或其中一种由独立系统提供且无法简单重定向。这种情况下,把 robots 当作统一映射工具只会增加维护面,而不会消除差异。
没有服务器配置权限、也拿不到完整访问日志时,仍可执行以下动作:
这些动作能支持的结论是:规则与真实路径是否匹配、服务器是否区分大小写。不能推出的结论包括:受影响 URL 是否已被索引、索引是否会在某时间内消失、收录量变化是否由这次调整引起。抓取量或某项统计归零,也可能来自抓取预算变化、站点整体调整或统计口径变化,不能单独作为处理正确的证据。
把这三步做完,通常就足以在保留、改写、退出之间做出选择:规则与真实路径一致且 URL 已收敛,保留;两种写法都有效且暂时无法收敛,改写;两种写法对应不同资源,退出 robots 层面,回到架构层统一。