很多站点執行一段時間後,同一篇内容會以多個 URL 的形式存在:带 www 和不带 www、带尾斜杠和不带、大寫和小寫、带參數和不带參數。對訪客来说這些頁面看起来一样,但對搜尋引擎来说,它們是几個不同的地址。canonical(規范化連結)就是用来声明“這几個地址里,哪個是正本”的一種标记。
哪些操作容易产生多個版本
- 同一篇文章既能從分類頁進入,也能從标簽頁、归档頁進入,地址各不相同;
- 列表頁翻頁後,後面的頁面與第一頁内容部分重合;
- 站内搜尋、排序、篩選參數被完整保留在 URL 里,並且這些地址被内鏈或外鏈引用;
- http 與 https、www 與裸域同时可訪問,没有做统一跳轉;
- URL 结尾斜杠處理不统一,带斜杠和不带斜杠都能打開;
- 文章改版後新地址上线,舊地址仍返回 200,而不是跳轉。
一份可执行的排查清單
- 结合站点地图和服務器日誌,列出被訪問較多的地址,挑出内容相同、地址不同的组合。
- 確認每個頁面的 canonical 是否指向自己,而不是全站所有頁面都指向首頁。
- 检查 canonical 地址本身能否正常打開、返回什么狀態碼、协议與域名是否和頁面實际使用的一致。
- 查看分頁、篩選參數頁面是否被统一声明成同一個地址,導致後續頁面失去獨立身份。
- 核對列表頁、标簽頁、作者頁等聚合頁面,canonical 是否與實际呈現的内容對應。
- 抽查舊地址是否還在站内被連結,如果有,考虑改成規范地址。
canonical 不是萬能钥匙
canonical 是一種建议,而不是强制指令。如果站内有大量連結指向非規范地址,或者舊地址仍返回 200 並被外部引用,搜尋引擎依然可能選擇它認為更合适的版本。所以声明 canonical 的同时,最好把站内連結同步统一到規范地址上,把信号做一致。
什么时候该用 301
如果某個地址已经确定不再使用,比如換域名、改路径、合並栏目,301 跳轉比 canonical 更干脆,它直接把訪客和蜘蛛送到新地址。canonical 更适合“两個地址都要保留”的情况,例如带參數的排序頁、打印頁、會话參數頁。
規范化的目标是让同一份内容只有一個主地址,而不是把多個頁面的表現硬塞给某一個頁面。
让各個信号保持一致
- 站点地图里只提交規范地址,不要混入參數版本和舊路径;
- 導航、面包屑、正文内鏈一律指向規范地址;
- 分享按钮、Open Graph 等信息使用規范地址;
- HTTP 响應头里的 Link rel=“canonical” 與頁面内的声明保持一致,不要互相矛盾。
几個常见誤用
- 所有頁面 canonical 都指向首頁,等于告诉搜尋引擎這些頁面都是首頁的副本;
- canonical 指向一個已经 404 或者會跳轉的地址;
- 分頁頁面全部 canonical 到第一頁,後續内容更难被單獨發現;
- canonical 用相對路径时寫错层級,實际指向了不存在的地址;
- 改版後只加了 canonical,却忘了把舊地址做跳轉,两個版本長期並存。
規范化不是一次性工作。每次改版、上线新栏目、接入新參數或者調整分頁規則之後,都值得抽几個典型地址检查一遍。發現問题时,先想清楚這份内容到底應该以哪個地址為主,再去决定用 301 還是 canonical,站内連結、站点地图和分享連結跟着一起改,整站的地址结构會清爽很多。