这个功能的核心是通过修改 dede/archives_do.php 文件来实现的,因为它负责处理文章保存、编辑等操作,并在此过程中调用关键词替换。

(图片来源网络,侵删)
在 DedeCMS 5.7 中,默认情况下,每个关键词在一篇文章中只被替换(加链接)一次,如果你想让一个关键词被多次替换,就需要修改核心文件。
修改方法:限制单篇文章中每个关键词的替换次数
这个修改可以让你设定每个关键词在单篇文章中最多出现几次链接,设置为3,那么关键词“织梦CMS”在这篇文章中最多只会出现3个链接。
第一步:找到并编辑核心文件
你需要修改的文件是:/dede/archives_do.php
请使用专业的代码编辑器(如 VS Code, Sublime Text, Notepad++ 等)打开这个文件。

(图片来源网络,侵删)
第二步:定位关键代码
在 archives_do.php 文件中,找到处理关键词替换的代码段,通常在文件末尾附近,你会看到类似下面这样的代码:
// 2.处理关键词
if($keywords!='')
{
$kws = explode(',', $keywords);
$kws = array_filter($kws); // 过滤掉空值
// 获取要替换的关键词数组
$dsql->SetQuery("SELECT * FROM `dede_keywords` WHERE rpurl<>''");
$dsql->Execute();
$i = 0;
while($row = $dsql->GetObject())
{
$keyname = trim($row->keyword);
if($i >= count($kws)) break;
if($kws[$i] == $keyname)
{
$keyurl = $row->rpurl;
// 执行替换
$body = str_replace($keyname, "<a href='$keyurl' target='_blank'>$keyname</a>", $body);
$i++;
}
}
}
第三步:修改代码以增加替换次数
默认的代码是 str_replace,它只会替换掉所有匹配项的第一个,我们需要用正则表达式来限制替换次数。
-
找到
str_replace这一行:$body = str_replace($keyname, "<a href='$keyurl' target='_blank'>$keyname</a>", $body);
-
将其替换为以下代码: 这里的
3就是你要设置的替换次数,你可以根据需要修改这个数字。
(图片来源网络,侵删)// 使用正则表达式替换,限制每个关键词每篇文章最多替换3次 $pattern = '/(' . preg_quote($keyname, '/') . ')/i'; $body = preg_replace($pattern, "<a href='$keyurl' target='_blank'>$0</a>", $body, 3);
代码解释:
preg_quote($keyname, '/'): 对关键词中的特殊正则字符进行转义,防止出错。'/(' . ... . ')/i': 构建一个不区分大小写的正则表达式模式,来匹配关键词。$0: 在替换字符串中,$0代表整个匹配到的文本,也就是$keyname本身。, 3: 这是preg_replace函数的第四个参数,它限制了最多替换3次。
第四步:保存文件并测试
- 保存修改后的
archives_do.php文件。 - 登录你的 DedeCMS 后台。
- 进入“[核心]-[批量维护]-[文档关键词维护]”,确保你的关键词已经设置好,连接网址”不为空。
- 修改一篇文章(或者发布一篇新文章),在文章正文中多次输入你设置的关键词。
- 保存文章后,在前台查看这篇文章,你会发现,每个关键词只被加了3次链接,即使它在文章中出现了超过3次。
重要注意事项
- 修改前备份:在进行任何核心文件修改之前,务必备份原始的
archives_do.php文件,这样如果修改出错,你可以快速恢复。 - 性能影响:关键词替换是在文章保存时进行的,如果你的关键词列表非常长,或者文章内容非常多,这个替换过程可能会稍微增加服务器处理时间,但对于绝大多数网站来说,影响微乎其微。
- SEO 警告:不要过度使用关键词链接,如果一篇文章中同一个关键词被链接了太多次(比如超过5-7次),会被搜索引擎认为是“关键词堆砌”或“过度优化”,有被降权的风险,通常设置为 1到3次 是比较安全和合理的范围。
- 大小写问题:默认的关键词替换是区分大小写的,如果你想让它不区分大小写(即“织梦”和“织梦cms”都能被匹配),你需要确保你的数据库关键词是统一大小写的,或者在正则表达式中使用
/i修饰符(上面的代码已经包含)。
相关知识:如何设置每个关键词的总链接数?
有些用户可能会想,能不能设置一个关键词在整个网站内只出现 N 次链接,DedeCMS 5.7 没有提供这样直接的设置功能。
这个功能需要更复杂的逻辑,通常需要修改关键词替换的核心逻辑,并增加一个计数机制(在 dede_keywords 表中增加一个 link_count 字段,每次替换成功后就加1,并在替换前判断是否超过限制),这个修改的难度和风险都比较大,一般不推荐普通用户尝试。
最常用和最安全的做法就是上面介绍的“限制单篇文章替换次数”。
