為什么一條 canonical 會牵连一组頁面
canonical 的作用是让頁面自己說明:在若干個内容相近的地址里,哪一個才是主版本。它本身不是强制指令,但寫错之後,搜尋引擎可能把信号集中到一個不该集中的地址上,结果是一整组頁面在索引里表現異常,而不是單個頁面出問题。更麻烦的是,這類問题通常不會报错,頁面上看不出任何异样。
所以它适合放進站点的例行自查里,尤其是模板改動、批量導入内容、改版迁移之後。
常见的几類寫法問题
- 模板寫死成固定地址:整站所有頁面都輸出同一個 canonical,最典型的是全部指向首頁。這等于告诉搜尋引擎,成千上萬個頁面其實是同一個頁面的副本。
- 自指缺失:詳情頁寫了,列表頁、分頁、标簽頁却没寫。缺失时搜尋引擎只能自己判断,判断结果未必和你的規划一致。
- 指向了不可用的地址:canonical 指向的 URL 返回 404、302、301,或者本身带着 noindex。目标地址自己都不成立,這個声明就没有意义。
- 协议與域名混用:http 頁面指向 https,不带 www 的指向带 www 的,或者末尾斜杠寫法不统一。看似小事,實际會造成两個版本被反复来回指認。
- 一條頁面出現多條 canonical:多来自主题模板、插件、編輯器各自輸出一次,搜尋引擎通常會忽略全部。
- 由 JS 後寫入:如果标簽是脚本执行後才插進 head,能不能被讀到就取决于渲染结果,稳定性不如直接寫在 HTML 里。
按這個顺序走一遍自查
- 抓取頁面原始 HTML,確認 head 里存在 canonical,並且只有一條。
- 確認它是绝對地址,协议、域名、路径大小寫與目前頁保持一致。
- 確認自指:詳情頁指向自己,栏目頁指向自己;分頁頁是指向自己還是指向第一頁,全站策略要统一,不要一半一半。
- 打開 canonical 指向的地址,確認返回 200,且没有被 noindex、没有被 robots.txt 挡住。
- 把 canonical、Sitemap、hreflang、分頁連結放在一起看,確認它們没有互相矛盾。
- 抽样覆盖不同頁面類型:首頁、栏目頁、詳情頁、标簽頁、搜尋结果頁、移動端版本,至少各取两三個。
- 改版或目錄迁移後,把上面几步再完整走一次,重点看舊地址是否還在被引用。
它做不到的事
canonical 是一種建议,不是重定向。它不能让舊地址失效,也不能把两個主题不同的頁面强行合並成一個。多語言、多地区的版本各有各的定位,本质上不该用 canonical 互相指認。低质量頁面也不會因為指向了一個好頁面就變好。
真正需要轉移權重时,應该用 301;需要整组頁面登出索引时,應该用 noindex 或 robots.txt。canonical 只處理同一内容存在多個地址這一種情况。
维護节奏怎么定
不需要天天查。把几個触發点记住就够了:模板或主题升級之後、新增一種頁面類型之後、批量導入或程序生成内容之後、域名或目錄结构變動之後。每次抽检十几個 URL,比隔半年全站掃一遍更容易發現問题,也更容易定位是哪次改動引入的。
顺带把检查结果记在一個表里:頁面類型、canonical 目标、是否自指、目标狀態碼、检查日期。下次改動前後對照一下,能省不少排查時間。