在 HTML 的 <a>
标签中,noopener
和 noreferrer
都是 rel
属性的取值,核心作用是保障原页面的安全、优化性能,并控制“来源信息”的传递——尤其当你用 target="_blank"
打开新窗口时(就像你引流链接里的配置),这两个参数几乎是“必加项”。下面分别拆解它们的具体作用,再讲两者的关联和你的场景适配。
一、noopener
:防篡改+提性能
noopener
的核心是切断新页面与原页面的“窗口关联”,解决 target="_blank"
带来的两个关键问题:
1. 解决安全风险:防止恶意页面篡改原页面
当你用 <a target="_blank" href="xxx">
打开新窗口时,新页面默认能通过 window.opener
访问原页面的窗口对象。
- 举个例子:如果你的引流链接不小心指向了一个恶意页面(比如链接被劫持、或对方站点被黑),这个恶意页面可以通过
window.opener.location = "https://钓鱼网站.com"
篡改你原页面(mp.jobleap4u.com
)的 URL,把用户留在原页面的部分引导到钓鱼页面,导致用户流失或信息泄露。 - 而加了
noopener
后,新页面的window.opener
会变成null
,完全无法访问原页面的窗口对象,从根源上杜绝了这种“篡改原页面”的恶意操作。
2. 优化性能:让浏览器更高效
window.opener
会让原页面和新页面保持“关联关系”,浏览器无法将它们完全独立成两个进程(部分浏览器的优化机制)。
- 这会导致:如果新页面加载缓慢、或有大量 JS 运行,可能会“拖累”原页面的流畅度(比如原页面滚动卡顿)。
- 加了
noopener
后,浏览器会把原页面和新页面拆成独立进程,互不影响,原页面的性能更稳定,用户体验更好。
二、noreferrer
:隐藏来源+隐含 noopener
noreferrer
有两个核心作用,且功能上包含了 noopener
(但反过来不成立):
1. 隐藏“来源信息”:不传递原页面地址
当用户点击链接跳转到新页面时,浏览器会自动在 HTTP 请求头里添加一个 Referer
字段(注意:拼写是 Referer
,不是 Referrer
,是历史遗留问题),告诉新页面的服务器:“这个用户是从哪个页面过来的”。
- 比如你没加
noreferrer
时,用户从mp.jobleap4u.com/discover/xxx
点击链接到jobleap.cn
,jobleap.cn
的服务器日志里会看到Referer: https://mp.jobleap4u.com/discover/xxx
,能明确知道流量来自你的详情页。 - 加了
noreferrer
后,浏览器会删除这个Referer
头,jobleap.cn
的服务器无法知道用户是从哪个具体页面跳转过来的(只能知道有外部流量,但不知道来源地址)。
2. 隐含 noopener
的功能
如果你的代码里只写了 rel="noreferrer"
,没写 noopener
,也能实现 noopener
的效果——新页面的 window.opener
会被置为 null
,同样能防篡改、提性能。
但反过来,只写 rel="noopener"
不能实现 noreferrer
的效果——Referer
信息还是会正常传递。
三、结合你的场景:为什么需要同时加?
你的链接是 target="_blank"
打开 jobleap.cn
(自己的引流站点),这两个参数的价值如下:
需求场景 | noopener 的作用 | noreferrer 的作用 |
---|---|---|
保护原页面安全 | ✅ 防止 jobleap.cn (或被劫持的页面)篡改原页面 | ✅ 同样能防篡改(隐含 noopener ) |
优化用户体验(性能) | ✅ 原页面和新页面独立进程,不卡顿 | ✅ 同样优化性能(隐含 noopener ) |
控制来源信息传递 | ❌ 不影响 Referer ,jobleap.cn 能看到来源 | ✅ 隐藏 Referer ,jobleap.cn 看不到具体来源 |
小建议:根据你的统计需求调整
如果你需要让 jobleap.cn
的后台明确知道“流量来自 mp.jobleap4u.com
的详情页”(方便统计引流效果),可以只保留 noopener
,去掉 noreferrer
——这样既保障安全和性能,又能传递 Referer
信息。
但如果你的场景对“隐藏来源”有需求(比如不希望第三方知道具体来源页),就保留 noopener noreferrer
组合。
总结:一句话讲清两者
noopener
:防恶意页面篡改原页面 + 提升浏览器性能(必加,尤其用_blank
时);noreferrer
:隐藏跳转的来源信息(Referer
)+ 自带noopener
的所有功能;- 两者一起用,是兼顾“安全、性能、隐私”的最优配置,也是当前前端开发中
target="_blank"
链接的“标准实践”。