把二级域名当作“同一主域下可独立配置的一组主机名”来理解,灰度阶段只让少量入口或少量路径命中新配置,能提前暴露一部分差异;但全量发布后,命中范围、缓存层级、证书覆盖和抓取路径都会变化,灰度没覆盖到的例外才集中出现。判断的关键不是灰度流量大小,而是灰度选择是否复制了全量的入口条件。
二级域名在主机名结构上位于主域之前,例如 shop.example.com 中的 shop 是相对主域的一级标签,整段 shop.example.com 常被当作一个独立主机名来配置。灰度最容易犯的错,是按服务器或按 IP 放量,而不是按主机名放量。结果是:同一台机器上既有灰度域名又有正式域名,日志看起来正常,但全量切换后另一批二级域名根本没经过同一套规则。
可以核对的证据是:灰度期间,每个计划上线的二级域名是否都至少产生过一次真实请求;如果某个二级域名在灰度期零请求,它就不是“通过验证”,只是“未被验证”。零请求不能证明配置正确,也不能证明配置错误,它只说明缺少样本。
条件一:新旧配置的差异只在页面渲染层,例如模板、结构化数据输出、可见正文的拼装方式。此时可以按路径灰度,让部分 URL 走新逻辑,其余保持旧逻辑。选择依据是差异不涉及域名级解析、证书和抓取入口,路径级样本足以覆盖。
条件二:差异涉及主机名解析、证书覆盖、重定向规则或抓取入口。此时按路径灰度会漏掉关键例外,应改为按二级域名灰度,让至少一个完整主机名走全量链路。选择依据是这些配置的作用域在主机名层,路径样本无法替代。
实施动作:先列出所有计划受影响的二级域名,标注每个域名承载的角色(主站、活动页、接口、静态资源等)。然后决定灰度单元。若选路径灰度,要额外检查每个二级域名是否都有一条路径进入灰度;若选主机名灰度,要确认该域名的证书、解析和重定向都已按全量方式生效。这个动作的结果会直接决定下一步:如果发现某个二级域名无法被纳入灰度单元,就应先补齐它的配置核对,而不是直接全量。
灰度流量小,缓存命中分布往往和全量不同。全量后,边缘缓存、浏览器缓存和中间层缓存会按真实访问比例填充,原本在灰度中“每次都回源”的路径可能开始返回旧内容。核对方法是:对同一 URL 分别用带缓存和不带缓存的请求对照,观察响应头和正文是否一致。若不一致,先确认缓存键是否包含主机名和路径,再决定是否需要刷新。
证书覆盖也是常见例外。灰度可能只给一个二级域名签了证书,全量后其他二级域名仍用旧证书或通配证书。证书有效不代表内容可访问,也不代表排名或安全无漏洞;它只解决传输层的域名匹配。核对时逐个二级域名检查证书中的名称列表,而不是只看主域。
抓取路径同样会变。灰度期搜索引擎可能只发现了部分入口,全量后站点地图、内链和外部链接会把更多二级域名暴露出来。需要提醒的是:站点地图不保证收录,robots.txt 的抓取限制也不等于可靠的索引移除。如果全量后某个二级域名请求量归零,合理解释包括:它本来就没有被链接、站点地图未包含它、抓取预算被其他路径占用,或该域名被规则阻止。不能仅凭请求量归零就断定处理正确。
当开发、运维和 SEO 对“灰度是否通过”有不同理解时,把争议拆成可核对项,而不是继续争论结论。建议按以下顺序执行:
假设一个短例子:某次灰度只让 a.example.com 的一条路径走新逻辑,全量后 b.example.com 也切到新配置,但它的证书仍只覆盖旧主机名,于是访问出现证书名称不匹配。这个例子里,灰度没有失败,失败的是灰度单元没有覆盖到全部主机名。动作上的修正是:把证书名称列表加入灰度准入条件,未覆盖的二级域名先补证书再放量。下一步的核对重点也随之变成“每个二级域名的证书是否与计划上线的主机名一致”,而不是继续增加灰度流量。
如果本次变更只影响页面内容输出,且所有二级域名共用同一套模板和同一套证书,路径灰度通常足够。判断依据是:变更不触碰解析、证书、重定向和抓取入口。反过来,只要变更涉及其中任意一项,就应至少让一个完整二级域名走全量链路。这样做的结果是把例外从“全量后才发现”提前到“灰度期就能核对”,下一步的发布决策才有可依据的事实,而不是靠流量比例猜测。