使用 DedeCMS 自带的“关键词替换”功能 (最简单)
这是系统内置的功能,无需修改代码,适合新手和只需要简单替换的场景。

(图片来源网络,侵删)
优点:
- 无需编程,纯后台操作。
- 操作简单直观。
缺点:
- 功能有限,只能替换文章内容,不能替换摘要等。
- 无法精确控制链接样式和目标。
- 每次添加新关键词都需要手动在后台配置。
操作步骤:
- 登录后台:进入你的 DedeCMS 后台管理。
- 进入系统设置:在左侧菜单中找到
系统->系统基本参数。 - 开启关键词替换:
- 在
系统基本参数页面,切换到核心设置标签页。 - 找到
关键字替换(或类似名称,如启用关键字替换) 的选项,将其值设置为是。 - 重要:找到
关键字链接的选项,在这里输入你想要链接到的目标页面 URL,通常这里是一个频道页或列表页的地址,/plus/search.php?keyword=,这样,当关键词被替换时,系统会自动拼接成/plus/search.php?keyword=你的关键词。
- 在
- 添加关键词:
- 在后台,进入
核心->关键字管理。 - 点击
增加关键字,输入你的关键词,然后点击保存。 - 你可以在这里为不同的关键词设置不同的权重和链接(如果高级设置支持)。
- 在后台,进入
完成! 之后,你发布或更新文章时,系统会自动将文章内容中与后台关键词匹配的文字,替换成带有链接的格式。

