頁面被收錄,本来是一件相對确定的事。但不少站点遇到的情况是:内容明明在 A 頁面,搜尋结果里打開的却是 B 頁面;或者 A 頁面一直停在已發現、未编入索引的狀態。這類問题里,canonical 标簽指错了方向,是最常见的原因之一。
canonical 到底在做什么
頁面上的 rel=canonical,是在声明一件事:在這一组内容里,我認為哪個 URL 才是正主。它是一個提示性信号,不是强制指令。搜尋引擎會结合重定向、内鏈、站点地图、外鏈、内容相似度等信息综合判断,可能采纳,也可能不采纳。
正因為它是提示,寫错的代價往往不是立刻报错,而是看起来一切正常,收錄归属却在慢慢跑偏。
几種常见的寫错方式
- 整站模板寫死一個地址:所有頁面都指向首頁或某個固定 URL,结果大量頁面被判為重复,無法單獨收錄。
- 列表頁统一指向第一頁:翻頁内容被並到第一頁,後續頁基本失去收錄机會。
- 寫成相對路径或带參數:指向的版本带着追踪參數、排序參數,和實际被收錄的版本不是同一個。
- 大小寫、末尾斜杠、协议不统一:http 與 https、有無末尾斜杠混用,會让指向自己變成指向另一個 URL。
- 多語言頁面互相指错:英文頁指向中文頁,或者 hreflang 與 canonical 互相打架。
- 改版後忘了解除:舊模板留下的标簽還在,新頁面繼續指向已经下线的地址。
出現這些現象,先怀疑 canonical
- 同一份内容,索引里只出現另一個 URL,自己的頁面長期不進索引。
- 检查單個頁面时,用戶声明的規范地址和搜尋引擎實际選擇的地址不一致。
- 两個栏目頁面互相抢同一個词,排名在两者之間来回跳。
- 站点改版後新地址收錄慢,舊地址反而還活着。
排查與修正的顺序
- 先分清声明與選擇。用 URL 检查類工具看單個頁面:你声明指向谁,搜尋引擎實际選了谁。這一步能判断是标簽寫错,還是搜尋引擎有自己的判断。
- 回到源碼看标簽本身。確認頁面里只有一個 canonical,是完整绝對地址,且指向目前頁的規范版本。同一頁出現多個标簽时,结果不可控。
- 核對全站一致性。canonical、站点地图、内鏈、重定向目标,這四處應指向同一個版本。任何一處不一致,都會削弱声明的可信度。
- 检查參數與追踪碼。带篩選、排序、追踪參數的版本,用 canonical 或抓取規則收口,避免同一内容裂變成大量 URL。
- 检查模板生成逻辑。很多错誤不是手寫的,而是模板變量為空时預設輸出了首頁地址。抽查不同栏目頁,看标簽是否動態取目前 URL。
- 修正後给一点時間。改完标簽不會立刻生效,需要等重新抓取與重新评估。期間保持内鏈與站点地图指向统一版本,减少反复。
几個容易搞混的邊界
- canonical 不能阻止收錄。想完全不進索引,用 noindex,而不是把 canonical 指向別處。
- canonical 和重定向不是一回事。重定向是把用戶與爬虫直接送走,canonical 只是声明,原頁面仍可被訪問和抓取。
- 内容确實不同的頁面,不要為了集中權重硬做合並,容易被判為誤導。
canonical 是给搜尋引擎的建议,最终收錄归属由搜尋引擎判断。把标簽寫對、寫一致,能减少不确定性,但無法保證一定被采纳或收錄。
小结
遇到收錄归属混乱时,先別急着改内容。把 canonical 当成一條线索,從單頁声明、全站一致性、模板生成逻辑這三层往上查,通常比反复提交 URL 更有效。标簽统一之後,URL 發現、抓取和收錄的路径才會稳定下来。