canonical 只是提示,不是指令
在 HTML 里寫一行 canonical,很多人預設它會立刻决定收錄哪個地址。實际上它更像一條建议:告诉搜尋引擎“這一组内容相近的頁面里,我認為哪個是主版本”。搜尋引擎會结合抓取到的内容、内鏈、外鏈和站点结构来判断,未必照做。所以出現“canonical 指向 A,结果 B 自己也被收錄”並不奇怪。要排查的是這條建议為什么没被采纳,而不是反复修改标簽本身。
先確認几件事
在動手改之前,按下面的顺序核對一遍,能排除大部分基础問题:
- 頁面本身能不能正常抓取:狀態碼是 200,没有被 robots.txt 挡住,也没有被 meta robots 或 X-Robots-Tag 标成 noindex。
- canonical 目标地址能不能被索引:目标頁如果本身是 noindex、404、301 跳走,或者被 robots 屏蔽,那這條 canonical 基本無效。
- canonical 用的是绝對地址還是相對地址:相對路径拼接时容易解析错,尤其是带參數、大小寫不统一的地址。
- HTML 里的 canonical 和 JS 注入的 canonical 是否一致:两者不一致时,搜尋引擎可能取错那一個。
几種常见的冲突场景
canonical 和 noindex 同时出現
這组信号是矛盾的:noindex 说“別收錄我”,canonical 说“把權重给另一個地址”。搜尋引擎通常優先處理 noindex,结果是這個頁面不收錄,權重也不一定按你想的方式传递。如果本意是把頁面並入主版本,就不该同时留 noindex。
两個地址互相 canonical
A 頁 canonical 指向 B,B 又 canonical 指回 A。這種閉环會让搜尋引擎無法判断主版本,最後可能各自保留,也可能自己挑一個。正确的寫法是單向指向,全站保持同一個主版本地址。
分頁與 canonical 混用
列表第 2 頁、第 3 頁如果都 canonical 到第 1 頁,等于告诉搜尋引擎後面几頁不用單獨收錄。這本身是一種取舍,但要注意:分頁里往往有通往詳情頁的内鏈,如果這些頁面不被抓取,新頁面的發現路径也會變窄。
改完之後怎么看效果
canonical 調整後,索引不會立刻同步。可以關注這几處:
- 搜尋结果里實际展示的是哪個地址,可以用 site: 查询或直接搜尋标题確認。
- Search Console 的“網頁”报告中,Google 選擇的規范網址是否和你的设定一致。
- 该组 URL 的抓取记錄,看目标頁是否被正常抓取過。
- 站内連結、sitemap、外部連結指向的是不是同一個版本。
如果這几處指向不一致,canonical 想生效就會很慢。把指向先统一,往往比反复改标簽更有效。
什么时候不该用 canonical
内容其實不同,只是模板相似,就不要硬指過去。比如不同商品、不同地区的服務頁,用戶看到的信息並不一样,强行合並會让其中一頁彻底失去被检索的机會。這種情况下,更该做的是把每頁的内容做差异化,而不是用 canonical 一刀切。
canonical 解决的是“重复版本選哪個”的問题,不是“内容不够好怎么办”的問题。两件事混在一起處理,往往會两邊都做不好。