canonical 标簽不直接决定收錄,但它會影响蜘蛛對“哪個地址才是這個頁面的代表”的判断。很多站点把 canonical 当成一個装完就不再看的模板字段,结果首選地址指向了 404、重定向頁,或者全站都指向首頁。這類問题不會让服務器报警,却會让蜘蛛在地址選擇上反复犹豫。
先確認 canonical 到底在声明什么
canonical 是頁面给搜尋引擎的一個建议:如果站内有多個地址内容相同或高度相似,希望以哪一個地址為准。它不阻止其他地址被抓取,也不等同于 301 跳轉。把這两件事分清楚,後面的自查才有意义。
- 301 是服務器层跳轉,訪問舊地址會直接到新地址。
- canonical 是頁面内的声明,舊地址仍可訪問,只是建议蜘蛛把權重和索引归到首選地址。
- noindex 是告诉蜘蛛不要索引目前頁面,和 canonical 同时用时可能互相干扰。
常见的 canonical 寫错方式
首選地址本身不可訪問
如果 canonical 指向的 URL 返回 404、500 或者需要登入,蜘蛛會看到一個無效的首選地址。常见原因是改版时删了舊頁面,但模板里的 canonical 還留着舊路径;也可能是 URL 規則調整後,canonical 没有跟着更新。
自查时把 canonical 的目标地址單獨抓一遍,確認它返回 200,並且頁面内容與目前頁面一致。
全站模板共用同一個 canonical
有些 CMS 在模板头部寫死了 https://example.com/ 這样的固定地址,所有文章頁、栏目頁都輸出同一個 canonical。這等于告诉蜘蛛全站頁面都指向首頁,通常不是你想要的结果。检查方法很简單:随机抽十几個不同類型的頁面,看源碼里的 canonical 是否各不相同。
canonical 指向重定向地址
首選地址最好是一個稳定的最终地址。如果 canonical 指向的 URL 本身會 301 到另一個地址,蜘蛛需要多走一步才能到達真正内容。短期不一定出問题,但鏈路越長,越容易在改版或參數調整时失控。
分頁、篩選與多語言版本處理不当
分頁頁全部 canonical 到第一頁,可能让後續分頁的内容失去獨立被發現的机會;篩選參數頁 canonical 到無參數版本,則要確認两個版本的主要内容确實一致。多語言站点更要注意:不同語言版本應各自 canonical 到自己,而不是全部指向某一個語言。
canonical 的使用前提是頁面内容确實相同或高度相似。如果内容差別很大,却强行 canonical 到一起,反而會让蜘蛛對站点结构产生誤判。
自查时具体看什么
- 抽样頁面類型:首頁、栏目頁、文章詳情頁、分頁頁、标簽頁、篩選结果頁、多語言頁各取几個。
- 查看頁面源碼中的 canonical 地址,確認是绝對地址、可訪問、與目前頁面主题對應。
- 抓取 canonical 目标地址,记錄 HTTP 狀態碼、最终地址和頁面标题。
- 對比 canonical 目标與頁面自身的标题、正文,排除張冠李戴。
- 检查 canonical 與 noindex、robots.txt、sitemap 中的地址是否互相矛盾。
- 在站点日誌里观察 canonical 目标地址是否被蜘蛛正常抓取。
几個處理原則
- 一個内容只保留一個首選地址,其余地址通過 301 或 canonical 归拢,不要两套規則混用。
- canonical 目标優先使用稳定、干净、返回 200 的地址,避免带無用參數或跳轉。
- 改版、換域名、調整 URL 規則时,把 canonical 纳入检查清單,和重定向一起驗證。
- 如果頁面需要被索引,不要同时给它加 noindex;如果頁面不需要索引,優先用 noindex 而不是靠 canonical。
- 跨域 canonical 要谨慎,確認對方頁面确實是你希望的代表地址,並且两邊内容對應。
改完之後怎么观察
調整 canonical 不會立刻反映在抓取和索引上。比較稳妥的做法是分批修改,改完後观察日誌里首選地址的抓取频次、頁面返回狀態,以及搜尋控制台里地址归集的變化。如果發現某個首選地址長期不被抓取,或者大量頁面仍然以非首選地址出現在索引里,再回头看模板和内部連結是否也在指向舊地址。
canonical 只是站点运营里的一個小环节,但它和 URL 規范、重定向、内鏈、sitemap 是一套组合。把首選地址寫對,至少能让蜘蛛在發現和归集地址时少绕一段路。