记录版本状态的关键不是把每次开关都写进日志,而是把“开关状态、生效时间、页面可见差异、可复查证据”绑定成一条可回溯记录。对少量样本,截图加备注通常够用;一旦开关组合增多、页面开始按人群或地区分流,就必须改成结构化字段,否则你无法判断某次收录变化究竟对应哪个版本。
功能开关造成的页面变化分两类。第一类只影响交互或样式,比如按钮颜色、折叠面板默认状态,这类变化通常不改变可抓取正文,记录优先级低。第二类会改变服务端返回的 HTML、结构化数据、canonical、分页链接或正文可见性,这类必须留版本。
判断依据可以简化为三个问题:关闭开关时,爬虫拿到的 HTML 是否不同;开启开关时,是否新增或隐藏了指向其他页面的链接;两种状态下 canonical 或 robots 元标签是否一致。只要有一个答案为“是”,这次开关切换就应进入版本记录。
实际动作:在开关配置旁增加一个“是否影响可抓取输出”的标记。结果是,团队不再为纯样式开关写版本记录,节省的精力可以投入到真正影响收录的变更上,下一步的复查范围也随之缩小。
保留原始版本,适合开关可以按 URL 参数或用户分群稳定复现的情况。你需要能再次拿到同一版本的 HTML,否则“保留”只是留了一份无法复现的快照。若开关依赖登录态或随机分流,保留原始 HTML 的意义有限,因为爬虫看到的是另一套输出。
改写为结构化字段,适合开关数量多、组合频繁的场景。把版本记录成类似 switch_id、state、effective_from、affects_html、evidence_ref 的字段,比整页存档更容易比对。前提是团队愿意维护字段含义,并且能保证每次开关变更都写入,而不是事后补记。
退出记录,适合开关只影响已登录用户、且该部分内容本就不面向抓取的情况。退出不等于不记录,而是把记录责任交给产品侧的用户行为日志,SEO 侧只保留“该开关不影响公开页面”的说明。边界在于:一旦该开关后来对匿名访问也生效,原有退出决定就失效,必须重新评估。
个别样本成立、规模化后出现例外,常见原因不是记录方法本身错了,而是开关的作用域比预期更宽。例如测试时只在一个栏目开启,上线后按用户地区全站开启,页面输出随之改变。此时先查开关作用域,再查缓存层,最后查 CDN 或边缘逻辑是否保留了旧版本。
排查顺序建议如下:
这个顺序的价值在于:它先排除“记录写错”的可能,再排除“开关没生效”,最后才怀疑缓存。若跳过前两步直接清缓存,可能暂时恢复,但下次开关切换仍会复现。
假设某页面有开关 A 和开关 B,各自两种状态,共四种组合。测试阶段只验证了 A 开 B 关这一种,记录也只留了这一版。上线后按流量比例分流,爬虫恰好抓到 A 关 B 开的版本,页面正文少了一段,内部链接也少了两条。
此时如果版本记录里只有“开关已开启”这种描述,你无法判断爬虫抓到的是哪个组合。若记录里写明组合、生效时间和对应证据,就能直接定位到缺失的那两条链接来自哪个开关。动作上的差别是:前者需要重新复现四种组合,后者只需复查一个组合的返回内容。这不会立刻改变收录结果,但能决定下一步是修开关、修缓存,还是修记录方式。
版本记录只能说明页面输出变过,不能说明收录一定随之变化。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。若开关变化涉及 HTTPS 或安全相关配置,HTTPS 本身不保证安全无漏洞或排名。不同搜索引擎对同一开关输出的处理也可能不同,需要分别核查,而不是用一套记录推断所有引擎的行为。
当请求量或抓取量出现归零,不能单独据此证明版本记录正确或处理得当。归零还可能来自抓取预算调整、临时屏蔽、统计口径变化或该路径本就不再被引用。版本状态记录的终点,是让你在出现这些现象时能快速回答“当时页面是什么样”,而不是替你判断收录结果的好坏。