如果功能开关只改变页面渲染结果、不改变 URL 和状态码,那么版本状态应记录在“开关配置 + 渲染快照 + 抓取时间”这一组证据里,而不是只记录 HTML 文件。若开关会改变 URL、返回 404/410 或跳转到另一条路径,上述记录方式失效,必须按 URL 迁移重新建立版本对照。
功能开关常见两种形态。第一种是同一 URL 下服务端或客户端渲染不同模块,例如推荐位、价格区、登录状态提示。第二种是开关直接决定某条路径是否可用,例如关闭后返回 404、410,或 302 跳到首页。前者属于渲染层变化,后者属于地址层变化。
区分方法很直接:在开关前后各请求一次同一 URL,记录状态码、最终 URL、响应头中的缓存相关字段,以及渲染完成后的可见文本。若状态码和最终 URL 不变,只是正文模块增减,按渲染层记录;若状态码或最终 URL 改变,按地址层记录。这个判断会决定后面用哪套版本表,做错会让后续对比失去意义。
渲染层变化最容易出现“今天看是 A,明天看是 B,但谁都没改模板”的情况。要能复查,至少固定三样东西:开关配置、渲染结果、抓取时间。
假设某页面在开关 A 下显示价格表,在开关 B 下显示“暂不可用”。两次抓取的状态码都是 200,URL 也相同。此时版本状态应写成“同一 URL,开关 A 对应价格表,开关 B 对应占位文案,抓取时间分别为 T1 和 T2”。这样后续发现收录内容与当前页面不一致时,可以判断是抓取时命中了哪个变体,而不是误判为页面被篡改。
当开关会让某条路径返回 404 或跳转时,页面级版本记录不再适用。此时应把每条 URL 当作独立对象,记录开关前后的状态码、最终 URL、以及该 URL 是否仍出现在站内链接中。
?variant=b,则要记录参数是否被规范到无参数版本。参数版本混用会让同一内容出现多个地址。这里有一个常见误区:用 robots.txt 限制抓取,并不等于把已收录地址移出索引。抓取限制和索引移除是两件事,版本记录里应分别标注“已限制抓取”和“是否已处理索引状态”,不能合并成一句“已屏蔽”。
如果开关变化的同时还伴随模板改版、CDN 缓存策略调整或域名解析变更,那么单独记录开关配置就不足以解释页面变化。例如同一时间既切换了开关,又把缓存 TTL 从短改成长,抓取到的旧内容可能来自缓存而不是开关本身。此时版本状态必须把缓存命中情况和解析记录一并纳入,否则会把缓存问题误判为开关问题。
另一个反例是:开关只对登录用户生效,而抓取工具是未登录状态。此时抓取到的页面并不代表目标用户看到的版本。版本记录应注明“抓取身份”,否则同一 URL 的两份快照无法比较。
实际动作是建立一张最小版本表,字段包括:URL、开关名称与取值、抓取身份、状态码、最终 URL、可见文本摘要、抓取时间、缓存命中情况。每次开关变更后追加一行,不覆盖旧行。
这张表的作用是让下一步有依据。若对比后发现状态码和最终 URL 未变,只是可见模块不同,优先检查渲染与缓存,而不是急着提交新地址。若发现状态码或最终 URL 改变,则先处理地址层问题,再考虑索引相关动作。记录版本状态本身不会让页面被收录或排名提升,但它能避免把开关变化误判为页面故障,也能让后续每一次判断都有可复查的起点。