结论先给:当参数组合可以无限排列时,不要指望死链工具替你穷举全部地址,而应先定义一个“有效地址集合”——满足业务规则、可被稳定解析、且值得被索引的地址子集。这个集合之外的一律视为无效组合,即使它们返回 200。这个结论有一个明确前提:你的业务确实存在有限的可索引维度;如果每个参数值都能独立产生独特内容且无法收敛,那么下面的做法会失效,你需要改用收敛规则而不是枚举规则。
参数无限增长通常来自筛选、排序、分页、会话标识和追踪参数的叠加。死链工具能抓到的是“可生成”的地址,但可生成不等于可索引。定义有效地址集合的第一步,是给每个参数维度标注三种角色之一:
有效地址集合只允许“内容维度”参与组合,视图维度固定为默认值,无关维度一律剔除。这样组合数从无限坍缩为有限乘积。
假设某站点有两个内容维度:类目(10 个值)和地区(5 个值),另有排序(3 个值)和分页(若干)。如果全部组合,地址量会随分页和排序迅速膨胀。定义有效集合时,可以规定:
此时有效地址集合被收敛到 50 个左右。死链工具只需检查这 50 个是否可访问、是否返回预期状态;集合之外的组合即使被外部链接指向,也按无效处理,而不是逐个加入检查清单。
上面的收敛规则依赖“视图维度不改变内容”这个假设。反例是:某个参数看似是排序,实际上会触发不同的数据查询,返回的商品集合完全不同,并且每个组合都有独立搜索需求。此时把排序固定为默认值,会误删真实有效地址。判断依据不是参数名称,而是返回内容是否随参数值发生实质变化。如果实质变化成立,你必须把该维度升级为内容维度,重新计算组合数;如果组合数因此重新变得不可控,说明你的有效地址集合定义失败,需要回到业务层决定哪些组合值得保留,而不是继续在工具层加规则。
定义完成后,实际操作是:把有效地址集合的生成规则写成一个可复查的表达式,例如只允许 ?category=A®ion=B 形式,拒绝其他参数组合。然后让死链工具按这个表达式抓取,而不是抓取全站所有带参数的链接。结果会直接影响下一步:如果工具报告的有效地址集合内出现大量 404,说明内容确实被移除,需要处理死链;如果集合外出现大量 200 但内容重复的地址,说明收敛规则需要补充,把更多维度归入视图维度或无关维度。注意,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,因此有效地址集合的定义要独立于这些机制,不能把“已屏蔽”当作“已无效”。
当参数组合的每个值都能独立产生独特内容,且业务上无法预先判断哪些组合值得保留时,预先定义有效集合就不再适用。此时更合理的做法是:先让系统生成候选地址,再用访问数据或内容相似度做后置收敛,而不是在抓取前穷举。这个转向的条件是:你无法在不查看实际返回内容的情况下,仅凭参数名判断其角色。满足这个条件时,继续用死链工具检查无限组合只会浪费抓取预算,且无法得出稳定结论。下一步动作是:先抽样一批参数组合,比较返回内容是否实质不同,再决定是维持预定义集合,还是改为后置收敛。