HTML <a> 标签的 rel 属性全解析:安全、隐私与 SEO 最佳实践

嗨,我是芦苇Z。

本文聊聊每个前端都踩过、却常被一笔带过的坑:<a> 标签的 rel 属性。

看完你马上能告诉自己: "以后凡是 target="_blank",我都先写 noopener,再按需补其他。"

1. 先搞懂两件事

问题 一句话答案
rel 是干嘛的? 告诉浏览器"我和那条链接是啥关系",顺带决定要不要把上一页的信息交出去。
为啥总跟 target="_blank" 一起出现? 新标签页会拿到 window.opener 指针,能反过来篡改来源页------这叫 reverse tabnabbing

2. 安全两件套:noopener / noreferrer

属性 干什么 额外效果 推荐场景
noopener 切断 window.opener 所有 target="_blank" 都加,先保命
noreferrer 不发送 Referer 请求头 现代浏览器顺带切断 window.opener 不想让目标站知道你从哪来

"切断 window.opener"到底是啥?

默认情况下,新标签页里 window.opener 指向"是谁把我打开"的那个页面。

有了这把"回头钥匙",新页面可以:

  • 把原来的页面跳转到假登录页(reverse tabnabbing 反向标签劫持);
  • opener.document 直接读写来源页(跨域时受限,但仍可 location 跳转)。
    写上 noopener 后,浏览器干脆把这把钥匙掰断------新页面拿到的 window.openernull,想搞事也找不到门。

一句话记住:
"只保命"noopener; ("断钥匙,防回头。"
"既保命又隐身"noopener noreferrer(两词顺序随意)。

html 复制代码
<!-- 最常用:外链新开标签 -->
<a href="https://external.example"
   target="_blank"
   rel="noopener noreferrer">
   外部资源
</a>

3. 搜索引擎专用暗号

属性 翻译给谷歌听 实战场景
nofollow "别递权重,我只是提一嘴" 不可信的外链
ugc "这是用户自己发的" 评论、论坛帖子
sponsored "我收钱了" 广告、软文

不会阻止收录!只是不递权重,别再把 nofollowrobots.txt 用。

html 复制代码
<!-- 评论里出现的链接 -->
<a href="https://xxx.com"
   target="_blank"
   rel="noopener nofollow ugc">
   用户分享的地址
</a>

4. 其他常见 rel 速查

类型 举例 一句话说明
文档关系 alternate author canonical prev/next 给爬虫或浏览器指路,不影响安全
预加载 preload prefetch dns-prefetch 性能优化,和 <link> 更配
书签 bookmark 永久锚点,几乎用不上

5. 我只想藏 Referer,行不行?

可以,但别全站甩 noreferrer,用 referrerpolicy 更细:

html 复制代码
<a href="https://external.example"
   target="_blank"
   rel="noopener"
   referrerpolicy="strict-origin-when-cross-origin">
   外部资源
</a>

常见取值:
no-referrer / origin / strict-origin-when-cross-origin

记不住?Chrome DevTools Network 面板里看一眼 Referer 头就明白。

6. 三句话总结(贴墙用)

  1. 凡是 target="_blank",先写 rel="noopener"
  2. 不想暴露来源,再补 noreferrer 或直接上 referrerpolicy
  3. SEO 场景按需加 nofollow / ugc / sponsored,别让搜索引擎误会你卖链接。

复制下方代码,当成 Snippet 用,以后再也不用拼手指:

html 复制代码
<!-- 外链通用模板 -->
<a href="URL"
   target="_blank"
   rel="noopener noreferrer nofollow">
   文本
</a>

祝你写链接写得开心,别再被安全扫描报告追着跑。

📚 参考资料

相关推荐
摸鱼仙人~11 小时前
Vue Todo 实战练习教程(简略版)
前端·javascript·vue.js
dzj88811 小时前
云朵字生成器-html
前端·css·html·云朵字
FlyWIHTSKY11 小时前
Vue 3 单文件组件加载顺序详解
前端·javascript·vue.js
霪霖笙箫11 小时前
真授之以渔:我是怎么从"想给文章配几张图",一步步做出一个可发布 skill 的
前端·人工智能·开源
yzin11 小时前
【源码】【react】useCallback、useMemo、memo 原理
前端·react.js
CHU72903511 小时前
扭蛋机盲盒小程序前端功能设计及核心玩法介绍
前端·小程序
毛骗导演11 小时前
OpenClaw Gateway RPC 运行时:一个 WebSocket 协议引擎的深度解剖
前端·架构
码路飞11 小时前
不会 Rust 也能玩 WebAssembly:3 个 npm install 就能用的 WASM 神器
前端·javascript·webassembly
sudo_jin11 小时前
从“输入网址”到“帧级控制”:我对事件循环与主线程管理的终极认知
前端·javascript
flyfox11 小时前
Kiro AI IDE 深度使用指南:从入门到高效开发
前端·人工智能·ai编程