核心做法是:先确认服务器和 URL 是否把大小写视为同一个地址,再决定统一映射到小写还是保留原始大小写。若同一文件在 /Page/A.html 与 /page/a.html 都能返回 200,百度可能把它们当作两个地址分别抓取,收录信号被拆散;反之,若服务器对大小写不敏感,仅靠改内链往往不能消除重复入口,必须先处理服务器或重写层的映射。
常见矛盾是:抽查几十个 URL 时,大小写不同的地址都跳转到同一页面,看起来没问题;但全量抓取或站点地图提交后,索引里出现成对地址。这里有两种解释需要分开。
第一种解释是入口不一致。页面链接、站点地图、历史外链各自使用了不同大小写,服务器虽然能访问,但没有把非规范形式永久重定向到规范形式。此时重复地址来自入口,而不是服务器把同一文件复制成了两份。
第二种解释是服务器或存储层本身区分大小写。例如 Linux 文件系统下,Page/A.html 与 page/a.html 是真实存在的两个文件,内容相同或相近。此时即使所有内链都改成小写,旧地址仍可独立返回 200,重复依然存在。
能区分这两种解释的证据是:用大小写不同的 URL 直接请求,观察返回码和最终地址。如果非规范形式返回 301 或 308,并落到唯一地址,问题更可能在入口;如果非规范形式直接返回 200,且响应体内容与规范地址一致,问题更可能在服务器或文件层。注意,这里说的是假设性排查方法,不是对某个站点的实测结论。
映射不是简单地把所有地址改成小写,而是先选定一个规范形式,再让其他形式都指向它。对新增站点,通常选全小写路径更省事,因为大小写混用容易在迁移、备份和跨平台部署时被放大。对已有大量外链和历史页面的站点,如果原始路径含大写且已被广泛引用,也可以保留原始大小写作为规范形式,但必须保证所有入口一致。
判断条件可以简化为三点:
一个假设例子:某站有 5000 个页面,其中 300 个页面路径含大写字母。若只修改站点地图为小写,而页面内链仍保留大写,百度抓到的小写地址可能没有足够内链支撑,大写地址又继续被爬取。下一步应检查这些页面的实际入链,而不是只看站点地图。
如果服务器区分大小写,优先在服务器或反向代理层做 301 重定向:把非规范大小写形式永久指向规范形式。这样旧地址不会继续返回 200,后续抓取会逐步集中到唯一地址。若服务器不区分大小写,但仍出现重复,重点转向应用层和入口层:检查路由、链接生成函数、站点地图生成逻辑,确保输出的 URL 只有一种大小写。
需要避免一个常见误区:只在 robots.txt 里屏蔽非规范路径。robots.txt 的抓取限制不等于可靠的索引移除,被屏蔽的地址仍可能因外链或历史记录留在索引中,而且屏蔽后你也无法通过抓取看到真实状态。更稳妥的顺序是:先让非规范地址返回 301,再观察规范地址的抓取和展现是否集中。
实际动作可以这样安排:先选 20 到 50 个同时存在大小写形式的样本,记录每个地址的返回码、最终地址和 canonical。若样本中非规范地址全部返回 301,说明映射规则已生效,下一步扩大到全量入口检查;若样本中仍有 200,先修服务器或路由,不要急着提交新的站点地图。这个动作的结果会直接影响下一步:映射未统一时提交站点地图,只会把两套地址一起暴露给抓取系统。
验证时不要只看“收录量有没有变化”。请求量、抓取量或某个统计归零,不能单独证明处理正确,因为流量波动、抓取配额调整、站点整体改版都可能造成类似现象。更可靠的证据是:同一路径的大小写变体是否都落到唯一地址,且规范地址返回 200、非规范地址返回 301。
可以按下面清单逐项核对:
如果服务器不区分大小写,而应用层又无法统一生成链接,边界在于:这类站点不能直接照搬“只改站点地图”的方案。此时需要先修链接生成逻辑,再谈收录集中。反之,如果服务器区分大小写且已有大量旧地址,保留原始大小写作为规范形式、把其他形式 301 过去,也是成立的选择。两种方案的分界不在工具,而在服务器行为和入口一致性。