灰度发布不是缩小版的全量发布。它只覆盖一部分URL、一部分模板或一部分入口,因此当灰度显示收录正常时,真正需要警惕的是那些没被灰度覆盖的例外:旧路径仍可访问、旧参数仍被内链引用、部分旧合作关系页面仍在生成新链接。小流量灰度能验证新逻辑是否工作,但无法证明旧内容已经退出。判断全量发布能否执行,关键不在灰度收录率,而在灰度样本之外还剩下多少仍可被抓取的旧入口。
灰度通常按目录、模板或流量比例切分。如果切的是新页面模板,那么旧模板生成的页面根本不在样本里;如果切的是部分栏目,那么跨栏目共用的旧URL规则也不会被覆盖。此时灰度里收录表现平稳,只能说明新逻辑对样本有效,不能说明旧路径已经断开。
要区分两种条件。第一种是旧内容确实要整体退出:此时灰度必须包含旧URL本身,验证它们返回410或301,并确认站内不再有指向它们的链接。第二种是旧内容只退出部分,保留仍有价值的部分:此时灰度的重点不是让旧URL消失,而是确认保留部分仍能被正常抓取,退出部分不再出现在站点地图和内链中。两种条件下,灰度的切分方式完全不同。前者的样本单位是旧URL,后者的样本单位是“保留/退出”边界上的URL。
灰度结束后出现的异常,常见来源有三类,需要分别取证:
这三类原因对应的动作不同。只改robots.txt限制抓取,不等于索引移除;已抓取的URL仍可能留在索引里,且不同搜索引擎对限制指令的处理并不一致,需要分别核查。站点地图不保证收录,把退出URL从站点地图移除只是减少发现路径,不是移除手段。HTTPS也不解决旧路径仍可访问的问题。
假设一个站点要把旧活动页整体退出,同时保留其中仍有效的报名页。灰度只覆盖了新活动模板,结果显示新页面被抓取正常。此时不能直接全量,因为灰度没验证旧活动页。
下一步动作是:从日志或站点地图中抽取旧活动页URL,按“退出”和“保留”两组各取一批,逐条请求并记录状态码、最终URL和页面标题。若退出组仍返回200且标题与旧活动一致,说明退出规则未生效;若保留组返回404,说明边界切错了。这个动作的结果会直接决定下一步:退出组仍为200时,应先修规则再扩大灰度;保留组异常时,应先修正保留清单再谈全量。
需要说明的是,请求量或抓取量归零不能单独证明处理正确。它也可能是抓取预算转移、日志采样缺失或临时故障造成的。要结合状态码和页面内容一起判断。
在全量之前,把灰度未覆盖的部分列成例外清单,至少包含:旧URL规则、跨栏目共用模板、历史内容中的硬编码链接、外部合作方仍在引用的地址、以及定时任务生成的页面。每一项都要有明确的处理动作和验证方式。
如果旧合作关系仍需保留部分页面,就不要用统一规则一刀切。应把保留页面单独列入白名单,确认它们可被抓取、可被内链到达、且不在退出规则内。反之,如果旧系统整体下线,则要确认没有其他服务在引用它的输出。
灰度能暴露的是样本内的问题,全量发布要面对的是样本外的例外。把例外清单和边界URL的验证结果作为全量的前置条件,比看灰度收录率更有决定意义。当退出组和保留组都能给出可复查的状态证据时,全量发布才有依据;否则,灰度通过只是说明了它测过的那一部分没问题。