灰度只覆盖了主站路径时,全量发布后最先暴露的往往不是规则本身,而是被排除在灰度外的例外:带参数的历史外链、旧目录的尾斜杠写法、分站或子域里复制的同一路径。修复404的关键不是再补一条通配规则,而是先用灰度确认哪些请求形态没被采样到,再决定是扩大映射范围还是保留404。
两种条件的处理选择完全不同,先分类再动手。
/old-page、/old-page/、/old-page?utm_source=x。这类例外的证据是服务器日志里同一路径族反复出现404,且去掉参数或补上尾斜杠后能命中200。处理动作是让重定向规则在匹配时忽略查询串并同时接受带不带尾斜杠,而不是为每个参数值各写一条。如果两类混在一起,先按Host和路径前缀拆分日志再统计,否则会把来源问题误当成规则问题,越修越乱。
常见做法是挑几个访问量高的URL做灰度,结果全量后低流量但外链密集的旧路径集体404。要让灰度有代表性,抽样应覆盖维度而不是覆盖流量:
灰度期间观察的是这些样本返回的状态码和最终落点,而不是总404数量。数量下降可能只是因为灰度流量小,不能作为规则正确的证据。
假设某站把 /product/123 迁到 /items/123,灰度只测了主域下10条深层路径,全部301成功。全量后发现旧版移动子域 m.example.com/product/123 仍返回404,因为重定向规则写在了主域配置里,子域没有继承。
此时有两种选择:
/product/ 映射。逐条补会掩盖子域已废弃这一事实,后续还会不断冒出新404。判断依据是子域是否还有有效入口和流量。有流量就补映射,没流量就整体处理,两者不能混用。
改完规则先别急着宣布完成,取一轮可复查的证据:对灰度样本和全量日志中各取一组URL,记录请求URL、返回状态码、最终落点。如果出现以下现象,说明还有例外没处理:
另外要区分抓取限制与索引移除:robots.txt 里禁止抓取某路径,并不会让已存在的404页面从索引中消失,也不能替代正确的重定向或410处理。站点地图里列出的URL返回404,只说明地图与实际状态不一致,不代表搜索引擎一定会按地图处理。修复后是否被重新抓取和替换索引结果,仍需按各搜索引擎的实际情况分别核查,不能用一个平台的表现推断另一个。
当灰度样本、全量日志和来源分布三者一致时,才把这次修复视为闭环;只要还有一类来源没被采样覆盖,就先补采样再改规则,否则下一次全量发布还会在同一个例外上重复出错。