核心做法是先固定“开关状态 + 输出页面”的对应关系,再决定保留、改写还是退出旧版本。只记录开关名称没有意义,因为同一开关在不同环境、不同默认值下会输出不同内容;只保存页面快照也不够,因为无法解释变化原因。可行做法是让每次开关变更都留下可复查的三元组:开关取值、请求条件、实际输出摘要。
功能开关分两类,记录方式不同。一类只影响交互,比如折叠面板默认展开或收起,HTML 源码里的文本仍然存在,百度抓取到的可见内容不变。另一类会改变服务端输出,比如按开关决定是否渲染某段正文、是否返回 404、是否跳转到另一路径,这类才会真正影响收录判断。
区分方法是关闭 JavaScript 后直接请求页面,对比开关两种状态下的原始 HTML。如果正文文本、规范链接、状态码三项都一致,这个开关通常不需要纳入版本记录;如果其中任何一项变化,就必须记录。这个动作的结果决定下一步:不变化的开关可以排除在版本表之外,变化的开关才需要建立对照记录。
保留适用于开关只影响样式、排序或非正文模块,且页面主体文本、标题、规范链接在两种状态下一致。此时不需要为每个组合单独建版本,只需记录开关默认值和影响范围。
改写适用于开关会改变正文或标题,但两种状态都应对同一搜索意图。此时要在版本记录里写清哪一版是当前对外版本,并让规范链接始终指向它,避免两个版本互相竞争。前提是你能控制规范链接的输出,而不是由前端在客户端临时替换。
退出适用于开关产生的某一状态本身不应被收录,例如内部预览、A/B 测试分支、仅登录可见的变体。此时用 robots.txt 限制抓取只是减少抓取,不等于可靠的索引移除;已经进入索引的 URL 仍需通过其他方式处理,且不同搜索引擎的支持情况要分别核查。退出的前提是你确认该状态没有独立搜索价值,而不是暂时不想让它出现。
一张够用的记录表不需要复杂系统,关键是字段能支撑复查:
show_full_text=on)摘要哈希的作用是快速判断两次记录是否真的不同。如果只写“已更新”,几周后无法确认当时输出的是什么。这个动作的结果是:当你发现某个 URL 收录异常时,能先查表确认它在异常时间点对应哪个开关状态,而不是重新猜测。
单页面测试通过,不代表全站成立。常见例外来源有三个:开关默认值在不同环境不一致;部分页面模板没有接入该开关;缓存层保留了旧输出。这三类原因的表现相似,都是“同一开关、不同结果”,但处理方向不同。
可区分证据是:按模板分组抽样,而不是随机抽样。如果同一模板下结果一致、跨模板不一致,问题在模板接入;如果同一模板下也时好时坏,问题更可能在缓存或环境配置。假设某站点有 200 个页面使用同一模板,抽 10 个发现 7 个符合预期、3 个不符合,此时不应直接全量改写,而应先确认这 3 个是否走了不同缓存节点或不同默认值。这个判断结果决定下一步是修模板、清缓存,还是缩小开关影响范围。
记录本身不产生结论,它的用途是让取舍有依据。当你准备关闭某个开关时,先在记录表里找出该开关影响过的 URL 列表,逐条确认当前对外版本是否仍是可收录状态。如果某条记录显示关闭后页面会返回空正文或跳转到无关路径,就应选择改写或退出,而不是直接关闭。
反过来,如果记录显示两种状态正文一致、仅样式不同,就可以放心保留,不必为它单独维护版本。站点地图和抓取统计可以作为辅助信号,但它们不保证收录,也不能单独证明某个开关处理正确;请求量归零还可能来自抓取预算调整、路径屏蔽或外部链接变化。把记录表当作主证据,其他信号只用来交叉验证,这样在开关频繁变动时,你仍然能回答“这个 URL 当时是什么状态”这个具体问题。