先给结论:当查询参数可以任意排列、任意增删、任意重复时,不存在一个天然完整的“有效地址集合”。可行的做法是先定义地址的规范化规则和有效边界,再让死链接检测只在这个边界内判定,边界之外一律不当作独立地址处理。否则参数空间无限,检测清单也会无限膨胀,永远收敛不了。
常规做法是把页面上的链接抓下来,逐个请求,非 200 就记成死链。参数一旦开放组合,这个流程会失控:同一篇内容可能以 ?id=1、?id=1&from=list、?from=list&id=1、?id=1&id=1 等形式出现。每轮抓取都可能发现“新地址”,待查队列只增不减。
这时常有两种解释。第一种是站点确实暴露了过多可访问的参数变体,属于真实的可索引地址膨胀;第二种是检测工具把等价地址当成了不同地址,问题出在地址定义,而不是站点本身多了死链。两者都会表现为“越查越多”,但处理方向完全相反。
关键证据是:把参数按不同顺序、不同冗余程度重写后,服务端返回的内容主体和关键状态是否一致。可以手动构造一组对照,例如对同一资源分别请求仅保留核心参数的地址、交换参数顺序的地址、追加一个已知无业务含义的参数的地址。
这里要提醒一点:某个参数组合返回 404,不能单独证明它应该被当作死链。它也可能只是从未被设计为有效地址,或服务端对未知参数采取了保守拒绝。请求量归零、抓取量下降同样不能单独证明规范化做对了,还可能是抓取预算转移、入口变更或屏蔽规则生效。
第一步,确定哪些参数是语义参数。只保留会改变页面主体内容的参数,其余一律视为跟踪、排序、展示偏好等非语义参数。这一步的产出是一份参数白名单,而不是黑名单,因为黑名单永远列不完。
第二步,对语义参数做排序和去重,形成规范形式。例如规定参数按名称字典序排列、重复参数只保留首次出现、空值参数直接丢弃。规范化后的字符串才是检测对象的唯一标识。
第三步,为边界之外的情况规定处置方式。规范形式之外的同义变体,可以选择 301 到规范地址,或返回规范链接声明并保持可访问。这个动作的结果直接决定下一步:如果变体被重定向,检测清单可以只保留规范地址;如果变体保持独立可访问,就必须把它们纳入有效集合,否则检测结果会持续漂移。
假设某列表页支持 category、page、sort 三个参数,且只有 category 和 page 改变主体内容,sort 只改变顺序。按上面的规则,有效地址集合是 category 与 page 的合法取值组合,sort 不参与集合定义。若实际请求中 sort 的不同取值返回了不同主体,说明假设不成立,需要把它升级为语义参数并重新划定边界。这个判断只依赖对照请求的结果,不依赖任何搜索量或收录数据。
规范化解决的是“哪些地址算同一个”,不解决“这个地址该不该被索引”。用 robots.txt 限制抓取,不等于可靠的索引移除;提交站点地图也不保证收录。若目标是从索引中移除参数变体,需要按各搜索引擎分别核查其支持的移除方式与生效条件,不能把抓取限制当成移除手段。HTTPS 同样不保证页面安全无漏洞,也不构成排名保证,它与地址集合的定义无关,不应混进这一步的判断。
当参数组合无限增长时,有效地址集合只能是一个被明确约定的有限集合:先定语义参数,再定规范形式,最后定边界外变体的处置方式。三步的顺序不能颠倒,否则检测清单会一直增长,而每一次增长都无法回答“这到底是不是一个新地址”。