先给结论:如果同一份内容在百度里出现大小写不同的多个URL,不要逐个提交改版或删链接,而应先用301重定向把全部变体归一到唯一小写路径,再让站内链接、站点地图和规范标签都只指向这个路径。这样做的原因是,百度把路径大小写视为不同URL,规模化站点一旦在模板、CDN或后端路由层产生分歧,就会持续生成新变体,单点修补跟不上增量。
常见矛盾现象是:抽查几十个页面时,百度只收录了小写版本;等到页面量级上来,却开始出现大写路径被抓取,甚至同一内容两个版本同时存在。这里有两种解释,需要用证据区分。
解释一:链接来源不一致。部分页面被外部或站内旧链接以大写形式引用,百度顺着这些入口爬到了大写URL。区分证据是抓取日志里大写URL的referer字段——如果它集中来自某几个目录或某次改版前的链接,说明问题在链接层,不是路由层。
解释二:服务器或CDN对大小写做了隐式等价处理。有些环境在Linux下区分大小写、在部分CDN或Windows回源时又不区分,导致请求大写路径也能返回200,百度自然会把两个都当成有效页面。区分证据是直接请求同一路径的大小写两个版本,比较返回状态码和最终URL——如果大写版返回200且没有跳转,问题就在服务端映射,而非链接引用。
两种解释指向的动作不同:前者要清理链接,后者要改路由和重定向规则。先做这个判断,能避免把力气花在错误的一层。
不要凭印象认为“只有大小写两种”。实际可能有大小写、末尾斜杠、参数顺序等多重组合。建议按下面顺序盘点,假设一个站点有 /Product/A 和 /product/a 两个入口:
这一步的产出是一张映射表,而不是零散修复记录。只有映射表存在,后续规则才能覆盖新增页面,而不是每次出问题再补一条。
推荐顺序是:先定唯一规范形式(通常全小写),再在能最早拦截请求的一层做301,最后统一内链和站点地图。
rel="canonical"指向小写版本。它和301是互补关系,不能替代301。动作与结果的关系很直接:如果只改站点地图而不做301,外链带来的大写请求仍会返回200,百度可能继续保留两个版本;反过来,先做301再改内链,即使站点地图暂时没更新,变体也会被逐步归并。所以优先级应是先拦截请求,再清理声明。
这套统一映射成立的前提是:大小写变体指向同一份内容。如果不同大小写实际对应不同页面(比如区分大小写作为业务逻辑的一部分),就不能强行301,否则会把有独立价值的页面合并掉。
另外,如果站点已经存在大量被百度收录的大写URL,且这些URL有外部链接,直接301到小写版本是常见选择,但要接受短期内部分外链权重传递存在损耗的可能,这属于正常现象,不代表处理错误。抓取量或索引量在调整后短期波动,也可能来自抓取预算重新分配、站点其他改动等合理解释,不能单独用来证明映射处理正确。
最后,robots.txt 的抓取限制不等于可靠的索引移除;即使屏蔽了大写路径,已收录的URL仍可能留在索引中。要真正归一,仍以301和规范标签为主。HTTPS 也不是本问题的解法,它不保证安全无漏洞,也不解决路径映射分歧。
改完后,按映射表逐条请求大小写变体,确认大写版返回301且最终落地小写URL,而不是200、302或跳转到错误页面。随后观察百度抓取日志中大写URL的请求是否逐渐减少、是否出现301跟随记录。如果日志里大写URL仍大量返回200,说明拦截层没有覆盖到,需要回到服务器或CDN配置检查,而不是继续改页面内容。验证通过后,再把映射规则固化进发布流程,避免下一次改版重新引入分叉。