網站收錄

canonical 指向自己、指向別處或干脆不寫:規范标簽的選擇與自查顺序

canonical 是偏好表達,不是强制指令。本文拆解指向自己、指向別處與不寫三種寫法各自适合什么场景,列出让 canonical 不被采纳的几類常见原因,並给出一條可执行的自查顺序,帮助同一内容的多個 URL 逐步收口。

網站收錄

canonical 指向自己、指向別處或干脆不寫:規范标簽的選擇與自查顺序

canonical 的作用是表達偏好,不是下達命令。搜尋引擎會參考它,但最终把哪個 URL 当作規范版本,還要综合站内連結、站点地图、外鏈、重定向等一整套信号。所以常见的情况是:标簽寫得很認真,索引里留下的却是另一個版本。

先分清重复的是哪一類

不同的重复形態,處理方式差別很大,動手前先归類:

  • 同一内容多個 URL:參數排序、大小寫、末尾斜杠、打印版、跟踪參數。
  • 内容相近但並非完全相同:列表翻頁、篩選结果、同款不同規格。
  • 跨域或跨子域:www 與非 www、移動站與主站、測試域名上线後残留。

canonical 没被采纳的常见原因

  • 目标 URL 本身不可索引:canonical 指向的頁面是 404、301、带 noindex 或被 robots.txt 屏蔽,等于把票投给一個進不来的頁面。
  • 抓取阶段看不到:canonical 由 JavaScript 注入,渲染队列還没轮到,抓取时拿到的初始 HTML 里什么都没有。
  • 信号互相打架:canonical 指向 A,内鏈、站点地图、面包屑却都指向 B。
  • 各版本各自為政:每個參數頁都 canonical 到自己,表面上寫了标簽,實际上没有收口。
  • 寫法不規范:用了相對路径,或把带參數的地址寫進标簽,解析结果和预期對不上。

建议的自查顺序

  1. 先拉出重复 URL 清單:索引狀態报告、服務器日誌、站点地图三處取交集,比單看一處靠谱。
  2. 检查目标 URL 的可索引狀態:返回碼、meta robots、HTTP 头里的 X-Robots-Tag、robots.txt 逐項過一遍。
  3. 確認 canonical 出現在初始 HTML 中,別只在浏览器渲染後的源碼里查看。
  4. 對齐站内信号:内鏈、站点地图、分頁連結、hreflang 都指向同一個版本。
  5. 確認标簽使用绝對地址,协议、主机名、路径與實际訪問完全一致。
  6. 改完观察一個完整抓取周期,看索引中的規范版本是否逐步收敛,不要当天就下结论。

什么时候该用 301 而不是 canonical

如果舊 URL 已经确定不再使用,两個版本之間是永久替代關系,301 更直接,也更省事。canonical 更适合两個版本都需要保留、用戶都可能訪問的场景,比如排序參數、打印版、渠道跟踪參數。

两者也可以配合,但方向必须一致:不要一邊 canonical 到 A,一邊又 301 到 B,那样等于自己给自己制造矛盾。

寫法上的几個细节

  • 用绝對地址,包含协议和主机名。
  • 一個頁面只寫一個 canonical,重复出現容易造成解析歧义。
  • 不要 canonical 到會跳轉的地址,直接寫最终地址。
  • 分頁頁面统一 canonical 到第一頁,會让後續頁面的内容失去被單獨選中的机會,通常不建议。
  • hreflang 與 canonical 要配套,不要 hreflang 指向 A 而 canonical 指向 B。

別忽略頁面本身的差异

如果两個 URL 的内容相似度只有七八成,搜尋引擎完全可能把它們当成不同頁面。這时與其反复調标簽,不如先回答一個問题:這两個頁面到底该不该同时存在。合並内容、补足差异,或者干脆下线一個,往往比改标簽更有效,也更省後續维護成本。

canonical 是在表達偏好,不是在做决定;它能否生效,取决于整站信号是否指向同一個方向。