canonical 是頁面自己声明“哪個 URL 才是我真正想被收錄的版本”。它属于提示信号,搜尋引擎會參考,但不會無條件服從。所以寫错 canonical 通常不會立刻让頁面消失,却可能让收錄结果落到你没想到的 URL 上。下面三種寫法在實际站点里最常见。
先弄清 canonical 的作用邊界
它處理的是“同一份内容存在于多個 URL”的情况,比如带跟踪參數、大小寫差异、http 與 https、带與不带结尾斜杠、排序篩選後的多種地址。它的目标是收敛,而不是一個用来提升全站收錄的開關。
如果两個頁面内容本来就不同,只是你更希望 A 被收錄,于是把 B 指到 A,這種声明通常不會被采纳,還可能让搜尋引擎對整站這類声明的信任度打折。
三種常见寫错的情况
一、指向 404、410 或跳轉鏈上的頁面
目标 URL 打不開,声明基本等于無效。更麻烦的是鏈式跳轉:A 指 B,B 又跳向 C。判断鏈條變長後,各版本往往被当成獨立 URL 分別處理,重复内容問题一点没解决。
二、指向主题不相關的頁面
比如把某個产品詳情頁指到分類頁,或者把几篇不同文章都指到首頁。当被指向的頁面與目前頁面主题差异明顯时,這條声明容易被忽略,标簽寫了跟没寫差不多。
三、自指缺失,或自指寫成了另一個版本
規范版本本身也應该带上指向自己的 canonical。常见错誤是頁面實际訪問地址是 https 且带结尾斜杠,canonical 却寫成 http 版本或去掉斜杠的版本,等于自己声明“我不是正版”,把收錄机會推给另一個地址。
哪些情况适合用,哪些要谨慎
- 适合:跟踪參數、排序與篩選、打印版、頁面上确實無法從源头收敛的重复地址。
- 谨慎:把分頁第 2 頁指回第 1 頁,會削弱後續頁面被發現的机會;移動版與桌面版互指,現在多數站点已改用响應式,不必再這么做。
- 不适合:内容确實不同、各自需要獨立流量的頁面之間互相指。
發現問题时的排查顺序
- 用抓取工具看渲染後的 HTML,確認 canonical 有没有被脚本改寫。
- 逐一請求 canonical 指向的地址,排除 404、410 和跳轉鏈。
- 把目前頁正文與目标頁正文做人工對比,判断主题是否接近。
- 核對自指版本與訪問地址是否完全一致,包括协议、主机名、路径结尾。
- 再看索引报告里與 canonical 相關的狀態,区分是“被声明替換”還是“声明被忽略”。
和 noindex、robots 一起用要注意
canonical 和 noindex 同时出現在一個頁面上,信号容易互相打架:noindex 要求登出索引,canonical 又指向別的頁面,最终结果可能是 noindex 被忽略。想让重复版本登出索引,優先考虑從連結入口收敛 URL,或者直接 301 到規范版本。
canonical 能修正的是“同一個内容的多個地址”,修正不了“内容本身就该分開”的頁面。先確認問题類型,再决定用标簽還是用跳轉。
最後提醒一点:如果内鏈、sitemap、外部連結到處都在传播同一個内容的多個版本,只改标簽往往收效有限,先把入口收敛好。定期抽查几百個 URL 的返回碼與标簽一致性,比全站掃描更容易發現這類問题。