canonical 标簽的作用只有一句话:当一個内容存在多個可訪問的 URL 时,告诉搜尋引擎哪個是主版本。听起来简單,但它出错的方式特別多,而且大多不會报错,只會在索引里慢慢表現成“這個頁面好像不太對”。
為什么 canonical 容易出错
因為它通常不是人工寫的,而是模板輸出的。模板一旦寫死,栏目改结构、URL 改規則、換域名,它都不會自動跟着變。再加上它属于“看不见的标簽”,日常没人會盯着看,問题往往积累很久才被發現。
常见問题清單
- 指向了一個已经 404 的舊地址;
- 指向的地址本身還要经過 301 才能到達;
- 同一頁面輸出了两個甚至更多 canonical;
- 分頁列表的每一頁都 canonical 回第一頁;
- 列表頁與詳情頁互相指向,形成回路;
- 寫的是相對路径,协议、www 與根域名混用;
- 移動端頁面 canonical 指向桌面端,但两邊内容並不一致;
- 多語言站点把所有语種都指向主語言版本。
一次能落地的自查流程
- 先抽样。從首頁、栏目頁、詳情頁、分頁、带參頁各挑几個,直接看源碼里的 canonical 是什么。
- 再全站導出。用爬虫工具跑一遍,把 URL 與 canonical 两列導出成表格。
- 做比對。把结果分成几類:自引用、指向站内其他頁、指向 404 或 5xx、缺失、重复輸出。
- 核對一致性。canonical 指向的地址,是否和 sitemap、内鏈、重定向目标说的是同一件事。
- 修模板而不是修頁面。發現問题優先改模板,避免下次更新又回到原点。
判断时可以參照的几條准則
- 用绝對 URL,带上协议和域名,减少歧义;
- 每頁只保留一個;
- 自引用是正常且推荐的,不需要刻意去掉;
- 需要整頁替換时用 301,canonical 處理的是“同一内容的多份副本”;
- 不要指望用 canonical 掩盖结构問题,它只是一個建议信号。
canonical 是提示,不是命令。搜尋引擎完全可以忽略它。如果你需要靠它来“救”一個本该修好的结构,那說明真正的問题在別處。
几個容易忽略的地方
分頁是一個典型。列表的第二頁、第三頁各自有獨立内容,把它們全部 canonical 到第一頁,等于告诉搜尋引擎後面几頁不用單獨看。除非你确實打算让它們合並,否則保持自引用更合适。
多語言是另一個。hreflang 负责說明语種之間的關系,canonical 负责說明同一语種内的主版本,两者分工不同,不要用 canonical 把不同语種合並成一個。
最後是改版节点。換域名、改 URL 規則、調整栏目结构之後,模板里的 canonical 往往還指向舊地址。把這項检查放進上线清單,比事後翻索引省事得多。
這套自查不需要一次做完全站。先抽样,再導出比對,把明顯的矛盾和指向失效地址的情况清掉,通常就能解决大部分問题。