先不要从“整站出了问题”这个判断出发。把带参数的异常URL和同路径下不带参数或换一个参数值的正常URL放在一起,逐项控制变量:参数位置、参数值类型、是否带会话标识、请求头中的Cookie与User-Agent、返回状态码和响应体长度。目标不是立刻修复,而是把“某个参数异常”缩小成一条可以稳定复现的请求,再判断它是服务端路由、缓存策略还是抓取端处理造成的。
从你手上的页面清单里挑一条异常URL,再找同目录、同模板、参数结构最接近的正常URL。两者只允许一个变量不同,例如只改参数值,或只去掉某个参数。若正常样本本身也在变化,说明对比基础不成立,需要先选一条连续多次返回一致结果的URL作为基准。
记录四项内容:完整请求URL、请求头中与身份和缓存相关的字段、HTTP状态码、响应体长度或正文首段。假设同ip网站上/list?page=2正常,而/list?page=2&sort=price异常,那么sort这个参数就是第一个待验证变量,而不是整条路径。
把可疑参数拆成可独立测试的维度,每轮只动一个:参数名、参数值、参数顺序、参数个数、编码方式。每轮结束后对比状态码和正文是否回到正常样本的样子。若换参数值后异常消失,问题更可能在值触发的查询或路由分支;若换参数名仍异常,则更可能在参数解析层或缓存键设计。
如果多轮测试后只有“带某个参数且带Cookie”时才异常,下一步就应转向请求头对比,而不是继续改URL。
同一组URL在不同请求环境下结果不同,常见解释有三类。第一类是服务端对参数的处理不一致,证据是状态码或响应体随参数变化而稳定变化。第二类是缓存按不完整的键命中,证据是同一URL短时间内结果跳变,清除或绕过后恢复。第三类是抓取端对参数URL的取舍,证据是直接请求正常但抓取记录里该参数URL缺失或返回不同内容。
判断时不要只看“有没有被抓”。请求量或抓取量归零,也可能只是抓取预算分配、链接入口减少或该参数URL本来就没有被引用,不能单独证明处理正确。站点地图里写了参数URL,也不保证会被收录;robots.txt限制抓取,更不等于可靠的索引移除。需要把直接请求结果、服务端日志和抓取记录三者对齐后再下结论。
缩小到稳定复现后,把条件写成一行:请求方法、路径、参数组合、必要请求头、预期正常结果、实际异常结果。然后按影响面决定动作。若异常只出现在带排序参数的列表页,可以先规范该参数的链接入口和缓存键;若异常出现在带会话标识的URL上,应先确认会话参数是否被错误地当成内容区分维度。
动作执行后,用同一组对比URL再测一次,并观察日志中该参数请求的状态码分布是否收敛。若收敛,下一步处理同ip网站上其他参数模板;若不收敛,说明复现条件还没缩到最小,应回到参数维度继续拆分。整个过程以可重复的请求为单位推进,而不是以“整站异常”为单位猜测。