状态码是服务器给搜索蜘蛛的第一句回答。蜘蛛来到一个 URL,先看到的不是标题和正文,而是 HTTP 状态码。它决定这次抓取是成功、跳转、失效,还是需要稍后再来。很多站点运营问题不是内容不好,而是状态码给错了信号,让蜘蛛在错误的方向上消耗抓取预算。
为什么状态码比页面内容更早影响判断
当蜘蛛收到 200,它会认为这个地址有效,接着解析页面、提取链接、评估内容。如果返回的是 200,但页面只有“内容已删除”或一片空白,蜘蛛仍可能把它当作正常页面,这就是常说的软 404。反过来,一个正常页面如果因为配置错误返回 404 或 503,蜘蛛会减少访问,甚至把已有索引逐步移除。
状态码还会影响链接权重的传递。301 表示永久跳转,302 表示临时跳转。长期使用的临时跳转,可能让蜘蛛反复确认,也可能让目标地址的权重传递不如预期稳定。把两者混用,是站点改版、栏目调整后常见的问题。
容易写错的几类状态码
软 404:返回 200 的无效页面
常见于商品下架、文章删除、搜索结果为空、筛选无结果等页面。页面框架还在,标题可能是“未找到”,但 HTTP 状态是 200。蜘蛛会继续抓取,也可能把这类页面加入索引。更合理的做法是:确实不存在的资源返回 404;确定永久删除且不再提供的页面返回 410;搜索结果为空可以返回 200 但加上 noindex,或根据策略返回 404。
301 与 302 混用
如果旧地址永久不再使用,优先 301。临时活动、A/B 测试、短期维护跳转,用 302。不要因为配置简单,就把所有跳转都写成 302。也不要让跳转链太长,一次跳转能到目标就不要经过三四个中间地址。
404 与 410 的选择
410 表示资源已永久删除,语义比 404 更明确。对于确定不再恢复的内容,410 可以帮助蜘蛛更快放弃。但并不是所有 404 都要改成 410,尤其是可能恢复的页面,或者只是暂时路径错误的页面,仍可用 404。重点是保持真实,不要用 200 掩盖。
503 与 429:维护和限流
服务器维护、数据库升级时,返回 503 比返回 200 的空页面更合适。可以配合 Retry-After 告诉蜘蛛多久后再来。429 用于请求过多,适合接口或高频访问场景。滥用 503 也可能让蜘蛛降低抓取频率,所以维护结束后要及时恢复。
304 不是错误
304 表示内容未修改,蜘蛛可以使用缓存版本。它通常出现在带 If-Modified-Since 或 ETag 的请求中。看到 304 不必紧张,但要确认服务器没有把大量正常页面错误地固定返回 304,导致更新无法被感知。
自查方法:从日志到命令行
可以从几个入口交叉检查:
- 用浏览器开发者工具或 curl -I 查看关键页面的响应头,确认状态码、Location、Cache-Control。
- 从抓取日志中筛选 404、410、301、302、503、429 等状态,按 URL 分组看频率。
- 用站点爬虫工具抓取全站,导出状态码报告,重点看内链指向的失效地址。
- 抽查首页、栏目页、详情页、搜索页、筛选页、分页、404 页面,确认状态码与页面实际内容一致。
- 检查 sitemap 中提交的 URL 是否返回 200,避免把 404 或 301 地址写进清单。
修复顺序与注意点
- 先处理被大量内链指向的 404。 这些地址浪费抓取,也影响用户。能恢复就恢复,不能恢复就 301 到最相关的新页面。
- 不要把所有失效页面 301 到首页。 大量无关跳转到首页,可能被当成软 404 处理,也不利于用户找到需要的内容。
- 维护页面用 503,并设置合理的 Retry-After。 维护结束后尽快恢复正常响应。
- 改版后同步更新内链、sitemap 和导航。 状态码正确只是第一步,入口也要指向新地址。
- 记录状态码变更。 特别是批量 301、410、noindex 操作,方便后续排查流量和抓取变化。
状态码本身不直接决定排名,但它决定蜘蛛如何理解你的站点。把 200、301、302、404、410、503 用对,能减少误判和抓取浪费,也让真正需要被访问的页面更容易被持续发现。
自查时不必追求一次改完。先处理高频、影响面大的错误,再逐步清理长尾地址,观察抓取日志的变化,比一次性大改更稳妥。