博客 / WordPress/ WordPress怎么给文章外链添加nofollow

WordPress怎么给文章外链添加nofollow

WordPress怎么给文章外链添加nofollow

什么是 nofollow?

nofollow 是 HTML 链接标签(<a>)的一个属性值,用于控制搜索引擎对链接的处理方式。

nofollow 的作用

rel="nofollow" 属性的主要作用是告知搜索引擎:不要追踪此链接,或者不要通过此链接传递权重(PageRank)。这意味着该链接不会被视为对目标网站的“投票”,有助于防止垃圾链接影响搜索引擎排名。

对于 WordPress 网站优化而言,为文章中的外部链接添加 nofollow 属性是一个良好的实践。它可以防止将您网站的权重“泄露”到不受您控制的外部网站,同时也能在一定程度上规避与低质量网站的关联风险。

nofollow 代码示例

一个标准的带有 nofollow 属性的链接代码如下:

<a href="https://example.com/" rel="nofollow">示例链接</a>

如何在 WordPress 中自动为文章外链添加 nofollow

您可以通过在主题的 functions.php 文件中添加代码,来自动为文章内容中的所有外部链接添加 nofollow 属性。

方法一:基础实现

将以下代码添加到当前主题的 functions.php 文件末尾:

/**
 * 自动为文章内容中的外部链接添加 rel="nofollow" 属性
 */
function wpdocs_add_nofollow_to_external_links($content) {
    // 使用正则表达式匹配所有链接
    $pattern = '/<a(.*?)href="(.*?)"(.*?)>/i';
    // 替换回调函数
    $replacement = function($matches) {
        $link = $matches[0];
        $url = $matches[2];
        // 获取网站主域名,用于判断是否为内部链接
        $site_url = site_url();
        $parsed_site_url = parse_url($site_url);
        $site_host = isset($parsed_site_url['host']) ? $parsed_site_url['host'] : '';
        $parsed_url = parse_url($url);
        $url_host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
        // 如果是外部链接且尚未包含 nofollow,则添加
        if (!empty($url_host) && $url_host !== $site_host && stripos($link, 'rel="nofollow"') === false) {
            // 如果已有 rel 属性,则追加 nofollow
            if (stripos($link, 'rel="') !== false) {
                $link = str_ireplace('rel="', 'rel="nofollow ', $link);
            } else {
                // 如果没有 rel 属性,则添加
                $link = str_replace('<a', '<a rel="nofollow"', $link);
            }
        }
        return $link;
    };
    return preg_replace_callback($pattern, $replacement, $content);
}
add_filter('the_content', 'wpdocs_add_nofollow_to_external_links');

方法二:更健壮的版本(推荐)

以下代码功能更完善,能更好地处理各种边界情况:

/**
 * 自动为文章内容中的外部链接添加 rel="nofollow" 属性(增强版)
 * @param string $content 文章内容
 * @return string 处理后的内容
 */
function wpdocs_auto_nofollow_external_links($content) {
    // 获取当前网站的域名
    $internal_host = parse_url(home_url(), PHP_URL_HOST);
    // 使用 DOMDocument 进行更精确的解析和修改
    if (!empty($content) && class_exists('DOMDocument')) {
        $dom = new DOMDocument();
        @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
        $links = $dom->getElementsByTagName('a');
        foreach ($links as $link) {
            $href = $link->getAttribute('href');
            if (!empty($href)) {
                $parsed_href = parse_url($href);
                // 判断是否为外部链接
                if (isset($parsed_href['host']) && $parsed_href['host'] !== $internal_host) {
                    $rel = $link->getAttribute('rel');
                    // 如果 rel 属性中还没有 nofollow,则添加
                    if (stripos($rel, 'nofollow') === false) {
                        $link->setAttribute('rel', trim($rel . ' nofollow'));
                    }
                }
            }
        }
        // 保存修改后的 HTML
        $content = $dom->saveHTML();
    }
    return $content;
}
add_filter('the_content', 'wpdocs_auto_nofollow_external_links', 999);

使用说明与注意事项

  • 添加位置:请将上述任一代码片段添加到您当前使用主题的 functions.php 文件末尾。
  • 功能生效:代码添加并保存后,新发布或更新的文章内容中的外部链接将自动获得 rel="nofollow" 属性,内部链接不受影响。
  • 代码安全:建议使用方法二的 DOMDocument 版本,它对 HTML 结构的处理更安全、准确。
  • 插件替代:如果您不熟悉代码操作,也可以考虑安装专门的 SEO 插件(如 Yoast SEO、Rank Math),它们通常也提供为外部链接添加 nofollow 的功能。
  • 测试:添加代码后,请发布一篇包含外部链接的文章,并查看页面源代码,确认 rel="nofollow" 属性已正确添加。

通过以上方法,您可以有效地管理 WordPress 文章中外链的权重传递,符合 SEO 最佳实践。

发表评论

您的邮箱不会公开。必填项已用 * 标注。