结论先给:如果功能开关只改变页面局部、且关闭后能恢复原状,就按“开关状态+渲染结果”成对记录,而不是给页面整体打一个版本号;如果开关会永久改写数据或模板,页面已经无法靠关开关回到旧状态,那么成对记录会失效,必须改为记录数据变更和模板变更本身,并重新判断哪些旧页面需要被重新抓取。
功能开关的特点是:同一个 URL,在不同开关状态下返回的 HTML 可能不同,但文件本身没有变、发布时间没有变、CMS 里的修改时间也可能没变。百度抓取时看到的是“当时那个状态”,你事后回看时看到的是“现在这个状态”。如果记录里只有一句“某日调整了页面”,两边就对不上。
所以记录的重点不是“页面改过没有”,而是“在某个时间点,这个 URL 在开关打开或关闭时分别输出什么”。这决定了你后面判断收录延迟时,是把差异归因于开关,还是归因于内容本身的变化。
假设一个商品列表页有一个“显示推荐位”的开关,默认关闭,某次上线后打开。成对记录至少包含:
这里最容易漏的是第三项。如果你把部署时间当成抓取时间,就会以为百度看到的一定是新状态,从而把延迟错误地归到“百度不抓”。实际上百度可能在你部署前就抓过,抓到的正是旧状态。
假设你保存了开关关闭和打开两种状态下的 HTML 片段,并注明各自对应的时间。重新抓取后,如果返回的 HTML 与“关闭”片段一致,说明百度侧仍是旧状态,延迟与开关无关,问题在抓取或缓存;如果返回的 HTML 与“打开”片段一致,但收录结果仍显示旧标题或旧摘要,那么差异更可能出现在百度侧的展示层,而不是你的页面输出层。
这个判断有一个前提:两种片段确实来自同一 URL,且差异只在开关控制的区域内。如果开关同时改变了 URL 参数、canonical 或跳转逻辑,那么“同一 URL 两种输出”这个前提就不成立,上面的区分方法随之失效。
需要说明的是,抓取量或某次抓取结果的变化本身不能单独证明处理正确,缓存、抓取配额、页面重要性判断都可能是合理解释。记录的价值在于把可观察的页面输出固定下来,而不是用它去反推某个确定原因。
反例:开关打开时会把推荐位数据写入商品表,关闭后只是隐藏,并不删除数据。这时关闭开关,页面视觉上回到旧样,但底层数据已经变了,下一次渲染或模板调整后旧状态无法复现。此时成对记录只剩“视觉对照”,不能作为回退依据。
遇到这种开关,正确做法是改为记录两类变更:数据写入的范围和模板/渲染逻辑的变更点。然后针对受影响的 URL 清单,判断哪些需要重新提交、哪些只需等待自然抓取。这里不保证任何提交都会被收录,站点地图也只是辅助发现手段,不等于收录承诺。
先确认一件事:这个开关关闭后,页面能否在同一 URL 上回到旧输出。如果能,就保留成对记录,并在每次切换开关时追加一条带时间的条目;如果不能,就停止用开关状态做版本轴,改为记录数据与模板的变更范围。
做完这一步,再决定是否对受影响 URL 采取动作。对可回退的页面,重点是对比抓取返回与哪个状态一致;对不可回退的页面,重点是确认新状态是否稳定,避免在数据写入未完成时触发抓取。这个顺序能避免一个常见错误:在页面状态还没稳定时就反复提交,导致记录和实际输出越对越乱。