WordPress移除rel=”noopener noreferrer”教程 3种方法轻松搞定

· · 2,496 字 · 约 7 分钟
63 0
AI摘要介绍

WordPress添加外链时默认添加rel="noopener noreferrer"属性,主要用于防范安全风险,但当前主流浏览器已具备相应防护机制,该属性反而会增加页面体积并干扰流量来源追踪。


做WP建站的朋友应该都发现了,给文章加外链勾选「新标签页打开」后,代码里会自动多出rel=”noopener noreferrer”。放在以前这是为了防钓鱼攻击,但现在主流浏览器都自带了安全防护,这串代码基本就是“累赘”——不仅增加HTML体积,还会让对方看不到流量来源,影响友链建立和权重传递。
今天就分享3种实操方法,从只针对新文章到彻底清理历史残留,按需选择,新手也能跟着做,全程不用复杂操作。

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

如果只想让后续发的新文章不再自动生成这串属性,老文章懒得管,用这个方法最省事,只需给主题functions.php加一段代码即可。
操作步骤
  1. 进入WP后台→外观→主题文件编辑器→找到「主题函数(functions.php)」;
  2. 把下面代码粘贴到文件末尾,点击「更新文件」;
  3. 完成后,新添加的外链就不会再自动带rel=”noopener noreferrer”了。
PHP
/* 禁止WP编辑器为新外链自动添加noopener/noreferrer */
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;
}

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

这个方法讨巧又安全,不用改数据库里的原始文章数据,而是在网页前端输出时,自动过滤掉这串属性,新老文章都生效,风险低、见效快。
操作步骤
  1. 同样打开主题functions.php文件;
  2. 粘贴以下代码到末尾并保存,刷新网站即可生效。
PHP
/* 前端输出时动态移除所有noopener/noreferrer属性 */
add_filter('the_content', 'remove_noopener_noreferrer');
function remove_noopener_noreferrer($content) {
    // 替换组合属性,保留nofollow
    $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;
}

方法3:彻底清理(SQL操作数据库,清理历史残留)

如果有代码洁癖,想把数据库里老文章的这串属性也清理干净,就用SQL命令操作。重要提醒:操作数据库前一定要先备份,避免误操作丢数据!
操作步骤
  1. 打开主机的数据库管理工具(比如phpMyAdmin),找到自己的WP数据库;
  2. 进入「SQL」选项卡,粘贴以下命令执行即可(表前缀默认是wp_,如果你的站点修改过前缀,记得对应替换);
SQL
-- 保留nofollow,移除组合里的noopener/noreferrer
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"%';

最后总结

现在全网HTTPS普及+浏览器自带防护,移除这串属性完全不影响网站安全,还能让代码更清爽,正常传递流量来源。
  • 图省事:选方法1,只保证新文章干净即可;
  • 快速全站生效:选方法2,不用动数据库,安全无风险;
  • 彻底清理:选方法1+3,新文章不生成,老文章残留全清理,一步到位。
微信二维码