最快生效的是meta http-equiv="refresh",轻量且无需服务器配置,适用于旧域名停用等过渡场景;content="0;url=..."实现立即跳转,但SEO效果差、部分CDN可能忽略。

用 meta http-equiv="refresh" 最快生效
这是最轻量、无需服务器配置、浏览器原生支持的方式。适用于旧域名停用、临时迁移或 SEO 迁移初期的过渡跳转。
在 index.html 的 <head> 中插入:
<meta http-equiv="refresh" content="0; url=https://newdomain.com/">
其中 content="0; url=..." 的数字 0 表示立即跳转(可设为 1、3 等做缓冲提示);url 必须是完整协议 + 域名(含 https://),不能写相对路径或 //newdomain.com。
- 不支持带状态码(如 301),搜索引擎会当作普通页面处理,长期使用不利于 SEO 权重传递
- 如果用户禁用 JS,该方式仍有效;但若浏览器禁用 meta refresh(极少见),跳转会失败
- 注意:某些 CDN 或托管平台(如 GitHub Pages)会自动移除或忽略该标签,需实测验证
用 window.location.replace() 更可控但依赖 JS
适合需要判断条件(如仅对特定 UA、来源或参数跳转)、或想避免后退按钮回到本页的场景。
立即学习“前端免费学习笔记(深入)”;
在 index.html 的 <body> 底部或 <script> 中写:
<script>window.location.replace("https://newdomain.com/");</script>用 replace() 而非 assign() 或直接赋值 location.href,是为了不把当前页留在历史栈中——用户点返回不会卡在空白/跳转页。
- JS 执行前页面会短暂闪现,对慢网用户可见白屏或原始 HTML 内容
- 如果页面被缓存且 JS 被拦截(如 uBlock Origin 默认屏蔽第三方脚本),跳转会失效
- 无法向新域名传递 referrer(
replace()在多数浏览器中清空 referrer),如需保留,改用location.assign()并接受后退问题
服务端 301 跳转才是正规方案
如果你能控制服务器(Nginx / Apache / Cloudflare / Vercel 等),index.html 里写前端跳转只是权宜之计。真正的迁移必须靠 HTTP 301 响应头。
例如 Nginx 配置:
return 301 https://newdomain.com$request_uri;
或 Apache 的 .htaccess:
Redirect 301 / https://newdomain.com/
- 301 是永久重定向,搜索引擎会把旧域名的权重、收录、外链全部迁移到新域名
- 跳转发生在网络层,无白屏、无 JS 依赖、无缓存干扰
- 注意:Nginx 的
return指令优先级高于try_files,确保它在 server 块最外层生效,别被 location 块覆盖
跳转时漏掉 $request_uri 或路径会导致 404
很多人只跳首页,结果 old.com/blog/post 被强制跳到 newdomain.com/,丢失路径信息,用户直接 404。
必须保留原始路径:
- Nginx:用
$request_uri(含 query string)或$uri?$args(更明确) - Cloudflare Pages:在
_redirects文件中写/ * https://newdomain.com/:splat 301 - 前端 JS 方案:用
window.location.origin + window.location.pathname + window.location.search拼接,再替换 host
跳转逻辑看似简单,但路径拼错、协议写成 http、没测子路径、忽略 HTTPS 强制跳转,这几个点几乎必踩一次。


















