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