先给结论:灰度样本只代表被选中的那批 URL,不能代表全量。一次小流量灰度真正有价值的地方,不是证明改动有效,而是提前找出哪些页面不满足改动成立的前提。发现例外后,你有三种取舍:保留原状、改写规则适配例外、或退出这次改动。选哪一种,取决于例外是暂时的抓取延迟,还是页面结构本身与规则冲突。
灰度通常按目录、模板或 URL 模式抽样。这种抽法天然偏向结构规整的页面:同一模板生成的详情页、参数一致的分页、路径层级接近的栏目页。而例外往往藏在样本之外——历史遗留的旧路径、由多个模板拼出来的聚合页、带查询参数的筛选页、内容极少的标签页。
所以灰度通过,只能说明“被抽中的那类页面在改动后仍能被正常发现和抓取”。它不能说明全量里那些结构不同的页面也会被同样处理。判断例外是否成立,可以看一组可区分的证据:
注意,请求量下降不等于处理正确,也不等于处理错误。它可能只是抓取节奏调整、缓存命中变化,或该批 URL 本来访问频次就低。把请求量归零直接当成“已被移除”的证据,是把相关当因果。
发现例外后不要急着全量回滚,先按例外的性质分三类处理。
适用前提:例外页面数量少、本身不是重点流量入口,且改动对它们没有破坏性影响。比如少量带参数的筛选页,改动只是调整了内链结构,这些页面依然能通过其他路径被发现。此时保留原状、只对例外做记录,比强行统一规则更省事。代价是例外会长期存在,需要在下一次改动时重新评估。
适用前提:例外与主样本的差异是可枚举的,且能用一个不冲突的条件区分开。比如主样本是 /product/ 下的详情页,例外是 /product/compare/ 这类对比页,两者模板不同。这时可以给例外单独一条规则,而不是让主规则覆盖它。改写后要重新跑一次小流量,专门验证例外那批 URL,而不是复用原来的样本。
适用前提:例外无法枚举,或者例外页面恰好是站点的重要入口,改动会让它们更难被发现。这种情况下继续全量发布是在赌例外不会扩大。退出的动作是恢复到改动前的状态,并保留灰度期间的状态证据,供下一次设计规则时参考。
假设某站有 5000 个详情页和 200 个对比页,对比页与详情页共用同一套内链模板。团队做了一次灰度,只抽了 50 个详情页,观察两周内这些页面的抓取请求保持稳定,于是准备全量上线新的内链规则。全量后如果对比页的抓取请求下降,而详情页没有变化,那么合理推断是对比页的入口被新规则削弱了,而不是搜索引擎整体降频。
这个例子里,灰度之所以没暴露问题,是因为抽样只覆盖了详情页。动作上的含义是:下一次灰度要把“结构不同的页面类型”各抽一小批,而不是只按数量抽样。这样做的结果是,例外会在小范围内先出现,你还有机会在发布前决定保留、改写还是退出。
无论选哪种取舍,都建议先做一件事:把灰度期间的抓取日志、站点地图提交记录和页面状态快照留存下来。这不是为了证明改动有效,而是为了在例外出现时能对比出差异发生在哪一层。
如果选择改写规则,下一步是设计一条只覆盖例外的验证样本,重新走一次小流量,确认例外页面在新规则下不再异常。如果选择退出,下一步是把例外清单整理成规则设计时的约束条件,避免下次再踩同一个坑。如果选择保留,下一步是在监测里给例外页面单独分组,不要和主样本混在一起看平均值。
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图提交也不保证收录。灰度能帮你发现的是“改动是否按预期影响了可发现性”,它替代不了对例外页面本身的判断。把这三件事分开看,取舍才不会建立在错误的前提上。