先别急着改全站规则。把“正常页面”和“异常参数”各取一条,固定其他变量,只替换一个参数值,看异常是否跟着这个值走。如果异常只出现在某个参数组合、某种编码方式或某个来源链接上,问题多半不在整站路由,而在参数进入服务端后的处理分支。缩小复现条件的目标,是找到“最小异常输入”,而不是先猜一个全局原因。
同一路径下,无参数返回正常内容,带参数返回404,通常有两种解释。第一种是路由匹配成功,但参数校验失败,程序主动返回404,例如参数格式不符合预期、白名单未包含该值、大小写或编码被转换后无法识别。第二种是路由匹配本身失败,例如带参数时URL被重写规则改写、被中间层截断,或末尾斜杠与参数顺序组合后不再命中规则。两者外部表现都是404,但修复位置完全不同。
还有一种容易混淆的情况:页面正常返回,但内容为空或提示不存在。这类“软404”不在本次讨论内,需要单独看响应体和状态码是否一致。
准备一个可重复的最小测试,每次只改一个变量,记录状态码和响应体首段。可以用下面的顺序:
?a=1,看是否正常。如果第1步就异常,问题在“带参数”这个动作本身,检查重写规则和中间层。如果第1步正常、第2步异常,问题在参数值处理,检查校验逻辑和字符集。如果第3步恢复,说明异常与编码或特殊字符有关,而不是参数本身被禁止。如果第4步恢复,说明路由对参数位置或形式敏感。
证据要能排除其他变量,而不是只证明“改了就正常”。可观察的区分点包括:
这些证据只能说明“当前条件下哪个解释更成立”,不能单独证明某个配置就是唯一原因。请求量或抓取量下降也不能直接当作404处理正确的证据,它还可能来自抓取预算调整、链接减少或统计口径变化。
假设某分类页/list?cat=shoes正常,而/list?cat=shoes&sort=price返回404。不要先改全站参数规则。先固定cat=shoes,只把sort换成其他值,若全部异常,说明排序参数未被路由接受;若只有price异常,说明是值映射问题。再把sort=price单独放在无cat的URL上测试,若正常,说明是参数组合触发了校验分支。这个顺序能把“参数存在”与“参数组合”分开,下一步只需针对真正触发异常的那一层修改,而不是扩大规则范围。
得到最小异常输入后,先做一次修复验证:只改与最小条件相关的那一处,重放同一组对照。如果异常消失且正常样本未受影响,再考虑把验证样本扩展到同类参数。若修复后正常样本也开始异常,说明改动影响了更宽的路由分支,应回退并重新缩小条件。
需要留意的边界是:robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录。若异常页面同时被这些机制覆盖,不要用它们替代对404本身的修复判断。不同搜索引擎对参数和状态码的处理支持情况须分别核查,不能把在一个引擎观察到的现象直接套到另一个引擎。
最后,把最小异常输入、对照结果和修复后重放结果记在同一处,后续再出现类似404时,先比对是否属于同一参数分支,而不是从全站规则重新猜一遍。