canonical 是页面自己声明“哪个 URL 才是我真正想被收录的版本”。它属于提示信号,搜索引擎会参考,但不会无条件服从。所以写错 canonical 通常不会立刻让页面消失,却可能让收录结果落到你没想到的 URL 上。下面三种写法在实际站点里最常见。
先弄清 canonical 的作用边界
它处理的是“同一份内容存在于多个 URL”的情况,比如带跟踪参数、大小写差异、http 与 https、带与不带结尾斜杠、排序筛选后的多种地址。它的目标是收敛,而不是一个用来提升全站收录的开关。
如果两个页面内容本来就不同,只是你更希望 A 被收录,于是把 B 指到 A,这种声明通常不会被采纳,还可能让搜索引擎对整站这类声明的信任度打折。
三种常见写错的情况
一、指向 404、410 或跳转链上的页面
目标 URL 打不开,声明基本等于无效。更麻烦的是链式跳转:A 指 B,B 又跳向 C。判断链条变长后,各版本往往被当成独立 URL 分别处理,重复内容问题一点没解决。
二、指向主题不相关的页面
比如把某个产品详情页指到分类页,或者把几篇不同文章都指到首页。当被指向的页面与当前页面主题差异明显时,这条声明容易被忽略,标签写了跟没写差不多。
三、自指缺失,或自指写成了另一个版本
规范版本本身也应该带上指向自己的 canonical。常见错误是页面实际访问地址是 https 且带结尾斜杠,canonical 却写成 http 版本或去掉斜杠的版本,等于自己声明“我不是正版”,把收录机会推给另一个地址。
哪些情况适合用,哪些要谨慎
- 适合:跟踪参数、排序与筛选、打印版、页面上确实无法从源头收敛的重复地址。
- 谨慎:把分页第 2 页指回第 1 页,会削弱后续页面被发现的机会;移动版与桌面版互指,现在多数站点已改用响应式,不必再这么做。
- 不适合:内容确实不同、各自需要独立流量的页面之间互相指。
发现问题时的排查顺序
- 用抓取工具看渲染后的 HTML,确认 canonical 有没有被脚本改写。
- 逐一请求 canonical 指向的地址,排除 404、410 和跳转链。
- 把当前页正文与目标页正文做人工对比,判断主题是否接近。
- 核对自指版本与访问地址是否完全一致,包括协议、主机名、路径结尾。
- 再看索引报告里与 canonical 相关的状态,区分是“被声明替换”还是“声明被忽略”。
和 noindex、robots 一起用要注意
canonical 和 noindex 同时出现在一个页面上,信号容易互相打架:noindex 要求退出索引,canonical 又指向别的页面,最终结果可能是 noindex 被忽略。想让重复版本退出索引,优先考虑从链接入口收敛 URL,或者直接 301 到规范版本。
canonical 能修正的是“同一个内容的多个地址”,修正不了“内容本身就该分开”的页面。先确认问题类型,再决定用标签还是用跳转。
最后提醒一点:如果内链、sitemap、外部链接到处都在传播同一个内容的多个版本,只改标签往往收效有限,先把入口收敛好。定期抽查几百个 URL 的返回码与标签一致性,比全站扫描更容易发现这类问题。