做站点运营时,经常會遇到一種情况:同一篇内容在服務器上有好几個可以打開的地址,但從訪客角度看它們長得一模一样。搜尋引擎抓取时會把它們当成不同頁面分別處理,權重和点击資料被拆散,自己排查問题时也分不清哪個地址才是正主。規范連結(canonical)就是用来减少這種歧义的,但它不是加一行代碼就萬事大吉,需要定期自查。
同一篇内容為什么會有多個網址
多數重复地址不是故意做出来的,而是站点在建设和维護過程中自然形成的。常见来源包括:
- 域名层面:带 www 和不带 www 同时可訪問,http 與 https 並存。
- 路径层面:末尾有没有斜杠、大小寫不同、中文目錄被轉义成编碼。
- 參數层面:来源跟踪參數、排序參數、會话 ID,都會生成新地址。
- 模板层面:打印頁、獨立移動版域名、AMP 版、预览版各有一套地址。
- 系統层面:商城或 CMS 生成的 ID 頁與別名頁同时存在。
這些地址在浏览器里都能打開,但如果没有明确告诉搜尋引擎哪一個是首選,抓取分配和後續統計就會分散。
自查從三個地方入手
- 看頁面源碼。打開一個頁面,查看 head 区域的 link rel="canonical" 指向哪里。它應当是绝對地址,且與頁面目前的主地址保持一致;如果頁面本身就是唯一地址,指向自身即可。
- 看服務器日誌。观察蜘蛛抓取的地址里,是否存在同一内容被不同參數反复抓取的情况。重复地址出現得越多,說明規范化還没做干净。
- 看站点配置。检查服務器是否對首選域名做了 301 跳轉,是否强制 https,是否统一了大小寫和末尾斜杠。能靠跳轉解决的,不必都留给 canonical。
寫 canonical 时容易踩的坑
指向了不该指向的地址
常见的错誤是把 canonical 指向一個已经返回 404 的頁面、一個還要再跳一次的地址,或者一個被 robots 規則屏蔽的地址。這種情况下搜尋引擎無法把它当成有效首選,等于白寫。
分頁和篩選頁乱用
把所有分頁都 canonical 到第一頁,或者让不同篩選條件互相指向,容易让部分内容失去被抓取的机會。分頁頁通常保留自指 canonical 更稳妥,篩選頁則要看它是否有獨立價值,没有就別让它大量生成。
和 noindex 打架
同一個頁面既寫 noindex 又寫 canonical,信号會互相矛盾。如果只是不想让某個版本被收錄,優先用跳轉處理,而不是两條規則一起上。
規范連結是一種建议,不是强制命令。它能减少歧义,但不能代替服務器跳轉和清晰的结构设計。發現重复地址,先從源头治理,再用 canonical 收尾。
把检查變成固定動作
網站上线新栏目、更換模板、增加追踪參數时,都是重复地址容易冒出来的节点。可以在這些時間点安排一次检查,用同一套步骤過一遍:確認首選域名和跳轉規則,抽查十個頁面的 canonical,再看一眼日誌里被抓取的地址。坚持下来,這類問题通常不會积成大麻烦。