“织梦文章外部链接”这个需求通常有以下几种情况:
- 中添加普通的外部链接:比如引用某个网站、某个产品等。
- 中的链接自动或手动添加
nofollow属性:这是SEO优化的重要手段,用于告诉搜索引擎不要追踪这个链接,避免“链接权重”流失。 - 实现“站内链接”和“外部链接”的不同样式:通过CSS样式,让用户能一眼看出哪些是站内链接,哪些是外部链接,提升用户体验。
- 通过自定义字段实现“相关推荐/跳转”:比如在文章页侧边栏显示一个“购买链接”或“官方链接”的按钮。
下面我将针对这几种情况,提供详细的解决方案。
中添加普通的外部链接
这是最基础的需求,操作非常简单。
方法:直接在编辑器中插入
-
登录织梦后台:进入“核心” -> “内容维护” -> “文档管理列表”。
-
编辑文章:找到你想要编辑的文章,点击“编辑”或“新增文章”。
-
使用编辑器:在文章内容编辑器(如百度编辑器UEditor)中,选中你想要添加链接的文字或图片。
-
插入链接:点击编辑器工具栏上的“超链接”按钮(通常是一个链条图标)。
-
设置链接属性:
- 链接地址:输入完整的外部网址,
https://www.example.com。 - 输入链接的提示文字(鼠标悬停时显示),这也有利于SEO。
- 目标:选择
_blank(在新窗口中打开)或_self(在当前窗口打开),对于外部链接,强烈推荐选择_blank,这样用户不会离开你的网站。
- 链接地址:输入完整的外部网址,
-
确认:点击“确定”,链接就插入成功了。
为外部链接添加 nofollow 属性(SEO优化)
nofollow 是一个HTML标签的属性,它的作用是告诉搜索引擎“不要追踪这个链接,也不要将这个链接的权重传递给目标网站”。
手动添加(适用于少量链接)
在场景一的步骤中,当点击“超链接”按钮后,在弹出的对话框中,除了填写链接地址,还有一个“属性”或“样式”输入框。
- 在输入框中直接输入
nofollow即可。
通过修改编辑器配置,自动添加 nofollow(推荐)
如果你希望所有在后台编辑器中插入的外部链接都自动带上 nofollow 属性,可以通过修改编辑器配置文件来实现,这里以最常用的百度编辑器(UEditor)为例。
操作步骤:
-
找到配置文件:
- 织梦默认使用的是UEditor,配置文件路径通常在
/include/ueditor/目录下。 - 打开
ueditor.config.js文件。
- 织梦默认使用的是UEditor,配置文件路径通常在
-
修改配置:
- 在
ueditor.config.js文件中,找到XSS过滤相关的配置,默认情况下,它可能会过滤掉rel属性,我们需要确保它能保留rel属性。 - 找到类似
// xss 过滤白名单,比如保留属性 rel的注释,并确保rel在白名单中,通常默认是包含的。 - 更关键的一步是,我们可以在UEditor的初始化代码中添加一个自定义的配置项,这个配置项会在插入链接时自动添加
rel="nofollow"。
- 在
-
找到并修改前端模板文件:
- 织梦的文章内容页模板文件通常是
/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程序自动处理。
- 打开
/include/helpers/archive.helper.php文件。 - 找到处理文章内容的函数,通常是
ReplaceSave函数。 - 在该函数中,使用正则表达式来匹配外部链接并添加
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
-
添加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; } -
准备图标: 准备一个向上箭头或外链的图标(
external-link.png),并上传到你的模板图片目录/templets/default/images/下。 -
使用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>
使用自定义字段添加“官方链接”等
这个需求不是在文章正文中,而是在文章页的某个特定位置(如侧边栏、文章底部)显示一个外部链接按钮。
方法:利用自定义字段
-
添加自定义字段:
- 在后台进入“核心” -> “内容模型管理” -> “普通文章” -> “字段管理”。
- 点击“添加新字段”。
- 字段名:填写
official_link(英文字母,不含空格)。 - 字段提示:填写“官方链接” (在后台显示的提示文字)。
- 字段类型:选择“单行文本”。
- 默认值:可以留空。
- 保存。
-
在后台文章中填写链接:
- 编辑或新增一篇文章,你会发现内容编辑区域下方多出了一个“官方链接”的输入框。
- 在这里输入完整的外部网址,
https://www.dedecms.com。
-
在前端模板中调用:
- 打开文章页模板
/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 |
| 特定位置外链 | 自定义字段 | 灵活可控,不污染文章正文 | 需要手动为每篇文章添加字段和填写 |
对于大多数网站,最佳实践组合是:
- 采用后端方法,在
archive.helper.php中自动为所有外部链接添加rel="nofollow"和target="_blank"属性。 - 配合前端JS和CSS,为所有外部链接(包括自动添加的)统一加上一个向外的箭头图标,提升用户体验。
这样既能做好SEO,又能给用户良好的浏览体验。
