织梦文章外部链接如何优化?

99ANYc3cd6
预计阅读时长 25 分钟
位置: 首页 织梦建站 正文

“织梦文章外部链接”这个需求通常有以下几种情况:

  1. 中添加普通的外部链接:比如引用某个网站、某个产品等。
  2. 中的链接自动或手动添加 nofollow 属性:这是SEO优化的重要手段,用于告诉搜索引擎不要追踪这个链接,避免“链接权重”流失。
  3. 实现“站内链接”和“外部链接”的不同样式:通过CSS样式,让用户能一眼看出哪些是站内链接,哪些是外部链接,提升用户体验。
  4. 通过自定义字段实现“相关推荐/跳转”:比如在文章页侧边栏显示一个“购买链接”或“官方链接”的按钮。

下面我将针对这几种情况,提供详细的解决方案。


中添加普通的外部链接

这是最基础的需求,操作非常简单。

方法:直接在编辑器中插入

  1. 登录织梦后台:进入“核心” -> “内容维护” -> “文档管理列表”。

  2. 编辑文章:找到你想要编辑的文章,点击“编辑”或“新增文章”。

  3. 使用编辑器:在文章内容编辑器(如百度编辑器UEditor)中,选中你想要添加链接的文字或图片。

  4. 插入链接:点击编辑器工具栏上的“超链接”按钮(通常是一个链条图标)。

  5. 设置链接属性

    • 链接地址:输入完整的外部网址,https://www.example.com
    • 输入链接的提示文字(鼠标悬停时显示),这也有利于SEO。
    • 目标:选择 _blank(在新窗口中打开)或 _self(在当前窗口打开),对于外部链接,强烈推荐选择 _blank,这样用户不会离开你的网站。
  6. 确认:点击“确定”,链接就插入成功了。


为外部链接添加 nofollow 属性(SEO优化)

nofollow 是一个HTML标签的属性,它的作用是告诉搜索引擎“不要追踪这个链接,也不要将这个链接的权重传递给目标网站”。

手动添加(适用于少量链接)

在场景一的步骤中,当点击“超链接”按钮后,在弹出的对话框中,除了填写链接地址,还有一个“属性”或“样式”输入框。

  • 在输入框中直接输入 nofollow 即可。

通过修改编辑器配置,自动添加 nofollow(推荐)

如果你希望所有在后台编辑器中插入的外部链接都自动带上 nofollow 属性,可以通过修改编辑器配置文件来实现,这里以最常用的百度编辑器(UEditor)为例。

操作步骤:

  1. 找到配置文件

    • 织梦默认使用的是UEditor,配置文件路径通常在 /include/ueditor/ 目录下。
    • 打开 ueditor.config.js 文件。
  2. 修改配置

    • ueditor.config.js 文件中,找到 XSS 过滤相关的配置,默认情况下,它可能会过滤掉 rel 属性,我们需要确保它能保留 rel 属性。
    • 找到类似 // xss 过滤白名单,比如保留属性 rel 的注释,并确保 rel 在白名单中,通常默认是包含的。
    • 更关键的一步是,我们可以在UEditor的初始化代码中添加一个自定义的配置项,这个配置项会在插入链接时自动添加 rel="nofollow"
  3. 找到并修改前端模板文件

    • 织梦的文章内容页模板文件通常是 /templets/default/article_article.htm
    • 在该文件中,找到加载UEditor的JS代码部分,通常在 <head> 标签内或文章编辑器初始化的地方。
    • 在初始化UEditor的JS对象中,添加一个配置项。

    修改前(示例):

    var editor = new UE.ui.Editor();
    editor.render("myEditor"); // 实例化编辑器

    修改后(示例):

    var editor = new UE.ui.Editor({
        // 在这里添加自定义配置
        'enterTag': 'p', // 回车标签
        'initialFrameHeight': 300, // 编辑器高度
        // 添加这个自定义的link插件配置,在插入链接时自动添加nofollow
        'autotypeset': {
            'mergeEmptyline': true,
            'removeClass': true,
            'textAlign': 'left',
            'imageBlockLine': 'center',
            'pasteFilter': false,
            'clearFontSize': false,
            'clearFontFamily': false,
            'removeEmptyNode': false,
            'indent': false,
            'insertBr': false,
        },
        // 在link插件中添加自定义处理
        'link': {
            // 可以在这里添加自定义逻辑,但更简单的方法是监听事件
            onwordpaste: function () {
                // 这个钩子可能不直接适用,更推荐使用下面的方法
            }
        }
    });
    editor.render("myEditor");
    // 更可靠的方法是监听编辑器内容就绪事件,然后遍历所有a标签
    editor.ready(function () {
        // 注意:这个方法会在每次内容改变时都执行,可能会影响性能
        // 所以更推荐的是在保存文章时,由后端程序处理
        // 但前端可以这样提供一个保障
        editor.addListener('contentChange', function () {
            // 这里可以写代码去处理a标签,但不如后端处理稳定
        });
    });

    【更推荐的后端处理方法】 前端修改相对复杂且可能被覆盖,最稳定、最推荐的方法是在文章保存到数据库时,由PHP程序自动处理。

    1. 打开 /include/helpers/archive.helper.php 文件。
    2. 找到处理文章内容的函数,通常是 ReplaceSave 函数。
    3. 在该函数中,使用正则表达式来匹配外部链接并添加 nofollow

    示例代码(在 archive.helper.php 中修改):

    // 找到类似 $body = ... 的代码段,在它之后添加
    if (isset($body))
    {
        // 匹配外部链接的URL模式(简单示例,可根据需要完善)
        $pattern = '/<a\s+[^>]*href=("|\')(https?:\/\/[^"\']*)\1[^>]*>/i';
        // 替换函数,为匹配到的链接添加 rel="nofollow"
        $replacement = function($matches) {
            // 如果已经有rel属性,则在后面追加,否则新增
            if (strpos($matches[0], 'rel=') !== false) {
                return preg_replace('/(rel=["\'][^"\']*)("|\')/i', '$1 nofollow$2', $matches[0]);
            } else {
                return str_replace('<a ', '<a rel="nofollow" ', $matches[0]);
            }
        };
        // 执行替换
        $body = preg_replace_callback($pattern, $replacement, $body);
    }

    注意:直接修改核心文件在织梦升级时可能会被覆盖,建议在修改前备份文件,或者考虑开发一个自定义插件来实现这个功能。


