当筛选、排序、分页参数可以自由组合时,有效地址集合不能靠枚举得出,而应由业务上真实存在的维度取值组合定义。超出该集合的请求应稳定返回404错误页面,而不是返回200的空结果页;否则抓取预算会被无限参数空间持续消耗,而真正需要收录的地址反而得不到足够发现机会。
假设一个商品站允许颜色、尺码、排序、页码四个参数组合,颜色有6种、尺码有8种、排序3种、页码最多20页。理论上地址数量是6×8×3×20,但真实存在的组合可能只有几百个。此时要回答的不是“一共有多少地址”,而是“哪些组合代表一个真实可访问的筛选结果”。
判断依据可以拆成三条:
三者同时成立,才适合放进有效地址集合。只满足第一条的,可以保留为可访问页面但不必主动暴露;三条都不满足的,应返回404错误页面。
无限参数场景下,维护一张“合法URL清单”很快会失效,因为商品上下架会让清单每天变化。更稳的做法是写一组判定规则,让程序在请求时实时判断。
规则可以按优先级排列:
这套规则的关键动作是:把判定逻辑放在响应层,而不是放在站点地图生成层。站点地图只输出当前确认有效的地址,但真正决定返回200还是404的是响应层。这样即使站点地图滞后,也不会让无效组合以200状态被长期抓取。
假设某站原来只允许“颜色+尺码”,后来增加了“排序”和“每页数量”两个参数。改版前,颜色与尺码的任意组合都返回200;改版后,排序参数可以产生大量等价页面,例如同一筛选结果按价格升序和按销量升序,内容主体相同,只是顺序不同。
这时决策分两种条件:
判断“是否有独立价值”不看参数本身,而看该地址被访问时首屏是否出现不同的商品集合。若只是顺序不同,就不构成新的有效地址。
定义完规则后,需要抽样验证,而不是直接全量放开。可以分别取四类地址各若干条:
观察每类返回的状态码和页面内容。若第二类返回200且页面显示“暂无商品”,说明边界过宽;若第三类返回200,说明白名单未生效;若第四类返回200且内容与规范地址一致,说明缺少规范化处理。这些现象只能说明当前响应行为,不能单独证明抓取或索引结果会如何变化,因为抓取量下降还可能来自内链减少、站点地图更新或整体抓取频率波动。
一个实际动作是:先把非法参数值统一改为404,再观察服务器日志中该类地址的请求是否减少。若减少,说明入口或外链在收敛;若没有减少,说明还有页面在持续生成这类链接,需要回到模板层检查。
返回404错误页面不等于把用户丢在死路上。有效地址集合之外的请求,页面应说明该筛选条件不存在,并提供回到有效筛选入口的链接。这样做的结果是:用户不会停在空页面,抓取器也能从404页面继续发现有效地址。
同时要区分两件事:robots.txt禁止抓取某类参数,不等于该地址会从索引中移除;站点地图不包含某地址,也不保证它不被抓取。因此对无限参数空间,优先用响应状态和规范化处理来定义边界,而不是只依赖抓取限制。
最后,有效地址集合应定期根据商品数据重新计算,而不是一次定义后长期不变。当某个参数值从合法取值域中消失时,对应组合应自动转为404错误页面;当新维度加入时,先按上述规则判断它是否产生独立内容,再决定是否纳入集合。这样,地址数量会随业务真实边界增长,而不会随参数组合无限膨胀。