先别把“参数异常”当成整站问题。更有效的做法是:固定一个正常页面作对照组,只改一个变量(参数值、参数顺序、参数数量、是否带跟踪参数、是否登录/带 Cookie),看异常是否稳定复现;如果只在某个取值或某种组合下出现,问题通常落在参数处理与缓存/路由规则,而不是抓取或索引整体失效。
假设有一个商品列表页 /list 正常返回内容,但 /list?page=2 返回空列表或跳回第一页;/list?sort=price 正常,/list?sort=price&page=2 异常。此时要区分三种解释:一是参数被前端脚本消费,服务端只返回空壳;二是缓存把带参数的 URL 统一命中到同一份缓存;三是路由/重写规则把部分参数丢弃或改写。三者都会表现为“部分正常、部分异常”,但复现条件不同。
不要凭截图判断。用同一浏览器、同一网络、同一时间窗口,逐条记录以下字段:请求 URL、HTTP 状态码、响应体是否包含目标内容、是否发生重定向、最终落地 URL、响应头中的缓存标识(如 Cache-Control、Age、Vary)。把正常页与异常页并排比较,先找出唯一不同的那个维度。若异常只在带 page 且值大于 1 时出现,范围就缩到分页参数;若异常在任意参数组合下都出现,才考虑更上层的参数处理策略。
把候选变量拆开,每次只动一个:
?page=1 与 ?page=2 对比,判断是否与取值有关。?a=1&b=2 与 ?b=2&a=1 对比,判断缓存键或路由是否对顺序敏感。动作的结果会直接决定下一步:如果异常只跟随某一个参数值出现,就去看该参数在服务端和前端分别被如何处理;如果异常跟随参数数量或组合出现,就去看缓存键、重写规则和中间层配置,而不是继续改页面内容。
参数异常有时不是页面本身的问题,而是外部系统看到的结果不同。检查时要注意:robots.txt 的抓取限制不等于可靠的索引移除,它只影响抓取许可,不保证已收录 URL 立刻消失;站点地图不保证收录,提交了带参数的 URL 也不代表它们会被处理成你期望的版本。若你发现某个参数 URL 在结果中缺失,先确认它是否被允许抓取、是否返回了稳定内容、是否与规范 URL 冲突,再判断是“没被抓”还是“被抓了但没被采用”。
如果同一路径的不同参数在结果中表现不一致,优先核对规范标签与重定向是否把参数版本指向了同一个目标。规范标签写错或重定向链过长,会让本来正常的参数页被合并或丢弃。这里的动作是:抽取异常参数页与正常页的规范声明和最终 URL,逐项比对;若规范目标不一致,先修正声明,再观察后续抓取与展示是否收敛,而不是直接改参数生成逻辑。
缩小复现条件的终点,是一句可被他人复核的话,例如:“在未登录、无 Cookie、参数顺序为 page 在前时,page>1 返回空列表;交换顺序后正常。”有了这句话,才能判断修复是否真的生效。修复后重复同一组对照,确认异常条件不再出现,同时正常页没有回归。若修复只让请求量或抓取量归零,不能单独证明处理正确,因为缓存、屏蔽、重定向或统计口径变化都可能造成同样的现象。
最后,把参数策略写成明确规则:哪些参数参与内容生成、哪些只用于跟踪、哪些应被忽略或重定向。规则越具体,后续新增参数时越不容易再次出现“部分正常、特定参数异常”的分裂状态。