同一個頁面,经常能通過好几個地址打開:带 www 和不带 www、带尾斜杠和不带、後面挂了一串跟踪參數、大小寫不一致、從不同入口拼出来的篩選連結。對用戶来说這些地址指向同一屏内容,對搜尋蜘蛛来说却是若干個彼此獨立的 URL。canonical 的作用,就是在頁面里明确交代:這一批地址里,哪個才是主地址。
canonical 到底解决什么問题
canonical 是一個頁面級的提示信号,用来做頁面归並。它不阻止蜘蛛抓取,也不等于 noindex,更不是把頁面藏起来的手段。它的價值在于:当站内确實存在多個入口指向同一份内容时,让權重和索引尽量集中到一個地址上,其余地址作為變体存在。
需要提醒的是,canonical 是建议而非强制指令,蜘蛛會结合内鏈、sitemap、301 指向等信号综合判断。所以只寫一個 canonical 标簽,並不能抵消站内其他信号互相矛盾带来的混乱。
重复地址通常從哪来
- 协议與域名變体:http 與 https、带 www 與不带 www 同时可訪問。
- 尾部斜杠:/page 與 /page/ 都能打開,且没有一方 301。
- URL 參數:排序、篩選、分頁、来源跟踪、會话标识。
- 大小寫不一致:/About 與 /about 返回同一内容。
- 同一内容被多個栏目或标簽同时調用,生成不同路径。
- 打印版、移動版、舊模板残留的备用地址。
逐項自查清單
- 確認每個需要索引的頁面都有 canonical,並且指向自己,形成自引用。模板漏寫是最常见的問题。
- 检查 canonical 里的地址能否直接訪問、是否返回 200。指向一個 404 或需要登入才能打開的地址,等于什么都没说。
- 確認 canonical 與 sitemap 里的地址、内鏈使用的地址、301 的目标地址三處一致。指向三個不同地址是站内混乱的典型来源。
- 统一使用绝對路径,並且和站点實际使用的域名寫法保持一致,避免协议或 www 寫反。
- 排查 canonical 與 noindex 同时出現的情况。两者指向不同意图时,蜘蛛只能靠猜。
- 检查分頁、篩選、排序這類動態地址是否處理清楚,別让它們生成一批内容相同、只有參數不同的頁面。
- 確認 canonical 關系没有形成鏈式跳轉,比如 A 指向 B、B 又指向 C,尽量一步到位。
几個容易寫错的细节
canonical 和 noindex 別打架
如果一個頁面既要 noindex,又寫了 canonical 指向另一個頁面,容易让蜘蛛的判断反复。想清楚目的:是要這個頁面彻底不進索引,還是要把它归並到主地址。前者用 noindex 並考虑是否也去掉 canonical,後者只在确實存在重复地址时使用 canonical。
分頁頁要不要自引用
分頁列表的第 2、3 頁通常各自是不同的内容集合,一般建议各自自引用,而不是全部 canonical 到第一頁。把所有分頁统一指回第一頁,會让後續頁面的内容失去被單獨發現的机會。
跨域 canonical 要谨慎
把站内頁面 canonical 到別的站点,等于主動放弃自己頁面的索引地位。除非确實是同一份内容在多域分發,否則不建议這么做。反過来,別人把你的内容 canonical 過去,也不需要跟着改自己的标簽。
上线前的检查流程
- 從模板层面抽查几類頁面:首頁、栏目頁、詳情頁、标簽頁、分頁頁,確認 canonical 輸出規則符合预期。
- 用抓取工具或站点地图核對一批實际 URL,看看标簽里的地址與真實地址是否一致。
- 改動規范地址之後,观察一段時間蜘蛛来訪日誌,看新地址的抓取是否正常、舊地址是否逐渐减少。
- 把 canonical 規則寫進建站規范,避免每次改版重新讨论一遍。
規范化本质上是给站点自己定一套地址規則,然後让模板、内鏈、sitemap、重定向都遵守它。canonical 只是把這套規則明说出来,規則本身混乱,标簽寫得再工整也难见效。