给页面加上 canonical 之后,很多人的预期是“搜索里只会保留我指定的那个 URL”。实际使用中,经常出现两种结果:目标 URL 没有被收录,或者两个 URL 都在索引里。这通常不是 canonical 标签本身写错,而是页面上其他信号和它互相矛盾。
先理解:canonical 是提示,不是指令
搜索引擎会结合多个信号判断哪个 URL 代表同一份内容,包括:
- 页面之间的 301/302 重定向关系
- canonical 标签的写法与位置
- 站内链接和导航指向哪个 URL
- Sitemap 中提交的 URL
- 外部链接指向的 URL
- 页面主体内容是否真的足够相似
canonical 只是其中一个信号。信号一致时,收敛速度会快一些;信号互相冲突时,搜索引擎可能忽略 canonical,按自己的判断选择代表 URL。
常见冲突信号与自查点
1. 自引用 canonical 写错
每个页面都应该有一个指向自身的 canonical,并且使用绝对地址,与页面实际访问的 URL 完全一致。常见的写法问题包括:http 写成 https、带 www 写成不带 www、末尾斜杠不一致、大小写混用、带上跟踪参数。只要 canonical 指向的地址和实际 URL 有一处不同,就可能被理解成“这个页面应该归到另一个地址”。
2. 页面里出现多个 canonical
模板输出、CMS 插件、手工标签叠加时,容易出现一个页面里出现两个以上 canonical。这种情况下,搜索引擎可能全部忽略,也可能只认其中一个。自查时直接查看渲染后的 HTML,而不是只看源码模板。
3. noindex 与 canonical 同时存在
如果目标页面本身带 noindex,又被其他页面 canonical 指向,就会出现“指向一个不允许索引的地址”的矛盾。搜索引擎通常不会保留这个目标,反而可能继续保留原来那个可索引的 URL。要合并内容时,先确认目标页面允许索引。
4. 重定向与 canonical 指向不同
A 页面 301 到 B,但 A 的 canonical 写的是 C;或者 B 又 canonical 回 A。这类循环或交叉会让收敛变得不确定。更稳的做法是:让旧 URL 通过 301 指向唯一目标,同时让目标 URL 自引用 canonical,不要在中间环节绕来绕去。
5. Sitemap、内链、外链指向不统一
canonical 说用 A,但 Sitemap 里放的是 B,站内链接也大量指向 B,搜索引擎会更倾向于 B。统一信号的成本不高,却常被忽略。
处理顺序:从冲突核对到观察结果
- 确定唯一目标 URL。 在 http/https、www/非 www、带不带末尾斜杠之间只选一个版本,并确保全站可达。
- 检查目标页面是否可索引。 排除 noindex、robots.txt 屏蔽、登录墙等因素。
- 核对 canonical 写法。 用渲染后的 HTML 检查,确保自引用、绝对地址、与实际 URL 完全一致。
- 统一周边信号。 内链、导航、Sitemap、外链尽量都指向目标 URL。
- 处理旧 URL。 能 301 的做 301,不能改的至少保持可访问,不要让旧 URL 变成 404 后再靠 canonical 收敛。
- 观察抓取结果。 给搜索引擎重新抓取的时间,在搜索控制台里看目标 URL 是否被选为代表页,而不是每天改动方案。
什么情况下不该用 canonical 合并
canonical 适合处理同一份内容的不同 URL 变体。如果两个页面主体内容差异较大,只是标题或分类相近,强行 canonical 到其中一个,可能导致被指向的页面承担了不属于它的内容,另一个页面的价值也表达不出来。这类页面更适合保留独立 URL,把内容差异写清楚。
判断 canonical 是否生效,不要只看搜索结果里出现了哪个 URL。还要看目标 URL 是否被抓取、是否进入索引、是否被选为代表页。这三件事不一定同时发生。
最后提醒一点:canonical 的收敛往往需要多轮抓取之后才稳定。与其频繁更换目标地址,不如先把重定向、内链、Sitemap 和 canonical 这四个信号统一起来,再观察一段时间。