503 和 500 在蜘蛛眼里不是一回事
503 表示服務器暂时無法處理請求,通常来自维護、過载、上游超时。500 表示服務器内部错誤,蜘蛛也會视為暂时性故障,但 503 带有明确的临时含义,配合 Retry-After 能告诉蜘蛛什么时候再来。蜘蛛遇到 503 一般不會立刻把頁面從索引里刪除,而是降低该 URL 的抓取優先級,等一段時間再试。
Retry-After 怎么寫,蜘蛛才愿意等
Retry-After 可以寫秒數,也可以寫 HTTP 日期。寫秒數更直观,例如维護预計 20 分钟,寫 1200 比寫一個遥遠的日期更容易被执行。寫得太短,蜘蛛可能很快再来,繼續撞上 503;寫得太長,蜘蛛可能把這次抓取排到很後面,恢复後也不會立刻回来。
- 维護窗口 10 分钟:Retry-After 寫 600 左右,留一点缓冲。
- 维護窗口數小时:寫 3600 或按實际時間,不建议寫几天。
- 不确定結束時間:不要寫一個夸張的數值,宁可寫 3600,並在维護結束後尽快恢复 200。
需要說明的是,Retry-After 是建议而非强制,不同蜘蛛的执行细节不完全一致。它能减少無意义的重复請求,但不能保證蜘蛛一定按這個時間回来。
長時間 503 會带来什么
如果站点连續几天返回 503,蜘蛛會逐步降低抓取频率。一開始可能只是减少對同一路径的訪問,時間再長,部分 URL 的抓取會被推迟,新 URL 的發現也會變慢。恢复 200 之後,抓取频率通常不會瞬間回到原来的水平,而是随着多次成功响應慢慢回升。
這也是為什么维護窗口要尽量短。如果只是某個接口或某個目錄出問题,不要全站返回 503,只让受影响的部分返回 503,其余頁面保持正常,蜘蛛還能繼續抓取其他内容。
维護頁返回 200 是個常见的坑
有些站点在维護时把首頁或全站都指向一個“系統维護中”的頁面,但 HTTP 狀態碼仍然是 200。對蜘蛛来说,這等于告诉它“頁面正常,内容就是這個维護頁”。结果可能是蜘蛛把原来的标题、描述和正文替換成维護頁内容,等维護結束後再改回来,又要等一轮重新抓取。
正确做法是让维護頁返回 503,並在頁面上說明预計恢复時間。不要用 200,也不要用 302 跳到一個临时地址,除非這個跳轉是長期策略。
全站 503 时,Sitemap 和内鏈怎么办
维護期間 Sitemap 可以繼續可訪問,也可以暂时返回 503,但不要返回 404。内鏈结构不需要改動,蜘蛛恢复後仍然會沿着原有路径走。如果维護期間正好有新頁面要上线,最好等站点恢复 200 之後再提交或放出内鏈,避免新 URL 第一次被抓取就吃到 503。
如果你运营多個站点,同服務器上的站点同时 503,蜘蛛看到的是同一批 IP 持續不可用,抓取压力的恢复會更慢。维護時間尽量错開,或者把不同站点放在不同的资源池里。
恢复後的检查清單
- 確認全站關键 URL 返回 200,而不是 503 或 500。
- 检查 robots.txt 没有誤屏蔽,也没有临时寫下的 Disallow 規則忘记删。
- 在抓取日誌里观察 503 比例是否下降,200 响應是否回升。
- 重新提交 Sitemap,让蜘蛛知道内容已经可用。
- 如果维護期間改動了 URL,確認 301 映射正确,不要让舊連結直接 404。
- 保持服務器稳定一段時間,避免恢复後立刻再次過载。
蜘蛛的抓取节奏受很多因素影响,503 只是其中一個信号。把维護窗口做短、狀態碼寫對、恢复後保持稳定,通常比反复提交 URL 更有用。
提示:503 不是屏蔽手段。想長期阻止抓取,應该用 robots.txt 或合适的鉴權狀態碼,而不是让蜘蛛一直撞 503。
小结
服務器稳定性直接影响蜘蛛的抓取安排。503 配合合理的 Retry-After,能让蜘蛛知道這是临时情况;维護頁返回 200,或者長時間全站 503,則可能让抓取频率回退得更明顯。恢复後,给蜘蛛一個稳定、可訪問、内鏈清晰的站点,抓取节奏會慢慢回来。