搜尋抓取

URL 規范化没做好,蜘蛛可能在抓同一頁的多個副本

同一個頁面如果存在大小寫、斜杠、預設文档、协议域名等多個可訪問地址,蜘蛛會当成多個 URL 分別抓取,挤占抓取配額。本文梳理常见重复来源,並给出 301、内鏈统一、canonical 與 Sitemap 的收口顺序。

搜尋抓取

URL 規范化没做好,蜘蛛可能在抓同一頁的多個副本

蜘蛛在抓取时,判断一個 URL 是否已经抓過,主要依據 URL 字符串本身。如果同一個頁面可以通過多個地址訪問,蜘蛛通常不會自動合並,而是把它們当成不同的 URL 分別抓取。结果就是:抓取配額被相似内容消耗,新頁面排队變慢,日誌里還容易出現大量長得差不多的路径。

常见的重复 URL 来源

  • 大小寫差异:/Page 和 /page 在多數服務器上都能返回 200,蜘蛛會分別记錄。
  • 末尾斜杠:/list 與 /list/ 同时可訪問,内容一样,URL 不同。
  • 預設文档:/index.html、/index.php 和 / 都能打開首頁。
  • 协议與域名:http 與 https、www 與非 www 同时可用,等于四套入口。
  • 參數顺序與跟踪參數:?a=1&b=2 與 ?b=2&a=1,以及 utm_source 等,會生成大量變体。
  • URL 编碼差异:空格寫成 %20 或 +,中文路径编碼方式不一致,也會被当成不同地址。

為什么重复 URL 會拖慢抓取

蜘蛛的抓取配額有限,站点越大越明顯。同一内容存在多個地址时,蜘蛛會把一部分抓取次數花在這些副本上。真正需要發現的新 URL 可能因此排到後面。日誌里如果出現大量相似路径,回訪频次會被摊薄,蜘蛛對站点的整体抓取效率也會下降。

如果站点同时使用蜘蛛池做 URL 發現,問题會更明顯:蜘蛛池里混入非規范 URL,等于主動增加重复入口。Sitemap 里如果同时提交多個版本,也是在告诉蜘蛛“這里有多個頁面”。

收口顺序:從服務器到 Sitemap

  1. 選定唯一規范地址:确定协议、域名、大小寫和末尾斜杠風格,並寫進站点規范。
  2. 服務器层做 301:把非規范版本 301 到規范版本,不要長期使用 302。301 能让蜘蛛逐步替換索引。
  3. 内鏈统一:導航、面包屑、分頁、推荐位都指向規范地址。這一步最容易被忽略,但影响最大。
  4. canonical 兜底:頁面 head 里的 canonical 指向規范地址,注意不要和 301 指向不同地址。
  5. Sitemap 只放規范 URL:不要放重定向地址、參數地址和大小寫變体。
  6. 看日誌驗證:观察非規范 URL 的抓取频次是否下降,逐步清理残留入口。

几個容易踩的坑

  • canonical 和 301 指向不同地址,蜘蛛會犹豫,收口速度變慢。
  • 只改了站内連結,但外部連結和蜘蛛池里的舊地址還在,需要時間消化。
  • 參數規范化不要一刀切:分頁、篩選等决定内容的參數要單獨判断,不能全部屏蔽。
  • 服務器對非規范版本返回 200,而不是 301,等于告诉蜘蛛“這是獨立頁面”。
規范化的目标不是消灭所有變体,而是让蜘蛛把抓取预算集中在真正有内容的地址上。

如果服務器响應不稳定,蜘蛛可能還没走到規范地址就中断了,重复 URL 問题也會被放大。因此,URL 規范化最好和服務器稳定性、Sitemap 维護、内鏈检查一起做。定期抽查日誌中的 URL 形態,比一次性設定更能發現問题。