很多站点並不是没有内容,而是同一份内容有多個地址:带參數的、带大小寫變体的、带 www 與不带 www 的、列表頁篩選後的。蜘蛛抓到多個版本,不一定知道哪個才是你希望被当作主版本的頁面。canonical 就是给蜘蛛的一個提示:這几個地址里,請把哪一個当作規范頁。
但 canonical 不是“萬能消重開關”。如果站点内部還在大量連結到重复版本,或者 sitemap 里同时列出多個地址,再或者服務器返回的狀態碼和 canonical 目标不一致,蜘蛛仍然會按自己的判断走。所以自查 canonical,重点不是只寫對标簽,而是让整站信号保持一致。
先確認哪些頁面真的重复
不要凭感觉给全站頁面加 canonical。先抽样看几類地址:
- 商品或文章詳情頁是否带跟踪參數、排序參數、會话參數;
- 栏目列表頁是否同时存在 /list 和 /list?page=1 這類首頁重复;
- 是否同时提供 www 和非 www、http 和 https、带斜杠和不带斜杠的版本;
- 移動端和桌面端是否使用同一套 URL,還是各自獨立地址;
- 标簽聚合頁、搜尋结果頁是否與主栏目内容高度重叠。
這些地址如果都能返回 200,並且内容主体接近,就属于需要统一規范的候選。注意,canonical 只處理“内容重复”問题,不處理“這個頁面该不该被索引”的問题。如果某個頁面根本不该出現,優先用 404、410、robots.txt 或 noindex 處理,而不是把它 canonical 到另一個頁面。
canonical 指向自己還是指向別人
規范頁的 canonical 一般應指向自己,形成自引用。這样蜘蛛每次抓到規范頁,都能確認這個地址就是主版本。非規范頁再指向規范頁。常见错誤是:
- 規范頁自己没有 canonical,蜘蛛無法確認;
- 重复頁的 canonical 指向一個不存在的地址;
- canonical 指向 301 跳轉後的地址,但頁面本身没有跳轉;
- canonical 指向的頁面返回 404 或 5xx,整條信号断掉。
如果 canonical 指向的地址需要跳轉才能到達,最好直接把這個地址改成最终可訪問的規范地址,减少一层不确定。
列表頁、分頁和篩選頁的處理
分頁列表的每一頁通常有獨立内容,不建议全部 canonical 到第一頁,否則後續頁面的内容可能难以被單獨發現。更稳妥的做法是让每頁自引用,同时保證分頁連結可抓取。篩選頁如果组合過多、内容重复度高,可以選擇 canonical 到不带篩選參數的主列表,或者用 robots.txt 控制抓取,具体要看這些頁面是否有獨立搜尋需求。
canonical 是提示,不是命令。它不能替代清晰的站点结构,也不能修复混乱的内鏈。
和内鏈、sitemap、重定向保持一致
蜘蛛判断規范版本时,會综合多個信号:canonical 标簽、内部連結、站点地图、重定向、hreflang 等。如果你在 canonical 里寫 A 是規范頁,但導航和正文内鏈都指向 B,蜘蛛會更倾向于 B。自查时可以把同一個内容的所有入口列出来,確認它們最终都指向同一個地址。
- 站点地图只提交規范地址,不要同时提交重复地址;
- 内鏈锚文本和連結地址统一,避免首頁連結一會儿带參數一會儿不带;
- 舊地址做 301 时,直接跳到規范地址,不要跳到另一個重复地址;
- 多語言或多地区站点,canonical 與 hreflang 不要互相冲突。
一個简單的自查清單
- 随机抽取 20 個内容頁,查看 canonical 是否存在、是否自引用或指向正确規范頁。
- 检查 canonical 目标地址是否能直接訪問,返回 200,且不是重定向鏈中的中間地址。
- 查看 sitemap 里是否混入了带參數、带 session、大小寫不同的重复地址。
- 用站点内鏈工具或日誌,看蜘蛛是否仍在大量抓取非規范版本。
- 改版或迁移後,复查舊地址的 canonical 和 301 是否都指向新規范地址。
canonical 自查不需要一次改全站,可以按栏目分批做。先處理流量大、重复入口多的模块,观察蜘蛛抓取日誌里規范地址和非規范地址的比例變化。如果發現非規范地址仍然被频繁抓取,優先检查内鏈和 sitemap,而不是反复修改 canonical 标簽。
最後提醒一句:canonical 能帮助蜘蛛理解你的偏好,但不保證一定按你的選擇處理。站点结构清晰、内容有差异、内鏈一致,才是更基础的工作。