简单粗暴的修改代码法 和 更灵活的标签调用法。强烈推荐使用第二种方法,因为它更安全、更灵活,符合DedeCMS的标签化思想。

修改 arc.archives.class.php 文件(不推荐,但最直接)
这种方法的核心是修改DedeCMS处理文章内容的底层文件,让它自动在发布或更新文章时,将关键词替换为带有链接的HTML代码。
优点:
- 一次设置,一劳永逸,所有文章自动生效。
缺点:
- 有风险:直接修改核心文件,在DedeCMS升级后需要重新修改。
- 不够灵活:无法在特定页面(如首页、列表页)控制是否显示内链。
- 可能出错:如果修改不当,可能导致文章内容显示异常。
操作步骤:

-
找到文件 打开你的DedeCMS程序根目录,找到并打开以下文件:
/include/arc.archives.class.php -
找到关键函数 在文件中搜索
ReplaceKeyword函数,这个函数就是专门用来处理关键词替换的。 -
修改函数 找到类似下面的代码段(不同版本DedeCMS可能略有差异,但核心逻辑一致):
// 找到这段代码 foreach($kws as $k) { $k = trim($k); if($k!="") { // 如果开启了是否全高亮,则进行高亮 if($this->SplitKeyword) { $row['body'] = str_ireplace($k, "<span class='highlight'>".$k."</span>", $row['body']); } } }注意: 你的代码可能不是
str_ireplace,而是preg_replace,但逻辑是相同的。
(图片来源网络,侵删) -
替换为新的逻辑 将上述代码块替换为下面的代码,这段代码会检查关键词是否已经存在链接,如果没有,才添加新的链接。
// --- 开始替换 --- foreach($kws as $k) { $k = trim($k); if($k != "") { // 如果开启了是否全高亮,则进行高亮(这里我们注释掉或删除高亮功能,专注于内链) // if($this->SplitKeyword) // { // $row['body'] = str_ireplace($k, "<span class='highlight'>".$k."</span>", $row['body']); // } // --- 新增的内链逻辑 --- // 1. 构造要查找的正则表达式,确保匹配的是独立的单词(避免匹配“百度”时把“百度一下”也匹配了) $rgx = "/(?!<a[^>]*?>)".$k."(?![^<]*?>)/i"; // 2. 构造替换的链接HTML // 这里假设你的关键词链接URL格式是 /tags.php?/关键词/ // 你也可以自定义,/plus/search.php?keyword=关键词 或者直接指向指定栏目 $replacement = '<a href="/tags.php?/'.$k.'" title="'.$k.'" target="_blank" class="keyword-link">'.$k.'</a>'; // 3. 执行替换,只替换未加链接的关键词 $row['body'] = preg_replace($rgx, $replacement, $row['body']); } } // --- 替换结束 --- -
保存文件 保存
arc.archives.class.php文件,当你重新生成文章页HTML时,关键词就会被自动加上链接了。
使用自定义标签 {dede:autolink/}(强烈推荐)
这种方法更符合DedeCMS的设计哲学,通过创建一个自定义标签来实现。优点是安全、灵活,且不影响核心文件。
操作步骤:
第1步:创建自定义函数文件
-
在DedeCMS根目录下的
/include/extend.func.php文件中,添加以下PHP代码,如果这个文件不存在,请自己创建一个。/** * 文章内容关键词自动内链 * @param string $body 文章内容 * @param int $num 关键词数量限制,0表示不限制 * @param string $title 链接的title属性,留空则使用关键词本身 * @return string 处理后的文章内容 */ function GetAutoLink($body, $num = 5, $title = '') { if (empty($body)) return $body; // 获取当前文章的关键词 $keywords = GetKeyWords($body); if (empty($keywords)) return $body; $tags = explode(',', $keywords); $count = 0; // 替换计数器 foreach ($tags as $tag) { $tag = trim($tag); if (empty($tag)) continue; // 防止无限循环,限制替换次数 if ($count >= $num && $num > 0) break; // 构造正则表达式,匹配独立的关键词 $rgx = '/(?!<a[^>]*?>)'.preg_quote($tag, '/').'(?![^<]*?>)/i'; // 构造链接 $link_url = "/tags.php?/" . urlencode($tag) . "/"; $link_title = !empty($title) ? $title : $tag; $replacement = '<a href="'.$link_url.'" title="'.$link_title.'" target="_blank" class="keyword-autolink">'.$tag.'</a>'; // 执行替换 $new_body = preg_replace($rgx, $replacement, $body); // 如果内容发生了变化,说明成功替换了一次 if ($new_body != $body) { $body = $new_body; $count++; } } return $body; } /** * 辅助函数:从文章内容中提取关键词 * 这里简化处理,直接使用文章的关键词字段,你也可以使用其他分词算法。 * 在实际调用中,我们直接传递了文章内容,这里可以根据需要优化。 */ function GetKeyWords($body) { // 这个函数在 {dede:autolink/} 标签里会被DedeCMS自动处理, // 我们只需要在模板里调用 GetAutoLink 函数并传入文章内容即可。 // 所以这个函数可以留空或简化。 // 在模板中,我们会这样用:{dede:field.body function='GetAutoLink(@me, 3)'/} return ''; }注意: 我在上面的函数中直接传入了
$body,所以模板调用会更简单,你可以直接使用下面的模板调用方式。
第2步:在文章页模板中调用自定义标签
-
打开你的文章页模板文件,通常位于
/templets/default/article_article.htm。 -
找到文章内容标签
{dede:field.body/}。 -
将其替换为调用我们刚刚创建的函数,并传递参数:
{dede:field.body function='GetAutoLink(@me, 5, @me)'/}参数解释:
@me:DedeCMS模板标签中的特殊变量,代表当前标签的原始值,这里@me{dede:field.body/}的原始内容,即文章正文。5:这是传递给GetAutoLink函数的第二个参数$num,表示每篇文章最多替换5个关键词,你可以根据需要修改这个数字,设为0或不传则表示不限制。@me:这是传递给函数的第三个参数$title,我们这里用@me再传一次,表示链接的title属性和关键词文本一样,你也可以写死一个值,'查看更多关于' . $tag . '的文章',但需要调整函数,简单起见,保持一致即可。
第3步:更新和测试
- 保存你的模板文件。
- 进入DedeCMS后台,找到“生成” -> “更新主页HTML”、“更新栏目HTML”、“更新文档HTML”。
- 重新生成一篇或多篇文章的页面,然后去前台查看效果,你会发现文章中的关键词已经被自动加上了链接。
重要补充与注意事项
-
关键词设置:无论使用哪种方法,前提是你的文章在后台字段中填写了关键词,并且用英文逗号隔开,这是DedeCMS提取关键词的基础。
-
URL路径:在代码中,我使用了
/tags.php?/关键词/这种URL格式,这是DedeCMS标签(Tag)的标准路径,请确保你的网站启用了并正确配置了标签(Tag)功能,如果你想指向其他页面,请自行修改$link_url的值。 -
性能考虑:自动替换正则表达式会消耗一定的服务器资源,如果你的文章非常长,或者关键词非常多,可能会对页面加载速度产生微小影响,方法二中通过
$num参数限制替换次数是一个很好的优化手段。 -
样式控制:我在代码中给链接添加了
class="keyword-link"或class="keyword-autolink",你可以在你的CSS文件中为这个类定义样式,.keyword-link, .keyword-autolink { color: #0066cc; text-decoration: none; border-bottom: 1px dashed #0066cc; } .keyword-link:hover, .keyword-autolink:hover { color: #ff6600; text-decoration: underline; } -
避免过度优化:不要给一篇文章设置太多关键词,也不要让一个关键词在文章中被重复链接多次,这会被搜索引擎视为“过度优化”或“垃圾链接”,反而可能起到反效果,通常一篇文章设置3-5个核心关键词,每个关键词替换1-2次是比较合理的。
对于大多数用户,强烈推荐使用方法二(自定义标签),它更安全、更灵活,且不破坏DedeCMS的文件结构,是进行二次开发的最佳实践。
