恢复公开访问后,先别急着看抓取总量是否回升。临时维护期间,服务器往往对爬虫返回过 503、200 的维护页或带 Retry-After 的响应;恢复后真正要核对的是这些响应在日志里留下的残留信号,以及它们是否还在影响爬虫对页面状态、抓取节奏和内容版本的判断。下面以你手里的原始访问日志为对象,给出一套可执行的处理顺序。
维护期间常见的返回并不只有一种。若当时返回 503 并带 Retry-After,爬虫会把这批 URL 标记为“稍后再试”;恢复后如果同一 URL 立刻返回 200,日志上看起来正常,但爬虫可能仍按旧的退避节奏安排抓取。若当时返回的是 200 的维护页,问题更隐蔽:状态码是成功的,但响应体不是目标内容,爬虫可能已把维护文案当作页面正文的一部分。
两种残留的核对方式不同。状态码残留要看恢复后同一 URL 的首次成功抓取时间是否明显晚于其他 URL;内容残留要看恢复后返回的字节数、内容长度是否与维护前基线一致。只盯状态码分布,会把 200 维护页造成的误判漏掉。
从日志中筛出维护窗口的起止时间,然后对同一批 URL 取三个时间段的记录:维护前、维护中、恢复后。每行至少保留时间戳、请求 URL、状态码、响应字节数、User-Agent、Referer 和响应时间。把这三段并排看,比单看恢复后一天的汇总更有判断力。
这里要说明一个归因限制:抓取量下降或延迟并不只由维护残留造成,也可能是抓取配额调整、站点整体响应变慢或外部链接变化。日志只能提供相关性,不能单独证明某一项处理正确。若恢复后抓取量归零,同样存在多种解释,例如该时段爬虫整体调度减少,不能直接判定为维护信号未清除。
如果站点前面有 CDN、反向代理或应用层缓存,维护页可能被缓存下来,恢复后仍对部分爬虫返回旧内容。核对方法是:在日志里找恢复后仍返回维护页特征字节数的请求,记录它们的来源 IP 段或 User-Agent,再与直接回源请求对比。若同一 URL 回源返回正常、经缓存返回维护页,问题就在缓存层,而不是源站。
此时的实际动作是清理对应 URL 的缓存并设置合理的缓存策略,然后继续观察同一 URL 在后续日志中的字节数是否稳定。这个动作的结果会直接决定下一步:如果字节数恢复且不再反复,说明残留主要在缓存;如果仍反复,就要检查应用层是否有维护模式开关未完全关闭。
恢复后常见的两个选择是:立刻让所有维护过的 URL 重新进入抓取,或先挑一小批代表性 URL 验证。两者都成立,但条件不同。
选择立即全量重抓的条件:维护窗口很短、受影响 URL 数量少、日志显示恢复后状态码和字节数已一致。代价是可能触发不必要的抓取压力,若缓存或应用层仍有残留,会把维护页再次推给爬虫。
选择先小范围验证的条件:维护窗口较长、受影响 URL 多、或站点有缓存层。代价是恢复速度慢一些,但能在扩大范围前确认残留是否清除。
可以这样操作:从维护过的 URL 中按目录或模板各取几个样本,检查恢复后返回的状态码、字节数、标题和主要正文是否与维护前一致。样本通过后,再逐步扩大核对范围。这个顺序让每一步的结果决定下一步范围,而不是一次性全量重抓后才发现问题。
假设某站点维护 48 小时,期间对爬虫返回 503 并带 Retry-After: 3600。恢复后第一天日志显示大部分 URL 已返回 200,但某个栏目页的抓取时间仍比维护前晚很多,且字节数偏小。核对顺序可以是:
这个例子的数字仅用于说明比较方法,不代表任何实际站点的表现。关键点是:先确认残留属于状态、内容还是缓存,再决定是等待退避自然恢复,还是主动清理中间层。
robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。恢复后即使日志显示抓取正常,也不应把这些信号当作收录或排名的保证。不同搜索引擎对 503、Retry-After 和缓存的处理方式需要分别核查,不能用一个爬虫的日志推断所有爬虫的行为。
把核对结果记录成一份简短清单:哪些 URL 仍有字节数偏差、哪些抓取间隔异常、哪些已确认恢复。下一次维护或故障后,这份清单可以直接作为对照基线,减少重复判断。