当筛选、排序、分页、追踪参数可以任意拼接时,URL 空间在理论上就是无限的,逐个判断“这个地址是不是死链”没有终点。可行的做法是反过来定义“有效地址集合”:只承认白名单内的参数名、取值格式和组合顺序,其余一律视为无效地址,用统一规则处理。样本阶段靠人工看几条链接还能应付,规模化后必须先把有效集合写成可执行的规则,再谈保留、改写还是退出。
有效地址集合不是“所有能打开的地址”,而是“你愿意让它参与索引、参与内链、参与站点地图的地址”。定义它需要三个维度:参数名白名单、每个参数的取值规则、参数之间的组合上限。例如只允许 page、sort、color 三个参数出现,page 只接受 1 到 50 的整数,sort 只接受三个枚举值,color 必须来自类目属性表,且同一地址最多出现两个参数。
这个定义一旦写下来,判断就变成机械匹配:符合规则的地址进入“有效”,需要保证可访问、可抓取、有明确规范;不符合的进入“无效”,再决定是重定向、返回 404/410,还是保留可访问但加 noindex。关键是先有集合,再有处理,而不是遇到一条查一条。
三种取舍各有成立条件,不能混用。
?color=red&size=m&page=2 改写成路径式或只保留必要参数的形式。前提是改写规则能覆盖全部有效组合,且旧地址能通过 301 指向新地址。改写规则写不完整时,会产生新的死链。边界在于:样本里“某条参数地址能打开且有流量”不能直接推广成“所有参数地址都该保留”。个别样本成立,往往是因为那条地址恰好被引用或恰好命中了长尾,规模化后例外会吞掉规则。
规模化后出现例外时,先分清原因,再决定是否放宽规则。可区分的证据包括:
一个实际动作是:把近一段时间的访问日志按参数名分组,统计每个参数名出现的地址数量和状态码分布。如果某个参数名贡献了大量地址但状态码高度分散,它更可能是无效集合的成员;如果地址数量有限且状态码稳定,才值得考虑保留或改写。这个动作的结果直接决定下一步是收紧白名单,还是为某类参数单独开规则。
假设某类目页支持 color、size、sort、page、utm_* 五类参数,取值分别有 20、15、3、50 和任意字符串。若全部允许组合,地址数量是天文数字;若只允许 color 与 page 同时出现,且 page 不超过 10,有效集合会缩小到可枚举范围。此时 sort 和 utm_* 进入无效集合:sort 可保留可访问但加 noindex,utm_* 用 301 指回无参数地址。这个例子的数字仅用于说明比较方法,不代表任何真实站点的参数规模。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。把无效地址写进 robots.txt 只是减少抓取,已经索引的地址仍可能留在结果里;要移除索引,需要配合页面级指令或状态码,并分别核查不同搜索引擎的支持情况。
规则写完不等于生效。验证时看三件事:有效集合内的地址是否都能稳定返回 200 且内容一致;无效集合内的地址是否按预期返回 301、404/410 或带 noindex;内链和站点地图是否只引用有效集合。若发现某类参数地址仍在被大量抓取,先检查规则是否真的部署到了所有入口,而不是立刻扩大无效集合。请求量或抓取量归零不能单独证明处理正确,它也可能来自抓取预算转移、规则误伤或日志采样偏差,需要结合状态码和内容抽样一起看。
最终判断标准很简单:当新的参数组合出现时,系统能否不依赖人工,直接判定它属于有效还是无效集合。能做到这一点,死链处理才算从逐条修补变成了可规模化的规则。