站点运营

站点运营:canonical 规范链接自查,别让页面互相争当正主

canonical 是一行容易被忽略的声明,写对了能让相似地址归拢到一个主版本,写错了往往不报错,只是让页面在结果里互相消耗。本文梳理模板化误写、指向跳转地址、分页与参数处理等常见问题,给出一份可以直接照着做的自查清单,以及分批修改时的注意事项。

站点运营

站点运营:canonical 规范链接自查,别让页面互相争当正主

canonical 是页面里一行不太起眼的声明,很多模板自动生成之后就再没人看过。它决定了搜索引擎更愿意把哪个地址当作这批相似内容的代表。写对的时候它安静地工作;写错的时候通常不会报错,也不会有任何提示,只是让同一批内容在结果里互相消耗。

它到底在解决什么问题

同一个页面经常有多个可访问的地址:带 www 和不带 www、http 和 https、带尾斜杠和不带、列表页的翻页、带追踪参数的分享链接。这些地址返回的内容基本一致,如果没有明确说明,搜索引擎需要自己判断哪个是主版本。canonical 的作用就是把这一次判断变成明确的声明。

但要注意,它是建议而不是指令。搜索引擎仍然会结合内链、站点地图、重定向等信号综合判断,所以 canonical 应当与这些信号保持一致,而不是互相打架。一边在 canonical 里声明 A,一边把所有内链都指向 B,效果往往适得其反。

常见的几类问题

指向了不存在或会跳转的地址

这是最常见的一种。canonical 写的是 A,但 A 本身 301 到 B,或者 A 早已 404。这种情况下声明基本失效。正确的做法是让它直接指向最终可访问的规范地址,中间不要再经过跳转。

全站套用同一个模板值

有些模板把 canonical 写成了固定的首页地址,结果所有文章都声明自己的正主是首页。这等于让栏目页和详情页主动退出。canonical 应当按页面自身地址动态生成,而不是套一个写死的字符串。

分页与筛选页处理不当

列表第二页的 canonical 如果指回第一页,等于告诉搜索引擎第二页的内容不必单独存在。分页页面更适合使用自指 canonical,或者保留可抓取的独立地址,具体取决于你是否希望它们被单独发现。

跨域声明用得太随意

把内容同步到另一个域名时,用 canonical 做过渡是可以的,但长期两只脚站两个域名容易产生混乱。迁移场景更稳妥的方式仍然是 301 加上页面内链的同步更新。

一份可以照着做的自查清单

  1. 随机抽取各栏目页、详情页、列表页,查看页面源码中的 canonical 值。
  2. 确认该地址能直接打开,返回 200,且不发生跳转。
  3. 确认它与页面自身地址一致,除非确实存在另一个主版本。
  4. 检查是否被误写为首页、栏目页等不相关地址。
  5. 检查协议与域名写法是否和站点地图、内链、重定向保持统一。
  6. 用带参数的分享链接打开页面,看 canonical 是否回到干净地址。
  7. 对比站点地图中的地址与 canonical 声明是否一致。
  8. 观察服务器日志里规范地址与重复地址的抓取比例变化。

修改时的几点提醒

调整 canonical 属于影响面较大的改动,不建议一次性全站替换。可以按栏目分批进行,改完后观察一段时间的日志和索引表现,再决定是否扩大范围。

canonical 不能替代重定向。已经确定不再使用的旧地址,仍然应该用 301 处理;canonical 更适合处理两个地址都想保留、但只希望一个被展示的情况。

也不要指望加上 canonical 就立刻见效。它只是把意图表达清楚,最终判断仍由搜索引擎完成,和其他结构性因素一起起作用。

一句话:canonical 的作用是减少歧义,而不是制造新的矛盾。它写的那个地址,应该就是你自己也愿意分享出去的那一个。