先给结论:如果你只看到“页面又能访问了”或“日志里又出现百度爬虫”,这不足以判断是缓存过期还是修复生效。更可靠的做法是把同一批URL拆成三组——原样组、强制刷新组、修复验证组——分别记录服务端返回、抓取频率和索引状态,用时间差和组间差异来区分。缓存过期通常表现为“你没改代码,它自己好了”;真正修复则表现为“只有改过的那组恢复,且恢复时间点与发布动作对齐”。
不要用“整站恢复了”这种模糊说法。挑一个具体页面或一份URL清单,例如上次异常期间返回5xx的那20个详情页。为每个URL建一行记录:异常开始时间、你最后一次改动时间、当前HTTP状态码、响应体是否与改动前一致、日志里百度爬虫最近一次访问时间。多个角色对“是否恢复”有分歧,往往是因为有人看的是浏览器缓存里的旧页面,有人看的是CDN边缘节点,有人看的是源站日志。把这三层分开写进同一张表,分歧就变成了可核对的数据差。
一个实际动作:先清空你自己浏览器的缓存和CDN缓存,再直接请求源站。如果源站仍返回异常,而浏览器显示正常,那基本是缓存层在替你“演戏”。这一步的结果会决定下一步:源站仍异常,就别急着庆祝恢复;源站正常但日志无抓取,才进入抓取验证阶段。
缓存过期和真正修复的差别,主要看“恢复是否与你的动作相关”。以下现象更偏向缓存过期:
注意,请求量或抓取量归零不能单独证明你处理正确。它也可能是百度爬虫降低了该目录的抓取优先级、你改了robots.txt、或者服务器在维护窗口内拒绝连接。这些解释都需要和你的变更记录对照,而不是只看一条曲线。
第一道是源站验证:用不带缓存的请求确认目标URL返回200,且响应体内容是你修复后的版本。第二道是抓取验证:在源站日志里找到百度爬虫的访问记录,确认它拿到的是修复后的响应,而不是缓存副本。只有两道都过了,才能说“修复对爬虫可见”。
这里要说明一个适用条件:robots.txt 的抓取限制不等于可靠的索引移除。你即使屏蔽了抓取,已经索引的旧快照仍可能在一段时间内出现。所以如果你用robots.txt来“临时止血”,它解决的是抓取问题,不是索引问题,别把它当成修复完成的证据。站点地图也一样,提交站点地图不保证收录,它只是告诉爬虫有哪些URL可看。
假设你手上有20个异常URL,可以这样分组:
这个例子的数字只是用来演示比较方法,不是真实项目结果。关键是每组只改一个变量,这样恢复时间点和你的动作才能对应上。如果三组同时恢复,你无法归因,需要换一批URL重做。
百度爬虫再次访问,只能说明抓取通道恢复了,不能说明索引已更新。你要在日志里区分三件事:请求是否到达源站、源站返回什么状态码、返回内容是否为修复版。如果日志显示200但响应体还是旧内容,那可能是CDN缓存未刷新或应用层还有旧副本。此时下一步动作是清对应缓存并再次请求源站,而不是直接提交改版或等待收录。
另外,HTTPS 不保证安全无漏洞或排名,它只是传输层的一个条件。如果你把“上了HTTPS”当成修复完成,可能会漏掉真正的响应内容问题。
满足以下条件时,才更接近真正修复:源站对目标URL稳定返回修复后内容;百度爬虫在发布时间之后有访问记录且拿到新响应;原样组没有同步自行恢复;你的变更记录能解释恢复时间点。如果只满足前两条,仍可能是缓存过期恰好和你的发布撞在一起。把观察窗口拉长到多个抓取周期,并保留每组的状态记录,才能让后续判断有依据。最后一步是把这个对照表交给有分歧的同事,让每个人指出自己依据的是哪一行数据,分歧就会落到具体事实上,而不是停留在“我觉得好了”。