canonical 這個标簽经常被当成让頁面被收錄的工具,但它實际做的事情只有一件:在一组内容相同或高度相似的 URL 里,指明哪一個才是主版本。搜尋引擎會把索引和排名信号尽量集中到這個地址上。它不承诺收錄,也不负责提升頁面本身的质量。
归並信号,不是收錄開關
一個頁面能不能進索引,取决于内容质量、能否被抓取、是否被規則挡住等一串條件。canonical 只在這些 URL 已经進入候選范围之後才起作用,作用是帮搜尋引擎少做一次選擇。
如果主版本自己没被抓取、被 robots.txt 挡住,或者内容過于單薄,那么 canonical 寫得再規范也没有意义。反過来,把 canonical 指向一個不该当主版本的地址,可能让原本有排名的頁面被合並掉,流量跟着一起走。
判断一條 canonical 是否合理,先問一句:這些 URL 對用戶来说是不是同一個頁面。
常见寫错的几種情况
- 自引用寫成了別的地址:頁面本该指向自己,却在套模板时指向了栏目頁或首頁,等于告诉搜尋引擎我不是主版本。
- 跨頁错誤指向:詳情頁的 canonical 指向列表頁,在带參數或分頁的頁面没有單獨處理时尤其容易發生。
- A 指 B、B 又指 A:互相指向形成循环,搜尋引擎無法判断谁是主版本,只能自己挑一個。
- 指向 404 或重定向地址:主版本不存在或者會跳走,归並信号等于落空。
- 多語言、多分站混用:不同語言的版本互相 canonical,可能導致某個語言版本無法單獨出現在索引里。
自引用 canonical 的價值
给每個正常頁面加一條指向自己的 canonical,看上去多余,但能减少動態參數、大小寫、结尾斜杠等變体带来的干扰。在參數多、同一内容能通過多個地址訪問的站点上,自引用是比較稳妥的預設做法。
前提是這個頁面本身希望被收錄。如果某個頁面只是篩選條件的组合结果,不希望它單獨出現在索引里,更合适的做法通常是 noindex 或 robots 規則,而不是把 canonical 指向別的頁面。
上线前後的检查顺序
- 確認主版本 URL 自己能返回 200,且没有被 robots.txt 或 noindex 挡在外面。
- 列出所有指向同一内容的 URL 變体,看它們的 canonical 是否统一指向同一個主版本。
- 检查是否存在互相指向和鏈式指向,例如 A 指 B、B 指 C,尽量收成一层。
- 用抓取工具查看渲染後的 HTML,確認 canonical 不是靠脚本後插入才出現。
- 观察一段時間内索引里留下的是哪個地址,如果和预期不一致,再回头調整。
归並之後要留意什么
canonical 生效後,被归並的 URL 可能逐渐從索引里淡出,這属于正常現象。真正需要盯的是主版本是否稳定被抓取、排名有没有明顯下滑。如果主版本自己的收錄就不稳,先去解决它的可抓取性和内容問题,再谈归並。
還要记住,canonical 是建议而不是强制指令,搜尋引擎可能因為其他信号選擇忽略它。把它当成整理 URL 的工具,而不是决定收錄的手段,很多判断會清楚得多。