404.html必须放在项目根目录且严格命名为小写,否则GitHub Pages、Vercel、Netlify等平台完全不识别;生效还需服务器返回真实404状态码、排除SPA路由覆盖、HTML含语义化404标签,并确保无BOM、CDN或缓存干扰。

404.html 文件必须放在项目根目录,且文件名严格为小写 404.html,否则 GitHub Pages、Vercel、Netlify 等平台完全不会识别它——不是“差不多就行”,而是“错一个字符就失效”。
为什么 404.html 放对了还是不生效
常见现象:本地测试跳转正常,部署后仍显示平台默认灰页(如 GitHub 的 “There isn’t a GitHub Pages site here.”)。
- 检查 Git 是否真提交了该文件:
git ls-files | grep 404,Windows 记事本保存可能带 BOM,导致服务器拒绝解析 - Jekyll 用户必须在
404.html开头加 YAML front matter:---\npermalink: /404.html\npublished: false\n---,否则会被当作普通页面渲染 - 确认服务器返回的是真实
404 Not Found状态码,而不是200 OK或302 Found—— 浏览器控制台 Network 标签里看响应状态码最准
SPA 应用中 404.html 被 try_files 吞掉
React/Vue 项目常用 Nginx 或 Vite 配置 try_files $uri $uri/ /index.html 实现路由 fallback,但这个规则会把所有路径(包括 /404.html)都指向 index.html,结果用户访问不存在路径时收到的是 200 + SPA 首页,根本不会触发你的 404.html。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- Nginx 中需显式排除:
location = /404.html { },并确保它出现在location /规则之前 - Vite 开发服务器默认不支持自定义 404 响应,上线前务必用真实静态托管环境验证
- Cloudflare Pages 用户注意:
_redirects文件里不能有/* /index.html 200这类通配 fallback,否则同样覆盖 404
<h1></h1> 里没写 “404” 会导致 SEO 和可访问性失败
搜索引擎和屏幕阅读器依赖语义化结构判断页面意图。用 SVG、图片或 JS 动态插入 “404” 文字,Google 可能将其识别为软 404;视障用户听到的可能是 “网页标题”,而非明确错误提示。
立即学习“前端免费学习笔记(深入)”;
- 必须存在且唯一:
<h1>404 Not Found</h1>(文字含数字 404,不可替换为图标或中文“未找到”) - 必须用
<main></main>包裹核心内容,避免被辅助技术忽略 - 标题标签
<title></title>也得含 “404”,例如:<title>404 - 页面不存在</title>
最容易被忽略的点是:服务端状态码和 HTML 内容必须同步满足条件——光有 404.html 文件没用,光返回 404 状态码但响应体是空或乱码也不行。两者缺一不可,且任何中间层(CDN、Service Worker、PWA 缓存)都可能悄悄破坏其中一环。


















