canonical 不是万能钥匙,但写错会拖后腿
canonical 标签的作用,是告诉搜索引擎在这一组相似地址里,哪一个才是首选。它只是一种建议,不保证一定被采纳;但写反了方向时,原本想保留的页面可能被排除在候选之外。站点运营里,canonical 多半由模板统一输出,一旦模板写死,整站都会跟着错,所以它值得像 robots.txt 一样,定期单独检查一遍。
四类常见写法问题
1. 模板写死了同一个地址
最常见的情况是详情页、列表页、标签页共用同一段模板,结果成百上千个页面都输出同一个 canonical,指向首页或某个频道页。这等于在说:这些页面都不重要,请只看那一个。自查方式很简单,抽样打开几个不同类型的页面,查看源代码里的 canonical 是否等于当前页面的规范地址。
2. 分页页全部指向第一页
把第二页、第三页都规范到第一页,是过去流行过的做法。它可能让只在后续分页才出现的条目失去被发现的机会。更稳妥的方式是让每一页指向自己,重复摘要的问题用别的手段处理。如果确实要合并,先确认列表里没有独立可访问、值得单独存在的页面。
3. 大小写、斜杠、参数版本各写各的
同一篇文章可能通过带不带结尾斜杠、大小写混写、附带跟踪参数等不同形式被访问。canonical 应当始终写入唯一那个规范地址,并且全站保持一致。如果 A 页面规范到带斜杠版本,B 页面规范到不带斜杠版本,就等于给搜索引擎出了两套互相矛盾的标准。
4. 相对路径与绝对路径混用
相对路径多数情况下能被正确解析,但如果页面本身是通过非规范地址打开的,或者站点绑定了多个域名,相对写法容易解析出意外的结果。不必追求技术上的洁癖,但在一套模板里统一成绝对地址,后续排查会省很多力气。
一次可执行的自查流程
- 先确定站点唯一的规范域名,包括协议以及是否带 www。
- 挑选首页、栏目页、详情页、标签页、搜索页各一到两个,查看源代码中的 canonical。
- 确认 canonical 与当前页面的规范地址一致,并且是绝对地址。
- 用带参数、带斜杠、大小写变体分别访问同一内容,观察 canonical 是否始终指向同一个地址。
- 检查站点地图与内链是否也使用同一规范地址,避免多个信号互相打架。
- 把发现的问题按模板归类,从模板层面统一修改,而不是逐页手改。
与其它设置的配合关系
- robots.txt 与 meta robots:如果页面已经被 noindex,canonical 的作用会被大幅弱化,先理清到底希望搜索引擎怎么处理这个页面。
- 重定向:能通过 301 合并的旧地址,优先用重定向解决,不必依赖 canonical 兜底。
- 站点地图:sitemap 中列出的地址应当与 canonical 一致,否则等于同时给出两套说法。
- 多语言与多地区:hreflang 指向的地址也需要和 canonical 的逻辑自洽。
canonical 是建议,不是命令。它的价值在于减少歧义,而不是替代服务器配置、重定向和内容质量本身。改完模板之后,持续观察日志和索引状态,比一次性大改更可靠。
改完之后看什么
调整 canonical 之后,不必期待第二天就有明显变化,搜索引擎需要重新抓取和重新判断。可以关注日志里规范地址的抓取频率,以及索引覆盖报告中相关提示的变化,例如“已发现但未编入索引”,或者“重复网页,系统选择的规范网页与用户指定的不同”。如果提示里出现了你没预料到的规范地址,通常说明站内还有另一处信号在指向别处,可能是内链、站点地图,也可能是某段写死的模板。