小流量灰度能发现全量发布前看不见的收录例外,但它只能证明被灰度到的那部分 URL 的行为,不能证明全站。真正有价值的做法是:灰度时同时记录“哪些 URL 被放行”和“哪些 URL 被拦截”,并把这两组结果当作全量发布的条件,而不是当作发布成功的信号。
灰度结果通常只有两类,对应的下一步完全不同。
条件一:灰度 URL 被正常处理,但拦截组没有对照。这时你只验证了“放行路径能走通”,没有验证“被排除的部分是否会成为例外”。如果全量发布时把拦截组一并放行,之前没暴露的问题会一次性出现。此时的正确动作是扩大灰度范围,专门覆盖此前被拦截的 URL 类型,而不是直接全量。
条件二:灰度 URL 被正常处理,且拦截组也被单独验证过。这时你才有依据判断全量发布是否安全。动作是把拦截组的处理结果与放行组对比,找出差异来源,再决定全量时是统一放行还是保留分层。
两种条件的分界不在流量大小,而在“例外组是否被观察过”。灰度流量再小,只要覆盖了例外组,信息量就足够;灰度流量再大,只覆盖放行组,仍然会漏掉全量发布时的意外。
假设某站点有列表页和详情页两类 URL。灰度只放行了列表页,详情页仍被规则拦截。灰度期间列表页表现正常,于是准备全量。
全量发布把详情页也放行后,才发现详情页的 URL 参数组合远多于列表页,其中一部分指向了内容相同但路径不同的页面。此时的处理动作是:先确认这些 URL 是否真的需要被处理,再决定是合并、规范化还是保留。这个动作的结果会直接影响下一步——如果确认需要保留,全量发布继续;如果确认是重复入口,就要先处理重复信号,再重新灰度。
这个例子的关键不是流量多少,而是灰度范围是否覆盖了全量发布时会新增的那部分 URL。灰度没有覆盖到的类型,就是全量发布时的例外来源。
只记录“是否被处理”不够,至少要留下三组信息:
如果第三组为空,说明全量发布不会引入新的 URL 类型,风险主要来自量级变化;如果第三组不为空,说明全量发布会引入灰度未覆盖的例外,必须先处理这一组。
这里有一个容易误判的地方:灰度期间抓取量或处理量下降,不能单独证明灰度配置正确。下降也可能来自抓取节奏变化、外部链接减少或站点自身结构调整。要区分这些原因,需要把灰度组的处理结果与未灰度组的处理结果对照,而不是只看总量。
最常见的遗漏条件是:灰度只验证了“允许处理”的路径,没有验证“禁止处理”的路径在全量时是否仍然生效。
具体动作是:在全量发布前,单独取一组原本被禁止处理的 URL,确认它们在灰度期间确实没有被处理,并且全量发布后也不会因为规则顺序变化而被放行。这个动作的结果决定下一步——如果禁止组仍然被正确拦截,全量可以继续;如果禁止组被意外放行,就要先修正规则顺序,再重新灰度。
需要说明的是,用 robots.txt 限制抓取,并不等于可靠的索引移除;禁止抓取和禁止索引是两件事,前者不保证后者。站点地图提交也不保证收录,它只是提供发现路径。HTTPS 同样不保证页面安全无漏洞或获得更好处理。这些条件在灰度中同样适用,不能因为灰度表现正常就默认全量后自动成立。
把灰度结论写成可执行的条件,而不是写成“灰度正常”。例如:
满足这三条,全量发布才具备可对比的基础。不满足时,优先补灰度覆盖,而不是直接扩大流量。灰度本身不解决收录问题,它只是把全量发布时才会出现的例外提前暴露出来;能不能利用这个暴露,取决于你是否把例外组也纳入了观察范围。