27 个首页的 noopener noreferrer:265 条外链里 119 条删掉了 referrer

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

效果衡量5 分钟读完2754 次阅读
27 个首页的 noopener noreferrer:265 条外链里 119 条删掉了 referrer

实测 · 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.dev6449
nextjs.org4424
www.framer.com280
supabase.com2321
astro.build180
vercel.com142
www.wired.com110
webflow.com100

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
只有 noopener8432%
两个都有6123%
只有 noreferrer5822%
完全没有 rel4517%
rel 但这两个都没有176%

按 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 个首页实测

这对你的站意味着什么

三个决定,只有第二个有后果。

  1. target="_blank"noopener,在当代浏览器里等于没补。代码检查工具要就留着,别专门去给 300 条链接加一遍。
  2. noreferrer 要按链接类型逐类决定。把合作方、客户、文档来源送成一次匿名访问是一个选择,而这批数据里有 119 条链接是在没人注意的情况下做了这个选择。
  3. 先查自己的站再去查别人的。上面两条命令一分钟跑完,答案通常来自某个组件,不是来自某条规定。

这件事的另一端是个很常见的抱怨:真实的外链访问进来了,来源却是空的。那些会话落在哪、怎么拆开,写在 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。

27 个首页的 noopener noreferrer:265 条外链里 119 条删掉了 referrer