很多站点运行一段时间后,同一篇内容会以多个 URL 的形式存在:带 www 和不带 www、带尾斜杠和不带、大写和小写、带参数和不带参数。对访客来说这些页面看起来一样,但对搜索引擎来说,它们是几个不同的地址。canonical(规范化链接)就是用来声明“这几个地址里,哪个是正本”的一种标记。
哪些操作容易产生多个版本
- 同一篇文章既能从分类页进入,也能从标签页、归档页进入,地址各不相同;
- 列表页翻页后,后面的页面与第一页内容部分重合;
- 站内搜索、排序、筛选参数被完整保留在 URL 里,并且这些地址被内链或外链引用;
- http 与 https、www 与裸域同时可访问,没有做统一跳转;
- URL 结尾斜杠处理不统一,带斜杠和不带斜杠都能打开;
- 文章改版后新地址上线,旧地址仍返回 200,而不是跳转。
一份可执行的排查清单
- 结合站点地图和服务器日志,列出被访问较多的地址,挑出内容相同、地址不同的组合。
- 确认每个页面的 canonical 是否指向自己,而不是全站所有页面都指向首页。
- 检查 canonical 地址本身能否正常打开、返回什么状态码、协议与域名是否和页面实际使用的一致。
- 查看分页、筛选参数页面是否被统一声明成同一个地址,导致后续页面失去独立身份。
- 核对列表页、标签页、作者页等聚合页面,canonical 是否与实际呈现的内容对应。
- 抽查旧地址是否还在站内被链接,如果有,考虑改成规范地址。
canonical 不是万能钥匙
canonical 是一种建议,而不是强制指令。如果站内有大量链接指向非规范地址,或者旧地址仍返回 200 并被外部引用,搜索引擎依然可能选择它认为更合适的版本。所以声明 canonical 的同时,最好把站内链接同步统一到规范地址上,把信号做一致。
什么时候该用 301
如果某个地址已经确定不再使用,比如换域名、改路径、合并栏目,301 跳转比 canonical 更干脆,它直接把访客和蜘蛛送到新地址。canonical 更适合“两个地址都要保留”的情况,例如带参数的排序页、打印页、会话参数页。
规范化的目标是让同一份内容只有一个主地址,而不是把多个页面的表现硬塞给某一个页面。
让各个信号保持一致
- 站点地图里只提交规范地址,不要混入参数版本和旧路径;
- 导航、面包屑、正文内链一律指向规范地址;
- 分享按钮、Open Graph 等信息使用规范地址;
- HTTP 响应头里的 Link rel=“canonical” 与页面内的声明保持一致,不要互相矛盾。
几个常见误用
- 所有页面 canonical 都指向首页,等于告诉搜索引擎这些页面都是首页的副本;
- canonical 指向一个已经 404 或者会跳转的地址;
- 分页页面全部 canonical 到第一页,后续内容更难被单独发现;
- canonical 用相对路径时写错层级,实际指向了不存在的地址;
- 改版后只加了 canonical,却忘了把旧地址做跳转,两个版本长期并存。
规范化不是一次性工作。每次改版、上线新栏目、接入新参数或者调整分页规则之后,都值得抽几个典型地址检查一遍。发现问题时,先想清楚这份内容到底应该以哪个地址为主,再去决定用 301 还是 canonical,站内链接、站点地图和分享链接跟着一起改,整站的地址结构会清爽很多。