必须返回404状态码且Content-Type为text/html,Apache用ErrorDocument 404 /404.html配置于根目录.htaccess中,路径须以/开头;Nginx需在server块中设error_page 404 /404.html并配location = /404.html { internal; };静态平台如GitHub Pages仅识别根目录404.html。

必须返回 404 状态码,且响应头为 text/html,否则搜索引擎当正常页收录,用户也收不到浏览器原生的“重试”提示。
Apache 服务器:用 .htaccess 绑定 404 页面
关键不是放个 404.html 文件,而是让服务器在资源未找到时主动返回该文件并带上正确状态码。
-
ErrorDocument 404 /404.html必须写在网站根目录的.htaccess中,路径必须以/开头(不能写成404.html或./404.html) - 确保
404.html真实存在于网站根目录,且文件权限可读(如644) - 如果用了 URL 重写(比如 WordPress 的伪静态),
ErrorDocument指令需放在RewriteRule之后,否则可能被覆盖 - 测试方式:访问一个明显不存在的路径(如
/this-page-does-not-exist),用浏览器开发者工具的 Network 面板确认响应状态码是404,且Content-Type是text/html
Nginx 服务器:在 server 块中配置 error_page
Nginx 不读 .htaccess,必须改站点配置文件(通常在 /www/server/panel/vhost/nginx/ 下或宝塔后台“配置文件”页)。
- 添加这一行:
error_page 404 /404.html;(注意末尾分号) - 必须同时确保
location = /404.html块存在,且不触发进一步重写;常见写法是:location = /404.html { internal; } - 如果
404.html里引用了/css/style.css这类路径,而该 CSS 本身又 404,会导致二次失败——所以页面内联所有样式,禁用外部请求 - 改完要执行
nginx -t && nginx -s reload,宝塔用户点“重载配置”即可
静态托管平台(GitHub Pages / Netlify / Vercel)
这些平台不运行传统服务器,靠构建时约定或重定向规则实现,机制完全不同。
立即学习“前端免费学习笔记(深入)”;
- GitHub Pages:只认根目录下名为
404.html的文件,且必须是纯静态 HTML;无额外配置,上传即生效 - Netlify:支持两种方式——在项目根目录放
404.html(自动识别),或在_redirects文件里写:/* /404.html 404
- Vercel:默认支持
404.html,但若用next.config.js自定义路由,需显式导出notFound: true的页面(如pages/404.js) - 共同陷阱:上传了
index.html却没重命名为404.html,或文件放在子目录(如/errors/404.html)导致不被识别
最常被忽略的一点:即使页面看起来“跳转成功”,也要打开 Network 面板确认状态码和响应头——很多所谓“自定义404”实际返回的是 200 OK,属于软404,对 SEO 和调试都埋了雷。



















