先给结论:当服务器或CDN把 /Images/A.jpg 与 /images/a.jpg 视为两个资源时,死链查询结果会出现“同一页面时而正常、时而404”的分裂现象。统一映射的正确做法不是批量改链接,而是先确定哪一侧是规范路径,再让另一侧通过重定向或大小写归一化收敛过去。前提是你能确认当前平台对路径大小写的实际处理方式,否则映射规则可能把正常资源也拖入死链。
典型表现是:第一次查询报告 /Product/Detail.html 为404,第二次查询却显示200。有人据此认为查询工具误报,直接忽略结果。但更合理的解释通常有两种。
第一种解释是路径大小写敏感度在变化。操作系统、Web服务器、对象存储和CDN对大小写的处理并不一致:Linux文件系统通常区分大小写,Windows不区分;Nginx默认区分,部分配置下又会做归一化;对象存储的键名严格区分大小写。当请求经过不同节点,同一个URL可能命中不同资源。
第二种解释是重定向链在起作用。某些访问被301或302导向了实际存在的路径,另一些访问因为缓存或节点差异没有走重定向,于是暴露为404。这两种解释对应的处理方式完全不同:前者要统一映射,后者要清理重定向规则。
不要只看状态码。用 curl -I 或浏览器开发者工具查看响应头,重点看三件事:
一个可操作的判断动作:抽取10条被报告为死链的URL,分别用原始大小写和全小写各请求一次。如果全小写全部200、原始大小写部分404,那基本可以确定是大小写敏感导致的映射缺口,而不是资源真的缺失。这个结果直接决定下一步是写重定向规则还是修正页面内链。
方向一:以现有URL为准,把大小写变体301到规范形式。适用于规范路径已经稳定、且外部有大量链接指向错误大小写的情况。实施时对每个路径建立精确映射,而不是用通配符把全部大写转小写,因为通配符可能把本就存在的独立资源覆盖掉。
方向二:在服务器或CDN层做大小写归一化,让所有请求先转成统一形式再匹配。适用于站点内链和站点地图都由同一套模板生成、路径大小写本身就不该有语义差异的情况。条件是你能确认归一化不会与已有的区分大小写的资源冲突。
两种方向的取舍依据是:如果路径大小写承载了业务含义(例如区分不同租户或不同版本),只能选方向一;如果只是命名习惯不一致,方向二维护成本更低。假设一个场景:站点有 /Docs/Guide 和 /docs/guide 两个真实存在的不同页面,此时做全局小写归一化就会造成其中一个无法访问。这类前提必须先核实,再决定映射策略。
写完重定向或归一化规则后,重新跑一次死链查询,但这次要区分两类结果:仍然404的,和从404变成301的。仍然404的说明映射没覆盖到,需要补充规则;变成301的说明映射生效,但要注意重定向链长度,避免形成A到B、B到C的多跳。
同时检查站点地图和内链是否还在输出旧的大小写形式。如果外部链接已经通过重定向收敛,但站内仍持续生成错误大小写的链接,死链查询会周期性报告同一批问题。此时的动作是回到模板层修正路径生成逻辑,而不是继续加重定向。这一步做完,下一轮查询中该类问题的数量应当下降;如果没有下降,说明还有第三个大小写变体未被识别,需要扩大抽样范围重新判断。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。大小写映射解决的是可访问性问题,与收录和排名是不同层面的事,不要用查询结果的数量变化直接推断处理已经完成。