站内搜索、筛选和排序功能对访客很友好,几秒钟就能从大量内容里挑出想要的那几条。但对爬虫来说,每一次参数组合都可能被当成一个新地址。如果没有任何约束,一个内容量并不大的站点,也能在很短时间里被「生成」出成千上万个 URL。
参数为什么会把 URL 空间撑开
排序(?sort=price)、筛选(?color=red&size=m)、站内搜索(?q=关键词)、会话与追踪参数(?utm_source=...&sid=...),这些地址返回的页面主体往往大同小异,却各自拥有一个独立 URL。蜘蛛顺着站内链接一路爬下去,抓取预算被大量高度相似的页面吃掉,真正需要及时更新的内容反而排在后面。更麻烦的是,当多个参数可以自由组合时,URL 的数量会呈乘法增长,靠人工列举很难穷尽。
参数本身不是错的。需要自查的不是「有没有参数」,而是「哪些参数组合允许被抓取、被索引」。
第一类:站内搜索结果页
搜索结果页通常是动态生成的,并且可以被任意关键词触发。只要有人构造一个关键词,就能得到一个此前不存在的地址。常见的情况包括:
- 搜索框提交后直接跳到一个带查询字符串的页面,标题里还带着用户输入的关键词;
- 搜索结果页里又列出大量内容链接,蜘蛛顺着这些链接继续深入;
- 空结果页也返回 200 状态码,形成一堆内容为空的地址。
比较稳妥的做法是让结果页保持可访问,但不进入索引:给这类页面加上 noindex,同时在 robots.txt 中屏蔽带搜索参数的路径。注意这两者不要简单叠加——如果路径已经被 robots.txt 完全屏蔽,蜘蛛就看不到页面上的 noindex 了,需要根据实际情况选一种作为主要手段。
第二类:筛选、排序与分面导航
电商、房产、招聘类站点常见多个筛选维度。三个维度各四个选项,组合出来的地址数量就相当可观。可以按下面的顺序判断:
- 核心筛选:确实对应不同内容集合、且有搜索需求的,保留并让它们可被抓取;
- 次要筛选:内容重合度高、搜索需求低的,指向一个代表性地址作为规范版本;
- 排序与视图参数:一般没有独立检索价值,统一规范到默认排序的地址。
具体到实现上,canonical 是常用的收敛工具,但要保证指向的地址真实存在且返回正常,不要指到一个 404 或需要登录的页面。
第三类:追踪、分享与临时参数
utm 参数、会话 ID、打印版本、来源标记,这些参数对访客体验和站内结构没有贡献,却会在链接被转发时不断扩散。建议的做法是:
- 在服务器或应用层做参数白名单,只保留业务真正需要的参数;
- 其余参数可以让页面正常打开,但 canonical 一律指向无参数的干净地址;
- 对明显冗余的地址,考虑用 301 收敛到干净版本,同时确认不会连锁跳转。
一份可以定期执行的检查清单
- 随手在站内点几组筛选和排序组合,对照地址栏与页面 canonical 是否一致;
- 抽查索引情况,看是否存在大量带参数的地址;
- 确认筛选、分页的入口是普通可点击链接,而不是只能靠脚本触发;
- 检查 robots.txt 的规则有没有误伤干净 URL,尤其是路径前缀写得太宽的情况;
- 核对 sitemap 中是否混入了带参数的地址,只提交干净且有代表性的 URL;
- 在服务器访问日志里统计带参数 URL 的抓取频次和返回状态码,看有没有异常增长。
参数治理不是一次配置就能一劳永逸的事。栏目调整、筛选维度增加、营销活动上线,都会带来新的参数。把上面这份清单放进例行的运营节奏里,隔一段时间回看一次日志,比在某次集中整改中改一大堆规则更有效。