区分站内和外部链接的CSS样式

为了让用户更容易识别,我们可以给外部链接添加一个特殊的图标或样式(比如在链接后面加上一个向上的箭头图标)。

方法:使用CSS和JavaScript

  1. 添加CSS样式: 在你的模板CSS文件中(通常是 /templets/default/style/ 目录下的 .css 文件),添加如下样式:

    /* 外部链接样式 */
    a.external {
        /* 可以添加一个背景小图标 */
        background: url(../images/external-link.png) no-repeat right center;
        padding-right: 15px; /* 给图标留出空间 */
    }
    /* 新窗口打开的链接样式 */
    a[target="_blank"] {
        /* 或者统一给所有新窗口链接加图标 */
        background: url(../images/external-link.png) no-repeat right center;
        padding-right: 15px;
    }
  2. 准备图标: 准备一个向上箭头或外链的图标(external-link.png),并上传到你的模板图片目录 /templets/default/images/ 下。

  3. 使用JavaScript自动添加类名: 在文章页模板 article_article.htm 的底部,</body> 标签之前,添加以下JavaScript代码,这段代码会自动扫描文章内容里的所有链接,判断是否为站外链接,如果是,就给它们加上 external 类名。

    <script type="text/javascript">
    // 确保DOM加载完成后再执行
    document.addEventListener('DOMContentLoaded', function() {
        // 获取文章内容区域
        var articleContent = document.getElementById('arcBody'); // 织梦文章内容区的ID通常是 arcBody
        if (!articleContent) return;
        // 获取当前网站域名
        var currentDomain = window.location.hostname;
        // 获取内容区所有的a标签
        var links = articleContent.getElementsByTagName('a');
        for (var i = 0; i < links.length; i++) {
            var link = links[i];
            var href = link.getAttribute('href');
            // 检查链接是否是站外链接
            if (href && href.indexOf('://') > -1 && href.indexOf(currentDomain) === -1) {
                // 给外部链接添加一个类名
                link.classList.add('external');
            }
        }
    });
    </script>

使用自定义字段添加“官方链接”等

这个需求不是在文章正文中,而是在文章页的某个特定位置(如侧边栏、文章底部)显示一个外部链接按钮。

方法:利用自定义字段

  1. 添加自定义字段

    • 在后台进入“核心” -> “内容模型管理” -> “普通文章” -> “字段管理”。
    • 点击“添加新字段”。
    • 字段名:填写 official_link (英文字母,不含空格)。
    • 字段提示:填写“官方链接” (在后台显示的提示文字)。
    • 字段类型:选择“单行文本”。
    • 默认值:可以留空。
    • 保存
  2. 在后台文章中填写链接

    • 编辑或新增一篇文章,你会发现内容编辑区域下方多出了一个“官方链接”的输入框。
    • 在这里输入完整的外部网址,https://www.dedecms.com
  3. 在前端模板中调用

    • 打开文章页模板 /templets/default/article_article.htm
    • 在你希望显示这个链接的位置(例如文章底部),添加以下代码:
      {dede:field name='official_link' runphp='yes'}
      if (@me != '') {
          @me = '<a href="' . @me . '" target="_blank" rel="nofollow" class="official-link-btn">访问官方网站</a>';
      } else {
          @me = ''; // 如果没有填写,则不显示任何内容
      }
      {/dede:field}
    • 代码解释
      • {dede:field name='official_link'}:调用名为 official_link 的自定义字段。
      • runphp='yes':允许在标签内使用PHP代码。
      • if (@me != ''):判断字段值是否为空。
      • @me = '...':如果值不为空,就将 @me 变量(即最终输出的内容)设置为一个完整的 <a>
      • target="_blank":新窗口打开。
      • rel="nofollow":SEO优化。
      • class="official-link-btn":方便你用CSS对这个按钮进行样式美化。

总结与最佳实践

需求场景 推荐方法 优点 缺点
手动添加外链 编辑器直接插入 简单直观,无需技术 每次都要手动操作
批量添加nofollow 后端修改 archive.helper.php 一劳永逸,稳定可靠,所有文章生效 需要修改核心文件,升级可能覆盖
区分内外链样式 前端JS + CSS 用户体验好,视觉清晰 需要额外准备图标和编写JS/CSS
特定位置外链 自定义字段 灵活可控,不污染文章正文 需要手动为每篇文章添加字段和填写

对于大多数网站,最佳实践组合是

  1. 采用后端方法,在 archive.helper.php 中自动为所有外部链接添加 rel="nofollow"target="_blank" 属性。
  2. 配合前端JS和CSS,为所有外部链接(包括自动添加的)统一加上一个向外的箭头图标,提升用户体验。

这样既能做好SEO,又能给用户良好的浏览体验。

-- 展开阅读全文 --
头像
dede如何获取当前登录用户名?
« 上一篇 昨天
ccs C语言FFT如何高效实现?
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码