搜尋抓取

canonical 與蜘蛛抓取:重复 URL 合並时會參考哪些信号

同一篇内容出現带 www、不带 www、http、https、结尾斜杠或參數等多個地址时,蜘蛛會依據 canonical、301、Sitemap 和内鏈等信号判断規范版本。本文梳理這些信号的實际作用、常见配置誤区,以及把重复入口收敛到一套規范 URL 的操作顺序。

搜尋抓取

canonical 與蜘蛛抓取:重复 URL 合並时會參考哪些信号

同一個頁面,蜘蛛可能通過多個地址訪問到:带 www 和不带 www、http 和 https、结尾有没有斜杠、大小寫不同、带追踪參數或排序參數。對用戶来说這些地址打開的可能是同一篇内容,但對抓取系統来说,它們是若干個 URL。如果不做收敛,蜘蛛會把抓取次數花在這些重复地址上,真正需要更新的頁面反而排不上队。

蜘蛛合並重复 URL 时看的几個信号

蜘蛛没有讀心術,它主要依赖頁面和服務器给出的几類提示来判断哪個地址才是代表版本。

canonical 标簽

在頁面 head 中寫一個指向規范地址的 canonical,是最直接的做法。它相当于告诉蜘蛛:這几個地址的内容以這個為准。使用时注意三点:用绝對地址;指向最终可訪問的規范 URL,而不是再跳到別處的地址;不要形成 A 指 B、B 指 C 的鏈式 canonical,蜘蛛可能只跟一段就停下。

301 重定向

如果某個地址确定不再使用,301 比 canonical 更明确。蜘蛛訪問舊地址时會被直接送到新地址,合並信号更强。但 301 會增加一次請求和跳轉,站内連結如果能直接指向規范地址,就不必绕這一圈。

Sitemap 與内鏈

這两者相当于推荐名單。Sitemap 只放規范 URL,内鏈也统一指向規范 URL,蜘蛛在發現阶段就不容易把重复地址当成獨立頁面。反過来,如果 Sitemap 里混着參數版本、内鏈里又同时出現 http 和 https,蜘蛛會收到互相矛盾的信号。

常见配置誤区

下面几種情况在實践中很常见,值得逐條核對。

  • canonical 指向的地址本身返回 404、503 或又發生重定向,蜘蛛無法確認規范版本。
  • 頁面带參數时 canonical 指向不带參數的版本,但不带參數的版本内容並不完整,或者需要登入才能看到。
  • 站内同时存在大小寫混用的連結,服務器對大小寫敏感,導致两個 URL 都返回 200。
  • http 和 https 都能訪問,且没有做 301 或 HSTS,蜘蛛可能長期分別抓取。
  • 分頁、篩選頁的 canonical 全部指向第一頁,但頁面内容差异很大,可能让部分内容难以被獨立發現。
canonical 是提示而不是强制指令。蜘蛛會综合多個信号判断,單靠一個标簽不一定能解决所有重复問题。

把重复入口收敛到一套規范 URL

  1. 先确定唯一規范:選定协议、主机名、路径格式和结尾斜杠規則,寫成团队内部的约定。
  2. 统一内鏈:全站導航、文章正文、面包屑、分頁連結都按這套约定生成,避免同一頁面出現多種寫法。
  3. 處理舊地址:确定不再使用的地址做 301,指向規范 URL,不要指向另一個會跳轉的地址。
  4. 整理 Sitemap:只提交規范 URL,剔除參數版本和已被重定向的地址,减少蜘蛛的無效發現。
  5. 检查日誌:观察蜘蛛是否仍在抓取重复地址。如果某個參數版本每天被大量抓取,優先處理這個入口。

做完這些之後,重复 URL 不會立刻消失,蜘蛛的合並也需要時間。比較務實的预期是:重复抓取逐步减少,規范 URL 的抓取和更新检查更集中。定期看服務器日誌和抓取統計,比一次性配置完就放着更有效。