搜索抓取

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 形态,比一次性设置更能发现问题。