站点运营里有一类问题不太起眼,但影响很直接:服务器或应用不稳定,页面间歇性返回 5xx。对访客来说是“偶尔打不开”,对蜘蛛来说则是“这个地址现在拿不到内容”。偶发一次通常问题不大,持续几天就会拖慢新内容被发现的速度。
5xx 和 4xx 不是一回事
4xx 一般表示请求本身有问题,比如地址不存在(404)或权限不足(403),蜘蛛拿到这类响应后,会倾向于减少对该地址的访问。5xx 的含义完全不同:请求是合理的,是服务端没能完成处理。所以两者的排查入口要分开——看到 404 先查链接,看到 5xx 先查服务器。
一句话原则:404 是“这里没有这个东西”,5xx 是“我现在给不了你”,后者通常是暂时的。
蜘蛛遇到 5xx 通常会怎样
多数搜索引擎会把 5xx 视为临时故障,不会立刻把页面从索引里拿掉,但会带来几个连锁反应:
- 该次抓取被记为失败,这次请求占用的抓取额度等于浪费了;
- 同一个地址会被安排稍后重试,重试期间新 URL 的排队会变慢;
- 如果整站连续多天大面积返回 5xx,抓取频率通常会被调低,恢复需要时间;
- 已收录页面可能因为多次抓取失败,摘要更新变得不稳定。
这些是常见的经验规律,具体行为会因搜索引擎和时间窗口而不同,不要把某一次观察当成定论。
常见的 5xx 来源
应用层
- 数据库连接数打满、慢查询堆积,页面在超时前返回 500;
- 第三方接口(支付、评论、外部脚本)挂掉,把整个页面拖崩;
- 代码异常未捕获,只在特定参数或特定 UA 下触发。
服务器与基础设施
- 进程数或内存不足,PHP-FPM、Node 进程被系统杀掉;
- 磁盘写满,日志、缓存、上传目录撑爆分区;
- 部署窗口、重启、证书或配置变更期间的短暂不可用;
- CDN 或 WAF 规则误伤,把正常请求拦成 5xx。
需要临时下线时,用 503 而不是 500
维护、迁移、压力过大需要短暂停止服务时,返回 503 比返回 500 更明确。503 表达的是“服务暂时不可用”,配合 Retry-After 头告知大致恢复时间,比让蜘蛛自己猜要友好。注意几点:
- 只对确实无法服务的请求返回 503,不要把正常页面一起挡掉;
- 维护时间尽量短,长时间挂着 503 对抓取的影响和停机差别不大;
- 不要用 503 长期替代 404,把该下线的页面一直留在维护状态,会积累成结构噪音。
排查顺序
- 先看日志:服务器访问日志、应用错误日志、数据库慢查询日志,按时间段对齐;
- 分清范围:是全站还是某个栏目,是全部请求还是只对特定 UA、特定 IP 段;
- 看时间规律:是否集中在备份、定时任务、批量发布的时间点;
- 复现:用相同 URL 和 UA 手动请求,观察状态码与响应时间;
- 看上游:CDN、WAF、负载均衡的日志和拦截规则,确认是不是这一层返回的错误。
日常预防
- 给 5xx 数量和比例设监控告警,而不是等访客反馈;
- 日志做切割与轮转,避免磁盘被写满;
- 部署前检查依赖服务,避免“一个插件挂了全站 500”;
- 把非核心功能(评论、推荐、统计脚本)做成失败可降级,不要阻塞主内容;
- 定期按状态码分布统计蜘蛛请求,5xx 比例上升通常早于抓取量的变化。
服务器稳定是站点运营最底层的一件事。内容、内链结构、URL 规范,都建立在“页面能正常返回 200”这个前提上。把 5xx 压下去,不是为了讨好谁,而是让已经做好的那些工作不至于白费。