蜘蛛抓取是一个按 URL 排队的过程。入口页、列表页、内链和 Sitemap 提供待抓队列,蜘蛛逐个请求。如果某个 URL 请求失败,影响的不只是这个页面,还可能影响它后面的链接发现。
5xx 和 4xx 对蜘蛛不是一回事
4xx 通常表示 URL 本身不可用,比如 404、410。蜘蛛会较快把这类 URL 从待抓队列里降低优先级,Sitemap 里的 404 也会被逐渐忽略。5xx 不一样,它表示服务器临时或持续故障,蜘蛛通常不会立刻认定页面消失,而是保持观察,可能稍后重试。
常见的 5xx 包括 500 内部错误、502 网关错误、503 服务不可用、504 网关超时。对蜘蛛来说,这些都可能意味着“现在抓不到,但以后可能恢复”。如果站点大面积返回 5xx,蜘蛛会降低对整站的抓取频率,抓取路径会变窄。
503 与 Retry-After 的配合
503 是蜘蛛比较熟悉的临时不可用状态。如果服务器同时返回 Retry-After 头,告诉蜘蛛多久之后再来,蜘蛛会把这个信号纳入重试计划。没有 Retry-After 时,蜘蛛也会自行退避,但节奏由搜索引擎决定,站点控制力更弱。
注意,不要把 503 当成长期屏蔽手段。长期返回 503 可能让蜘蛛减少抓取,甚至影响已收录 URL 的重新访问。维护窗口短、可预期时用 503 加 Retry-After 相对合适;长期不可用应考虑其他方案。
连接中断与响应不完整
除了状态码,TCP 连接被重置、TLS 握手失败、响应头收到一半断开、HTML 不完整,也会被蜘蛛视为抓取失败。这类问题不会在 HTTP 状态码里留下明确记录,但在服务器日志或抓取统计里能看到异常。
- 连接重置:常见于防火墙、负载均衡超时、后端进程崩溃。
- 响应不完整:常见于 HTML 体积过大但连接提前关闭,或动态输出中途报错。
- TLS 错误:证书链不完整、协议版本不匹配,会让整个站点的抓取路径从入口就断掉。
这类错误如果集中在某个 IP、某个 CDN 节点或某个时间段,运营侧应先查服务器和网络层,而不是改内链或 Sitemap。
重试与抓取路径的关系
蜘蛛重试某个 URL 时,不等于它会立刻再次抓取。重试通常有间隔和次数限制。期间,这个 URL 后面的内链可能没有被发现,列表页翻页也可能停在失败的那一页。
如果失败的是列表页或分类页,影响会放大。因为这类页面承担发现下一层 URL 的作用。建议:
- 核心入口页保持稳定,避免高峰期返回 5xx。
- 分页链接尽量用可抓取的 a 标签,减少对 JS 的依赖。
- Sitemap 保留稳定 URL,不要频繁加入临时故障 URL。
- 服务器日志按状态码和响应时间分组,观察 5xx 是否集中在特定路径。
蜘蛛降频后怎么恢复
如果蜘蛛已经因为 5xx 降频,恢复需要时间。先修好服务器,确保连续一段时间返回 200。然后观察日志里蜘蛛请求是否逐步恢复。可以检查:
- 入口页和 Sitemap 是否可正常访问。
- 服务器响应时间是否稳定,不要再出现大量超时。
- 重要页面是否仍然在内链中可达。
- Sitemap 是否只包含 200 状态、可正常返回的 URL。
不要为了“催”蜘蛛而频繁提交或制造大量新 URL。服务器不稳定时,增加 URL 只会让抓取队列更拥挤。
运营侧的最小检查清单
遇到抓取路径变窄,可以按下面顺序排查:
- 看服务器日志中 5xx、499、连接重置的比例。
- 确认 CDN 和 WAF 没有误拦蜘蛛,尤其是 403、429。
- 检查核心入口页是否在合理时间内返回完整 HTML。
- 确认列表页、分类页的分页链接没有断。
- 对照 Sitemap,确认没有大量 404 或 5xx URL。
- 观察一周抓取量变化,不要只看单日波动。
服务器稳定性是抓取路径的地基。状态码、连接质量和响应时间,都会影响蜘蛛能不能顺着内链继续走。把这些基础项守住,比事后补救更有效。
蜘蛛不会因为一次失败就永远放弃,但持续不稳定会让它降低访问频率。抓取路径的恢复,通常从服务器恢复稳定开始。