target属性本身不导致用户流失,但滥用target="_blank"且漏掉rel="noopener noreferrer"会升高跳出率、破坏导航连续性并引发安全风险;无效target值(如"_new"、"_BLANK")被忽略或行为不可预测;站内链接不应开新页,外部链接才需规范使用。

target 属性本身不直接导致用户流失,但错误使用(尤其是滥用 target="_blank" 或漏掉 rel="noopener noreferrer")会显著增加跳出率、破坏导航连续性,并引入安全风险——这些才是真实影响留存的关键点。
为什么 target="_blank" 不加 rel="noopener noreferrer" 会悄悄赶走用户
这不是理论问题,是已知攻击链:新页面可通过 window.opener.location 强制跳转你的原页面到钓鱼页。用户一返回,发现已在陌生网站,信任瞬间崩塌。
- Chrome、Firefox 等现代浏览器控制台会报
Invalid target name或Blocked a frame with origin...,但普通用户看不到——他们只看到“点个链接怎么就跳去别的地方了” - 即使没被攻击,
window.opener也会让两个标签页共享渲染进程,导致原页面卡顿;用户感知就是“你这网站变慢了”,然后关掉 - 漏掉
noreferrer会让 Referer 头泄露来源 URL,某些敏感场景下可能暴露用户行为路径,间接影响隐私信任
target="_self" 显式写出,真有必要吗?
绝大多数情况下没必要,写了反而容易误导。
-
target="_self"和不写target完全等效,浏览器行为一致;CMS 或低代码平台自动生成它,纯属冗余 - 误以为加了就能“阻止后退”或“清空历史”——实际做不到,得用
history.replaceState() - 在
<iframe>里乱加target="_self"可能掩盖真正问题:比如父级<base target="xxx">已全局覆盖,此时显式写_self是在强行覆盖配置,而非修复逻辑
哪些 target 值根本不能信?
所有以 _ 开头但不在 _self、_blank、_parent、_top 这四个之列的值,都是无效的。
立即学习“前端免费学习笔记(深入)”;
-
target="_new"、target="new"、target="_search":W3C 已明确废弃,Chrome/Firefox/Safari 全部忽略,行为 fallback 到_self,但控制台会警告 -
target="_BLANK":大小写敏感,_BLANK≠_blank,结果等同于自定义窗口名,找不到就新建——且无noopener保护 -
target="myPopup "(末尾带空格):匹配失败,不同浏览器 fallback 行为不一致,有的当_blank,有的当_self,无法预测
真正影响用户是否离开的,是上下文,不是标签页
用 target="_blank" 打开站内页面(比如 /about 或 /contact),等于主动打断用户心智模型——他们没预期要开新页,返回时还要多一次点击。这种“技术正确但体验错误”的做法,比任何性能问题都更容易造成流失。
- 外部链接(如引用第三方文档、GitHub 仓库)才适合
target="_blank"+rel="noopener noreferrer" - 内部导航一律用
_self(不写即可),保持前进/后退链完整 - 如果真需要“不离开当前页”,优先考虑
fetch()+ 模态框,而不是靠新开标签页逃避交互设计责任



















