一、为什么要给文章中的链接添加 class=”external”?
在WordPress网站中,文章内的超链接默认是没有附加 class 属性的,而很多主题或SEO策略会要求对外链进行统一标识,例如添加 class="external",以便进行样式控制、统计分析或SEO优化。
常见作用包括:
- 区分站内链接与外部链接
- 统一外链样式(如图标、颜色)
- 配合JS或CSS做点击统计
- 提升SEO结构清晰度
二、问题场景说明
例如你手动写的链接:
<a title="360Spider详细介绍" href="https://www.46.la/360spider">360Spider详解</a>
而主题自动生成的链接却是:
<a class="external" href="https://www.46.la/tool/spider-simulator" target="_blank" rel="noopener">网站抓取</a>
这就导致:
- 手动链接和自动链接不统一
- 样式不一致
- SEO策略失效
三、最推荐方案:使用PHP自动添加class
通过WordPress的 the_content 过滤器,我们可以在文章输出时自动处理所有 <a> 标签。
1. 所有链接统一添加 class=”external”
add_filter('the_content', 'add_external_class_to_links');
function add_external_class_to_links($content) {
return preg_replace_callback('/<a\b[^>]*>/i', function($matches) {
$link = $matches[0];
// 如果已经有 class,就不重复加
if (strpos($link, 'class=') === false) {
$link = str_replace('<a', '<a class="external"', $link);
}
return $link;
}, $content);
}
该方法会让所有文章中的链接自动变成:
<a class="external" href="xxx">xxx</a>
四、进阶方案:仅对外链添加 class(推荐)
更专业的做法是只对“外部链接”添加 class,而保留站内链接不变。
add_filter('the_content', 'add_external_class_to_links');
function add_external_class_to_links($content) {
return preg_replace_callback('/<a\b[^>]*href=["\']([^"\']+)["\'][^>]*>/i', function($matches) {
$link = $matches[0];
$url = $matches[1];
// 判断是否为本站链接
if (strpos($url, '46.la') === false) {
if (strpos($link, 'class=') === false) {
$link = str_replace('<a', '<a class="external"', $link);
}
}
return $link;
}, $content);
}
效果如下:
- 站内链接:保持原样
- 外链:自动添加 class=”external”
五、SEO强化:自动添加 nofollow + target
为了进一步优化SEO和安全性,可以为外链自动添加:
- target=”_blank”(新窗口打开)
- rel=”nofollow noopener”(防止权重流失 + 安全优化)
add_filter('the_content', 'optimize_external_links');
function optimize_external_links($content) {
return preg_replace_callback('/<a\b[^>]*href=["\']([^"\']+)["\'][^>]*>/i', function($matches) {
$link = $matches[0];
$url = $matches[1];
if (strpos($url, '46.la') === false) {
if (strpos($link, 'class=') === false) {
$link = str_replace('<a', '<a class="external"', $link);
}
if (strpos($link, 'target=') === false) {
$link = str_replace('<a', '<a target="_blank"', $link);
}
if (strpos($link, 'rel=') === false) {
$link = str_replace('<a', '<a rel="nofollow noopener"', $link);
}
}
return $link;
}, $content);
}
六、完整代码示例(外链自动添加nofollow与class)
下面提供最终优化版本代码,可实现以下功能:
- 自动为所有链接添加 class=”external”
- 自动识别外链(非本站域名)
- 仅对外链添加 rel=”nofollow noopener”
- 支持子域名识别(如 img.46.la、js.46.la 不视为外链)
- 避免重复添加 class 和 rel 属性
add_filter('the_content', 'add_external_class_to_links');
function add_external_class_to_links($content) {
$site_domain = '46.la';
return preg_replace_callback('/<a\b[^>]*href=["\']([^"\']+)["\'][^>]*>/i', function($matches) use ($site_domain) {
$link = $matches[0];
$url = $matches[1];
// 所有 a 标签都加 class="external",如果已有 class 就追加 external
if (preg_match('/class=["\']([^"\']*)["\']/i', $link, $class_match)) {
if (stripos($class_match[1], 'external') === false) {
$new_class = trim($class_match[1] . ' external');
$link = preg_replace('/class=["\'][^"\']*["\']/i', 'class="' . $new_class . '"', $link, 1);
}
} else {
$link = str_replace('<a', '<a class="external"', $link);
}
// 忽略空链接、锚点、电话、邮箱、js
if (
strpos($url, '#') === 0 ||
stripos($url, 'mailto:') === 0 ||
stripos($url, 'tel:') === 0 ||
stripos($url, 'javascript:') === 0
) {
return $link;
}
// 相对链接属于本站,不加 nofollow noopener
if (strpos($url, '/') === 0 && strpos($url, '//') !== 0) {
return $link;
}
$host = parse_url($url, PHP_URL_HOST);
if (!$host) {
return $link;
}
$host = strtolower($host);
$host = preg_replace('/^www\./', '', $host);
// 判断是否为本站或本站子域名
// 例如:46.la、www.46.la、img.46.la、js.46.la 都不加 nofollow
$is_own_site = ($host === $site_domain || substr($host, -strlen('.' . $site_domain)) === '.' . $site_domain);
// 只有外链才添加 rel="nofollow noopener"
if (!$is_own_site) {
if (preg_match('/rel=["\']([^"\']*)["\']/i', $link, $rel_match)) {
$rel_values = preg_split('/\s+/', strtolower(trim($rel_match[1])));
$rel_values = array_filter(array_unique(array_merge($rel_values, ['nofollow', 'noopener'])));
$new_rel = implode(' ', $rel_values);
$link = preg_replace('/rel=["\'][^"\']*["\']/i', 'rel="' . esc_attr($new_rel) . '"', $link, 1);
} else {
$link = str_replace('<a', '<a rel="nofollow noopener"', $link);
}
}
return $link;
}, $content);
}
七、常见问题说明
1. 会不会影响收录?
不会,反而有助于SEO结构优化。
2. 会不会影响内链权重?
只对外链加 nofollow,不影响站内权重传递。
3. JS方式可以吗?
不推荐,搜索引擎可能不会执行JS,影响SEO效果。
八、总结
在WordPress中,统一管理文章中的超链接是非常重要的SEO优化手段。相比手动添加 class,使用PHP自动处理更加高效、稳定。
- 基础方案:统一添加 class
- 进阶方案:仅外链添加
- 终极方案:class + nofollow + target 自动化
建议根据网站类型选择合适策略,对于工具站或SEO流量站,推荐使用“仅外链优化方案”。
© 原创声明:本文由 四六啦工具 于 2 小时 前发表在 代码笔记 分类目录中,最后更新于2026年4月27日,转载请注明本文永久链接:https://www.46.la/wordpress-wailian-zidongtianjia
相关文章
本文暂时没有评论,来添加一个吧(●'◡'●)
