迅睿CMS外链SEO优化教程:自动添加 nofollow 与 target="_blank" 属性

在日常更新网站文章时,我们经常需要引用一些外部链接。然而,如果直接添加外链而不做任何处理,会导致网站辛苦积累的 SEO 权重流失;同时,在新窗口打开外链时如果缺少安全属性,还可能面临被钓鱼网站劫持的风险。

对于注重线上品牌建设和流量沉淀的企业官网而言,严格管控外链属性、保护网站自身权重是必不可少的日常 SEO 工作。

本文将详细教大家如何在 迅睿CMS (Xunrui CMS) 中,通过一段简短的代码,实现全自动为非本站链接添加 target="_blank" 以及 rel="nofollow noopener noreferrer" 属性。该方案同时有效解决了迅睿 CMS 在“批量生成静态 HTML”时容易出现的找不到函数报错问题。

为什么需要给外链添加这些属性?

在动手写代码之前,我们需要了解这些属性对 Google 和 Bing SEO 的重要性:

  • nofollow:明确告诉搜索引擎爬虫“不要追踪此链接,也不要传递本站的权重(Link Juice)给对方”。

  • target="_blank":强制链接在新标签页打开,有助于降低网站的跳出率(Bounce Rate)。

  • noopener:安全防御机制。切断新窗口与原窗口的联系,防止目标网站通过 window.opener 恶意篡改你的网页。

  • noreferrer:隐私保护。阻止浏览器向目标网站发送 Referer 来源信息。

核心实现步骤(PHP自定义函数方案)

相比于使用 JavaScript 在前端动态添加,采用 PHP 在后端渲染或生成静态 HTML 时直接写入源码,是更符合搜索引擎抓取规范的 SEO 做法。

第一步:在配置文件中添加过滤函数

打开迅睿 CMS 的网站根目录,找到并编辑 config/custom.php 文件。在文件的最末尾(确保在 <?php 标签生效的范围内),添加以下代码:

// 自动给非本站的外链添加 target="_blank" 和 rel="nofollow noopener noreferrer"
if (!function_exists('dr_auto_external_link')) {
    function dr_auto_external_link($content) {
        // 【注意】请将下面的域名修改为你自己的核心域名(不要带 http:// 或 www)
        $my_domain = '你的域名.com'; 

        if (empty($content)) return $content;

        // 使用正则表达式精准匹配文章内容中的 <a> 标签
        return preg_replace_callback(
            '/<a(.*?)href=["\'](.*?)["\'](.*?)>/i',
            function($matches) use ($my_domain) {
                $before_href = $matches[1];
                $href = $matches[2];
                $after_href = $matches[3];

                // 判断逻辑:以 http/https 开头,且不包含你的核心域名,即判定为外链
                if (preg_match('/^https?:\/\//i', $href) && strpos($href, $my_domain) === false) {
                    // 核心逻辑:先清除历史遗留的 target 和 rel 属性,防止代码重复或语法冲突
                    $before_href = preg_replace('/\s*(target|rel)=["\'][^"\']*["\']/i', '', $before_href);
                    $after_href = preg_replace('/\s*(target|rel)=["\'][^"\']*["\']/i', '', $after_href);
                    
                    // 重新拼接标准化的 <a> 标签
                    return '<a' . $before_href . ' href="' . $href . '" target="_blank" rel="nofollow noopener noreferrer"' . $after_href . '>';
                }
                
                // 如果是本站内链,保持原样输出
                return $matches[0];
            },
            $content
        );
    }
}

custom

第二步:在内容模板中调用并修复静态生成 Bug

很多站长在调用自定义函数后,去后台点击“生成静态HTML”时,会遇到 Call to undefined function 的错误。这是因为迅睿 CMS 在后台离线生成静态页面的 iframe 队列任务中,为了节省内存,跳过了 config/custom.php 的加载。

有效解决方案如下:打开你的文章详情页模板(通常位于 template/pc/你的模板目录/home/show.html,如果是新闻模块则在 news/home/show.html)。

找到输出文章正文的变量(一般是 {$content}),将其替换为以下代码:

{php if (!function_exists('dr_auto_external_link')) require_once 'config/custom.php';}

{dr_auto_external_link($content)}

第三步:更新缓存并生成静态页面

  1. 登录迅睿 CMS 网站后台。

  2. 点击右上角的 “更新缓存”(这一步很重要,必须让系统重新识别新增的函数配置)。

  3. 缓存更新完毕后,进入 生成 -> 生成内容静态,重新生成全站文章。

总结

通过上述三步,我们实现了全站外链权重的自动化管控,减轻了编辑人员发布文章时的繁琐工作量,同时解决了静态化生成的系统错误问题。现在,网页源码里的所有外部链接都已经具备了可靠的安全与 SEO 属性。