先给结论:如果服务器或中间层对路径大小写不敏感,统一映射应以“全站小写”作为唯一规范,并在入口层做一次归一化跳转;如果服务器本身区分大小写,且已有页面被外部链接以大写形式引用,则不能直接全站小写,而要先保留大写路径可达,再逐步把内链和站点地图迁到小写。判断该走哪条路,取决于一个可验证的事实:同一路径的大小写变体当前是否返回同一内容。
路径大小写问题在内链里最容易被忽略,因为它不像参数重复那样显眼。需要先做一次对照测试:取一个已存在的页面,把路径中的某一段改成大写,再请求一次,观察返回状态码和最终地址。
200,且页面内容与原路径一致,说明当前存在可索引的重复地址,内链指向不同变体会稀释信号。301 或 308 并跳到规范地址,说明归一化已经生效,问题主要在内链写法不统一。404,说明服务器区分大小写,大写路径是坏链而非重复。这个测试结果决定了后续动作:前两种情况可以统一到小写,第三种情况必须先修复可达性,再谈统一。注意,抓取日志里某个变体请求量归零,并不能单独证明映射已经正确,它也可能只是内链不再指向该变体,而外部链接仍在引用。
当大小写变体都能命中同一内容时,统一映射的目标是让每个页面只有一个可索引地址。实施动作分三步。
301 到小写地址。查询字符串保持不变,避免把参数一起改掉。执行后要观察一个关键反馈:归一化跳转是否形成了链条。如果原请求先跳到大写规范,再跳到小写,说明规则叠加了,需要合并为一次跳转。跳转链过长会让后续抓取预算的分配变差,这一步的结果直接影响是否要回退部分规则。
区分大小写的环境更棘手,因为大写路径不是重复,而是独立地址。此时不能直接全站小写,否则会制造大量 404。
成立的条件是:已有外部链接或历史内链使用了大写路径,且这些路径当前返回正常内容。做法是先为大写路径建立映射表,逐条 301 到对应小写地址,确认跳转生效后,再修改站内链接和站点地图。映射表要覆盖路径的每一段,而不是只处理文件名,因为目录名同样可能大小写不一致。
例外情况有两种。其一,如果大写路径本身有独立搜索需求,且内容与对应小写页面并不相同,就不应合并,而应保留两个地址并各自设置 canonical。其二,如果大写路径只出现在站内、没有任何外部引用,可以直接改内链并让旧地址返回 404,但前提是确认这些地址没有出现在站点地图或历史提交中。
无论走哪条路,都需要一份可核对的映射清单,而不是靠记忆改链接。清单至少包含四列:原路径、目标路径、当前状态码、是否已改内链。假设有三十个页面涉及大小写差异,先填前两列,再逐条请求记录状态码,最后才批量改内链。这样做的结果是,改完内链后能立刻区分“映射没生效”和“内链没改干净”两种不同原因。
还需要注意,站点地图里列出的地址不保证被收录,它只是提交候选。因此映射完成后,不要用站点地图是否被处理来判断归一化是否成功,而应回到对照测试:重新请求大写变体,确认它返回的是到小写地址的单次跳转。这个动作的结果决定了下一步是继续收敛内链,还是回头修入口规则。