后台设置的关键词字数限制
在织梦后台,你添加文章时,有一个“关键词”输入框,这个输入框本身是有一个最大长度限制的。

限制来源
这个限制来自于数据库中 dede_archives 表(文章主表)的 keywords 字段的定义。
- 默认情况:在织梦的默认安装中,
keywords字段通常被定义为varchar(255)。 - 字节限制:
varchar(255)意味着这个字段最多可以存储 255个字节。 - 中文字符:一个中文字符在UTF-8编码下通常占用 3个字节。
- 英文字符:一个英文字母或数字在UTF-8编码下占用 1个字节。
计算公式
根据以上信息,你可以大致计算出后台可以输入的关键词数量:
- 纯中文关键词:
255 字节 / 3 字节/字 ≈ 85 个汉字 - 纯英文关键词:
255 字节 / 1 字节/字 = 255 个字母 - 中英文混合:具体数量取决于混合比例,但总字节数不能超过255。
在织梦后台,默认情况下,你最多可以输入大约 85个汉字 或 255个英文字母 作为文章关键词,如果输入超出了这个限制,后台会提示你字数超出,或者无法保存。
前台调用和显示的关键词字数限制
后台设置的字数是存储的上限,但前台实际显示多少,通常由模板文件中的调用标签来控制,这比后台的限制更重要,因为它直接影响到用户体验和SEO效果。

织梦默认的关键词调用标签
在织梦的默认文章模板(如 article_article.htm)中,调用文章关键词的标签通常是:
<meta name="keywords" content="{dede:field name='keywords'/}" />
或者
{dede:field name='keywords'/}
默认行为:这个标签会直接输出你在后台填写的 所有关键词,用英文逗号 分隔,它本身没有额外的字数截取功能。
如何自定义显示的关键词数量(重点)
如果你不想显示所有关键词,只想显示前N个,你需要使用织梦的 substring 函数。

语法:
{dede:field name='keywords' function='html2text(@me)'/}
function='...':用于对字段内容进行函数处理。html2text(@me):这是一个常用函数,@me代表当前字段的原始值。html2text会将HTML标签转换为纯文本,在这里主要是为了确保安全,但它不截取字数。
要截取字数,你需要这样写:
假设你想只显示前 20个字符(注意,这里是字符,不是单词):
{dede:field name='keywords' function='substr(html2text(@me), 0, 20)'/}
代码解析:
@me:获取keywords字段的完整内容,"织梦,dedecms,cms,网站建设,php"。html2text(@me)转为纯文本,结果同上。substr(..., 0, 20):从第0个位置开始,截取20个字符。- 是
"织梦,dedecms,网站建设",截取后就是"织梦,dedecms,网站"。 - 是
"织梦,dedecms,cms,网站建设",截取后就是"织梦,dedecms,cms"。
- 是
更智能的按“词”截取(推荐)
上面的 substr 是按字符截取,可能会把一个词截断,更专业的方法是按“词”来截取,比如只显示前5个关键词。
织梦没有内置的“按词截取”函数,但你可以通过自定义函数或者使用PHP代码结合正则表达式来实现,对于大多数用户来说,使用 substr 已经足够。
示例:只显示前5个关键词
这是一个更实用和常见的场景,你需要修改织梦的标签,或者在模板中引入一段PHP代码。
在模板文件中直接使用PHP(最直接)
<?php
$keywords = GetArchivesKeywords($aid); // 获取当前文章ID的所有关键词,以逗号分隔
$keyword_array = explode(',', $keywords);
$display_count = 5; // 定义要显示的关键词数量
$display_keywords = array_slice($keyword_array, 0, $display_count);
echo implode(',', $display_keywords);
?>
注意:GetArchivesKeywords 是织梦的一个内置函数,需要确保在循环内使用(如在文章详情页 {dede:field name='aid'} 是有效的)。
创建自定义函数(更规范)
-
在织梦的
/include/extend.func.php文件中添加以下函数:// 获取指定数量的关键词 function GetLimitedKeywords($aid, $count = 5) { $keywords = ''; if($aid > 0) { $row = $GLOBALS['dsql']->GetOne("SELECT keywords FROM `dede_archives` WHERE id = $aid"); if($row) { $keyword_array = explode(',', $row['keywords']); $limited_keywords = array_slice($keyword_array, 0, $count); $keywords = implode(',', $limited_keywords); } } return $keywords; } -
在模板文件中调用这个函数:
{dede:getfunction name='GetLimitedKeywords([field:id], 5)'/}或者直接在模板里写PHP调用(如果熟悉的话):
<?php echo GetLimitedKeywords($aid, 5); ?>
总结与建议
| 场景 | 限制来源 | 如何修改/查看 |
|---|---|---|
| 后台输入限制 | 数据库 dede_archives 表的 keywords 字段 (默认 varchar(255)) |
无需修改,了解即可,大约85个汉字。 |
| 前台默认显示 | 模板标签 {dede:field.name='keywords'/},无截取功能。 |
直接修改模板标签,使用 function 进行处理。 |
| 前台自定义显示字数 | 模板标签中的 function 参数。 |
使用 substr(html2text(@me), 0, N) 来限制显示的字符数。 |
| 前台自定义显示词数 | 需要自定义PHP函数。 | 推荐使用 array_slice 函数按关键词数组进行截取,更符合SEO需求。 |
最佳实践建议:
- 后台:在后台填写关键词时,建议核心关键词放在最前面,并且数量控制在 5-10个 左右,避免堆砌,这样即使前台显示全部,也不会太多。
- 前台:为了更好的SEO和用户体验,强烈建议在模板中限制显示的关键词数量,推荐只显示前 5个 核心关键词,可以使用上面提到的“按词截取”的方法来实现。
- 修改数据库字段(高级):如果你确定需要更多的关键词,并且有技术能力,可以直接修改数据库
dede_archives表的结构,将keywords字段的varchar(255)改为varchar(500)或更大。操作前务必备份数据库!
