搜索抓取

重复 URL 的抓取消耗:canonical 与 noindex 解决不了的部分

canonical 与 noindex 常被当作减少抓取的手段,但它们只在页面被抓取之后才生效。本文梳理重复 URL 的常见来源,包括参数组合、站内搜索结果页与同一内容的多套地址,并给出收口做法和基于抓取日志的核对思路,帮助判断抓取额度是否被大量无效页面占用。

搜索抓取

重复 URL 的抓取消耗:canonical 与 noindex 解决不了的部分

给重复页面加上 canonical 或 noindex,经常被当成“省抓取”的手段。但从搜索蜘蛛的工作顺序看,这两个标签的作用点在抓取之后:它得先请求这个 URL、下载并解析 HTML,才能读到标签,再决定要不要索引。也就是说,标签影响的是索引与展示,抓取请求本身已经发生了。

标签生效之前,请求已经发出

把流程拆开会更清楚:URL 被发现 → 进入抓取队列 → 请求并下载 → 解析页面 → 读取 canonical、noindex、meta robots 等指令 → 决定索引与后续抓取。重复 URL 越多,前面的步骤就要重复越多遍。如果同一套内容存在几十个参数变体,每个变体都会各自走一遍这个流程。标签只能让它们不进索引,不能让它们不被请求。

重复 URL 的常见来源

参数组合与排序

筛选、排序、每页条数、追踪参数,任意一个不同就会产生新地址;参数顺序不同、大小写不同,也常被当作不同 URL。列表页上每增加一个可选条件,可访问的地址数量就可能翻倍。

站内搜索结果页

站内搜索会按关键词生成大量页面,内容往往稀薄且互相重复。这类页面如果放开抓取,会持续产生新的 URL,而且很多只有内部链接指向,外部很难发现,却会被蜘蛛顺着抓。

同一内容的多套地址

  • http 与 https、www 与非 www 同时可以打开
  • 带与不带 index.html、带与不带末尾斜杠
  • 打印版、移动版、AMP 版各自使用独立地址
  • 新旧栏目路径同时在线,没有做跳转收口

收口的几个做法

  1. 协议与域名统一,非主域一律 301 到主域,并且跳转一步到位,避免多级跳转损耗。
  2. 参数页按用途分类:必要的分页保留可抓,排序类、追踪类参数在 robots.txt 屏蔽,或用 canonical 指向规范页。
  3. 站内搜索结果页加 noindex,同时避免在正文和导航里大量链接到搜索结果。
  4. 站内链接只指向规范地址,不要在不同位置混用带参数与不带参数两种写法。
  5. 改版时把旧路径做成 301,而不是让新旧两套长期并存。

用日志核对现状

判断问题是否存在,不必凭感觉,翻一周抓取日志就够了:

  • 统计同一模板下被抓取的 URL 数量与总请求数,看是否明显多于实际内容量。
  • 找出请求次数靠前、但内容高度相似的路径,例如只差一两个参数的页面。
  • 观察是否在某个时间段集中出现大量陌生参数 URL,通常来自蜘蛛自行组合或外部链接。
  • 对比这些 URL 的返回状态,若大量是 200 且内容雷同,说明它们确实在消耗抓取。
需要区分两件事:不被索引,和不被抓取。noindex 只解决前者。若重复 URL 的基数很大,抓取额度仍会被持续占用,真正需要被发现的页面反而排在后面。

所以更实际的顺序是:先减少重复 URL 的产生,再用标签做补充。标签是兜底,不是源头治理。把地址数量控制在和内容量匹配的范围内,抓取行为才有余力照顾到真正有价值的页面。