做站点运营,canonical 是一个写起来只有一行、但影响面不小的标签。它本质上是在说明:这一组内容相近的地址里,站点认可哪一个是主版本。写对了,可以避免多个地址互相争夺同一个页面的展示机会;写错了,可能把本来正常的页面直接合并掉。
canonical 解决的是什么问题
同一个页面,往往会有多个可达地址。带 www 和不带 www、带结尾斜杠和不带、加上跟踪参数、大小写不同、打印页版本、分页后的第一页……这些地址打开的可能是同一份内容。如果不给提示,搜索引擎需要自己判断哪一个是主版本,过程里既有不确定性,也占用抓取资源。canonical 就是把这份判断明确下来。
常见的几种写错方式
- 全站写死同一个地址。模板里硬编码了首页地址,结果所有页面都在声明主版本是首页,这等于主动要求别人只认首页。
- 指向已经 404 或重定向的地址。规范地址本身必须可访问,指向一个失效地址,信号就断了。
- 相对路径写错层级。用相对路径不算错,但在多层目录、带参数或做过 URL 重写的站点里,容易解析成意料之外的地址,改成绝对地址更稳妥。
- 与 noindex 同时出现。一个页面既说别收录我,又说主版本是我,两个信号互相矛盾,最终处理结果往往不是运营想要的那个。
- 分页页面全部指向第一页。列表第一页和第三页内容并不相同,把后几页都规范到第一页,等于放弃了这些页面上的条目入口。
- 多语言版本互相指定。不同语言版本是各自独立的页面,不属于重复内容,应该用 hreflang 处理,而不是 canonical。
自查可以按这个顺序走
- 随机抽取 20 到 30 个不同类型的页面:首页、栏目页、详情页、列表分页、带参数的筛选页,逐个查看源码里的 canonical。
- 把抽取到的规范地址在浏览器里打开,确认返回 200,并且内容与当前页面一致。
- 确认规范地址是绝对地址,协议、域名、路径与站点当前主域名完全一致,不要混用 http 与 https。
- 检查是否存在自我引用:独立的正常页面,canonical 应该指向自己。这是最简单、也最容易被模板改坏的检查项。
- 把 canonical 指向的地址与站点地图、内链里使用的地址对照一遍,尽量全站统一成同一种写法。
- 整理一份例外清单:分页页、筛选页、打印页、多语言页分别怎么处理,写进模板规范,避免每次改版重新讨论。
如果暂时拿不准某个页面的规范地址该怎么定,宁可先让它自我引用,也不要把一批页面统一指向一个不相关的地址。缺少提示只是让搜索引擎自己判断,指向错误则是明确的误导。
和其他信号配合着看
canonical 不是孤立的。重定向负责把旧地址永久送到新地址,canonical 用于内容相同但地址并存的场景,站点地图提交的是希望被收录的地址,内链决定蜘蛛实际走哪条路径。这几处如果各自指向不同的写法,搜索引擎只能按自己的理解取舍,结果通常和运营预期有差距。
改完怎么验证
调整之后不要只看当天。可以观察抓取日志里规范地址与被规范地址的抓取频次变化,观察搜索结果中展示的地址是否逐步收敛到指定的版本。这个过程通常以周为单位,期间尽量不要再反复改动,否则等于不断给出新信号,前后都无法评估效果。
最后提醒一点:canonical 是建议,不是命令。它有用,但前提是页面本身内容清晰、地址可访问、站点结构没有更严重的矛盾。把这几件事做顺,canonical 才能真正起到它该起的作用。