先给结论:如果同一批页面在服务器上存在多种大小写路径,最稳妥的做法不是“全部重定向到小写”或“全部保留原样”二选一,而是先确定一个规范形式,再让所有其他形式用 301 指向它。前提是你能改服务器配置或应用路由;如果只能改页面里的链接,统一映射就只能做到“减少新产生的大小写变体”,无法处理已经被抓取的旧路径。
拿你手上的一个栏目页或商品页做样本,分别从三个地方取路径:服务器上真实存在的文件或路由、页面 HTML 里的内链与 canonical、站点地图里列出的地址。把这三组路径逐字比较大小写。
/Product/A 和 /product/a,问题在生成端或历史迁移,必须做映射。这一步的结果决定下一步:引用端问题不需要动服务器,生成端问题才需要重定向或路由归一。
常见取舍是“服务器层 301 归一”与“应用层路由归一”。两者都能把多个大小写变体收敛到一个地址,但成本和风险不同。
适合静态文件、旧站迁移、路径规则稳定的站点。做法是用服务器配置把所有非规范大小写形式永久重定向到规范形式。代价是规则要覆盖完整,漏掉一个变体就仍会产生重复;另外重定向链不能太长,否则会拖慢抓取和用户体验。
适合动态路由、框架统一处理请求的站点。做法是在路由匹配前把路径转成规范大小写,再决定返回内容或重定向。代价是必须确保大小写转换不会误伤本来就区分大小写的资源,比如带哈希的文件名或第三方回调路径。
选择条件可以这样记:路径集合固定、以静态资源为主,优先服务器层;路径由程序动态生成、经常增减,优先应用层。若两者都能做,先做应用层归一,再用服务器层兜底,避免规则散落在多处。
curl -I 或浏览器开发者工具抽查若干变体,确认返回 301 且最终地址正确。做完第 5 步后,不要立刻认为问题已经解决。抓取量和索引量下降可能只是重定向生效后的正常收敛,也可能是因为规则误伤了有效页面。下一步应抽查被重定向的路径是否仍能返回 200 内容,而不是只看状态码。
假设某站有 /Blog/Post-1、/blog/post-1、/BLOG/POST-1 三种写法,服务器都能返回同一篇文章。先选定 /blog/post-1 为规范形式,其余两种用 301 指向它,同时把模板里的链接和 canonical 全部改成小写。结果:新请求不再产生新变体,旧变体逐步被替换。若之后仍看到 /Blog/Post-1 被抓取,先检查是否有外部链接或旧站点地图仍在引用它,而不是直接断定重定向失效。
重定向上线后,抓取统计里某个变体归零,并不单独证明映射正确。它也可能是抓取频率整体下降、站点地图更新延迟,或该路径本来就没有被频繁访问。要结合服务器访问日志、重定向命中记录和最终页面的可访问性一起看。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;这两点在这里同样成立。必要条件是:规范形式必须真实可访问,且所有变体都能稳定到达它。满足这个条件后,再把注意力放到内容质量和内链结构上,而不是反复调整大小写规则。