核心做法只有一句:把“提交了哪个 URL”和“这个 URL 当时返回什么内容”绑在同一条可复查记录里,而不是只记提交动作。功能开关改变页面时,URL 通常不变,但服务端输出、可见区块或状态码可能变;如果版本记录只写“已提交”,后续就无法区分是提交没生效、抓取没发生,还是页面内容已经换了。
功能开关至少会动三层东西:服务端渲染结果、客户端渲染结果、以及页面级元信息(标题、canonical、robots meta)。三者不一定同步变化,所以版本状态要分层记,而不是给整站打一个“版本号”。
假设一个列表页用开关控制是否展示推荐模块。开关打开时,服务端 HTML 里多了推荐区块,但 canonical 不变。此时版本记录应写成“URL 相同、服务端内容变化、canonical 不变”,而不是笼统写“页面已更新”。
面对开关导致的页面变化,版本记录有三种处理方式,各有成立条件。
适用前提:开关是临时灰度,页面主体结构、canonical 和 robots meta 都没变,只是局部模块增减。此时保留旧记录并在新记录里标注“仅内容差异”,可以避免把正常灰度误判成异常。动作是给记录加一个“差异类型”字段,结果是你下次比对时能直接排除这类噪音,把注意力留给真正改动的 URL。
适用前提:开关改变了 canonical、robots meta,或让页面从可索引变成不可索引。这类变化会直接影响提交 URL 的语义,必须作为新版本单独存,并保留旧版本作为对照。动作是把两次抓取结果并排存档,结果是你能确认变化发生在哪一层,而不是把索引问题归因到提交工具本身。
适用前提:该 URL 已永久重定向、返回 410,或确认不再对外提供。此时继续记录版本只会制造噪音。动作是把该 URL 标记为“已退出”并注明依据,结果是后续比对不再把它算作待处理项。
开关改动后,常见反常结果是“提交了但没变化”。这至少有三种解释,需要不同证据来区分,不能只凭提交量或抓取量下结论。
区分这三者,靠的是把“提交时间、抓取时间、抓取到的内容快照”放在同一张记录里。缺少内容快照时,任何关于“提交是否生效”的判断都只是推测。
不需要复杂系统,一条记录包含以下字段就够用:URL、记录时间、开关状态、HTTP 状态码、canonical、robots meta、服务端 HTML 摘要(如关键区块的文本哈希)。
假设同一 URL 在开关关闭时记录为:状态码 200、canonical 指向自身、robots meta 为 index、摘要哈希 A。开关打开后记录为:状态码 200、canonical 指向自身、robots meta 为 index、摘要哈希 B。两条记录并存,你就能明确说出“变化发生在服务端内容层,元信息未变”。如果第二条记录的 robots meta 变成 noindex,那就说明这次开关改动需要按独立版本处理,并优先核查该 URL 是否还应继续提交。
记录格式里不要只写“成功”或“失败”。这两个词无法区分提交动作、抓取动作和索引状态,也无法在下次开关切换时提供对照基准。
如果多次记录显示抓取量或提交量归零,先别下结论。合理替代解释包括:记录窗口太短、日志轮转、采样策略变化、或该批次 URL 本身已被排除。此时应扩大记录窗口或换一种证据来源交叉核对,而不是直接判定工具失效或页面处理正确。
版本状态记录的价值不在于证明某次提交成功,而在于当开关再次切换时,你能快速说出“这次变化和上次属于同一层还是不同层”。能回答这个问题,下一步该保留、改写还是退出,就有了依据。