为什么链接设置noreferrer属性后不生效,referrer仍被追加到URL?
问题排查及原因说明
首先要明确:你配置的<meta name="referrer" content="no-referrer">和a标签的rel=noreferrer属性,作用是控制浏览器发送请求时请求头中的Referer字段,和URL后被追加的referrerUrl查询参数不是同一逻辑,前者的配置不会阻止后者被拼接。
可能的原因及排查方向如下:
- 目标站点主动追加参数
你跳转的目标站点自身存在跳转逻辑,会根据访问请求的来源特征(哪怕你请求头不带Referer,也可能通过Cookie、关联会话等方式识别来源),在跳转链路中主动拼接referrerUrl参数,这类行为属于目标站点的服务端/前端逻辑控制,你站的前端配置无法干预。 - 本站JS脚本动态拼接参数
检查你站点是否存在全局绑定的a标签点击事件脚本,常见的流量统计、跳转埋点、外链处理类脚本,会在用户点击外链时,动态给a标签的href属性拼接来源相关参数。你可以打开浏览器控制台的元素面板,观察点击链接前后href属性是否发生变化,再在源代码面板搜索referrerUrl关键词,定位是否有相关注入逻辑。 - rel属性写法错误
你给出的代码中rel="noopener"orrel="noreferrer"是错误写法,正确的多属性值应该用空格分隔:
<a aria-label="Book" target="_blank" class="book-link" rel="noopener noreferrer" href="<?=$site->book_link()->html()?>">...</a>
不过该配置错误只会影响请求头Referer字段的发送,不会直接导致URL被追加参数。
- 服务端输出链接时已带参数
检查你渲染链接的<?=$site->book_link()->html()?>方法返回的原始内容,是否在服务端生成时就已经拼接了相关参数。你可以直接右键查看页面源代码,找到对应a标签,确认href的原始值是否已经包含referrerUrl。
内容的提问来源于stack exchange,提问作者Burger Sasha
相关产品推荐
相关产品推荐

