HTTP 状态码与重定向:200、301、302、404、410 与软 404
每次浏览器或爬虫请求一个 URL,服务器都会回一个三位数的 HTTP 状态码,告诉对方"这次请求结果如何"。这个数字直接影响搜索引擎如何对待你的页面:是收录、是转移信号、还是从索引中移除。读懂状态码、用对重定向,是处理页面迁移、删除和错误时不丢流量的关键。
状态码分类总览#
HTTP 状态码按首位数字分为五大类。SEO 主要关心 2xx、3xx、4xx、5xx:
| 类别 | 含义 | SEO 关注的代表 |
|---|---|---|
| 2xx | 成功 | 200 |
| 3xx | 重定向 | 301、302、304、307、308 |
| 4xx | 客户端错误 | 404、410、403、429 |
| 5xx | 服务器错误 | 500、503 |
200:成功#
200 OK 表示请求成功,页面正常返回。这是你希望所有重要内容页都返回的状态码。一个页面要被收录,第一道门槛就是能稳定返回 200(前提还要允许索引、内容有价值,详见抓取与收录原理)。
3xx:重定向#
3xx 表示请求的资源在别处,需要跳转。这是 SEO 中最需要精确使用的一类。
| 状态码 | 含义 | SEO 用途 |
|---|---|---|
| 301 | 永久重定向 | 永久迁移,转移索引与信号到新 URL(最常用) |
| 302 | 临时重定向 | 临时跳转,保留原 URL 的索引 |
| 307 | 临时重定向(保留请求方法) | 302 的严格版,常见于 HSTS |
| 308 | 永久重定向(保留请求方法) | 301 的严格版 |
| 304 | 未修改 | 缓存协商,内容未变,节省带宽与抓取 |
301 vs 302:最重要的区别
这是 SEO 中最容易用错、代价也最大的选择。
- 301(永久):告诉搜索引擎"旧 URL 已永久搬到新 URL"。索引和排名信号会转移到新 URL,旧 URL 最终被新 URL 取代。
- 302(临时):告诉搜索引擎"旧 URL 只是暂时跳转,以后还会回来"。搜索引擎会保留旧 URL 的索引,不转移信号。
| 场景 | 该用 |
|---|---|
| 换域名、改 URL 结构 | 301 |
| HTTP 迁移到 HTTPS | 301 |
| 删除页面但有等价替代页 | 301 |
| 合并重复页面 | 301 |
| 限时活动页临时跳转 | 302 |
| A/B 测试临时分流 | 302 |
| 地区/语言临时跳转 | 302 |
4xx:客户端错误#
| 状态码 | 含义 | SEO 处理 |
|---|---|---|
| 404 | 未找到 | 正常现象;有替代页则 301,否则可保留 |
| 410 | 永久删除 | 更强的删除信号,移除更快 |
| 403 | 禁止访问 | 检查是否误拦截了 Googlebot |
| 429 | 请求过多 | 限流过严会阻碍抓取,需放宽 |
404 与 410:页面不存在
很多人对 404 有不必要的恐惧。事实是:404 是网络的正常组成部分,本身不会损害网站整体排名。页面会被删除、链接会失效,这很正常。关键在于"该不该用别的方式处理":
- 有等价替代内容 → 用 301 重定向到替代页,保住信号和用户体验。
- 内容彻底没了、无替代 → 保留 404 或 410 是正确的,不要硬塞 301。
404 与 410 的差别:404 是"现在没找到"(可能以后会有),410 是"永久没了"。410 是更强烈的删除信号,Google 通常移除得更快,但实践中两者最终效果接近。一个友好的 404 页面应保留站点导航、搜索框和返回首页入口,帮用户找到出路。
软 404:最隐蔽的坑#
软 404(Soft 404)是指:页面实际返回了 200 成功状态码,内容却是"页面不存在/无内容"。状态码和内容自相矛盾,搜索引擎会困惑,并自行把它判为软 404、拒绝收录。
| 典型软 404 | 问题 | 正确做法 |
|---|---|---|
| "抱歉,未找到页面"却返回 200 | 状态码与内容矛盾 | 返回真实 404/410 |
| 空的搜索结果页返回 200 | 无实质内容被当软 404 | noindex 或返回适当状态 |
| 已下架商品页显示空壳返回 200 | 薄内容 | 301 到分类页或返回 404 |
| 删除页跳转到首页(200) | 目标无关,判为软 404 | 无替代则直接 404 |
软 404 会出现在 Google Search Console 的页面索引报告中。排查的核心是:让真正不存在或无内容的页面,返回与实际相符的状态码。
5xx:服务器错误#
5xx 表示服务器自身出错。它对 SEO 的危害比 404 大得多——因为它意味着连"正常响应"都做不到。
- 500 内部服务器错误:代码或服务器配置出错。偶发可接受,持续出现会让页面被降权甚至移出索引。
- 503 服务不可用:服务器临时过载或维护。计划内维护应主动返回 503(可带
Retry-After头),告诉爬虫"稍后再来",避免它把维护页当成真实内容或错误。
Retry-After,维护结束后恢复 200。重定向链与重定向环#
重定向用对了是良药,用乱了是负担。两个常见问题:
- 重定向链(Chain):A→B→C→D,要跳好几次才到最终页。每一跳都增加延迟、消耗抓取预算,链条过长搜索引擎可能中途放弃。
- 重定向环(Loop):A→B→A 无限循环,页面永远打不开,对用户和爬虫都是死路。
# 差:多跳链条
/old → /interim (301)
/interim → /newer (301)
/newer → /final (301)
# 好:每个旧 URL 直接到最终目标
/old → /final (301)
/interim → /final (301)
/newer → /final (301)
同时,更新站内的内部链接,让它们直接指向最终 URL,而不是依赖重定向跳转——这是URL 结构和网站迁移里反复强调的原则。
重定向、canonical、noindex 的分工#
它们都能影响搜索引擎对 URL 的处理,但解决不同问题,不能混用。
| 工具 | 页面是否可访问 | 适用 |
|---|---|---|
| 301 重定向 | 否,跳到目标 | 旧 URL 不再需要,永久搬迁 |
| canonical | 是,都可访问 | 多个 URL 都要保留,只索引一个 |
| noindex | 是 | 页面给用户看,但不进搜索结果 |
| 404 / 410 | 否,不存在 | 内容彻底删除且无替代 |
三者的边界在 Canonical 规范标签 一篇中有更详细的对比。
如何查看状态码#
- 浏览器开发者工具:Network 面板里每个请求都显示 Status。
- 命令行 curl:
curl -I https://example.com/page查看响应头和状态码,-IL可跟踪整条重定向链。 - Google Search Console:URL 检查工具显示 Google 抓取到的状态;页面索引报告按"未找到 404""网页会重定向""软 404"等成批归类。
- Screaming Frog 等爬虫:全站抓取,批量列出所有状态码、重定向链和软 404。
$ curl -IL https://example.com/old-page
HTTP/2 301
location: https://example.com/new-page
HTTP/2 200
content-type: text/html; charset=utf-8
本站的状态码策略#
状态码与重定向清单#
- 重要内容页稳定返回 200
- 永久搬迁/换域/HTTP→HTTPS 一律用 301
- 临时跳转才用 302,不要混淆
- 删除页有替代则 301,无替代则 404/410
- 不把无关页面批量 301 到首页
- 不存在的页面返回真实 404/410,杜绝软 404
- 维护期返回 503 + Retry-After,而非 200
- 消除重定向链,旧 URL 一步到最终目标
- 无重定向环
- 内部链接直接指向最终 URL
- 定期用 GSC / 爬虫检查异常状态码
常见问题#
301 和 302 重定向有什么区别?
301 是永久重定向,告诉搜索引擎原 URL 已永久迁移到新 URL,应该把索引和排名信号转移到新 URL,并最终用新 URL 替换旧 URL。302 是临时重定向,表示原 URL 只是暂时跳转,未来还会启用,搜索引擎会保留原 URL 的索引。永久搬迁(换域名、改 URL、HTTP 转 HTTPS)必须用 301;临时活动页、A/B 测试等才用 302。用错会导致信号无法正确传递。
404 和 410 有什么不同?需要修复 404 吗?
404 表示"未找到",410 表示"永久删除"。410 是更强的删除信号,Google 通常会更快地从索引中移除 410 页面,但实践中两者效果接近。404 本身不会损害网站整体排名,是网络的正常组成部分。是否处理取决于场景:如果页面有等价的替代内容,用 301 重定向到替代页;如果内容彻底没了且无替代,保留 404 或 410 是正确的,不要强行 301 到首页。
什么是软 404(Soft 404)?
软 404 指页面实际返回了 200 成功状态码,但内容其实是"页面不存在/无内容"(比如空的搜索结果页、显示"抱歉,未找到"却返回 200 的页面)。这会让搜索引擎困惑:状态码说成功,内容却是错误。Google 会自行将其判定为软 404 并不予收录。正确做法是让真正不存在的页面返回真实的 404 或 410 状态码。
重定向链会影响 SEO 吗?
会。重定向链(A→B→C→D)会拖慢页面加载、浪费抓取预算,过长的链条还可能导致搜索引擎在中途停止跟踪。最佳做法是让每个旧 URL 直接一步重定向到最终目标(A→D),并更新站内所有内部链接,使其直接指向最终 URL,而不是依赖重定向。