什么是 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 最佳实践。