先给结论:如果服务器对大小写不敏感,而页面里的内链、站点地图或跳转目标混用了大小写,问题通常不是“百度不收录”,而是同一个资源被当成多条路径反复发现;此时应优先统一输出端的大小写,再用 301 把历史变体归并到唯一规范路径。若服务器本身对大小写敏感,则不能只靠改写链接,必须同时检查磁盘上的真实文件名与目录名,否则统一映射会把本来可访问的页面改成 404。
路径大小写差异之所以难排查,是因为不同角色看到的“同一事实”并不一样:编辑认为 /News/2024/ 和 /news/2024/ 是同一页,开发认为它们只是两个字符串,服务器则可能返回同一份内容,也可能返回一个正常页和一个 404。
可以用一条命令核对真实行为:请求两个仅大小写不同的路径,记录状态码、最终 URL 和响应正文长度。假设 /News/a.html 返回 200,而 /news/a.html 返回 404,说明文件系统或路由规则区分大小写;若两者都返回 200 且正文一致,说明服务器做了不区分大小写的映射或重写。
选择依据很直接:不区分大小写时,重点是收敛输出,把内链、站点地图、canonical 和跳转统一成一种写法;区分大小写时,重点是先修正磁盘与路由的真实名称,再做归并,否则映射规则会把错误固化。
多个角色对同一事实理解不同时,不要继续口头争论“到底哪个是对的”。把分歧变成一张可核对的表:路径、来源(内链、站点地图、外链、跳转)、HTTP 状态码、最终 URL、是否被百度抓取过。
具体动作可以这样安排:
这一步的结果会直接影响下一步:如果清单里出现大量“两个写法都返回 200”,说明需要的是归并而非修链;如果大量“一个 200 一个 404”,说明需要先修真实文件或路由,再谈归并。
顺序错了会制造新的重复。建议按下面三层推进。
第一层,统一输出端。把站内链接、导航、分页、站点地图、canonical 全部改成唯一规范写法。这一层的动作结果是:百度后续抓取时看到的新链接不再产生变体,但已经存在的旧变体不会自动消失。
第二层,服务端归并。对历史变体配置 301,指向唯一规范路径。需要区分两种情况:服务器不区分大小写时,301 只是把已知变体显式声明为同一资源;服务器区分大小写时,301 的目标必须是真实存在的文件,否则会形成跳转到 404 的链。
第三层,观察与例外处理。归并后继续看访问日志里是否还有旧变体被抓取。这里要克制:robots.txt 的抓取限制不等于可靠的索引移除,它只影响抓取,不保证旧 URL 从索引中消失;如果旧变体仍有外链,301 比屏蔽更合适。
有两种例外需要保留差异。第一种是路径大小写承载了真实不同的资源,例如某些系统按大小写区分租户或版本目录,此时强行归并会造成内容串页。第二种是参数或编码导致的变体,例如 %2F 与 /,它和纯大小写问题不是一回事,需要单独判断。
另外,站点地图不保证收录,提交统一后的站点地图只是帮助发现,不能替代对 404、跳转链和重复内容的处理。做完映射后,合理的预期是:新抓取逐步集中到规范路径,旧变体的抓取量下降;但抓取量下降本身不能单独证明处理正确,也可能来自抓取预算变化、外链减少或服务器响应变慢,需要结合状态码和最终 URL 一起判断。
最后给一个假设例子说明比较方法:假设某目录有 40 条含大写字母的路径,其中 25 条与全小写版本返回同一内容,15 条只在大写形式下可访问。处理时先把 15 条真实文件重命名并配置 301,再把 25 条变体归并到小写路径,最后统一站点地图与内链。这个例子里数字只是用来区分两类问题,不代表任何实际站点的统计结果。