同一个页面被写成好几种 URL,是很常见的现象。首页可能同时有 / 和 /index.html,栏目页可能有 /Tag/SEO 和 /tag/seo,带参数的列表页因为拼接顺序不同,能生成好几串地址。这些写法在浏览器里都能正常打开,但对搜索引擎来说,它们属于不同的 URL,处理不好就会出现重复内容、信号分散、收录结果和预期不一致。
这些写法是怎么冒出来的
多数情况下不是有人故意造,而是几个环节各自为政:
- 程序路由不区分大小写,链接里写 SEO 还是 seo 都能访问;
- 服务器同时把 /a 和 /a/ 指向同一份内容;
- 排序、筛选、分页参数由前端拼接,顺序和数量不稳定;
- 老链接和新链接在站内同时存在,一直没有清理。
先找出这些来源,比直接去改标签更有用。否则今天合并了两串,明天又长出新的。
三类最常见的差异
1. 大小写
如果程序对路径大小写不敏感,/News/2024 和 /news/2024 会返回同一页。搜索引擎会视为两个地址,但它们指向的是同一内容。内部链接、导航、面包屑里如果两种写法混着用,就是在主动制造重复。
2. 末尾斜杠
/about 和 /about/ 是否等价,取决于服务器配置。有的站点两者都返回 200,有的会自动跳转。需要确认实际返回状态码,而不是凭印象判断。若两者都返回 200,至少要让其中一种通过 301 指向另一种。
3. 参数顺序与多余参数
?a=1&b=2 和 ?b=2&a=1 内容相同,但 URL 完全不一样。会话 ID、来源跟踪、时间戳这类参数,如果每次请求都变化,等于每抓一次就多一个地址。这类参数带来的重复通常比大小写问题更隐蔽,也更难收敛。
先确认是不是真的重复
URL 不同,不等于内容重复。判断标准是页面主体内容是否基本一致:标题、正文、主要信息是否相同。只有导航、推荐位、广告位不同,通常不构成需要动手的重复。反过来,如果两串 URL 打开后正文完全不同,那就不该合并,而要回头检查是不是路由串了、参数含义被误用。
另外要接受一个现实:抓取和收录是两件事。搜索引擎可能抓取了多个写法,最终只选择其中一个进入索引,也可能都保留一段时间。看到索引里出现几种写法,不必立刻判断为出错,先观察它们的内容是否一致、是否长期并存。
处理顺序
- 先统一站内链接。把导航、面包屑、列表、正文内链、Sitemap 里的写法统一成一种。这是成本最低、见效最直接的一步,也是后面所有动作的前提。
- 再考虑服务器端跳转。如果两种写法都长期存在、都有外部链接,可以配置 301,让其中一种指向另一种。注意只跳一次,避免 A 跳 B、B 又跳 C 的链式结构。
- 用 canonical 兜底。当前两步做不到时,在页面上用 canonical 指明首选地址。它只是提示,不是强制指令,所以不要指望它能替代跳转。
- 给参数页加约束。排序、会话、跟踪类参数可以用 robots.txt 规则或搜索平台的参数处理设置做限制,但要先确认这些参数页本身没有搜索价值,别误伤真正需要被收录的页面。
哪些情况可以先不动
- 只有极少量访问、也没有外部链接的旧地址,花时间合并的收益有限;
- 跳转配置会影响大量正常请求时,先改成内链统一,观察一段时间再动服务器;
- 参数页本身有独立内容,比如不同筛选组合呈现的是不同商品集合,这类页面更适合单独评估,而不是一律收敛。
判断优先级时可以问一句:这个写法有没有被真实用户看到、有没有外部链接指向、会不会持续产生新的变体。三个都否,可以先放一放。
处理这类问题的顺序是:先让站内链接一致,再考虑跳转,最后才用 canonical 兜底。顺序颠倒,往往花了很多时间改标签,回头看链接里还是两种写法混着用。