rel="nofollow" 的作用只是提示搜索引擎不要传递链接权重,并不能阻止搜索引擎爬虫抓取目标页面,也不会影响用户正常点击跳转;真正用于防止反向劫持和减少 Referer 泄露风险的,是 rel="noopener noreferrer",而且必须与target="_blank"同时配合使用。

rel="nofollow" 这一点,很多站长和开发者都容易理解错:它本质上并不具备防跟踪能力。更准确地说,它更像是在向搜索引擎说明“这个链接不要传递权重”,但对于用户点击后的跳转行为、浏览器打开链接的过程,甚至搜索引擎蜘蛛是否继续抓取目标页,都没有强制拦截作用。真正能够防止反向劫持、同时降低 Referer 泄露问题的,其实是 rel="noopener noreferrer";并且这组属性要生效,前提是必须配合 target="_blank" 一起使用。
rel="nofollow" 不等于禁止访问或屏蔽爬虫
很多人以为添加 rel="nofollow" 就能“阻止爬虫抓取”或者“让用户无法进入链接页面”。实际上并非如此:
rel="nofollow"只是给搜索引擎的建议性标记,并不是强制指令;Google 通常会参考,但如果其他页面同样指向该地址,目标页依然可能被收录或抓取- 用户点击链接后仍会正常跳转,前端页面不会有任何明显变化,同时它也不会限制 JS 动态生成链接的访问行为(而这类链接搜索引擎本身通常识别有限)
- 格式写错就可能导致属性失效:例如
rel=nofollow(缺少引号)、rel="no follow"(中间带空格)、rel="NOFOLLOW"(虽然多数情况不区分大小写,但容易被 lint 工具提示不规范) - 它主要作用于静态
标签,不能替代标签规则,也不适用于 meta robots 这类搜索引擎控制方式
target="_blank" 必须配 noopener + noreferrer
如果只写 target="_blank",页面会存在 reverse tabnabbing 风险:新打开的页面可以通过 window.opener.location 修改原页面地址,从而诱导用户进入钓鱼页面。更安全、规范的 HTML 写法应为:
外链
这里需要特别注意:
rel="noopener"的作用是切断window.opener引用,这是防止反向劫持的核心安全措施rel="noreferrer"会进一步屏蔽 Referer 请求头,减少来源页面路径、参数等敏感信息泄露rel="nofollow"可以与其同时使用,例如rel="noopener noreferrer nofollow",属性顺序不影响结果,只需使用空格分隔即可- Lighthouse 和 ESLint 通常都会对缺少
noopener的target="_blank"用法发出安全警告
SEO 场景下该用哪些 rel 值组合
如果只是为了避免链接权重传递,单独使用 rel="nofollow" 通常已经足够;但在现代 SEO 优化中,更推荐根据链接类型进行更细致的 rel 标注:
- 广告链接、付费外链:建议使用
rel="sponsored"(Google 已明确支持),也可以叠加写成rel="sponsored nofollow" - 用户评论区、论坛帖子中的外部链接:适合使用
rel="ugc"(user-generated content) - 由可信作者或编辑主动发布的链接,可以去掉
ugc,根据需要仅保留rel="nofollow",或者不添加相关限制属性 - 百度历史上也识别
rel="noflow",但当前标准且推荐的写法仍然是rel="nofollow",没有必要为了旧写法单独兼容
最容易被忽视的一点是:noopener 和 nofollow 解决的并不是同一类问题——前者属于网页安全防护,后者属于搜索引擎 SEO 优化。二者可以同时使用,也完全不冲突;但如果漏掉前者,即使写了很多个 nofollow,页面依旧存在被反向劫持的安全风险。
