在使用 WordPress 进行内容创作的过程中,很多站长都会遇到一个共同的问题:外链过多。无论是从 SEO 优化角度,还是网站安全、流量引导的角度来看,大量的**外部链接(外链)**都可能对你的网站产生负面影响。
那么,有没有办法在发布文章时自动清除外链,只保留内链或纯文本链接呢?本文将带你一步步实现这一功能,并分析其中的利与弊。
为什么要自动清除外链?
✅ 优化 SEO
搜索引擎会评估一个网站向外链接的数量和质量。太多无关或低质量的外链,可能被搜索引擎误判为“链接农场”,从而影响排名。
✅ 提高用户停留时间
外链容易将访问者引导到其他网站,降低了用户在你站内的浏览时间。
✅ 增强内容控制
有些作者或编辑可能无意中插入广告链接、联盟链接或含有追踪参数的外链,对网站品牌形象不利。
实现方法:自动删除外链的 WordPress 代码
以下代码将自动在文章发布或更新时,过滤掉内容中的所有外链(即非本站域名的链接),保留纯文本。
add_filter('wp_insert_post_data', 'remove_external_links_on_publish', 99, 2);
function remove_external_links_on_publish($data, $postarr) {
if ($data['post_status'] !== 'publish' || $postarr['post_type'] !== 'post') {
return $data;
}
$site_url = home_url();
$site_host = parse_url($site_url, PHP_URL_HOST);
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $data['post_content']);
$links = $dom->getElementsByTagName('a');
$to_remove = [];
foreach ($links as $link) {
$href = $link->getAttribute('href');
$link_host = parse_url($href, PHP_URL_HOST);
if ($link_host && stripos($link_host, $site_host) === false) {
$to_remove[] = $link;
}
}
foreach ($to_remove as $link) {
$text = $dom->createTextNode($link->nodeValue);
$link->parentNode->replaceChild($text, $link);
}
$body = $dom->saveHTML();
$body = preg_replace('/^<!DOCTYPE.+?>/', '', $body);
$body = str_replace(['<html>', '</html>', '<body>', '</body>'], '', $body);
$data['post_content'] = trim($body);
return $data;
}
注意事项与风险提示
- 如果你依赖联盟营销或内容合作方的外链,请不要启用此功能,或者确保使用白名单。
- 本功能无法处理使用短代码或 JavaScript 生成的链接,需要额外处理。
- 发布之前请做好文章备份,防止误删有价值的链接。
结语
自动删除 WordPress 文章中的外链,既可以提升 SEO 表现,又能增强网站的控制力。通过以上的代码和技巧,你可以轻松实现这一目标。如果你追求内容的纯净性和权威性,这无疑是一个非常实用的优化手段。
本文由 好主题 原创整理,致力于分享实用的 WordPress 建站知识与主题开发经验。 我们专注于提供高质量的 WordPress企业主题 资源,帮助中小企业轻松构建专业网站。 转载请注明来源,并保留原文链接,感谢您的支持与理解。