HTTP 状态码及其对 SEO 的影响
状态码是客户端与服务器之间沟通的方式。借助 Ahrefs 的 SEO Toolbar,点击工具栏图标即可免费查看任何页面的 HTTP 状态码,还能展开查看完整响应头,便于排查各类技术问题。
HTTP 状态码是服务器响应中包含的三位数字,用来告知浏览器其请求是否已成功完成。除了这三位数字,通常还会附带一段对该状态的描述,相关规范及其功能由万维网联盟(W3C)定义。
状态码是客户端与服务器之间相互沟通的方式。使用 Ahrefs 的 SEO Toolbar,点击工具栏图标,即可免费查看任何页面的 HTTP 状态码。

还可以点击展开,查看完整的响应头(header response),这有助于排查许多技术问题。

状态码有五个官方区间:
还可能会看到一些更大的数字编码,它们都是非官方的:
继续往下读,了解这些状态码的含义以及 Google 如何处理它们。
1xx – 提供某种附加信息
1xx 状态码表示服务器已收到请求,并将继续处理。
100 Continue(继续) – 目前一切正常,请继续。
101 Switching Protocols(切换协议) – 有一条消息(例如升级请求)正在把连接切换到另一种协议。
102 Processing(处理中) – 事情正在发生,但尚未完成。
103 Early Hints(早期提示) – 允许预加载资源,有助于改善最大内容绘制(LCP),从而优化核心网页指标。
2xx – 表示请求成功
2xx 状态码表示客户端请求已被接收、理解并接受。
200 OK(成功) – 一切正常,全部成功。
201 Created(已创建) – 与 200 类似,但成功的衡量标准是已创建了一个新资源。
202 Accepted(已接受) – 请求已被接受处理,但尚未完成,甚至可能还没开始。
203 Non-Authoritative Information(非授权信息) – 信息在从服务器发送给你的过程中发生了变化。
204 No Content(无内容) – 请求已发送,但响应正文中没有内容。
205 Reset Content(重置内容) – 将文档重置为原始状态,例如清空一个表单。
206 Partial Content(部分内容) – 只发送了部分内容。
207 Multi-Status(多状态) – 包含多个响应码,它们可能是 2xx、3xx、4xx 或 5xx。
208 Already Reported(已报告) – 客户端告知服务器,同一资源此前已被提及过。
218 This is fine(这没事) – Apache 的非官方用法。
226 IM Used(已使用实例操作) – 允许服务器向客户端发送资源的变更(差异)。
Google 如何处理 2xx
大多数 2xx 都允许页面被索引。不过,204 会被视为软 404,不会被索引。
软 404 也可能出现在这样的情况:服务器声称成功(200),但页面内容却表示该内容不存在。此时本应是 404 状态码,但服务器在并非一切正常的情况下却表示一切正常。内容很少或没有内容的页面也可能出现这种情况。
你可以在 Google Search Console 的“覆盖率”报告中找到这些软 404 错误。
3xx – 主要与重定向有关,但也有少数例外
3xx 状态码表示客户端在请求成功之前还需要做些什么。
300 Multiple Choices(多种选择) – 存在多个可能的响应,你可能需要选择其中一个。
301 Moved Permanently(永久移动) – 旧资源现在重定向到新资源。
302 Found(已找到) – 旧资源现在临时重定向到新资源。
302 Moved Temporarily(临时移动) – 旧资源现在临时重定向到新资源。
303 See Other(参见其他) – 这是另一种重定向,表示该资源可能在其他位置可以找到。
304 Not Modified(未修改) – 表示页面未被修改,通常用于缓存。
305 Use Proxy(使用代理) – 只有使用代理时才能访问所请求的资源。
306 Switch Proxy(切换代理) – 你接下来的请求应使用指定的代理。该状态码已不再使用。
307 Temporary Redirect(临时重定向) – 功能与 302 重定向相同,区别在于不能在 POST 和 GET 之间切换。
307 HSTS Policy(HSTS 策略) – 强制客户端在发起请求时使用 HTTPS 而非 HTTP。
308 Permanent Redirect(永久重定向) – 功能与 301 重定向相同,区别在于不能在 POST 和 GET 之间切换。
Google 如何处理 3xx
301 和 302 是规范化信号。它们会传递 PageRank,并帮助确定 Google 索引中展示哪个 URL。301 会向前合并到新 URL,而 302 会向后合并到旧 URL。如果 302 保留的时间足够长,或者它重定向到的 URL 已经存在,那么 302 可能被当作 301 处理,改为向前合并。
302 也可用于把用户重定向到特定语言或特定国家/语言的首页,但同样的逻辑不应套用到更深层的页面。
Google 对 303 的处理方式并不明确。根据其运作方式,它们可能被当作 301 或 302 处理。
307 有两种不同情形。当它是临时重定向时,会被当作 302 一样处理,并尝试向后合并。当 Web 服务器要求客户端只使用 HTTPS 连接(HSTS 策略)时,由于 307 缓存在浏览器中,Google 看不到它。首次访问(无缓存)时的服务器响应码很可能是 301 或 302,但你的浏览器在后续请求中会显示 307。
308 与 301 的处理方式相同,会向前合并。
Google 最多会跟踪重定向链中的 10 跳。它通常在一次会话中跟踪 5 跳,并在下一次会话中从上次中断处继续。超过之后,信号可能不会合并到被重定向的页面。
你可以在 Ahrefs 的站点审计(Site Audit)或我们免费的 Ahrefs Webmaster Tools(AWT)中找到这些重定向链。
4xx – 客户端侧的错误
4xx 状态码表示客户端出现了错误。该错误通常会在响应中说明。
400 Bad Request(错误请求) – 客户端请求的某些内容有问题,可能是格式错误、无效或过大,导致服务器无法理解该请求。
401 Unauthorized(未授权) – 在需要时,客户端没有表明或验证自身身份。
402 Payment Required(需要付款) – 该状态码没有官方用途,是为未来某种数字支付系统预留的。一些商家出于自身原因使用它,例如 Shopify 在店铺未支付费用时使用它,Stripe 则将其用于可能存在欺诈的付款。
403 Forbidden(禁止访问) – 客户端身份已知,但没有访问权限。
404 Not Found(未找到) – 未找到所请求的资源。
405 Method Not Allowed(方法不允许) – 所用的请求方法不受支持,例如表单需要使用 POST,却使用了 GET。
406 Not Acceptable(不可接受) – 服务器无法满足客户端请求的 accept 标头。
407 Proxy Authentication Required(需要代理身份验证) – 身份验证需要通过代理完成。
408 Request Timeout(请求超时) – 服务器已超时,或决定关闭连接。
409 Conflict(冲突) – 请求与服务器的状态发生冲突。
410 Gone(已删除) – 与未找到请求的 404 类似,但它还表示该资源不会再可用。
411 Length Required(需要长度) – 在需要 content-length 字段时,请求中没有包含该字段。
412 Precondition Failed(前提条件失败) – 客户端对请求设置了条件,但服务器不满足该条件。
413 Payload Too Large(请求体过大) – 请求的大小超过了服务器允许的范围。
414 URI Too Long(URI 过长) – 请求的 URI 长度超过了服务器允许的范围。
415 Unsupported Media Type(不支持的媒体类型) – 服务器不支持所请求的格式。
416 Range Not Satisfiable(请求范围无法满足) – 客户端请求文件的一部分,但服务器无法提供,例如请求的部分超出了文件实际结尾的位置。
417 Expectation Failed(预期失败) – 服务器无法满足“Expect”请求标头中表示的预期。
418 I'm a Teapot(我是茶壶) – 当你想用茶壶煮咖啡时就会出现。它最初是 1998 年的愚人节玩笑,但实际上已被标准化。如今万物皆为智能设备,这个状态码有可能真的被用到。
419 Page Expired(页面已过期) – Laravel 框架的非官方用法。
420 Method Failure(方法失败) – Spring 框架的非官方用法。
420 Enhance Your Calm(冷静一下) – Twitter 的非官方用法。
421 Misdirected Request(请求被错误定向) – 请求被发送到的服务器无法对其响应。
422 Unprocessable Entity(无法处理的实体) – 请求中存在语义错误。
423 Locked(已锁定) – 所请求的资源已被锁定。
424 Failed Dependency(依赖失败) – 该失败的发生是因为它需要的另一个请求也失败了。
425 Too Early(过早) – 由于请求很可能稍后会再次发送,服务器此时不愿处理该请求。
426 Upgrade Required(需要升级) – 在客户端使用更新的协议之前,服务器拒绝该请求。需要升级的内容在“Upgrade”标头中指明。
428 Precondition Required(需要前提条件) – 服务器要求该请求必须是条件性的。
429 Too Many Requests(请求过多) – 这是限流的一种形式,用于保护服务器,因为客户端向服务器发送请求的速度过快、数量过多。
430 Request Header Fields Too Large(请求头字段过大) – Shopify 的非官方用法。
431 Request Header Fields Too Large(请求头字段过大) – 由于标头字段过大,服务器不会处理该请求。
440 Login Time-out(登录超时) – IIS 的非官方用法。
444 No Response(无响应) – nginx 的非官方用法。
449 Retry With(使用…重试) – IIS 的非官方用法。
450 Blocked by Windows Parental Controls(被 Windows 家长控制阻止) – 微软的非官方用法。
451 Unavailable For Legal Reasons(因法律原因不可用) – 因某种法律原因而被屏蔽。你有时会在国家级屏蔽中看到它,例如出于隐私或授权原因被屏蔽的新闻或视频。你也可能在 DMCA 下架场景中看到它。这个状态码本身是对小说《华氏 451 度》的致敬。
451 Redirect(重定向) – IIS 的非官方用法。
460 – AWS Elastic Load Balancer 的非官方用法。
463 – AWS Elastic Load Balancer 的非官方用法。
494 Request header too large(请求头过大) – nginx 的非官方用法。
495 SSL Certificate Error(SSL 证书错误) – nginx 的非官方用法。
496 SSL Certificate Required(需要 SSL 证书) – nginx 的非官方用法。
497 HTTP Request Sent to HTTPS Port(HTTP 请求被发送到 HTTPS 端口) – nginx 的非官方用法。
498 Invalid Token(无效令牌) – Esri 的非官方用法。
499 Client Closed Request(客户端关闭请求) – nginx 的非官方用法。
499 Token Required(需要令牌) – Esri 的非官方用法。
Google 如何处理 4xx
4xx 会导致页面从索引中掉出。
404 和 410 的处理方式类似。两者都会让页面从索引中掉出,但 410 稍快一些。在实际应用中,它们大致相同。
Google 使用 421 来退出通过 HTTP/2 进行的抓取。
429 有点特殊,因为它们通常被当作服务器错误处理,会导致 Google 放慢抓取速度。但最终,Google 也会把这些页面从索引中移除。
你可以在站点审计或我们免费的 Ahrefs Webmaster Tools 中找到 4xx 错误。
- 把你的域名粘贴到 Site Explorer 中(在 AWT 中也可免费使用)
- 打开按外链排序(Best by links)报告
- 添加一个“404 not found”的 HTTP 响应过滤器
我通常会按“引用域(Referring domains)”对此排序。
5xx – 服务器侧的错误
5xx 状态码表示服务器出现了错误,并且它知道自己无法执行该请求。响应中会包含错误的原因。
500 Internal Server Error(内部服务器错误) – 服务器遇到某种问题,且没有更好或更具体的错误码可用。
501 Not Implemented(未实现) – 服务器不支持该请求方法。
502 Bad Gateway(错误网关) – 服务器在请求过程中充当路由角色,但它从所路由到的服务器那里收到了错误的响应。
503 Service Unavailable(服务不可用) – 服务器过载或因维护而停机,目前无法处理该请求,但很可能很快就会恢复。
504 Gateway Timeout(网关超时) – 服务器在请求过程中充当路由角色,但没有从所路由到的服务器那里及时收到响应。
505 HTTP Version Not Supported(不支持的 HTTP 版本) – 正如字面意思:请求中的 HTTP 协议版本不受服务器支持。
506 Variant Also Negotiates(变体也参与协商) – 当服务器有多个资源变体时,允许客户端获取最佳的那个变体。
507 Insufficient Storage(存储空间不足) – 服务器无法存储完成该请求所需存储的内容。
508 Loop Detected(检测到循环) – 服务器在尝试处理请求时发现了无限循环。
509 Bandwidth Limit Exceeded(超出带宽限制) – Apache 和 cPanel 的非官方用法。
510 Not Extended(未扩展) – 在服务器满足请求之前,需要对请求进行更多扩展。
511 Network Authentication Required(需要网络身份验证) – 在服务器允许访问网络之前,客户端需要进行身份验证。
520 Web Server Returned an Unknown Error(Web 服务器返回未知错误) – Cloudflare 的非官方用法。
521 Web Server is Down(Web 服务器已宕机) – Cloudflare 的非官方用法。
522 Connection Timed Out(连接超时) – Cloudflare 的非官方用法。
523 Origin is Unreachable(源站不可达) – Cloudflare 的非官方用法。
524 A Timeout Occurred(发生超时) – Cloudflare 的非官方用法。
525 SSL Handshake Failed(SSL 握手失败) – Cloudflare 的非官方用法。
526 Invalid SSL Certificate(无效的 SSL 证书) – Cloudflare 的非官方用法。
527 Railgun Error(Railgun 错误) – Cloudflare 的非官方用法。
529 Site is overloaded(站点过载) – Qualys 的非官方用法。
530 – Cloudflare 的非官方用法。
530 Site is frozen(站点已冻结) – Pantheon 的非官方用法。
561 Unauthorized(未授权) – AWS Elastic Load Balancer 的非官方用法。
598(非正式约定)Network read timeout error(网络读取超时错误) – 某些 HTTP 代理的非官方用法。
Google 如何处理 5xx
5xx 错误会放慢抓取速度。最终,这些页面会被从 Google 索引中移除。你可以在站点审计或 Ahrefs Webmaster Tools 中找到它们,但它们可能与 Google 看到的 5xx 不同。由于这些是服务器错误,它们并不总是存在。

6xx+ – 非官方
标准只规定了 1xx 到 5xx 的状态码,但你可能会遇到一些非官方的状态码。很多时候,这些码会被不同平台使用,或者这些平台允许用户在某些范围内使用任意自定义状态码。由于它们都是自定义的,因此无法一一列出它们的作用。这些数字可以超过 1,000。
999 – 这个码足够常见,值得一提。它通常是一个通用错误码,用于请求无法被处理或被拒绝的情况。