如何自动为 WordPress 文章外链添加 nofollow 和新窗口打开

在 WordPress 网站运营中,为外部链接添加 nofollow 属性和设置在新窗口打开是常见的 SEO 和用户体验优化手段。nofollow 可以告诉搜索引擎不要将当前页面的权重传递给外部网站,而新窗口打开则可以让用户在浏览外部内容时不会离开你的网站。

手动为每一个外链添加这些属性非常繁琐,特别是对于已经发布了大量文章的网站。通过添加一段简单的 PHP 代码到你主题的 functions.php 文件中,即可实现自动化处理。

功能介绍

我们将使用的代码具有以下特点:

  • 自动识别外链:能够智能判断文章内容中的链接是否为指向外部网站的链接。
  • 添加 nofollow 属性:自动为所有外链添加 rel="nofollow" 属性。
  • 强制新窗口打开:自动为所有外链添加或修改 target="_blank" 属性,确保链接在新浏览器窗口中打开。
  • 高兼容性和稳健性:采用正则表达式进行精确匹配和替换,能够处理各种 HTML 标签格式,避免因属性顺序或已有属性导致的失效问题。
  • 不影响内链:只对外部链接进行处理,网站内部链接保持原样。

准备工作

在开始之前,强烈建议你:

  1. 备份你的网站:特别是备份 functions.php 文件。你可以通过 FTP 或 WordPress 后台的文件管理器找到它。
  2. 使用子主题:如果你正在使用一个第三方主题,最好是在子主题 (Child Theme) 的 functions.php 文件中进行修改。这样可以避免在主题更新后,你的自定义代码被覆盖。如果你还没有子主题,可以在网上搜索“如何创建 WordPress 子主题”。

操作步骤

第一步:获取代码

请将以下提供的最终稳健版代码完整地复制下来。

/**
 * 为文章外链添加 nofollow 和新窗口打开功能
 */