(图片来源网络,侵删)
修改 article_article.htm 模板文件 (推荐,最常用)
这种方法通过修改文章内容页的模板文件,实现自动添加链接,它比方法一更灵活,可以控制链接的样式(如 rel="nofollow"),并且链接是动态生成的,无需在后台维护。
核心原理:
利用 DedeCMS 的 str_replace 函数,在文章内容输出到页面的最后一刻,将关键词替换为带链接的格式。
操作步骤:
-
找到模板文件:
(图片来源网络,侵删)- 通过 FTP 或你的主机文件管理器,进入 DedeCMS 的
/templets/目录。 - 找到你当前使用的文章内容页模板文件,通常是
default/article_article.htm,如果你修改过模板,请找到你自己的对应文件。
- 通过 FTP 或你的主机文件管理器,进入 DedeCMS 的
-
修改模板文件:
- 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
article_article.htm文件。 - 找到文章内容输出的代码,它通常是这样的:
{dede:field.body/} - 在这行代码的下面,添加以下 PHP 代码块:
{dede:php} // 获取文章内容 $body = $this->Fields['body']; // 获取文章关键词 $keywords = $this->Fields['keywords']; // 如果关键词存在 if($keywords){ // 将关键词数组化 $keyword_array = explode(',', $keywords); // 遍历关键词数组 foreach($keyword_array as $keyword){ // 如果关键词不为空 if($keyword){ // 定义链接URL,这里使用站内搜索,你也可以换成其他URL,如 '/tags.php?/'.$keyword.'/' $link_url = '/plus/search.php?keyword='.urlencode($keyword); // 定义链接样式,rel="nofollow" 告诉搜索引擎不要传递权重 $link_tag = '<a href="'.$link_url.'" target="_blank" rel="nofollow">'.$keyword.'</a>'; // 在文章内容中替换关键词 // @me 是模板中一个特殊变量,代表当前字段的值 $body = str_replace($keyword, $link_tag, $body); } } } // 将处理后的内容重新赋值给 body 字段 @me = $body; {/dede:php} - 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开
-
保存并更新:
- 保存修改后的
article_article.htm文件。 - 登录 DedeCMS 后台,进入
生成->更新HTML,选择所有栏目或重新生成你修改过的文章页面。
- 保存修改后的
代码解释:
{dede:php}...{/dede:php}:允许在模板中直接执行 PHP 代码。$this->Fields['body']和$this->Fields['keywords']:分别获取当前文章的body)和keywords(关键词)字段。explode(',', $keywords):将用逗号分隔的关键词字符串转换成一个数组。urlencode($keyword):对关键词进行 URL 编码,确保中文等特殊字符在 URL 中能正确显示。str_replace():核心函数,用于在文章内容中查找并替换关键词。@me = $body:将处理后的最终内容赋值给@me变量,@me代表当前标签的输出值,这里就是{dede:field.body/}的输出。
修改 include/arc.archives.class.php 文件 (最灵活,影响全局)
这种方法通过修改 DedeCMS 的核心类文件,让系统在调用文章内容时就自动完成关键词替换,这样做的好处是,不仅文章页,其他调用文章内容的地方(如首页、列表页摘要)也会自动加上链接。
⚠️ 警告:
- 这是修改核心文件,在 DedeCMS 升级时,这些修改会被覆盖,需要重新操作。
- 操作前务必备份原文件!
操作步骤:
-
备份文件:非常重要!先备份
/include/arc.archives.class.php文件。 -
找到并修改函数:
- 用代码编辑器打开
/include/arc.archives.class.php文件。 - 按快捷键
Ctrl + F搜索GetMKUrl函数,这个函数就是处理关键词链接的核心。 - 找到类似这样的代码段(不同版本 DedeCMS 可能略有差异):
// 在函数内部找到下面这几行 if($this->Fields['keywords']) { $kws = explode(' ', $this->Fields['keywords']); $kws = array_slice($kws,0,5); foreach($kws as $k) { $this->Fields['body'] = str_replace($k, "<a href='".$this->GetMKUrl($k)."'>".$k."</a>", $this->Fields['body']); } }
- 用代码编辑器打开
-
优化代码:上面的默认代码比较简单,我们可以把它修改得更健壮、更灵活,与方法二的逻辑类似。
- 将上述代码块替换为以下优化后的代码:
// 在 if($this->Fields['keywords']) 内部替换为如下代码 if($this->Fields['keywords']) { // 使用逗号作为分隔符,更符合DedeCMS的关键词输入习惯 $kws = explode(',', $this->Fields['keywords']); // 去除数组中的空值 $kws = array_filter($kws); // 遍历关键词数组 foreach($kws as $k) { // 去除关键词前后的空格 $k = trim($k); // 如果关键词不为空 if($k) { // 定义链接URL,这里使用站内搜索 $link_url = '/plus/search.php?keyword='.urlencode($k); // 定义链接标签,可以自定义样式 $link_tag = "<a href='".$link_url."' target='_blank' rel='nofollow'>".$k."</a>"; // 在文章内容中替换关键词 // 注意:这里替换的是全词,避免部分匹配,可以使用 preg_replace 加上 \b 边界符更精确 // $this->Fields['body'] = preg_replace('/\b'.preg_quote($k, '/').'\b/i', $link_tag, $this->Fields['body']); // 为了简单和兼容性,先用 str_replace $this->Fields['body'] = str_replace($k, $link_tag, $this->Fields['body']); } } } -
保存文件:保存修改后的
arc.archives.class.php文件。 -
更新缓存:登录后台,进入
系统->一键更新网站,更新所有文档即可。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 后台设置 | 简单、无代码、安全 | 功能弱、需手动维护、不灵活 | 简单的个人博客,对SEO要求不高。 |
| 修改模板 | 灵活、安全(不改核心)、可控性强 | 只影响文章内容页 | 强烈推荐! 99% 的用户需求都适用。 |
| 修改核心 | 影响全局、一劳永逸 | 升级会覆盖、有风险、需备份 | 需要在所有页面(如摘要)都加链接的资深用户。 |
对于绝大多数用户来说,方法二 是最佳选择,它在功能、灵活性和安全性之间取得了最好的平衡,如果你对代码不熟悉,可以先从 方法一 开始尝试。
