搜索抓取

带参数的 URL 要不要放给蜘蛛:筛选、排序与追踪参数的处理

列表页的筛选、排序、分页和渠道追踪参数,很容易生成大量组合链接。本文梳理蜘蛛遇到参数链接的入口,按参数类型区分放行与收敛,并给出内链、canonical、robots.txt、Sitemap 的处理思路和日志验证方法。

搜索抓取

带参数的 URL 要不要放给蜘蛛:筛选、排序与追踪参数的处理

站内链接里带问号的情况很常见。列表页的筛选、排序、翻页、渠道追踪,稍微不留神就会生成大量参数组合。对用户来说这些链接能用,对蜘蛛来说却可能是一片没有边界的空间。

蜘蛛是怎么遇到参数链接的

蜘蛛不会主动猜参数,它只会顺着页面上的 href、Sitemap 和外部引用走。参数链接的入口通常集中在几个地方:

  • 列表页和详情页里直接写成带参数的 href;
  • Sitemap 中混入了排序或渠道参数版本;
  • 站外分享、广告投放带来的追踪链接被别的页面转引;
  • 前端筛选组件在地址栏直接改写 query。

入口越多,组合越容易失控。一个商品列表如果同时有颜色、尺码、价格区间、排序方式,参数笛卡尔积可以轻松到几千条 URL。

真正的问题不在数量,而在重复

参数泛滥通常带来两个直接影响。一是抓取时间被分走,蜘蛛把额度花在几十种排序视图上,真正需要更新的详情页反而排到后面。二是重复内容判定,同一批数据被包装成多个地址,蜘蛛需要自己判断哪个是主体,判断失误时可能出现收录地址来回切换。

但也要注意另一面:有些参数确实代表不同的内容,比如按城市划分的门店列表、按标签聚合的文章集合。这类页面拦掉,等于把一条真实的内容分支关掉了。

先给参数分类,再决定放行还是收敛

可以放行的一类

  • 参数决定内容主体,去参数后页面内容明显不同的;
  • 有独立搜索需求、站内也确实把它当成落地页在运营的;
  • 数量可控,人工能列出完整清单的。

建议收敛的一类

  • 排序参数,如 sort=price、order=asc,内容集合不变只是顺序不同;
  • 展示类参数,如视图模式、每页条数、语言切换的临时参数;
  • 会话与追踪参数,如 utm_*、sid、from、ref;
  • 可以被站内搜索、表单提交触发的查询串。

几种收敛手段的用法

  1. 内链只链规范版本。页面里生成链接时去掉排序、追踪参数,让蜘蛛顺着内链走到的默认就是干净地址。
  2. canonical 指向无参数版本。前提是页面内容确实一致,如果参数改变了主体,canonical 指向别处反而会带来混乱。
  3. robots.txt 里做通配拦截。例如拦掉带 sort= 或 utm_ 的路径。写法要谨慎,通配符写得过宽可能顺带拦住正常目录。
  4. Sitemap 只放规范 URL。Sitemap 是主动提交的清单,把参数版本放进去等于主动扩大了抓取面。
  5. 筛选交互尽量少改地址。能用前端组件完成、不产生新 URL 的交互,就不要每次都改写 query。
收敛的目的是减少无效抓取,不是把页面藏起来。动手之前先确认这些参数页有没有流量和转化,有的话更合适的做法是把它整理成一个规范地址,而不是简单拦掉。

怎么知道收敛有没有起作用

处理完之后不要只看表面,翻一段服务器日志更实在。重点看三件事:带参数请求在蜘蛛总请求里的占比有没有下降;被拦的参数路径是否还在被反复尝试;规范版本地址的抓取次数有没有相应上升。如果占比没变化,通常是内链里还残留着带参数的 href,或者站外引用一直在把旧链接带回来。

参数治理不是一次性的工作。新上线的筛选项、新的投放渠道、新的前端组件,都会重新引入参数。把「链接生成时是否带无意义参数」写进上线检查清单,比事后从日志里找问题要省事得多。