<meta http-equiv="refresh">是HTML中唯一原生支持页面跳转的meta方式,需置于<head>内,格式为content="秒数; url=目标地址",要求页面加载完成且未被中断才生效,支持0秒跳转但SEO不友好、无错误处理且现代浏览器限制增多。
HTML中用 <meta http-equiv="refresh"> 实现自动跳转,本质是让浏览器模拟一次HTTP重定向,但它不是服务器端跳转,不改变HTTP状态码,也不被搜索引擎当作正规重定向处理。
必须同时满足两个条件才会触发:页面已加载完成、且未被用户主动中断(比如快速切到其他tab)。它在所有现代浏览器中都有效,但禁用JavaScript时仍会执行——这点常被误认为“比JS跳转更可靠”,其实只是行为不同。
content 属性值格式为 "秒数;url=目标地址",秒数可以是 0(立即跳转),但部分浏览器对 0 有最小延迟(如Chrome约0.1秒)url=/path 是合法的,但 url=path(缺斜杠)可能被某些旧浏览器解析失败refresh meta 标签,后出现的会覆盖前面的最典型的问题不是语法写错,而是路径解析逻辑被忽略。浏览器对 url= 后面的地址,始终以当前HTML文档所在URL为基准做相对解析,而不是以当前显示的URL(比如经过JS修改location.href后)为准。
https://a.com/dir/page.html,写 url=../index.html,实际跳转到 https://a.com/index.html,不是你预期的根目录下某个SPA路由url=index.html 会跳到 https://a.com/dir/index.html,而非站点根目录很多人选meta而不是location.href或location.replace(),是想“不依赖JS”。但真实场景中,这个优势很有限:
立即学习“前端免费学习笔记(深入)”;
window.onload或DOMContentLoaded后加延时跳转,控制力更强refresh视为301/302,可能同时索引源页和目标页,造成重复内容问题真正适合用<meta http-equiv="refresh">的场景极少,仅限于静态页面维护期的临时过渡,比如老URL停用、需引导用户到新域名,且确定不支持JS的终端占比可忽略。
多数情况下,你真正需要的不是“怎么写meta跳转”,而是确认:这个跳转是否本该由服务端完成?前端跳转是否应统一收口到路由实例?meta只是个逃生通道,不是主干道。