404 错误是什么?404 与 403 Forbidden 的区别及修复方法
404 错误(404 Not Found)是 Web 服务器在所请求的 URL 上没有任何内容可显示时返回的 HTTP 状态码。按照 HTTP 标准 RFC 9110 的说法(大意),服务器“没有找到目标资源的当前表示”,或者不愿透露其存在。它并不说明页面是否已永久消失。
免费试用:HTTP 状态码 免费使用,无需注册账号。
它的近亲 403 Forbidden(禁止访问)则不同:页面可能存在,但服务器理解了请求并拒绝执行。本文将介绍什么是 404 错误、403 Forbidden 错误是什么意思、两者与 401 和 410 有何区别,以及如何在不影响 SEO 的前提下发现并修复它们。如需查询其他状态码,可以在免费的 HTTP 状态码列表中搜索。
404 错误是什么?官方定义
404 错误的含义来自当前的 HTTP 规范 RFC 9110 第 15.5.5 节。实际使用中有三点值得注意:
- 按定义,404 并不代表永久。 页面可能会恢复。当服务器知道资源已被永久移除时,RFC 更推荐使用 410 Gone。
- 404 可以用来刻意隐藏页面。 服务器如果不想透露某个禁止访问的资源存在,可以用 404 代替 403 作答。例如,GitHub 在请求未正确认证时会对私有仓库返回 404 Not Found,这样外人就无法确认该仓库是否存在。
- 4xx 类表示“客户端错误”, 但实际上原因通常出在网站上:页面被删除或链接失效。
各网站显示的提示语各不相同(“404 Not Found”“Page not found”“HTTP Error 404”),但背后的状态码是同一个。
403 Forbidden 是什么意思?
RFC 9110 对 403 Forbidden 的定义(大意)是:服务器“理解了请求,但拒绝执行”。如果请求带有凭据,服务器会认为这些凭据不足,重复同样的请求也无济于事。页面确实存在,只是你无权查看。
403 Forbidden 错误经常与 401 混淆:
- 401 Unauthorized(未授权)表示请求缺少有效的凭据。服务器必须附带
WWW-Authenticate标头,说明如何进行身份验证;用正确的账号登录可能就能解决。 - 403 Forbidden 表示服务器拒绝访问。用同一个账号重新登录没有用;你需要不同的权限,或者由网站所有者修改规则。
浏览器通常显示“403 Forbidden”“Access denied”或“HTTP Error 403”,而拒绝可能来自网站前端的防火墙或 CDN,而不是网站本身。
404、410、403 与 401 对比一览
| 状态码 | 名称 | 对客户端的含义 | 常见原因 | 解决办法 |
|---|---|---|---|---|
| 404 | Not Found | 此 URL 上没有可用内容,可能只是暂时的 | 页面被删除或移动、链接失效、拼写错误 | 修正链接、恢复页面或添加 301 重定向 |
| 410 | Gone | 资源已被有意移除,不会再恢复 | 促销活动已过期、内容已删除 | 无需处理;移除仍指向它的链接 |
| 403 | Forbidden | 服务器理解了请求并拒绝执行 | 权限、拒绝规则、防火墙、IP 或国家/地区封锁 | 需要不同的权限,或在服务器端修改 |
| 401 | Unauthorized | 缺少有效的身份验证 | 未登录、令牌过期、密码错误 | 登录或发送有效的凭据 |
这些名称与 HTTP 状态码参考一致,该参考还涵盖 3xx 重定向。
遇到 404 或 403 错误时该怎么办
如果你是访问者,请按顺序尝试以下步骤:
- 检查 URL,看是否有拼写错误,或者长链接末尾的文字被截断。路径可能区分大小写:
/Contact/和/contact/可能是不同的页面。 - 刷新页面。 正在重新发布的页面可能会短暂返回错误。
- 在站内搜索。 删除路径的最后一段,或使用网站的搜索框,找到内容被移到了哪里。
- 如果是 403,清除该网站的 Cookie 和缓存。 过期的会话 Cookie 可能导致服务器拒绝请求;退出后重新登录也有帮助,原因相同。
- 关闭 VPN 或代理。 一些网站和防火墙会用 403 封锁 VPN 地址段或整个国家/地区。
- 告知网站所有者,如果失效链接来自该网站本身。
网站为什么会返回 404 Not Found
对网站所有者来说,大多数 404 出于以下原因之一:
- 页面被删除或移动却没有设置重定向,常见于网站改版或 CMS 迁移之后。
- 链接中的拼写错误,可能在你自己的页面上,也可能在其他网站上。
- 大小写敏感。 在常见的 Linux 服务器上,
/Guide.html和/guide.html是不同的文件。 - 末尾斜杠。
/pricing和/pricing/是不同的 URL,服务器可能只响应其中一个,而对另一个返回 404。 - 重写规则。 出错的
.htaccess规则、更改过的固定链接设置,或缺少 Nginx 的try_files行,都可能把有效的 URL 导向 404。
网站出现 403 Forbidden 错误的原因
在你自己的网站上,403 Forbidden 错误通常来自:
- 文件权限。 Web 服务器必须能读取这些文件。在常见的 Linux 主机上,文件使用
644(rw-r--r--:所有者可读写,其他人只读),目录使用755(rwxr-xr-x)。避免使用777,它允许任何人写入。 - 没有索引文件且禁用了目录列表。 当 Apache 设置了
Options -Indexes或 Nginx 设置了autoindex off时,请求一个没有index.html或index.php的文件夹会得到 403。 - 拒绝规则,位于
.htaccess或服务器配置中,例如Require all denied,或不包含该访问者的 IP 允许列表。 - Web 应用防火墙或 CDN,会封锁 IP 地址、国家/地区、用户代理或可疑的请求模式。
- 防盗链保护,会对从其他域名请求的图片返回 403。
如何修复 404 错误
正确的修复方法取决于页面发生了什么:
- 内容已移动: 添加指向新 URL 的 301 重定向,让访问者、链接和搜索引擎都能跟随过去。
- 误删了页面: 在原 URL 上恢复它。
- 你自己的链接有误: 修正指向缺失 URL 的菜单、内部链接和站点地图条目。
- 有意移除: 返回 410 Gone(或保留 404),不要重定向。
在 Apache 上,这三项设置都可以写在 .htaccess 中:
Redirect 301 /old-guide/ /new-guide/
Redirect gone /spring-sale-2025/
ErrorDocument 404 /404.html
对应的 Nginx 配置是:
location = /old-guide/ { return 301 /new-guide/; }
location = /spring-sale-2025/ { return 410; }
error_page 404 /404.html;
自定义 404 页面应说明页面未找到,保留网站导航,并提供搜索或热门链接,同时必须仍然返回 404 状态码。在 Apache 上,请让 ErrorDocument 指向 /404.html 这样的本地路径:如果使用完整的 https:// URL,Apache 会重定向访问者,原来的 404 状态也就丢失了。
避免软 404(soft 404):页面显示“未找到”,却返回 200 OK。对所有路由都返回 200 的单页应用是常见来源。另外,不要把所有缺失的 URL 都重定向到首页。Google 的网站迁移指南提醒,把大量旧 URL 发送到同一个不相关的目标(例如首页)可能会让用户感到困惑,并可能被视为软 404。
404 错误会影响 SEO 吗?
本身不会。Google Search Central 曾表示,网站存在一些 404 URL 本身并不会对其造成伤害,也不会在搜索结果中对其不利。Search Console 帮助文档补充说,如果页面被移除且没有替代页面,404 不一定是问题,并建议修复你自己链接到的或在站点地图中列出的 404。
有两种情况确实会带来损失。一个曾有排名的页面如果现在返回 404,就会连同其流量一起从索引中消失,因此如果有相关的替代页面,请做重定向。软 404 则会掩盖真实状态,所以 Google 的软 404 错误指南建议对已移除的页面返回真正的 404 或 410,对已移动的页面使用 301。
关于 404 与 410:Google 的文档称,除 429 之外,它对所有 4xx 状态码的处理方式相同,都会把之前已编入索引的 URL 从索引中移除。使用 410 是为了清楚表明你的意图,而不是为了改变排名。对于你希望被编入索引的页面,403 或 401 更糟:Googlebot 不会登录,因此 Search Console 会报告“因访问遭禁而被屏蔽 (403)”或“因未经授权的请求而被屏蔽 (401)”,页面也不会被编入索引。如果防火墙拦截了 Googlebot,请修正该规则。
如何查找失效链接和 404 错误
- Google Search Console: 打开 编入索引 › 网页,查看“未找到 (404)”和“软 404”这两个原因,其中列出了受影响的 URL。
- 服务器日志: 日志会记录每个请求及其状态。在 Apache 和 Nginx 常用的“combined”日志格式中,第 7 个字段是路径,第 9 个字段是状态码,因此下面的命令会列出被请求次数最多的缺失 URL:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head
在一个包含七个请求的示例日志上,它输出了 3 /old-guide/ 和 1 /Contact/:一个需要重定向的已移动页面,以及一个大写字母用错的链接。
- 链接检查工具: 网站爬虫会跟踪每个内部链接,并报告返回 4xx 或 5xx 的链接;很多工具也能检查出站链接。
- 快速手动检查:
curl -I https://example.com/old-guide/只获取响应标头,第一行会显示状态,例如HTTP/2 404。选择 HEAD 方法时,cURL 命令生成器会生成这条命令。
查询任意状态码
免费的 HTTP 状态码参考列出了 63 个标准状态码,从 100 Continue 到 511 Network Authentication Required,分为五类。输入 404 这样的数字或 forbidden 这样的单词,即可看到匹配的状态码、名称以及以页面语言显示的简短说明。它是参考工具,而不是 URL 检查器:它不会抓取你的页面,也不收录 Nginx 的 499 这类非官方状态码。
常见问题
404 错误是我的错吗?
通常不是。你可能输错了 URL,但大多数 404 来自已移动或已删除的页面,以及从未更新过的链接。
删除的页面应该用 404 还是 410?
如果页面是有意移除且不会恢复,410 Gone 是最准确的答案;如果不确定,用 404 也可以。如果内容已移动,请改用 301 重定向。
清除 Cookie 能解决 403 Forbidden 错误吗?
有时可以。如果原因是会话 Cookie 过期或损坏,清除该网站的 Cookie 并重新登录即可解决。如果封锁来自服务器权限、IP 或国家/地区规则,或者是针对 VPN 的封锁,这样做就无济于事。
什么是软 404?
指页面告诉访问者内容不存在,却返回 200 OK 而不是 404。Google 会把这类页面排除在搜索结果之外,并在 Search Console 中标记出来。请返回真正的 404 或 410;如果内容已移动,则返回 301。
404 是客户端错误还是服务器错误?
它属于 4xx 客户端错误类,因为请求的 URL 没有可提供的内容。服务器故障会显示为 5xx 状态码,例如 500 Internal Server Error。
免费试用:HTTP 状态码 免费使用,无需注册账号。