同一段内容,可能同时存在 http、https、带 www、不带 www、结尾带斜杠、结尾不带斜杠、大小写混排等多个地址。对浏览器来说这是几个不同的地址,对搜索引擎来说也是几个不同的抓取对象。变体没有收敛时,常见的结果是重复抓取、索引里留下多份、权重被拆散,甚至最终被选中的并不是你想要的版本。
常见的 URL 变体有哪些
- 协议与主机名:http 与 https、www 与裸域
- 路径写法:结尾斜杠、大小写、默认文件名(如 /index.html、/default.asp)
- 参数写法:参数顺序不同、跟踪参数、会话 ID、排序与筛选参数
- 站内写法不一致:内链、站点地图、分享链接各用了一个版本
这些变体里,有些只是访问方式不同,内容完全一样;有些则会因为参数变化产生不同内容。处理前要先分清是哪一类,后面选的收敛方式也不一样。
为什么需要收敛
每个变体都是一个独立的 URL,要单独抓取、单独判断。变体多了,会带来几个连锁反应:
- 抓取预算被同类地址消耗,真正需要抓的新页面排队更久
- 索引里出现多个近似重复的条目,规范版本可能被选错
- 站内和站外获得的链接权重被分散到多个地址上
- 收录数据失真,排查收录问题时容易被这些数字误导
收敛的排查与处理顺序
- 先确认每个变体能否正常打开,内容是否一致,有没有返回错误状态的
- 通过索引报告或站内查询,看看哪些变体已经进了索引
- 定下一个规范地址,通常是 https 加主域名,路径写法固定下来
- 能在服务器层跳转的,用 301 指到规范地址
- 不方便跳转的,在页面里写 canonical 指向规范地址
- 把内链、站点地图、canonical 三处的写法统一成同一个地址
不同变体的处理取舍
能跳转的优先跳转
协议、www、尾斜杠、大小写、默认文件名这类变体,最干净的收口方式是在服务器层做 301。跳转发生在抓取之前,变体地址不会被当成独立页面反复抓取,也不需要页面内部再声明什么。
参数类用 canonical,不必全部跳转
跟踪参数、排序筛选参数往往会有组合膨胀的问题,全部做 301 容易产生跳转链和额外负担。这类更适合让页面自己声明规范地址,同时尽量保证站内链接不附带多余参数。如果参数确实会产生有独立价值的内容,那就按独立页面来对待,而不是强行合并。
canonical 是提示,不是命令
搜索引擎会参考 canonical,但也会结合内链、站点地图、跳转等信号综合判断。所以三处写法保持一致,比单独写一个 canonical 更有效。只写 canonical、内链却还指向旧写法,收敛通常会很慢。
收敛之后要看什么
改完不要指望立刻发生变化。比较合理的观察方式是看趋势:抓取到的 URL 数量是否下降、变体在索引里是否逐步减少、规范地址是不是最终被保留的那一个。如果过了一段时间变体仍在索引里,先回头检查这几件事:旧写法是否还能直接访问、跳转是否可点、canonical 是否写在正确的页面里、内链是否已经更新。
同一份内容只保留一个可访问地址,是减少重复抓取最省事的一步;跳转负责把旧地址收口,canonical 负责表达该选谁。
URL 变体往往不是一次形成的,改版、换域名、加统计参数、换 CMS 都可能重新带出新的写法。把地址写法写进建站和上线的检查清单,比事后一份份清理要省力得多。