很多站点的筛选功能是从用户体验出发设计的:按价格、地区、品牌、时间排序,点几下就能缩小范围。但从抓取角度看,这些筛选组合会生成大量参数链接,其中相当一部分指向没有内容的空结果页。如果不做任何约束,蜘蛛会把这些组合当成正常页面反复抓取,既消耗服务器资源,也让真正需要被发现的栏目页、详情页得不到足够的抓取机会。
筛选链接为什么容易失控
问题通常出在三个地方。
- 组合爆炸。五个筛选项,每个三到十个取值,理论上就能拼出成千上万个地址,而站内实际有内容的组合可能只有几十个。
- 空结果也返回 200。筛选后没有对应内容,页面却照样返回正常状态码,正文位置写一句“暂无相关结果”,蜘蛛无法判断这是有效页面还是空壳。
- 参数顺序不固定。同样的筛选条件,因为点击顺序不同生成了不同的参数排列,同一批结果出现多个地址,权重被摊薄。
自查清单
- 打开筛选功能的实际链接,确认参数是否稳定:同一组条件反复操作几次,看地址是否一致。
- 检查空结果页的返回码。没有内容时更合理的做法是返回 404 或 410,而不是 200。
- 看排序类参数(sort、order、page_size 之类)是否被当成独立页面。这类参数没有新增内容,一般不需要单独被抓取。
- 确认筛选与分页叠加时的表现,例如“筛选条件 + 第 8 页”。多数情况下这类深层组合可以不必开放抓取。
- 检查页面 head 里的 canonical 指向哪里。筛选结果页通常应指向对应的分类或栏目主地址,而不是自我指向。
- 确认内链是否主动生成大量筛选入口。如果模板在每个列表页都输出几十个筛选链接,抓取预算会被快速消耗。
三种常见的处理思路
不同站点规模不同,不一定要用同一种做法,可以先选一种,观察日志后再调整。
一、限制可抓范围
在 robots.txt 中屏蔽带特定参数的地址,或对筛选链接加 nofollow。这种方式简单直接,但要注意别把有内容的页面一起挡掉,规则最好按参数前缀精确书写。
二、收敛地址
让同一组筛选条件始终生成同一个规范地址,参数按固定顺序排列,去掉没有实际作用的空参数。同时把筛选结果页的 canonical 指回上级栏目页,减少重复。
三、做有价值的落地页
如果某些筛选组合确实有搜索需求,比如“地区 + 品类”,可以把它们固定成静态地址,配上独立的标题、描述和一段说明文字,作为正式栏目运营,而不是让它停留在动态参数状态。
判断标准可以简单一点:这个地址如果被用户单独分享出去,是否值得打开?如果答案是否定的,它大概率也不需要被蜘蛛单独抓取。
怎么验证效果
调整之后不要只看当天,建议观察两到四周。可以对比服务器日志里带参数地址的抓取次数是否下降,详情页和栏目页的抓取占比是否上升;再抽样查一下之前收录的空结果页,看是否逐步退出索引。如果发现某些参数被屏蔽后,对应的有效栏目也跟着掉抓取,就要回头检查规则是不是写得太宽。
筛选参数本身不是问题,问题在于让它自由生长。把参数范围、返回码、canonical 这三件事定下来,再配合日志观察,抓取会稳定很多。