站点跑久了,经常会遇到同一篇内容能用好几个地址打开。带 www 和不带 www 各一份,加个跟踪参数又是一份,列表页和详情页还可能撞在一起。这时候搜索引擎看到的是多份“看起来一样”的内容,需要你自己告诉它哪一份才是正主。canonical(规范链接)就是干这个的。
先搞清楚 canonical 解决什么问题
canonical 标签写在页面 head 里,指向你希望被当作主版本的地址。它的作用是给出“合并信号”,而不是屏蔽。也就是说,搜索引擎可能会把几个相似地址的信号合并到 canonical 指向的那个地址上,但最终如何处理仍由搜索引擎判断,不是写上去就一定生效。
要区分清楚三件事:
- 301 重定向:真正把用户和蜘蛛挪到新地址,旧地址不再独立存在。
- canonical:多个地址都能正常访问,但你指定其中一个为主版本。
- robots.txt 屏蔽:直接不让抓,但已经被抓到的旧地址可能仍留在索引里。
能重定向的就别用 canonical 兜底;canonical 是给“确实需要并存”的地址准备的。
自查:常见的多地址来源
1. 域名与协议变体
- http 与 https 是否都还能访问,canonical 是否统一指向 https。
- 带 www 与不带 www 是否有一个是重定向,另一个才是主站。
- 大小写混用:/About 和 /about 是否都能打开。
2. 尾斜杠与路径写法
/post/1 和 /post/1/ 在很多服务器上都能访问。如果两者都返回 200,就要确认 canonical 是否只指向其中一种,并保持一致,别这篇文章指带斜杠、那篇指不带。
3. 追踪参数与筛选参数
推广链接带的 utm 参数、列表筛选带的排序参数,都会生成新的地址。建议在 canonical 里始终输出不带这些参数的干净版本。如果参数组合太多,还要配合 robots 规则或链接规范一起处理。
4. 分页、打印页、移动版
- 分页的第 2、3 页通常应该自指 canonical(指向自己),而不是全部指回第 1 页。
- 打印页、纯文本版一般指向对应的正文页。
- 独立移动版地址(如 m 站)需要与桌面版互相标注,并确认 canonical 指向哪一边。
容易踩的几个坑
canonical 指向了不能正常返回的地址
指向 404、指向 301 的中间地址、指向被封禁的地址,都会让信号变得模糊。canonical 的目标地址应当是返回 200 的最终地址。
一个页面写了多个 canonical
模板拼接、插件叠加都可能造成输出两个甚至更多 canonical。搜索引擎通常会忽略全部或自行选择,等于白写。建议直接在页面源码里搜一下 canonical 出现的条数。
全站模板里 canonical 写死成首页
这是最伤的一种:所有页面都指向首页。结果是大量内容页被当成首页的副本。模板里应该是动态输出当前页面的规范地址。
canonical 与 hreflang 互相打架
多语言站点里,如果每个语言版本的 canonical 都指向同一个语言版本,其他语言页就可能被合并掉。一般是各语言页自指 canonical,再用 hreflang 互相关联。
日常怎么查
- 抽一批代表页面(首页、栏目页、详情页、分页、带参页),打开源码看 canonical 的实际输出。
- 把站内主要地址和 canonical 列表对照,找出指向异常、指向非 200、指向站外的条目。
- 看服务器日志里被抓取的带参地址,判断哪些本该合并到正文。
- 如果地址结构有过调整,检查老页面的 canonical 是否还指着一个早已废弃的地址。
- 每次改模板、加插件、换域名之后,把 canonical 列入回归检查项。
canonical 不是写完就不用管的东西。站点结构、URL 规则、模板一变动,它就可能失准。把它当成一项常规巡检,比等到发现流量分散了再回头找原因省事得多。