下面我将为你提供一个详细、分步的教程,包含两种实现方法:手动修改代码法 和 安装现成插件法。

手动修改代码法(最常用、最稳定)
这种方法通过修改核心文件,实现全自动化的关键字链接替换,优点是功能强大、可定制性高;缺点是升级DedeCMS时可能会被覆盖,需要重新修改。
第1步:修改文章生成核心类文件
这个文件是每次生成或更新文章时都会调用的文件,我们在这里添加关键字链接的逻辑。
-
找到文件:
include/arc.archives.class.php -
编辑文件: 用Dreamweaver、Notepad++等代码编辑器打开该文件。
(图片来源网络,侵删) -
添加关键代码: 在文件中找到
function MakeHtml()函数(通常在文件末尾附近),在这个函数里找到处理文章内容的部分,即$this->Fields['body'] = $this->ReplaceLitpic($this->Fields['body']);这一行。在这一行代码的下面,添加如下代码:
// ----------------- 自动关键字链接 Start ----------------- $this->Fields['body'] = $this->ReplaceKeyword($this->Fields['body']); // ----------------- 自动关键字链接 End -----------------
代码解释:
- 我们调用了当前类(
arc.archives.class.php)中的ReplaceKeyword方法。 - 这个方法的作用就是将文章内容
$this->Fields['body']中的关键字替换为带链接的格式。
- 我们调用了当前类(
-
定义
ReplaceKeyword方法: 现在需要在arc.archives.class.php文件中找到class Archives类,并在其内部添加ReplaceKeyword这个自定义方法,把它放在类的末尾,function Close()函数之前是一个好习惯。
(图片来源网络,侵删)在类的末尾添加如下代码:
/** * 文档内容关键字替换 * * @access public * @param string $body 文档内容 * @return string */ function ReplaceKeyword($body) { global $dsql; $keywords = ''; $query = "SELECT keyword, rpurl FROM `#@__keywords` WHERE `rpurl` != '' ORDER BY rank DESC"; $dsql->SetQuery($query); $dsql->Execute(); while ($row = $dsql->GetArray()) { // 过滤掉已在链接中的关键字,避免重复链接 $body = preg_replace("/(<a.*?>)([^>]*?)(" . $row['keyword'] . ")([^>]*?)(<\/a>)/is", '\\1\\2\\4\\5', $body); // 执行关键字替换 $body = str_replace($row['keyword'], "<a href='" . $row['rpurl'] . "' target='_blank' title='" . $row['keyword'] . "'>" . $row['keyword'] . "</a>", $body); $keywords .= ($keywords == '' ? $row['keyword'] : ',' . $row['keyword']); } return $body; }代码解释:
global $dsql;: 引入数据库操作对象。$query = "...": 查询#@__keywords数据表,获取所有设置了“自定义链接(rpurl)”的关键字,并按排名排序。注意:只有后台设置了“链接网址”的关键字才会被替换!while ($row = $dsql->GetArray()): 循环遍历每一个关键字。- *`preg_replace("/(<a.?>)([^>]?)(" . $row['keyword'] . ")([^>]?)(<\/a>)/is", ...)
**: 这是一个非常重要的正则表达式,它的作用是**避免在已有的标签内再次进行替换**,防止出现嵌套` 标签这种错误的HTML结构。 str_replace(...): 核心的替换逻辑,将关键字文本替换为<a>链接标签。return $body;: 返回处理后的文章内容。
第2步:更新或生成文章
完成以上修改后,你需要让系统重新处理文章,才能看到效果。
- 对于新发布的文章:直接发布即可,链接会自动加上。
- 对于已存在的旧文章:
- 进入“内容管理 -> 文章维护”。
- 勾选你需要更新的文章。
- 点击“更新HTML”按钮。
- 系统会重新生成这些文章的HTML页面,此时关键字链接就会被自动添加上去。
安装现成插件法(简单、快速,但可能不兼容新版)
如果你不想修改核心文件,或者担心升级问题,可以尝试使用现成的插件,网上有很多类似的“DedeCMS自动关键字链接”插件。
操作步骤:
- 搜索插件:在DedeCMS相关的论坛、资源网站(如Dede58、织梦吧等)搜索“自动关键字链接”或“关键词自动链接”插件。
- 下载插件:下载插件包,通常包含一个安装说明文件(.txt)和必要的PHP文件。
- 上传安装:按照说明文件,将PHP文件上传到DedeCMS的指定目录(通常是
/include/或/dede/)。 - 执行安装:在后台找到插件对应的安装入口(可能是一个
install.php文件),访问它以完成数据库表的写入或配置的修改。 - 启用功能:在后台的“系统 -> 系统基本参数”或插件管理页面中,找到相关设置项,启用该功能。
- 更新文章:同样,对于旧文章需要执行“更新HTML”操作。
插件法的优缺点:
- 优点:安装简单,不直接修改核心文件,升级DedeCMS时可能不受影响。
- 缺点:插件质量参差不齐,可能与你的DedeCMS版本不兼容,或者存在安全漏洞,功能可能不如手动修改的灵活。
重要注意事项和最佳实践
-
关键字数量控制: 自动链接虽然方便,但滥用会导致用户体验下降(页面满是链接),甚至被搜索引擎认为是“过度优化”而受到惩罚。
- 建议:只在后台设置最核心、最重要的5-10个关键词进行自动链接,其他的可以手动添加。
-
链接的“度”:
- 不要链接文章标题本身就是最重要的锚文本,再在正文中链接一次是多余的。
- 一篇文章内,同一个关键词只链接一次:这可以通过修改
ReplaceKeyword函数中的str_replace为preg_replace并使用limit参数来实现,但默认的str_replace会替换所有匹配项,从SEO角度看,一篇文章内链接一次更自然。
-
重复链接”的补充说明: 方法一中的代码已经通过正则表达式
preg_replace("/(<a.*?>)([^>]*?)(" . $row['keyword'] . ")([^>]*?)(<\/a>)/is", ...)过滤了在已有链接内的关键字,这是非常关键的,能保证HTML代码的规范性。 -
升级备份: 如果你选择手动修改代码,一定要在修改前备份
include/arc.archives.class.php文件,这样在升级DedeCMS后,你可以轻松地恢复修改,而不是重新编写。
| 方法 | 优点 | 缺点 | 推荐人群 |
|---|---|---|---|
| 手动修改代码 | 功能强大、稳定、灵活、可完全控制 | 升级DedeCMS后可能被覆盖,需要重新修改 | 有一定代码基础,追求稳定和功能完善的站长 |
| 安装现成插件 | 安装简单,不修改核心文件 | 插件质量不一,可能不兼容,功能受限 | 不想碰代码,追求快速上手的初学者 |
对于大多数用户来说,方法一(手动修改代码)是更可靠、更长远的选择,只要遵循“少而精”的原则,它能为你的网站带来很好的SEO收益。
