当筛选参数、排序参数、分页参数可以自由组合时,URL 空间在理论上没有上界,任何"全量检测"都注定失败。可行做法是放弃枚举全部地址,改为定义"有效地址集合"——即哪些参数组合代表真实内容、需要检测,哪些只是同一内容的变体、不应参与死链判定。
定义有效集合的第一步不是写规则,而是给每个参数分类。判断依据是:改变该参数后,返回的主内容是否发生实质变化。
分类不能靠猜。实际动作是:取同一路径下两个仅差一个参数的地址,抓取后比较正文主体、标题和主要列表项。如果差异只在顺序或分页位置,归为展示型;如果主体条目集合不同,归为内容型。这个动作的产出直接决定下一步——内容型参数进入组合枚举,展示型参数被折叠为规范形式。
当有效参数不超过三四个、每个参数的取值集合可以列全时,最省事的做法是维护一份白名单,明确写出允许出现的参数名和取值格式,其余一律视为无效变体。
假设一个分类页支持 color、size、page 三个参数,其中 color 和 size 是内容型,page 是分页。有效集合可以定义为:color 与 size 的任意组合,加上不超过实际最大页数的 page。任何未列入的参数(例如 sort、utm_*)都不进入检测队列。
这个选择的适用条件是:参数语义稳定、取值有限、业务上不会临时新增维度。一旦新增了内容型参数,白名单必须同步更新,否则新地址会被误判为无效而漏检。
当参数由前端或第三方拼接、组合数量随维度增加呈乘积增长时,白名单会迅速失控。此时应改为规则定义:只检测能构成"有意义内容组合"的地址,其余不生成。
实施动作分三步。第一步,为每个参数标注类型和合法取值来源,例如从数据库取实际存在的颜色值,而不是接受任意字符串。第二步,定义组合约束:哪些参数必须成对出现、哪些互斥、哪些只有在前一个参数存在时才有意义。第三步,按约束生成候选地址,再做一次抽样抓取验证,确认生成的地址确实返回内容而非空结果页。
这里的关键取舍是:不追求覆盖所有理论组合,只覆盖业务上真实存在的组合。空结果页、参数越界页、默认值重复页都不算有效地址,把它们排除出去不会造成漏检,反而减少噪声。
定义有效集合时容易忽略两种情况,需要单独列出。
另外,站点地图里列出的地址不保证被收录,也不保证一定有效;它只能作为候选来源之一,不能替代有效集合的定义。
有效集合定义完成后,不要立刻全量跑。先按参数类型分层抽样,每层取少量地址抓取,观察返回状态和内容特征。
如果抽样中大量出现空结果页或重复内容,说明组合约束放得太宽,应收紧取值来源或增加互斥规则。如果抽样中频繁出现本该存在的地址缺失,说明约束太严,需要补回被误排除的参数组合。这个反馈动作决定了下一轮检测的集合边界,而不是一次性定死。
需要提醒的是,抓取量或某项统计归零,并不能单独证明集合定义正确——它也可能来自抓取被限制、工具配置错误或抽样偏差。判断集合是否合理,仍要回到内容是否真实存在这一依据上。