首页 / SEO book / 网站架构与迁移 / HTTP 状态码含义与影响

HTTP 状态码及其对 SEO 的影响

HTTP 状态码含义与影响网站架构与迁移

状态码是客户端与服务器之间沟通的方式。借助 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 错误。

  1. 把你的域名粘贴到 Site Explorer 中(在 AWT 中也可免费使用)
  2. 打开按外链排序(Best by links)报告
  3. 添加一个“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 不同。由于这些是服务器错误,它们并不总是存在。

Ahrefs Site Audit 中的 4xx 和 5xx 错误

6xx+ – 非官方

标准只规定了 1xx 到 5xx 的状态码,但你可能会遇到一些非官方的状态码。很多时候,这些码会被不同平台使用,或者这些平台允许用户在某些范围内使用任意自定义状态码。由于它们都是自定义的,因此无法一一列出它们的作用。这些数字可以超过 1,000。

999 – 这个码足够常见,值得一提。它通常是一个通用错误码,用于请求无法被处理或被拒绝的情况。