WordPress自动添加rel=”noopener noreferrer”属性移除指南

AI 智能摘要
其实在SEO优化和站长圈的交互中,我们往往希望对方知道流量是我们贡献的,这样有助于建立友链关系或传递权重。而且现在全网HTTPS普及,来源信息的传递本身就很安全。强制加上noreferrer,反而把咱们的“功劳”给抹杀了。如何优雅地移除这串“尾巴”?

做WordPress建站久了,你肯定发现过一个现象:每次在文章里给文字加个外链,顺手勾选“在新标签页打开”后,发布出来的HTML代码里总会自动多出一串尾巴——rel=”noopener noreferrer”

图片[1]-WordPress自动添加rel=”noopener noreferrer”属性移除指南-主题铺

这倒不是WordPress闲得慌,而是出于对安全性的极致考量。WordPress一直是个安全细节控,添加这两个属性原本是为了防止一种叫Tabnabbing的钓鱼攻击,同时保护隐私。不过时过境迁,互联网技术在迭代,我们建站的策略也得跟着变。

说白了,放在几年前这串代码是护身符,放到2026年的今天,它可能就是纯纯的“代码赘肉”。

为什么说它现在是累赘?

早些年,如果你的链接带有target=”_blank”(新窗口打开),恶意网页可以通过window.opener对象控制你的原页面,强制跳转到钓鱼网站。noopener就是为了切断这种联系。而noreferrer则是为了不让对方知道流量是从哪儿来的。

但情况变了。主题铺观察到,从2021年开始,主流的现代浏览器(Chrome、Edge、Firefox等)已经默认开启了安全防御机制。只要你用了target=”_blank”,浏览器就会自动启用noopener的行为,完全不需要你在HTML里显式地写出来。

再说说noreferrer。其实在SEO优化和站长圈的交互中,我们往往希望对方知道流量是我们贡献的,这样有助于建立友链关系或传递权重。而且现在全网HTTPS普及,来源信息的传递本身就很安全。强制加上noreferrer,反而把咱们的“功劳”给抹杀了。

既然浏览器已经帮我们把活干了,再保留这串代码,除了增加HTML体积、显得代码不简洁之外,确实没啥实际意义。

如何优雅地移除这串“尾巴”?

移除这东西得分三步走,看你是想“治标”还是“治本”。

方法一:斩断源头(针对新文章)

如果你只想让以后发布的新文章不再自动生成这串属性,以前的老文章懒得管,那把下面这段代码扔进你主题的functions.php文件里就行。

/*
 * 禁止WordPress编辑器自动添加noopener属性
 * 适用于新发布的文章
 */
add_filter('tiny_mce_before_init','tinymce_allow_unsafe_link_target');
function tinymce_allow_unsafe_link_target( $mceInit ) {
    $mceInit['allow_unsafe_link_target'] = true;
    return $mceInit;
}

这段代码的作用是告诉TinyMCE编辑器:别自作聪明给我加属性了,我自己心里有数。

方法二:前端屏蔽(全站生效,不动数据库)

这个方法比较讨巧。它不动数据库里的原始数据,而是在网页输出给访客看的那一瞬间,通过PHP把这串代码过滤掉。好处是生效快,风险低;坏处是数据库里其实还留着那些垃圾代码。

同样是加到主题的functions.php文件中:

/*
 * 前端输出时动态移除noopener/noreferrer
 */
add_filter('the_content', 'remove_noopener_noreferrer');
function remove_noopener_noreferrer($content) {
    // 替换掉组合出现的属性
    $content = str_replace('rel="nofollow noopener noreferrer"', 'rel="nofollow"', $content);
    $content = str_replace('rel="noopener noreferrer"', '', $content);
    // 替换掉单独出现的属性
    $content = str_replace("rel='noopener'", '', $content);
    $content = str_replace("rel='noreferrer'", '', $content);
    return $content;
}

方法三:连根拔起(SQL操作数据库)

如果你是强迫症,非要把数据库里历史文章残留的属性也清理得干干净净,那就得动用SQL语句了。主题铺提醒,操作数据库前必须备份,这是保命的基本操作。

你可以通过phpMyAdmin或者主机商提供的数据库管理工具,执行以下SQL命令(注意:如果你的表前缀不是wp_,请自行修改):

-- 将带有nofollow的组合属性替换为仅保留nofollow
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'rel="nofollow noopener noreferrer"', 'rel="nofollow"')
WHERE post_content LIKE '%rel="nofollow noopener noreferrer"%';

-- 彻底移除双属性组合
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'rel="noopener noreferrer"', '')
WHERE post_content LIKE '%rel="noopener noreferrer"%';

-- 移除单独的noopener
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'rel="noopener"', '')
WHERE post_content LIKE '%rel="noopener"%';

-- 移除单独的noreferrer
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'rel="noreferrer"', '')
WHERE post_content LIKE '%rel="noreferrer"%';

总结

是否移除这串代码,取决于你对代码洁癖的程度以及对SEO权重的考量。在现代浏览器的加持下,移除它不会对安全性造成实质影响,反倒能让代码更清爽,也能让被链接的站点看到你的“推荐”。建议搭配使用方法一方法三,既能保证新文章干净,也能把老底子洗白。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容