不少站点在导航和内链上做得挺规矩,却在两个不太起眼的入口漏出大量地址:站内搜索和列表筛选。用户在搜索框里敲一句话、在列表页勾几个条件,站点就会生成一个新的 URL。这些地址对访客是便利,对蜘蛛却可能是成倍的抓取消耗。
问题通常从哪来
站内搜索和筛选的共同点是,地址由用户输入决定,组合近乎无限。如果站点不加任何约束,蜘蛛顺着页面上的一条搜索结果链接,就能一路爬出成千上万个带参数的地址。它们大多内容稀疏、彼此高度相似,甚至只是同一批结果的排序变化。
后果比较直接:抓取预算被摊薄,真正需要更新的栏目页和详情页反而迟迟等不到抓取;日志里塞满参数地址,排查真实问题时噪声很大;如果搜索无结果时页面还返回 200,更容易被当成正常页面处理。
站内搜索页先做三件事
- 限制入口:搜索框和搜索按钮不需要被蜘蛛跟随,链接可用 rel="nofollow",或改为表单提交;搜索结果页本身不要放进导航和页脚。
- 处理空结果:查询无结果时返回明确的空状态页面,并给出可用的替代入口,不要让它返回 200 而正文近乎空白。
- 规范地址:搜索结果统一走固定的路径模式,例如 /search?q=,避免多种拼写方式长期并存。
如果站内搜索确实有独立价值,比如品牌词查询能带来稳定访问,可以单独保留少量高质量入口,但要和全站抓取规则分开考虑,别让整条搜索路径都敞开。
筛选参数的处理思路
能收敛的就收敛
- 把筛选条件的取值固定成有限集合,比如分类、品牌、价格区间,让可生成的组合数量可控。
- 对排序、分页等纯展示参数做统一处理,常见做法是用 canonical 指向不带这些参数的基准地址,或在 robots.txt 中统一屏蔽排序参数。
- 对多条件叠加的地址,考虑只让单条件页面可被抓取,组合地址交给用户现场使用。
不能收敛就明确边界
有些站点的筛选维度天然很多,硬性收敛会伤到使用体验。这时至少要做到:参数顺序统一、大小写统一、空参数不生成新地址、超出范围的参数值返回合适的错误状态。规则越清晰,蜘蛛越不容易在同一个结果集上反复打转。
一份可执行的自查清单
- 打开服务器日志,筛出带查询参数的请求,看数量和占比,以及是否集中在大批相似地址上。
- 在站内搜索框输入几个常见词,观察生成的地址格式是否一致,无结果时返回什么状态码。
- 在列表页逐一点击筛选条件,确认参数组合有没有无限扩展的迹象。
- 检查这些页面的 title 和 description 是否只把参数原样塞进去,若是,说明模板需要单独处理。
- 确认 robots.txt、canonical 和分页规则之间不打架,避免既屏蔽又被内链大量指向。
- 抽查站内搜索页是否出现在站点地图或导航里,如果有,评估是否该移除。
观察一段时间再调整
规则上线后不要只看当天数据。建议连续观察两三周的抓取日志:参数地址的请求量是否下降,核心栏目的抓取频次是否回升,索引数量有没有异常波动。调整往往需要小步试错,而不是一次性把参数全部关掉。有些筛选页本身带着真实需求,粗暴处理反而会损失访问。
站内搜索和筛选是服务访客的功能,不是给人爬的目录。把入口和参数边界说清楚,抓取资源才会流向你真正想被看到的内容。