網站收錄

canonical 标了却不生效:它只是提示,冲突时该按什么顺序處理

canonical 常被当成一句话就能解决的收錄指令,但它本质上只是提示。本文說明它為什么會被忽略、與其他技術信号冲突时大致怎么排優先級,以及在分頁、noindex、整站換址等场景里常见的誤用,並给出一份标注前的自查清單。

網站收錄

canonical 标了却不生效:它只是提示,冲突时该按什么顺序處理

给頁面加上 canonical 之後,很多人會預設這個 URL 從此就被認定了。實际情况是,canonical 更像一條建议,搜尋引擎可以參考,也可以不采纳。当頁面上還有別的信号與它冲突时,被忽略並不罕见。

canonical 表達的是偏好,不是命令

它的作用是在一组内容相同或高度相似的 URL 里声明我倾向于把哪個当成正本。抓取、索引、排序是分開的环节,最终留下来的是哪個地址,還要看引擎對各路信号的综合判断。所以标了不代表生效,没标也不代表一定會出問题。

标了却不生效的常见原因

指向的地址本身不可索引

如果 canonical 指向的 URL 返回 404、被 robots.txt 拦住、或者带着 noindex,這條声明就等于指向一個死胡同。引擎不會把结果導向一個打不開或被排除的頁面,通常會忽略這個 canonical,改由自己判断哪個更合适。

頁面里出現了多個 canonical

一份文档中出現两個甚至更多 canonical,比如模板和編輯器各插入了一份,信号互相抵消,效果接近于没标。检查时應该看渲染後的 HTML,而不是只看源文件或者後台編輯器里的字段。

canonical 與頁面内容並不匹配

两個頁面只是主题相近、内容差异明顯,却被硬性标成同一份,被忽略是正常的。canonical 用来合並同一份内容的多個地址,不是给不同内容的頁面做取舍的工具。

分頁列表每頁都指向第一頁

把第 2、3 頁的 canonical 全部指向列表首頁,會让後面這些頁面很难被單獨索引。是否保留分頁 URL,取决于它們本身有没有搜尋需求,一刀切地指向第一頁往往會损失長尾入口。

拿 canonical 代替重定向

整站迁移或者頁面永久換地址时,首選仍然是 301。canonical 不會把原地址的流量和信号顺過去,它只是表明我認哪個是正本。把本该重定向的场景用 canonical 處理,通常達不到预期。

几種信号冲突时,大致怎么排

  • 301、308 属于地址层面的明确迁移,優先級最高,一般按它走。
  • noindex 的作用是別收錄這個頁面,它比 canonical 更强。一個頁面既 noindex 又指 canonical,本身就是自相矛盾的寫法。
  • canonical 次之,參考價值取决于它是否唯一、是否稳定、目标是否可索引。
  • 站点地图、内鏈结构、歷史收錄记錄也會一起參與判断,不能只盯 canonical 一個点。

标注前的自查清單

  • canonical 指向的 URL 能正常打開,返回 200,且没有被 noindex。
  • 每個頁面只有一個 canonical,出現在 head 中。
  • 使用绝對地址,域名、协议、www 與否前後保持一致。
  • 目标頁没有反過来再指向第三個地址,避免形成鏈條。
  • 分頁、篩選頁的策略與實际收錄预期一致,不是照抄模板。
  • 只有内容确實相同才合並;只是部分相似时,優先考虑把各自内容做扎實。

哪些情况不适合用 canonical

两個頁面主题相近但内容不同、各自都有搜尋價值时,标 canonical 只會让其中一個進不了索引,属于自我削弱。這類情况更该做的是让两篇各有明确侧重,而不是强行二選一。

另外,僅僅是大小寫、末尾斜杠、跟踪參數這類差异,優先在服務器和連結层面统一,從源头减少重复地址的产生,比事後满站补 canonical 更省事,也更好维護。

canonical 是收敛重复地址的工具之一,不是萬能開關。它能不能被采纳,取决于這條声明是否與頁面實际内容、以及其他技術信号保持一致。