27 个首页的 noopener noreferrer:265 条外链里 119 条删掉了 referrer
noopener noreferrer 这两个 token 在 2026-09-02 读到的 27 个首页上出现了 145 次和 119 次。265 条站外新窗链接里 119 条带 noreferrer,占 44.9% —— 落地站收到的是一次没有来源的访问。

实测 · 2026-09-02 · 27 个首页 · 各请求一次 · target="_blank" 链接上的 rel 取值
样本 / 口径:30 个站在 2026-09-02 各发一次 GET,桌面 Chrome UA(不是 Googlebot),跟随跳转,不执行 JavaScript。剔掉 3 个 —— stackoverflow.com 与 medium.com 返回 403,www.reddit.com 只回了一个 8,393 字节的空壳 —— 纳入 27 个。从服务器交付的 HTML 里正则取出全部 <a> 开标签,留下带 target="_blank" 的那些。
做出海站的人常有一个问题:明明有人从别的站点进来,分析后台里却全记成直接访问。这批数据给了其中一个成因。27 个首页上共 4,950 条链接,423 条开新窗,其中 265 条指向站外 —— 而这 265 条里有 119 条写了 noreferrer,占 44.9%。这两个 token 里,noopener noreferrer 只有后一个真的改变了什么:它把 Referer 头删掉,落地那一方于是收到一次没有来源的访问。
怎么测的
每站一次 GET,桌面 Chrome UA 而不是 Googlebot,跟随跳转。计数用正则扫 <a> 开标签,不是完整解析:筛出带 target="_blank" 的,读出 href,再拿它的主机名和本站可注册域比对。同站链接单独放一边 —— 这篇只看往外走的那些。
# 在自己的页面上数同样两个数
curl -sL --compressed -A 'Mozilla/5.0' https://example.com/ > page.html
grep -oiE '<a [^>]*target=.?_blank[^>]*>' page.html | wc -l
grep -oiE '<a [^>]*target=.?_blank[^>]*>' page.html | grep -ci 'noreferrer'
三条限制。脚本在加载后插进来的链接我们看不见,页脚是运行时拼出来的站会被数少。同一个注册域下的子域按站内处理,这是个判断不是事实,会挪动几条链接的归属。还有:这 265 条链接我们一条都没点开,也没看过任何一家的分析后台 —— 下面说的归因后果是标记本身推出来的,不是我们看着发生的。
265 条外链里 119 条删掉了 referrer
noreferrer 会压掉请求上的 Referer 头,落地站收到的这次访问不带来源。在多数分析工具里,这类会话会掉进直接访问那一桶。
这个习惯的分布很不均匀。20 个有站外新窗链接的站里,6 个是每一条都写:linear.app、www.figma.com、railway.com、www.netlify.com、www.theverge.com、github.com。9 个一条都不写,包括 developer.mozilla.org、techcrunch.com、slack.com、www.wired.com。
| 站点 | 站外新窗 | 带 noreferrer |
|---|---|---|
| react.dev | 64 | 49 |
| nextjs.org | 44 | 24 |
| www.framer.com | 28 | 0 |
| supabase.com | 23 | 21 |
| astro.build | 18 | 0 |
| vercel.com | 14 | 2 |
| www.wired.com | 11 | 0 |
| webflow.com | 10 | 0 |
react.dev 是最清楚的一例。它 64 条站外新窗链接里,48 条单写 noreferrer、1 条两个都写 —— 49 个落地站永远不会在自己的来源报告里看到 react.dev。没有人逐条做过这个决定。是一个组件做了一次。
每一条外链都是一份小小的归因。noreferrer 把这份归因留下了,人照样送出去。
noopener noreferrer 里,前一个是浏览器早就做了的事
给 target="_blank" 加 noopener,在当代浏览器里不改变任何行为。MDN 写得很直接:「Setting target="_blank" on <a>, <area> and <form> elements implicitly provides the same rel behavior as setting rel="noopener" which does not set window.opener.」(rel=noopener,2026-09-02 访问。)
所以这批样本里 265 条站外链接中的 145 条,重复声明了一个默认值。这不算错,也就九个字节。它值得拿出来说,只是因为它旁边那个 token 根本不是默认值。
| 站外链接的 rel | 条数 | 占 265 |
|---|---|---|
只有 noopener | 84 | 32% |
| 两个都有 | 61 | 23% |
只有 noreferrer | 58 | 22% |
完全没有 rel | 45 | 17% |
有 rel 但这两个都没有 | 17 | 6% |
按 token 数而不是按链接数:noopener 145、noreferrer 119、nofollow 16、sponsored 14。四个里有两个会改变机器对这条链接的处理。最常见的那个不会。
45 条链接一个 rel 都没写,28 条来自同一个站
265 条里有 45 条完全没有 rel 属性。www.framer.com 一家占 28 条 —— 它那 28 条站外新窗链接全是这样,其余是 about.gitlab.com 4 条、webflow.com 4 条、supabase.com 2 条,还有四个站各 1 条。
按当代浏览器的行为,这 45 条和写了 noopener 的那些一样安全,这正是上面那句 MDN 的意思。它们还会把 referrer 照常送出去,落地站看得见访问从哪来。换个角度看:论归因,这批「什么都没写」的链接反而是最大方的。
剩下 17 条带 rel 却没有这两个 token 的,多半是商业标记:整批 16 个 nofollow、14 个 sponsored,集中在 astro.build。那组属性改变的是搜索引擎怎么看这条链接,是另一次测量的事,写在 nofollow 的 30 个首页实测。
这对你的站意味着什么
三个决定,只有第二个有后果。
- 给
target="_blank"补noopener,在当代浏览器里等于没补。代码检查工具要就留着,别专门去给 300 条链接加一遍。 noreferrer要按链接类型逐类决定。把合作方、客户、文档来源送成一次匿名访问是一个选择,而这批数据里有 119 条链接是在没人注意的情况下做了这个选择。- 先查自己的站再去查别人的。上面两条命令一分钟跑完,答案通常来自某个组件,不是来自某条规定。
这件事的另一端是个很常见的抱怨:真实的外链访问进来了,来源却是空的。那些会话落在哪、怎么拆开,写在 ga4 里的直接流量怎么拆;同一个控制在响应头层面的版本,量在 referrer-policy 的 27 个首页实测。想看一次抓取从你自己的页面上拿到什么(连链接一起),可以 看看 QueryWin 怎么读一个页面。
常见问题
你们是怎么测的?
2026-09-02 每个首页发一次 GET,桌面 Chrome UA,跟随跳转,正文落盘。正则取出全部 <a> 开标签,留下带 target="_blank" 的,逐条读 href,主机名里不含本站可注册域的算站外。不执行 JavaScript。出口在日本大阪。
现在还要不要写 rel="noopener"?
当代浏览器上给 target="_blank" 写它没有意义,浏览器已经默认这么做了。window.open() 调用和很老的客户端仍然需要它,那两种情况这次都没测。
noreferrer 会影响 SEO 吗?
它不是抓取指令,这份数据里也没有任何排名信息。它拿掉的是真人点击时的 Referer 头,影响的是落地站的分析口径,不是你自己的搜索表现。
这实际影响多少流量?
不知道。要量它得拿到落地站的分析数据,我们没有 —— 所以 119 是一个标记计数,不是一个会话估计。
为什么要把站外链接和站内链接分开数?
因为同站链接上的 noreferrer 删掉的是你本来要发给自己的信息。这批里 158 条同站新窗链接是另一个问题,混进来会让 423 看起来像 265。


