在DEDECMS(织梦内容管理系统)中,为导航链接添加nofollow属性是优化网站SEO的常见操作,可以通过修改模板文件、使用SQL语句或调用自定义函数实现,以下是具体操作步骤和注意事项,帮助您顺利完成设置。

通过修改模板文件添加nofollow
-
定位导航模板文件
登录DEDECMS后台,进入“模板”>“默认模板管理”,找到当前使用的导航模板文件,通常位于templets/default/目录下,文件名可能是head.htm、nav.htm或自定义名称,点击“编辑”进入代码界面。 -
修改导航标签代码
导航调用一般使用{dede:channel}或{dede:channelartlist}标签,以{dede:channel}为例,找到类似以下代码:{dede:channel type='top' row='8'} <a href='[field:typeurl/]'>[field:typename/]</a> {/dede:channel}在
<a>标签中添加rel='nofollow'属性,修改为:<a href='[field:typeurl/]' rel='nofollow'>[field:typename/]</a>
若需针对特定栏目添加nofollow,可通过
typeid属性筛选,
(图片来源网络,侵删){dede:channel typeid='3,5,7' row='8'} <a href='[field:typeurl/]' rel='nofollow'>[field:typename/]</a> {/dede:channel} -
更新模板并生成HTML
保存模板文件后,进入“系统”>“一键更新网站”>“更新HTML”,勾选“主页”和“栏目页”并执行,使修改生效。
通过SQL数据库批量添加nofollow
若需为现有导航链接批量添加nofollow,可通过数据库操作实现:
- 进入DEDECMS后台“系统”>“SQL命令行工具”。
- 执行以下SQL语句(需根据表前缀调整,默认为
dede_):UPDATE dede_arctype SET typename=REPLACE(typename, '<a href=', '<a rel="nofollow" href=');
此语句会替换所有栏目名称中的
<a href=为<a rel="nofollow" href=,但需注意避免重复添加,更推荐的方式是修改模板文件后重新生成。
使用自定义函数实现动态控制
若需根据栏目层级或其他条件动态添加nofollow,可自定义函数:

- 在
include/common.func.php文件末尾添加以下函数:function getNoFollow($typeid) { $topid = GetTopid($typeid); // 获取顶级栏目ID if ($topid == 1) { // 假设顶级栏目ID为1时添加nofollow return ' rel="nofollow"'; } return ''; } - 在导航模板中调用函数:
{dede:channel type='top'} <a href='[field:typeurl/]'<?php echo getNoFollow(@me['id']); ?>>[field:typename/]</a> {/dede:channel}
注意事项
- 优先级问题:若模板中同时存在
rel='nofollow'和{dede:field}等标签的属性,需确保代码顺序正确,避免冲突。 - 缓存清理:修改后若未生效,可清除浏览器缓存或进入“系统”>“清除所有HTML缓存”。
- 测试验证:使用浏览器开发者工具(F12)检查导航链接的HTML源码,确认
rel='nofollow'是否正确添加。
不同导航场景的适用方法对比
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 全站导航统一添加 | 修改模板文件 | 操作简单,适合全局控制 | 无法单独设置特定栏目 |
| 特定栏目导航添加 | 模板标签typeid筛选 | 精准控制目标栏目 | 需提前明确栏目ID |
| 大量历史数据批量修改 | SQL数据库操作 | 高效处理旧数据 | 风险较高,需提前备份数据库 |
| 动态条件(如层级)添加 | 自定义函数 | 灵活支持复杂逻辑 | 需一定PHP基础,调试较复杂 |
相关问答FAQs
问题1:修改模板后导航仍显示nofollow,但未生效怎么办?
解答:首先检查模板文件是否正确保存,并进入“系统”>“一键更新网站”重新生成HTML,若问题依旧,可能是浏览器缓存导致,尝试无痕模式访问或清除缓存,确认rel='nofollow'属性是否正确添加到<a>标签内,而非其他标签。
问题2:如何仅对二级栏目导航添加nofollow,保留一级栏目?
解答:可通过{dede:channelartlist}标签结合reid属性实现,在模板中使用以下代码:
{dede:channelartlist typeid='1'} <!-- 顶级栏目ID为1 -->
<div class="nav">
<a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a> <!-- 一级栏目不加nofollow -->
{dede:channel type='son' noself='yes'}
<a href='[field:typeurl/]' rel='nofollow'>[field:typename/]</a> <!-- 二级栏目加nofollow -->
{/dede:channel}
</div>
{/dede:channelartlist}
此方法会调用指定顶级栏目下的所有二级子栏目,并为这些子栏目链接添加nofollow属性。