function add_nofollow_and_new_window_to_external_links_final($content) {
    // 获取当前网站 URL
    $site_url = home_url();

// 匹配所有 <a> 标签
preg_match_all('/<a\s+[^>]*href="([^"]+)"[^>]*>/i', $content, $matches);

if (!empty($matches[0])) {
    foreach ($matches[0] as $index => $link_html) {
        $href = $matches[1][$index];

        // 判断是否为需要处理的外链
        if (strpos($href, '://') !== false &&
            strpos($href, $site_url) === false &&
            strpos($href, '#') !== 0 &&
            strpos($href, '') !== 0) {

            $new_link_html = $link_html;

            // --- 处理 target="_blank" (使用正则,更可靠) ---
            if (preg_match('/target="[^"]*"/i', $new_link_html)) {
                $new_link_html = preg_replace('/target="[^"]*"/i', 'target="_blank"', $new_link_html);
            } else {
                // 在 href 属性后插入 target="_blank"
                $new_link_html = preg_replace('/(href="' . preg_quote($href, '/') . '")/', '$1 target="_blank"', $new_link_html);
            }

            // --- 处理 rel="nofollow" (核心修复:使用正则) ---
            if (preg_match('/rel="[^"]*"/i', $new_link_html)) {
                // 如果已有 rel 属性,检查并添加 nofollow
                if (!preg_match('/rel="[^"]*nofollow[^"]*"/i', $new_link_html)) {
                    $new_link_html = preg_replace('/rel="([^"]*)"/i', 'rel="$1 nofollow"', $new_link_html);
                }
            } else {
                // 如果没有 rel 属性,在 href 或 target 后插入
                // 这个正则会查找 href="..." 或 target="...",并在其后添加 rel="nofollow"
                $new_link_html = preg_replace('/(href="' . preg_quote($href, '/') . '"|target="_blank")/', '$1 rel="nofollow"', $new_link_html);
            }

            // 用新链接替换旧链接
            $content = str_replace($link_html, $new_link_html, $content);
        }
    }
}
return $content;
add_filter('the_content', 'add_nofollow_and_new_window_to_external_links_final', 999);

第二步:编辑主题的 functions.php 文件

有两种方法可以编辑 functions.php 文件:

方法一:通过 WordPress 后台(推荐给初学者)

  1. 登录到你的 WordPress 后台。
  2. 在左侧菜单中,导航至 “外观” (Appearance) -> “主题文件编辑器” (Theme File Editor)。
  3. 在右侧的“主题文件”列表中,找到并点击 functions.php 文件。
  4. 文件内容会在主编辑区域显示。

方法二:通过 FTP 或文件管理器

  1. 使用你的 FTP 客户端(如 FileZilla, Cyberduck)或主机提供的文件管理器登录到网站服务器。
  2. 导航至 /wp-content/themes/ 目录。
  3. 进入你当前正在使用的主题文件夹(例如 /wp-content/themes/your-theme-name/)。
  4. 在该文件夹中找到 functions.php 文件,下载到本地进行编辑,或者直接在线编辑。

第三步:粘贴并保存代码

  1. 将你在第一步中复制的代码粘贴到 functions.php 文件的末尾。
    • 重要提示:请确保代码粘贴在文件中所有现有代码的后面,并且不要破坏任何现有代码的结构。通常在文件末尾添加即可。
  2. 粘贴完成后,点击 “更新文件” (Update File) 按钮(如果你使用的是后台编辑器),或者保存文件并上传回服务器(如果你使用的是 FTP)。

第四步:测试功能是否生效

  1. 发布/编辑一篇文章:创建一篇新文章,或者编辑一篇已有的文章。
  2. 添加一个外部链接:在文章内容中插入一个指向外部网站的链接(例如 https://www.example.com)。
  3. 预览或发布文章:点击“预览”或“发布”。
  4. 查看页面源代码:
    • 在浏览器中打开你刚刚发布/预览的文章。
    • 在页面上右键点击,选择 “查看网页源代码” (View Page Source) 或类似的选项。
    • 使用浏览器的“查找”功能(通常是 Ctrl + F 或 Cmd + F)搜索你刚刚添加的外部链接的 URL。
  5. 检查结果:你应该能看到类似下面的 HTML 代码:
    <a href="https://www.example.com" target="_blank" rel="nofollow">你的链接文本</a>
    

    无论你在编辑器中是否设置了“在新窗口打开”,代码都会自动为你加上 target="_blank" 和 rel="nofollow" 属性。

注意事项

  • 代码冲突:虽然这段代码设计得比较稳健,但仍有可能与其他插件或主题中的类似功能代码发生冲突。如果发现网站出现异常,可以暂时移除这段代码进行排查。
  • 不影响旧文章:此代码是实时生效的。当有人访问你网站上的任何一篇文章时,代码会在文章内容发送到浏览器之前对其进行处理。这意味着,你无需手动修改任何旧文章,它们在被访问时都会自动应用新的链接规则。
  • 性能考虑:对于大多数网站来说,这段代码的性能开销可以忽略不计。但如果你的文章内容极其庞大或网站访问量极高,可以考虑使用缓存插件来减轻服务器负担。
  • 特定链接例外:如果你希望某个特定的外部链接不被添加 nofollow 或 target="_blank",目前这段代码无法实现。你需要寻找更复杂的解决方案,或者手动在 HTML 模式下编辑该链接,并确保它不被此函数处理(这通常比较复杂)。

总结

通过在主题的 functions.php 文件中添加上述代码,你成功地实现了 WordPress 文章外链的自动化优化。这不仅节省了你的时间和精力,也有助于提升网站的 SEO 表现和用户体验。记得定期检查你的网站,确保一切功能正常运行。

给TA赏糖
共{{data.count}}人
人已赏糖
技术分享

修复B2Pro移动端登录注册界面蒙层BUG

2025-11-15 17:07:58

技术分享

WordPress 禁止发送电子邮件通知

2025-11-16 20:16:21

16 条回复 A文章作者 M管理员
技术宅评论
  1. 未来达人3653

    这篇文章真的太实用了!作为一个WordPress小白,我之前一直手动给外链加nofollow,每次都要折腾半天,还经常忘记。看到作者分享的自动处理方法简直打开了新世界的大门,原来可以这么简单就搞定SEO优化。 特别喜欢作者把原理讲得很清楚,不仅告诉我们怎么做,还解释了为什么要这么做。nofollow和新窗口打开这两个小细节确实很重要,我之前都没意识到它们对网站权重和用户体验的影响这么大。 不过有个小建议,如果能再补充说明一下这种方法会不会影响网站速度就更好了。我之前装过一些插件,功能是不错但拖慢了网站加载速度,最后不得不卸载。所以现在看到这种自动处理的方案都会先考虑性能问题。 总的来说这篇文章解决了我一直以来的痛点,准备今晚就试试这个方法!感谢作者这么详细的分享,期待看到更多类似的实用教程。

  2. 智能达人4786

    这篇文章提到的外链优化技巧真的很实用!作为一个经常写博客的人,我之前都是手动给每个外链加nofollow和新窗口属性,不仅麻烦还容易漏掉。看到可以通过functions.php文件批量处理,感觉发现了新大陆。不过有点担心直接修改主题文件会不会影响后续更新,要是能用插件实现就更好了。作者把技术细节讲得很清楚,连我这种代码小白都能看懂大概原理。其实我觉得这种优化挺重要的,既防止权重流失,又能让读者留在自己网站,算是一举两得。下次更新文章时一定要试试这个方法,就是得记得先备份网站,毕竟直接改代码还是有点风险的。

  3. 未来达人2719

    这篇文章讲的内容真的很实用!我之前一直手动给外链加nofollow和新窗口属性,每次都要改代码特别麻烦。看到文章里提到可以用functions.php文件批量处理,感觉找到了救星。不过有点担心直接修改主题文件会不会有风险,万一主题更新了修改不就白费了?要是能推荐个靠谱的插件来替代手动修改就更好了。另外我觉得新窗口打开这个功能确实能提升用户体验,但有时候开太多标签页也挺烦人的,可能要根据文章类型来决定要不要用。总体来说这些技巧对网站SEO帮助很大,特别是对于经常要插入外部链接的博主来说,能省下不少时间。

  4. z乙乙

    这篇文章提到的WordPress外链优化方法真的很实用,我之前都是手动给每个外链加nofollow,特别麻烦。看到可以通过修改主题文件或者用插件自动处理,感觉省事多了。不过我觉得新手可能要注意备份文件,万一改错了就麻烦了。 新窗口打开这个功能我倒是一直在用,确实能减少用户流失。但有个小建议,现在很多用户习惯用鼠标中键点链接,强制新窗口打开反而可能影响体验。nofollow这个我觉得要看情况,如果是友情链接或者可信的外部资源,其实没必要都加nofollow。 文章提到的几种方法里,我觉得用插件最方便,特别是对不懂代码的人来说。不过插件装多了会影响网站速度,这个平衡点还是要自己把握。总的来说这些优化技巧都很实在,值得一试。

  5. 科技伙伴4766

    这篇文章讲的东西真的很实用!我之前一直手动给外链加nofollow,每次发文章都要一个个改,特别麻烦。看到作者提到可以用functions.php文件自动处理,感觉打开了新世界的大门。不过对于我这种不太懂代码的小白来说,直接修改主题文件还是有点担心,万一改错了整个网站都可能出问题。建议新手可以先在本地测试或者用子主题来操作,这样更安全。另外我觉得新窗口打开这个功能确实很贴心,读者不会因为点链接就直接跳出我的网站,对降低跳出率应该有帮助。就是有个小疑问,现在移动端用户这么多,新窗口打开会不会影响手机上的浏览体验?希望作者以后能补充这方面的内容。总的来说,这些技巧对WordPress站长来说都是很实用的SEO优化方法,准备今晚就试试看效果!

  6. bneo甲己

    这篇文章真是解决了我的燃眉之急!作为一个WordPress小白,之前每次手动给外链加nofollow和target="_blank"都要折腾半天,特别是文章里外链多的时候简直要疯。作者把这么实用的技巧写得这么清晰,连我这种技术菜鸟都能看懂。 不过看完之后我有个小疑问,这种自动添加的方式会不会误伤到一些需要follow的友链呢?比如我们和合作伙伴的互链,如果也被自动加上nofollow可能就不太合适了。感觉可以在functions.php里加个白名单功能,把特定域名的外链排除在外。 说到SEO优化,我发现很多博主都特别在意nofollow这个属性,但其实现在搜索引擎对nofollow的理解已经和以前不太一样了。Google就说过他们会把nofollow当作提示而不是指令,有时候就算加了nofollow也可能传递一些权重。不过保险起见,给不相关的外链加上nofollow确实还是个好习惯。 最喜欢作者提到的那个自动检测外链的代码,简直不要太方便!以前我都是靠插件来实现这个功能,现在能直接用代码搞定,网站又能少装一个插件,加载速度应该能快那么一丢丢吧。期待作者以后多分享这类既实用又轻量化的技巧,对我们这种追求极致速度的站长来说太有用了。

  7. 智能达人4786

    这篇文章真是及时雨啊!作为一个刚起步的WordPress博主,我最近正好在为外链的问题头疼。之前都是手动一个个加nofollow,不仅麻烦还容易漏掉。看到作者提到的自动处理方法,感觉打开了新世界的大门。 特别喜欢作者把技术问题讲得这么通俗易懂,尤其是解释了nofollow属性的实际作用,让我这个SEO小白也能明白为什么要这么做。不过我在想,现在Google对nofollow的态度好像有些变化,是不是所有外链都适合加这个属性呢?比如一些权威网站的引用链接,可能保留follow反而更好? 新窗口打开这个点也很有共鸣。作为读者,我确实更习惯外链在新标签打开,这样不会打断当前页面的浏览体验。但有时候打开太多标签页也挺烦的,不知道有没有什么折中的办法? 总的来说这篇文章解决了我很多实际问题,准备今晚就照着教程试试看。要是能再聊聊移动端用户体验方面的考虑就更完美了,毕竟现在用手机浏览网站的人越来越多了。期待作者后续能出更多这样的实用教程!

  8. o九b五甲未

    这篇文章挺实用的,正好解决了我在WordPress里处理外链的烦恼。之前每次手动加nofollow和target="_blank"特别麻烦,尤其是文章里外链多的时候,简直要崩溃。不过看完之后有点疑问,直接改functions.php文件会不会有风险?万一改错了整个网站都打不开就惨了。我觉得新手可能更适合用插件来实现,虽然多装个插件会稍微影响速度,但至少安全点。另外文章里提到的nofollow对SEO的影响,我觉得现在谷歌好像没那么看重这个了,不过加了总比没加好,至少能控制下权重分配。希望作者能再讲讲不同场景下的使用建议,比如电商站的导购链接和普通博客的外链处理是不是要有区别。

  9. 未来达人6485

    这篇文章写得很实用啊!作为一个WordPress站长,我确实经常纠结外链处理的问题。之前都是手动加nofollow,文章一多就特别麻烦。看到文章里提到的自动处理方法,感觉一下子打开了新世界的大门。不过我觉得除了技术实现,其实还可以聊聊不同场景下的使用策略。比如有些合作伙伴的外链可能就不适合加nofollow,或者有些内部跳转其实需要保持原窗口打开。我自己就遇到过因为全部自动处理导致一些特殊链接出问题的情况。另外现在移动端用户这么多,新窗口打开有时候反而会影响体验,这点也值得讨论。总的来说文章的方法很干货,要是能再补充一些实际应用中的注意事项就更完美了。期待作者以后能多分享这类既实用又有深度的技巧!

  10. 智慧爱好者3108

    这篇文章讲的东西还挺实用的,尤其是对像我这种不太懂技术的WordPress用户来说。给外链加nofollow和新窗口打开确实很重要,既能防止权重流失,又能让访客不离开自己的网站。不过我觉得文章里提到的修改代码方法可能对新手有点难度,万一改错了容易把网站搞崩。要是能多介绍几个靠谱的插件方案就好了,毕竟很多人还是更喜欢用插件来解决这类问题。我自己之前就试过手动改functions.php,结果不小心多删了个符号,整个网站白屏了,吓得我赶紧恢复备份。所以现在看到这种技术操作都会特别小心,建议新手一定要先备份再尝试。

❯
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
Image