同一个页面,经常能通过好几个地址打开:带 www 和不带 www、带尾斜杠和不带、后面挂了一串跟踪参数、大小写不一致、从不同入口拼出来的筛选链接。对用户来说这些地址指向同一屏内容,对搜索蜘蛛来说却是若干个彼此独立的 URL。canonical 的作用,就是在页面里明确交代:这一批地址里,哪个才是主地址。
canonical 到底解决什么问题
canonical 是一个页面级的提示信号,用来做页面归并。它不阻止蜘蛛抓取,也不等于 noindex,更不是把页面藏起来的手段。它的价值在于:当站内确实存在多个入口指向同一份内容时,让权重和索引尽量集中到一个地址上,其余地址作为变体存在。
需要提醒的是,canonical 是建议而非强制指令,蜘蛛会结合内链、sitemap、301 指向等信号综合判断。所以只写一个 canonical 标签,并不能抵消站内其他信号互相矛盾带来的混乱。
重复地址通常从哪来
- 协议与域名变体:http 与 https、带 www 与不带 www 同时可访问。
- 尾部斜杠:/page 与 /page/ 都能打开,且没有一方 301。
- URL 参数:排序、筛选、分页、来源跟踪、会话标识。
- 大小写不一致:/About 与 /about 返回同一内容。
- 同一内容被多个栏目或标签同时调用,生成不同路径。
- 打印版、移动版、旧模板残留的备用地址。
逐项自查清单
- 确认每个需要索引的页面都有 canonical,并且指向自己,形成自引用。模板漏写是最常见的问题。
- 检查 canonical 里的地址能否直接访问、是否返回 200。指向一个 404 或需要登录才能打开的地址,等于什么都没说。
- 确认 canonical 与 sitemap 里的地址、内链使用的地址、301 的目标地址三处一致。指向三个不同地址是站内混乱的典型来源。
- 统一使用绝对路径,并且和站点实际使用的域名写法保持一致,避免协议或 www 写反。
- 排查 canonical 与 noindex 同时出现的情况。两者指向不同意图时,蜘蛛只能靠猜。
- 检查分页、筛选、排序这类动态地址是否处理清楚,别让它们生成一批内容相同、只有参数不同的页面。
- 确认 canonical 关系没有形成链式跳转,比如 A 指向 B、B 又指向 C,尽量一步到位。
几个容易写错的细节
canonical 和 noindex 别打架
如果一个页面既要 noindex,又写了 canonical 指向另一个页面,容易让蜘蛛的判断反复。想清楚目的:是要这个页面彻底不进索引,还是要把它归并到主地址。前者用 noindex 并考虑是否也去掉 canonical,后者只在确实存在重复地址时使用 canonical。
分页页要不要自引用
分页列表的第 2、3 页通常各自是不同的内容集合,一般建议各自自引用,而不是全部 canonical 到第一页。把所有分页统一指回第一页,会让后续页面的内容失去被单独发现的机会。
跨域 canonical 要谨慎
把站内页面 canonical 到别的站点,等于主动放弃自己页面的索引地位。除非确实是同一份内容在多域分发,否则不建议这么做。反过来,别人把你的内容 canonical 过去,也不需要跟着改自己的标签。
上线前的检查流程
- 从模板层面抽查几类页面:首页、栏目页、详情页、标签页、分页页,确认 canonical 输出规则符合预期。
- 用抓取工具或站点地图核对一批实际 URL,看看标签里的地址与真实地址是否一致。
- 改动规范地址之后,观察一段时间蜘蛛来访日志,看新地址的抓取是否正常、旧地址是否逐渐减少。
- 把 canonical 规则写进建站规范,避免每次改版重新讨论一遍。
规范化本质上是给站点自己定一套地址规则,然后让模板、内链、sitemap、重定向都遵守它。canonical 只是把这套规则明说出来,规则本身混乱,标签写得再工整也难见效。