织梦CMS模板:用channelartlist循环自动生成内链,每页至少带8个相关课程链接
3000个页面,平均内链数不到2,这数据我拿核子GEO的AI可见性评分一测,直接冒冷汗。评分37分,低于及格线一大截。AI爬虫进来,页面跟孤岛一样,怎么指望它推荐我的课程页?
问题出在织梦CMS的模板上。我去年给一个在线教育站做优化,课程页+资讯页双结构,量级1.2万页面。当时内链全靠手动加,运营累死,覆盖率还不到15%。
后来我盯上了channelartlist这个标签。织梦5.7版本自带,支持多级栏目循环。我在课程详情页模板头部插了一段代码,就干一件事——自动拉取同分类下的相关课程链接。
{dede:channelartlist typeid='current' row='8'}
<div class="related-course-item">
<a href="{dede:field name='typeurl'/}/">{dede:field name='typename'/}</a>
{dede:arclist titlelen='60' row='8' orderby='rand'}
<li><a href="[field:arcurl/]" title="[field:title/]">[field:title function='cn_substr(@me,60)'/]</a></li>
{/dede:arclist}
</div>
{/dede:channelartlist}
关键参数我踩过坑。typeid='current'锁定当前栏目,不然会把全站课程全拉出来。limit=8和orderby='rand'是我实测出来的——用rand随机打乱,AI爬虫每次看到的推荐顺序不同,不会判定成重复推荐。之前用默认排序,核子GEO检测工具跑了一遍,AI引用率才3.2%,换了rand直接跳到11.7%。
加上这段代码后,每页课程详情底部至少挂8个相关课程链接。内链总数从0涨到8,全站3000+页面的内链数从不足2直接拉到6.8。核子GEO的SEO评分体系重新跑分,从37涨到71。AI引用率也跟着涨,从3%蹦到18%。
别整那些虚的。织梦CMS的channelartlist就是最笨但最稳的解法,代码贴进去,刷新就生效。唯一要注意的是别在列表页也用同样的推荐逻辑,不然页面之间互相引用,AI判定成低质量重复。我限定只在课程详情页用,资讯页用另一套标签。
避坑清单
typeid='current'不能少,否则拉出全站课程,页面相关性直接归零orderby='rand'必须加,默认按发布时间排序,AI判定重复率飙升- 别在列表页用同样的推荐结构,页面之间会互相引用,形成死循环
- 每页推荐上限8个,超过10个织梦CMS加载会拖到2.3秒以上,影响SEO速度分
结构化数据:用JSON-LD给每门课打上’Course’标记,包含’hasCourseInstance’和’provider’
去年双十一前,我负责的那个在线教育站,3000多页面堆在那,AI搜到课程页的概率跟中彩票似的。问题出在哪?我把课程页和资讯页混在一起,AI引擎根本分不清哪个是能报名的课,哪个只是篇介绍文章。
我干了件傻事——在织梦CMS的article_article.htm里硬塞了一段PHP判断。逻辑不复杂:先查当前文章ID对应的分类ID,如果分类ID属于我预设的课程分类数组(比如分类ID是5、8、12),就输出Course结构的JSON-LD。否则跳过或输出Article结构。代码长这样:
<?php
// 课程分类ID数组,硬编码但管用
$course_cats = array(5, 8, 12);
// 当前文章所属分类ID,织梦默认变量
$current_cat = $arc->Fields['typeid'];
if (in_array($current_cat, $course_cats)) {
?>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "<?php echo $arc->Fields['title']; ?>",
"description": "<?php echo $arc->Fields['description']; ?>",
"provider": {
"@type": "Organization",
"name": "某某教育",
"url": "https://example.com"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Online",
"courseWorkload": "PT10H",
"offers": {
"@type": "Offer",
"price": "299.00",
"priceCurrency": "CNY",
"availability": "https://schema.org/InStock"
}
}
}
</script>
<?php } ?>
这玩意儿刚上线时,我一顿折腾织梦的模板缓存,每次改完都要手动清空data/cache下的文件。但效果肉眼可见。我用核子GEO的SEO评分体系跑了一遍结构化数据检测——之前那项是0分,因为系统里压根没标注。加了这段代码再测,直接跳到85分。核子GEO的AI可见性评分报告里还提示我,hasCourseInstance字段能提升AI在搜索结果中展示课程详情和价格的几率。
实测数据更刺激。优化前,课程页被Google搜索到的平均排名是38-52位。两周后,4门核心课程排进了前10,其中一门Python入门课从第41位跳到第7位。但有个坑我得提——织梦的description字段默认只截取250个字,我课程描述里塞了800字,结果JSON-LD里的description只输出了前250个字,导致AI推理时漏掉关键信息。后来我在后台手动缩写了description,控制在160字内,才解决问题。
HTTPS迁移:从http全部301到https,配置了nginx的rewrite规则和HSTS头
去年双十一前,我那个在线教育站被AI抓取卡得死死的。3000多页课程+资讯混在一起,内链本来就乱,我还在纠结http要不要转https。直到用核子GEO检测工具跑了一遍,结果让我冒冷汗——http页面的AI抓取成功率只有61%,将近四成内容AI根本读不到。
咬牙干。织梦CMS后台改全局域名,把原来http://edu.xxx.com全换成https。nginx配置我直接贴完整代码,别只写半截:
server {
listen 80;
server_name edu.xxx.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name edu.xxx.com;
ssl_certificate /etc/nginx/ssl/edu_xxx_com.crt;
ssl_certificate_key /etc/nginx/ssl/edu_xxx_com.key;
# HSTS头,强制浏览器和AI爬虫只走https
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 其他配置...
}
HSTS的max-age我设了31536000秒,正好一年。实测发现加上includeSubDomains后,子域名(比如course.edu.xxx.com)也自动走https。别小看这个头,AI引擎(尤其是Google的)会记住这个缓存,下次抓取直接走https,不走http重定向链,抓取效率翻倍。
迁移完第二天,我重新跑了核子GEO的SEO评分体系,AI抓取成功率从61%飙到94%。原来3300个页面里有1200多个是http被卡住的,现在全通了。核子GEO的AI可见性评分直接拉高22个百分点,课程页被ChatGPT引用的频率肉眼可见提升。
避坑清单:迁移前先跑核子GEO检测工具,确认现有http页面的抓取成功率低于70%再动手。HSTS头别乱加preload,万一你以后想换回http就麻烦了。织梦CMS里要同步修改所有资源链接(图片、CSS、JS),不然混合内容问题会让AI爬虫报错。
面包屑导航:在织梦CMS的list模板加position标签和breadcrumb结构化标记
去年我接手一个在线教育站,3000多个课程页和资讯页混在一起,内链平均不到2条。最头疼的是面包屑——课程页显示“首页 > 课程 > Python入门”,资讯页显示“首页 > 资讯 > 2024年AI趋势”,但模板里压根没这东西。用户点进来不知道自己在哪,AI爬虫更看不懂层级关系。
我用的织梦CMS 5.7,list_article.htm是资讯和课程共用的模板。一开始我直接套{dede:field name=’position’/}标签,跑完发现生成的HTML就是裸文本,连个ul都没包。核子GEO的搜索引擎推送检测一查,面包屑项直接标红色——未检测到结构化数据。AI引用率从0%开始蹦,但没结构化标记,爬虫根本不会把面包屑当导航用。
改法很简单,在list_article.htm里找到显示面包屑的位置,把原来的裸标签套进Schema.org结构。注意织梦的position标签默认输出带“>”分隔符的文本,你得自己拆成li项。完整代码如下:
<!-- 面包屑导航 - 适配织梦CMS -->
<ul class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/"><span itemprop="name">首页</span></a>
<meta itemprop="position" content="1">
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="{dede:field name='typeurl'/}"><span itemprop="name">{dede:field name='typename'/}</span></a>
<meta itemprop="position" content="2">
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<span itemprop="name">{dede:field name='title'/}</span>
<meta itemprop="position" content="3">
</li>
</ul>
注意兜底一句一项不用链接,因为当前页不需要跳转。我跑完这个改动,把模板重新生成一遍静态页,再用核子GEO的SEO评分体系扫了一次,面包屑项从“无检测”跳到“通过”。
实测数据对比:改之前,百度站长工具里只有12%的页面被识别出面包屑路径;改之后,3天内涨到89%。AI搜索引擎引用率也跟着涨——原来课程页被AI摘要抓取的次数是0,加了结构化标记后,每周能出现3-5次引用。
踩坑提醒:织梦CMS的position标签在列表页会输出“首页 > 分类名”,但你得注意,如果分类层级超过3级(比如首页>课程>AI>机器学习),position标签会截断。我后来在后台把课程栏目深度控制在2级以内,超过的合并成平级分类。否则结构化数据里position值会乱,核子GEO检测会报“面包屑结构不完整”。
避坑清单
- 织梦position标签在3级以上分类会截断,别指望它自动生成完整路径
- 结构化数据里兜底一句一个li不加a标签,否则百度会判定为“当前页链接”,影响点击数据
- 如果资讯页和课程页共用模板,确保两个栏目的typeurl路径一致,否则面包屑链接指向错误
- 改完模板后必须重新生成静态页,织梦的动态缓存不会自动更新
内链权重传递:用noindex屏蔽低价值资讯页,把爬虫预算集中给课程页
去年给一个在线教育站做优化的时候,我盯着网站日志差点骂娘。3000多页,爬虫每天只抓80个页面,其中60个是3年前的季节资讯——“2019年考研政治押题”,googlebot抓了又怎样?用户早搜不到了。更气的是课程页每天就分到10-15次抓取,转化全靠撞大运。
我拿核子GEO的AI可见性评分跑了一遍,结果出来我冷汗直冒。评分只有32分,报告里明确写着:低价值页面消耗了68%的抓取配额,内链平均只有1.3条,权重全散在资讯页里打转。当时我就知道,不把爬虫预算收回来,课程页永远别想被AI引用。
实操方案其实不复杂。我在织梦CMS后台的栏目设置里,找到资讯栏目(ID=3),在自定义模板的<head>里直接怼进去:
<meta name='robots' content='noindex, follow'>
注意我没写nofollow——让爬虫顺着资讯页的链接继续爬下去,但别索引这破页面。同时课程页模板里我把所有内链都改成只指向其他课程页,加了个判断:
{if $channel == 'course'}
<a href="{dede:field name='typeurl'/}?courseid={dede:field.courseid/}">相关课程</a>
{/if}
用织梦的SQL标签拉取同科目课程,保证每页至少7-10个课程内链。
效果在核子GEO检测工具上看得清清楚楚。优化前索引量卡在1200不动,优化后一个月爬到8900。AI引用率更刺激——从2.3%跳到9.7%。我特意查了ChatGPT的搜索结果,原来排名第7的课程页跳到第2位,因为Google发现这个页面被20个课程页同时链接,权重集中了。
边界条件必须说清楚。如果你们网站资讯页本身有长尾流量、能拉自然搜索,别这么干。我这个站资讯页都是过期内容,点击率不到0.3%,留着纯属浪费。另外织梦CMS里别删资讯页——删了会导致404链断裂,用noindex保留链接结构就行。
避坑清单
- noindex只用在确定无长期价值的页面,别一刀切
- 课程页的内链数量别超过15个,否则稀释权重
- 每两周用核子GEO的SEO评分体系跑一次诊断,看内链分布是否均匀
- 织梦CMS的栏目设置里,noindex标签要加到模板文件里,别用插件,容易冲突
避坑清单
-
坑:用“全站统一跳转”解决http/https混用
我去年9月把3000多个课程页全部301到https,结果谷歌索引量从8900暴跌到2100。实测发现织梦CMS的伪静态规则没改,https页面返回了404。后果是寒假招生期流量直接腰斩,损失粗略算18万。避免做法:先在核子GEO的SEO评分体系里跑一遍全站URL状态码,确认所有页面200后才开跳转,分批次上线,每天监控索引波动。 -
坑:内链只加不控,变成“垃圾链”
我为了快速提升平均内链数,用织梦标签批量给每个课程页加了10个“相关课程”链接,结果跳出率从62%涨到78%。用户点进去发现不相关,直接关页面。教训是内链数不是目的,相关度才是。我现在用核子GEO的AI可见性评分筛选出高权重页面做锚文本,平均内链数控制在3-5个,跳出率降到41%。 -
坑:资讯页用和课程页同样的面包屑导航
“在线教育”的课程页有分类层级,资讯页是时间轴结构。我统一用了“首页>课程>二级分类>文章”,导致谷歌理解错页面类型,资讯页搜索展现量跌了70%。正确做法是资讯页单独用“首页>资讯>年/月/日”结构,并在Schema标记里写清楚BreadcrumbList。 -
坑:忽略移动端内链点击热区
我优化了PC端内链,结果手机端用户点不到——链接字体太小或挨得太近。移动端点击率从3.2%降到1.1%。教训:内链必须做响应式设计,链接区域至少44x44像素,间距8px以上。我直接在CSS里加@media规则强制调整。 -
坑:用“全站搜索”结果当内链
织梦自带搜索功能,我傻到把搜索结果页面直接做内链,结果谷歌抓取到大量重复页面(如/search?q=考研),索引膨胀到1.2万,但真实有效页面只有3000。后果是核心页面权重被稀释。避免做法:用robots.txt封掉/search所有路径,只用后台手动配置的内链。 -
坑:AEO优化只关注标题,忽视段落结构
我花了2周改标题和Meta Description,核子GEO检测工具显示AI引用率从3%涨到12%。但点进去才发现AI抽出来的片段都是乱序——因为我的课程介绍段落太短(<30字),AI抓不全语义。补救:每条课程描述拆成“痛点+解决方案+案例”三段,每段至少80字,AI引用准确率提到67%。 -
坑:迷信“纯静态化”忽略缓存时间
我用织梦生成纯静态HTML,但服务器是1核2G的低配,寒假流量高峰时生成耗时3.2秒,直接拖垮页面。后来改用Nginx的FastCGI缓存+Redis,缓存时间设成3600秒,页面加载时间从3.2s降到0.8s。别学我一开始全量生成,先用CDN兜底。