先给结论:不要只记录“开关开了还是关了”,而要同时记录开关状态、生效范围、页面输出指纹和查询时间,并把它们绑定成一个可复查的版本条目。只记开关值,后续看到收录波动时无法判断是开关本身、模板回滚还是抓取延迟造成的;把四类信息一起留档,才能在下一次查询时快速排除或确认原因。
实际业务里常见这样一种情况:某个功能开关打开后,页面多出一段由脚本或服务端条件渲染的内容;几天后因为效果不理想把开关关掉,页面看起来恢复了原样,但近日收录查询里仍然能看到带那段内容的快照,或者相反——开关已打开,查询结果却迟迟不更新。这时容易得出两个相反的结论:一是“开关没生效”,二是“百度抓取滞后”。
更稳妥的做法是先承认这两个解释都成立,再用证据区分。开关状态改变影响的是当前服务端或前端渲染输出,而收录查询反映的是百度此前某次抓取并处理后的结果。两者之间存在时间差,所以开关与查询结果不同步本身并不异常。真正需要判断的是:差异来自“抓取的是旧版本”,还是“新版本本身没有被正确识别”。
解释一:百度抓取的是开关变更前的旧版本。成立条件是页面 URL 未变、开关只改变部分内容、且变更后没有触发重新抓取的有效信号。此时查询结果保留旧内容属于正常缓存行为,不需要立刻改动页面结构。
解释二:新版本没有被正确识别。成立条件是开关打开后页面主体内容、可见文本或链接结构发生了实质变化,但服务端返回给爬虫的 HTML 与用户看到的不一致,或者关键内容依赖交互后才出现。此时即使百度重新抓取,也可能只拿到一个空壳或旧壳。
区分这两种解释,关键不是看开关值,而是看同一 URL 在不同时间点返回的 HTML 是否可复现。如果变更前后的 HTML 都能稳定复现,且差异明确,就偏向解释一;如果同一时间点用不同方式请求得到不同 HTML,就偏向解释二。
建议每次改动功能开关时,按下面四类信息建立一条版本记录。它们不需要复杂工具,但必须同时存在,缺一项就会让后续判断失去参照。
一个假设例子:某列表页开关控制是否输出“相关推荐”模块。开关打开当天保存的 HTML 摘要包含该模块文本,哈希记为 A;三天后关闭开关,摘要不再包含该模块,哈希记为 B。此时若近日收录查询仍显示含该模块的摘要,可先判断为抓取的是版本 A,属于正常滞后,下一步应观察而非立即改结构。若关闭开关后重新请求得到的 HTML 仍包含该模块文本,说明开关未真正生效或存在缓存层,此时才需要检查渲染链路。这个例子的数字和哈希只是说明比较方法,不代表任何真实项目的测量结果。
有了版本记录,动作选择就有了条件:
需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;这些手段不能替代版本记录。记录的价值在于把“开关变了”和“页面输出变了”分开,让每一次近日收录查询都能对应到一个明确的版本状态,而不是停留在猜测抓取快慢上。完成这一步后,再决定是继续观察、修正渲染,还是调整分流条件,判断才有依据。