当筛选、排序、分页参数可以任意叠加,URL 空间会趋向无限。此时定义有效地址集合的关键不是枚举所有合法组合,而是先确定哪些参数组合被允许进入索引,哪些必须归一到规范形式,哪些应当直接返回 404 not found 并退出索引。这个决定直接决定了后续的抓取预算分配和日志分析基准。
参数组合爆炸通常有三种来源,处理方式完全不同。第一种是位置型参数,例如排序方向、每页条数、视图模式,它们的取值有限且语义稳定。第二种是值域型参数,例如价格区间、日期范围、颜色标签,取值理论上连续或数量庞大。第三种是组合型参数,多个筛选条件交叉后产生笛卡尔积。
区分方法是看参数单独出现时页面内容是否有实质差异。如果 ?sort=price 与默认排序返回的条目集合相同、仅顺序不同,它属于可归一的位置型参数;如果 ?color=red 会剔除掉大量条目并改变页面主体,它属于值域型参数。这个判断决定了后面是保留还是改写。
保留适用于参数值域有限、且每个取值都对应稳定且有人搜索的独立内容。前提是你能为每个保留组合提供唯一标题、唯一主体内容,并且这些页面之间不是简单复制。如果做不到,保留只会制造大量近似页面。
改写适用于参数本身有业务意义,但组合后的页面内容高度重复。做法是把多个参数折叠成一个规范地址,例如把排序、分页、视图参数从可索引集合中剥离,只保留影响主体内容的筛选维度。改写的前提是你能确定哪个参数组合是“主版本”,其余组合通过规范标签或跳转指向它。
退出适用于参数组合没有独立搜索需求、内容由其他页面完全覆盖,或者组合数量已经超出可维护范围。退出的动作不是简单屏蔽抓取,而是让这些地址返回 404 not found 或 410,并从站点地图和内部链接中移除。需要留意的是,robots.txt 的抓取限制不等于可靠的索引移除——被限制抓取的地址仍可能因外部链接而出现在索引中,只是摘要信息可能不完整。
不要凭感觉决定哪些参数进入有效集合。可以按下面的顺序收集证据:
这里有一个容易误判的地方:某个参数地址抓取量归零,不能单独证明它应该退出索引。抓取量下降也可能是因为内部链接被移除、站点地图未包含、或者抓取预算被其他目录占用。需要同时确认该地址是否仍有外部引用和真实点击,再决定保留还是退出。
假设一个商品列表页支持颜色、尺码、价格区间、排序方式、每页条数五个参数。颜色和尺码各有约二十个取值,价格区间可自定义,排序有四种,每页条数有三种。若全部组合都视为有效,地址数量会迅速膨胀到无法维护。
一种处理方式是:颜色和尺码作为可索引维度,但限制为“单维度单选”,即 ?color=red 和 ?size=m 各自保留一个规范页,?color=red&size=m 这类交叉组合归一到颜色页并返回规范信号。排序、每页条数、价格区间不进入可索引集合,统一跳转到无参数主列表页。这样有效地址集合从理论上的海量组合收缩为几十个可维护页面。
执行这个动作后,下一步应当观察:原先被抓取的交叉组合地址是否开始返回规范信号或 404 not found,主列表页和单维度页的抓取频次是否上升。如果交叉组合地址仍被大量抓取且返回 200,说明归一或退出没有真正生效,需要检查内部链接和站点地图是否还在指向它们。
最终的有效地址集合应当能用几条明确规则描述,而不是一份不断增补的清单。规则至少覆盖:哪些参数允许出现在可索引地址中、每个参数允许的取值形式、多参数同时出现时如何归一、以及不符合规则的组合返回什么状态码。规则确定后,站点地图、内部链接、规范标签和服务器端路由要同时遵守同一套规则,否则日志里会持续出现规则之外的地址,让你无法判断边界是否真正收敛。
定义有效地址集合不是一次性任务。参数体系变化、业务筛选维度增减时,需要重新检查规则是否仍然成立,并确认退出索引的地址没有被重新引入内部链接。这一步做完,参数增长才从不可控变为可解释。