同一篇内容在站内出現多個地址,是很常见的事:带參數的列表頁、打印頁、分頁、移動端獨立域名、HTTP 與 HTTPS 並存,都可能指向同一份内容。地址一多,点击和權重就會被摊薄。canonical 标簽的作用,就是告诉搜尋引擎“這一份内容的主地址是哪個”。
什么时候需要 canonical
不是每個頁面都要寫。真正需要處理的是那些“内容相同、地址不同”的场景。
- 列表頁的篩選、排序、跟踪參數产生的地址,主列表其實只有一條。
- 内容被拆成多頁(如第 1 頁、第 2 頁),需要明确主頁面與後續頁的關系。
- 同一篇文章同时存在于两個栏目下,或者新舊两套目錄並存。
- 移動端與 PC 端使用不同域名,且没有做自适應时。
- 商品或文章存在多個變体頁面,但主推一個入口。
寫法上的几個要点
指向绝對地址
canonical 里寫完整 URL,包含协议與域名,避免相對路径带来的解析歧义。地址要和线上實际可訪問的版本一致,包括是否带 www、是否带结尾斜杠。
指向自己也是一種声明
頁面本身就寫自己,是正常的做法,可以防止參數拼接後产生的副本被当成主版本。
不要形成鏈條
A 指向 B,B 又指向 C,會让判断變得含糊。尽量一步到位,所有副本直接指向同一個主地址。
内容不同就不要硬指
两個頁面主体内容差异較大时,用 canonical 把其中一個“隐藏”掉,通常两头不讨好。這種情况更适合考虑合並内容,或者让它們各自獨立。
日常自查清單
- 抽取一批带參數的地址,看返回的 HTML 里 canonical 是否统一指向無參數版本。
- 检查分頁:第二頁之後是自指還是指向第一頁。通常建议各自自指,主入口單獨處理,具体按站内實际情况定。
- 核對 canonical 指向的地址是否返回 200,而不是 301、404 或软 404。
- 检查是否存在多個 canonical 标簽。浏览器一般只認第一個,多余的容易造成困惑。
- 確認 canonical、站点地图里的地址、内鏈指向的地址三者一致。
- 改版或換域名後重新過一遍 canonical,別让舊域名残留在标簽里。
常见誤区
- 用 canonical 代替 301。頁面已经不打算保留了,應该做跳轉,而不是标注。
- 标簽寫在 JS 里。依赖脚本渲染的 canonical 不一定能被稳定讀取,尽量放在 HTML 头部。
- 認為寫了就一定會生效。canonical 是建议不是命令,最终判断還會參考内鏈、站点地图、跳轉等多種信号。
- 批量生成时套模板出错。模板變量取错,會让整站頁面都指向同一個地址,這是最容易出大問题的地方。
自查的顺序建议是:先確認主地址能正常訪問,再看各種信号是否一致,最後才處理细节。方向错了,细节再規范也没有意义。
和其他信号配合
canonical 只是线索之一。内鏈都指向主地址、站点地图只提交主地址、副本頁面做 301 跳轉,這三件事和 canonical 方向一致时,判断才會更明确。如果内鏈一半指向 A、一半指向 B,标簽寫什么都會打折扣。
建议每隔一段時間抽查一次,尤其是調整栏目结构、上线新模板、接入新的參數之後。把這件事纳入日常巡检,比出問题後再回头排查要省力得多。