当旧系统或旧合作关系退出时,真正需要处理的不是“有多少个带参数的URL”,而是哪些参数组合仍然代表有效内容。一个可操作的定义方式是:先确定哪些参数会影响页面主体内容,再为剩余参数设定允许值和默认值,最后只把能生成唯一主体内容的组合纳入有效地址集合。无法归入该集合的地址,应返回明确的失效信号,而不是继续返回内容或无限重定向。
假设某旧站点的文章页历史地址形如 /article?id=1024&page=2&sort=hot&utm_source=old&ref=partner。其中 id 决定文章主体,page 决定分页内容,二者属于内容参数;sort 只改变列表顺序且站点已不再支持该排序,utm_source 和 ref 属于跟踪或来源标记,不改变主体内容。
这一步的产出不是一份URL清单,而是一张参数职责表。每个参数只允许落入三类:决定主体内容、影响展示但可归一、完全不影响内容。分类依据应当来自模板渲染逻辑和数据库查询条件,而不是来自参数名看起来像什么。若某个参数在代码中参与了查询条件,就不能仅凭经验把它归为装饰参数。
参数组合之所以无限增长,通常是因为允许任意值、允许任意顺序、允许空值参与拼接。定义有效集合时,需要对每个内容参数给出有限取值域:
page 为正整数且不超过该文章实际页数。这里的关键动作是写出归一规则并实际执行。比如把 sort=hot 归一为不带 sort 的地址,把 page=1 归一为文章首页地址。归一之后,有效集合的大小从“参数取值的笛卡尔积”收缩为“真实存在的内容组合数”。如果归一后仍有大量组合,说明还有参数没有被正确分类,需要回到上一步检查模板逻辑。
假设一个旧内容系统准备下线,保留约两千篇文章,历史地址中混有分页、排序、来源标记和已废弃的预览参数。团队先按职责表分类,发现 preview 参数曾用于内部预览,现已无对应权限体系。若继续让它生成页面,等于把旧预览入口保留在公开地址集合中。
此时有两个成立条件不同的选择。选择一:若预览内容与正式内容完全一致,且没有敏感信息,可把 preview 归一为正式地址。选择二:若预览内容可能包含未发布草稿或旧版本,应让带该参数的地址返回失效信号,并从有效集合中排除。两者的分界不是参数名,而是该参数是否还能映射到应当公开的主体内容。
团队选择第二种处理,对 preview 返回明确的失效状态,同时保留 id 和合法 page 组合。执行后观察抓取日志:如果带 preview 的请求量下降,只能说明客户端在减少请求,不能单独证明处理正确;还需要检查这些地址是否仍返回内容、是否仍出现在站内链接中。若请求量没有下降,合理解释包括旧链接仍被引用、站点地图仍包含这些地址,或外部页面仍在链接它们。
旧合作关系退出往往伴随一批带合作方标识的地址。此时不要直接批量删除,而应先判断这些地址是否仍承载有效内容。若同一主体内容已有规范地址,合作方参数应被归一或忽略;若该地址对应的是合作方专属内容且已无保留价值,才将其排除出有效集合。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除。阻止抓取可以降低再次抓取的概率,但已收录地址可能仍出现在结果中,且不同搜索引擎对相关指令的支持情况须分别核查。站点地图也不保证收录,它只是提交候选地址的一种方式。因此,收缩有效地址集合之后,还应让失效地址返回清晰的失效信号,并检查站内链接和站点地图是否仍指向它们。
有效地址集合会随模板和内容变化而失效,因此需要留下可复查的规则:每个参数的职责、允许取值、默认值、归一目标、失效处理方式。规则中应注明假设条件和适用范围,例如“page 上限取文章实际页数”依赖分页数据仍然可查。
下一步动作是抽样验证:从历史地址中抽取包含不同参数组合的样本,逐一确认它们是否落入有效集合、归一目标是否正确、失效地址是否返回预期状态。抽样结果若显示某类参数频繁落入未定义状态,说明职责表需要补充,而不是继续扩大有效集合。只有规则、归一和失效处理三者一致时,参数组合的增长才不会再自动转化为地址集合的增长。