服务器维护、程序升级、数据库迁移,这些操作很难完全避开蜘蛛。真正的问题不是“停机几分钟”,而是停机期间蜘蛛收到的信号是否自相矛盾:有的地址返回 200 配一个空白页,有的返回 404,有的干脆连不上。蜘蛛不会记住你“正在维护”,它只会根据响应判断这个地址还值不值得来。维护窗口安排得好,恢复后抓取几乎不受影响;处理得随意,可能要花几周时间把抓取频率慢慢养回来。
停机时,蜘蛛实际看到的是什么
先把几种常见情况分开看。连接超时或拒绝连接:蜘蛛拿不到任何 HTTP 状态,只能判断为暂时不可用,通常会隔一段时间重试,但如果连续多次失败,抓取频率会明显下调。返回 200 但内容是空白页或错误提示:这是最麻烦的一种,蜘蛛会把维护页当成正常内容,轻则原页面被替换成空白,重则影响对整站内容质量的判断。返回 503 并带上 Retry-After:这是给搜索引擎的标准信号,意思是“我暂时不可用,请过一会儿再来”。同样的停机时长,三种处理方式的后果差别很大。
维护前先确认三件事
- 影响范围:是全站不可访问,还是只有某个栏目、某台数据库、某个接口受影响?只有部分功能异常时,没必要把整站关掉。
- 预计时长:写下一个相对靠谱的时间区间。后面的 Retry-After 取值、站内公告、值班安排都要靠它。
- 近期抓取情况:如果刚提交过一批新 URL,或者最近抓取量本来就在爬升,尽量把维护往后挪一挪,避开这个窗口。
用 503,而不是 404 或临时跳转
能返回状态码的场景,优先用 503。它明确表达“暂时不可用”,不会让蜘蛛误解为页面已被删除。如果条件允许,配上 Retry-After,告诉蜘蛛多久之后再来。
HTTP/1.1 503 Service Unavailable — Retry-After: 3600
Retry-After 该怎么取值
取值要略大于预计维护时长,但别太夸张。预计停 40 分钟,填 3600 秒(1 小时)是合理的;填一天反而会让蜘蛛长时间不来。如果维护时间不确定,宁可按阶段短一些,等确认恢复后让蜘蛛自然重试。需要注意的是,这不是所有爬虫都会严格遵守的指令,但主流搜索引擎基本会参考。
不要用 302 跳转到首页
把维护期间的请求全部 302 到首页,看起来用户有页面可看,但对蜘蛛来说,等于告诉它“这些地址现在都指向首页”。大量地址同时跳到同一个页面,容易让蜘蛛对这些 URL 的归属产生混乱,恢复后还要花时间纠正。跳转到首页是应急手段,不该成为默认方案。
维护页本身不要被收录
- 维护页加 noindex,避免它在维护期间被当成站点的新内容。
- 维护页不要放在会被站点地图覆盖的路径下,恢复后及时清理。
- 如果维护页是独立域名或独立目录,确认 robots.txt 里没有把它误开放给抓取。
- 维护公告文案写清楚恢复时间,用户看得懂,也便于客服减少重复问询。
恢复之后的核对清单
- 抽查状态码:挑首页、栏目页、详情页各若干,确认都返回 200,没有残留的 503。
- 检查关键页面渲染:升级过前端或缓存配置的,重点看正文是否正常输出,而不是只剩一个空壳。
- 确认 robots.txt 与站点地图已恢复:维护期间如果临时改过规则,是最容易忘记还原的地方。
- 看一段抓取日志:对比维护前后的请求量和状态码分布,判断抓取是否已经回到正常水平。
- 观察索引变化:如果维护期间返回过 200 空白页,留意原页面是否被替换,必要时重新提交。
小结
维护窗口的核心只有一句话:让蜘蛛清楚地知道这是暂时状态,而不是永久变化。提前确认影响范围,用 503 加 Retry-After 表达暂时不可用,维护页做好防收录处理,恢复后按清单核对一遍,停机这件事就不会变成抓取层面的长期损失。