搜索抓取

带参数的 URL 怎么给蜘蛛放行:排序、筛选与跟踪参数的取舍

筛选、排序、分享跟踪这类参数,会让同一个页面产生成百上千个地址。蜘蛛一旦沿着这些地址走,抓取预算就被摊薄。这篇说清三类常见参数的识别方式,以及在 canonical、robots.txt 和内链控制之间怎么选。

搜索抓取

带参数的 URL 怎么给蜘蛛放行:排序、筛选与跟踪参数的取舍

参数 URL 是怎么被蜘蛛发现的

站内搜索、筛选器、排序按钮、分享链接,都很容易在地址后面挂上一串参数。用户点一下没问题,但每一个组合都是一个独立 URL。列表页有二十个筛选项,两两组合就是几百个地址;再加上排序方向、每页条数、翻页页码,数量很容易失控。

蜘蛛顺着内链和 Sitemap 爬,看到一个链接就当作一个新地址。它不会先判断这个地址和刚才那个是不是同一个页面,通常要抓完、解析完才可能意识到内容重复。也就是说,浪费发生在识别之前。

先把参数分个类

排序与筛选

典型形式是 sort、order、filter、price_min 这类。它们带来的页面内容确实不同,但对用户和蜘蛛的价值有限,很多只是同一批商品换了顺序。这类参数如果数量可控,可以考虑放行让蜘蛛抓一部分;如果组合爆炸,就需要收口。

跟踪与统计

utm_source、from、share_id 这类,页面内容完全一样,只是入口来源不同。它们对抓取没有意义,属于最应该处理的一类。

会话与分页

sessionid、sid 这类会随访问变化,同一页面每次抓取都拿到不同地址,蜘蛛很容易反复抓同一个页面。分页参数(page、p、start)则要区分:真正的翻页列表值得抓,纯展示用的加载更多不一定要放。

几种收口方式,各自的边界

  • canonical 指向规范地址:适合参数带来的内容基本相同、但确实需要用户访问的场景。canonical 是建议不是命令,蜘蛛可能依然抓参数地址,只是把权重归到规范页。
  • robots.txt 屏蔽:适合跟踪参数这类没有抓取价值的地址。用的是通配符规则,比如屏蔽带 utm_ 的路径。要留意屏蔽的是抓取,不是索引——如果别的站有链接指向这个地址,它仍可能出现在结果里。
  • 内链层面不生成:最省事的做法是前端不把跟踪参数写进 a 标签的 href,只在跳转时动态带上。蜘蛛看不到这些链接,自然不会去抓。
  • 筛选页收口:保留一级筛选,屏蔽二级组合,或者给筛选结果页加上 noindex。判断标准是这些页面有没有搜索需求、有没有被外部链接引用。

放行还是屏蔽,先问三个问题

  1. 这个地址有没有独立内容?如果和主页面完全一样,就没有放行的理由。
  2. 有没有用户真的在搜它?有搜索需求的筛选组合,可以单独做成静态入口。
  3. 数量可控吗?十几个可以放,几千个就要考虑抓取预算被摊薄的问题。
处理参数 URL 前,建议先看一下服务器日志里带参数的请求占比。如果一半以上的抓取都花在这些地址上,收口的优先级就很高。

收口之后要看什么

调整完规则,观察一段时间日志:参数地址的请求量是不是降下来了,主页面和真正有价值的列表页抓取频次有没有回升。如果目标页面反而少了,可能是规则写得过宽,把正常地址也挡掉了。规则调整最好一次只动一类参数,方便对照。