搜索抓取

URL 参数与蜘蛛抓取:筛选、排序和分页参数该怎么取舍

同一批内容因为排序、筛选、分页和追踪参数,可能变成成百上千个 URL。本文按参数类型拆解它们对蜘蛛抓取的影响,并给出内链、canonical、robots 与缓存上的处理思路,让抓取路径更集中,服务器压力更可控。

搜索抓取

URL 参数与蜘蛛抓取:筛选、排序和分页参数该怎么取舍

蜘蛛在站内发现 URL 的主要途径是链接,而链接里最容易失控的部分就是参数。同一个列表页,加上 ?sort=new、?price=100-200、?page=3 之后,会变成一串看起来各不相同的地址。蜘蛛不会因为你觉得它们是同一个页面就少抓,它看到的是一个个独立 URL。

参数为什么会放大抓取量

一个只有 20 个条目的筛选维度,和分页、排序组合起来,理论上能生成几十上百个 URL。这些 URL 大部分内容高度重复,只有几十个字的差异,甚至完全相同。对蜘蛛来说,它们都是待抓取对象;对服务器来说,它们都是真实请求。

问题不只是浪费。参数组合越多,蜘蛛越难判断哪个是主版本,权重和信号也容易被分散到一堆近重复页面上。

先给参数分个类

分页参数

page、p、start 这类参数通常承载真实内容,是应该被抓的。它们串起列表的深层内容,如果被挡掉,后面的条目可能就没有别的入口了。处理方式一般是:保留可抓,但控制页数上限,别让分页无休止地翻下去。

筛选与排序参数

sort、order、filter、price_range 这类参数,多数情况下只是同一批内容换了个顺序,往往是抓取量膨胀的主因。

  • 如果筛选结果有独立搜索需求,可以考虑做成静态路径,并只保留少量有价值的组合。
  • 如果没有独立需求,用 canonical 指向无参数版本,或直接在 robots.txt 里挡掉。
  • 不要让筛选链接出现在全站导航和页脚里,那等于把参数页提升成入口页。

追踪与无关参数

utm_、ref、from、session id 这些参数和内容无关。它们最好在服务端或 CDN 层就清理掉,让带参数的请求跳转到干净地址,而不是靠蜘蛛自己去判断。会话 ID 尤其要注意,同一个用户每次访问生成一个新 ID,会制造出无穷无尽的 URL。

内链设计比屏蔽更有效

robots.txt 只是不让抓,不代表 URL 不被发现,也不代表链接权重不传递。真正省事的做法是从源头减少参数链接的产生。

  1. 导航、面包屑、正文推荐位里的链接,尽量指向静态、无参数的地址。
  2. 列表页的排序和筛选,默认用 JS 交互或表单提交,不生成新 URL。
  3. 如果确实需要可抓的筛选页,用路径形式 /category/price-100-200/,并在页面里写清 canonical。
  4. 分页使用可抓的 a 标签,而不是纯 JS 点击加载,除非你能确认渲染后的链接可被解析。

服务器与抓取节奏

参数页一旦被大量抓取,压力会集中在数据库查询上。筛选组合通常意味着多条件查询,比静态页更重。如果日志里出现大量带参数的请求集中在同一时间段,先看两件事:这类 URL 有没有被内链大量引用,以及响应时间是否明显高于普通页面。

控制方式并不复杂:给参数页加缓存;在 robots.txt 里用通配符挡住明显的组合,例如 /*?sort=;对确实不需要的目录直接返回 410,而不是 200 空页。返回 200 的空页面会让蜘蛛反复来确认,反而更耗资源。

判断一个参数该不该放出去,可以问一句:这个 URL 的内容,用户会主动搜到它吗?答案是否定的,就尽量别让它出现在内链里。

抓取路径上的检查清单

  • 站点地图里是否混进了带参数的 URL?如果有,先清理。
  • 页脚、导航、相关推荐是否夹带了排序或追踪参数?
  • 筛选页是否做了 canonical,且指向可访问的干净地址?
  • 同一批内容是否存在两种以上可访问形式,比如参数版和路径版?
  • 日志里参数 URL 的抓取占比是多少?如果超过三成,值得排查。

参数本身不是问题,失控的参数组合才是。把入口收窄一点,蜘蛛的抓取路径会更集中,服务器的压力也更可预测。