同一篇内容在站内出现多个地址,是很常见的事:带参数的列表页、打印页、分页、移动端独立域名、HTTP 与 HTTPS 并存,都可能指向同一份内容。地址一多,点击和权重就会被摊薄。canonical 标签的作用,就是告诉搜索引擎“这一份内容的主地址是哪个”。
什么时候需要 canonical
不是每个页面都要写。真正需要处理的是那些“内容相同、地址不同”的场景。
- 列表页的筛选、排序、跟踪参数产生的地址,主列表其实只有一条。
- 内容被拆成多页(如第 1 页、第 2 页),需要明确主页面与后续页的关系。
- 同一篇文章同时存在于两个栏目下,或者新旧两套目录并存。
- 移动端与 PC 端使用不同域名,且没有做自适应时。
- 商品或文章存在多个变体页面,但主推一个入口。
写法上的几个要点
指向绝对地址
canonical 里写完整 URL,包含协议与域名,避免相对路径带来的解析歧义。地址要和线上实际可访问的版本一致,包括是否带 www、是否带结尾斜杠。
指向自己也是一种声明
页面本身就写自己,是正常的做法,可以防止参数拼接后产生的副本被当成主版本。
不要形成链条
A 指向 B,B 又指向 C,会让判断变得含糊。尽量一步到位,所有副本直接指向同一个主地址。
内容不同就不要硬指
两个页面主体内容差异较大时,用 canonical 把其中一个“隐藏”掉,通常两头不讨好。这种情况更适合考虑合并内容,或者让它们各自独立。
日常自查清单
- 抽取一批带参数的地址,看返回的 HTML 里 canonical 是否统一指向无参数版本。
- 检查分页:第二页之后是自指还是指向第一页。通常建议各自自指,主入口单独处理,具体按站内实际情况定。
- 核对 canonical 指向的地址是否返回 200,而不是 301、404 或软 404。
- 检查是否存在多个 canonical 标签。浏览器一般只认第一个,多余的容易造成困惑。
- 确认 canonical、站点地图里的地址、内链指向的地址三者一致。
- 改版或换域名后重新过一遍 canonical,别让旧域名残留在标签里。
常见误区
- 用 canonical 代替 301。页面已经不打算保留了,应该做跳转,而不是标注。
- 标签写在 JS 里。依赖脚本渲染的 canonical 不一定能被稳定读取,尽量放在 HTML 头部。
- 认为写了就一定会生效。canonical 是建议不是命令,最终判断还会参考内链、站点地图、跳转等多种信号。
- 批量生成时套模板出错。模板变量取错,会让整站页面都指向同一个地址,这是最容易出大问题的地方。
自查的顺序建议是:先确认主地址能正常访问,再看各种信号是否一致,最后才处理细节。方向错了,细节再规范也没有意义。
和其他信号配合
canonical 只是线索之一。内链都指向主地址、站点地图只提交主地址、副本页面做 301 跳转,这三件事和 canonical 方向一致时,判断才会更明确。如果内链一半指向 A、一半指向 B,标签写什么都会打折扣。
建议每隔一段时间抽查一次,尤其是调整栏目结构、上线新模板、接入新的参数之后。把这件事纳入日常巡检,比出问题后再回头排查要省力得多。