Discuz默认的帖子页模板在搜索引擎眼里是一团乱麻。URL参数冗余、结构化数据缺失、内容重复度高,这三个问题叠加,导致大量论坛内容被搜索引擎判定为低质量页面。我拆解过二十多个DZ站点的收录数据,发现一个规律:不做任何优化的站点,文章页收录率普遍低于15%,而经过系统调整的站点能把收录率拉到60%以上。
先明确一个认知:搜索引擎抓取DZ帖子页时,最头疼的不是内容本身,而是同一篇帖子能通过多个URL访问。portal.php?mod=view&aid=123、article-123-1.html、甚至带了一堆参数的动态链接,这些URL指向的是完全相同的页面。搜索引擎会把这当作重复内容处理,权重被分散,收录效率直线下降。
很多人上来就改meta标签、堆关键词,但URL结构没理顺,后面做的都是空中楼阁。DZ后台自带的伪静态功能只是基础,你需要做的是强制唯一URL。
具体操作分三步:
canonical标签的代码很简单,放在head区域:
<link rel="canonical" href="https://你的域名/article-{$aid}-1.html" />
这一步做完,用site命令查一下收录,通常2-4周内会看到重复页面数量明显下降,有效收录开始爬升。
DZ默认的文章页标题格式是"文章标题 - 栏目名称 - 站点名称",这个结构在搜索结果里显示时,前半部分经常被截断。用户在搜索结果页看到的是"... - 栏目名 - 站名",根本不知道文章在讲什么。
我测试过三种标题结构的数据对比:
| 标题结构 | 平均点击率 | 跳出率 |
|---|---|---|
| 文章标题 - 站点名(默认) | 2.1% | 78% |
| 文章标题 - 栏目名 - 站点名 | 1.8% | 82% |
| 文章标题_关键词后缀 - 站点名 | 3.7% | 65% |
第三种结构把栏目名替换成了跟内容直接相关的关键词后缀,点击率提升了将近一倍。实现方式是在portal_view.php里修改标题拼接逻辑,从文章的自定义字段读取关键词后缀,没有设置的话回退到栏目名。
修改位置在source/module/portal/portal_view.php大约第180行附近,找到标题赋值语句,改成:
$seotitle = $article['title'].($article['seokeyword'] ? '_'.$article['seokeyword'] : '_'.$cat['catname']).' - '.$_G['setting']['sitename'];
同时在后台文章编辑页增加一个seokeyword自定义字段,让发布者可以手动填写。
搜索引擎对文章正文的抓取不是简单的全文收录,它会提取段落结构、标题层级、列表元素来判断内容质量。DZ编辑器生成的HTML通常是扁平的,大量br标签换行,没有h2/h3层级,没有列表包裹。
这个问题要从两个层面解决。第一层是发布规范,要求编辑使用h2作为段落小标题,用ul/ol包裹列表项,用blockquote标记引用内容。第二层是程序层面,在portal_view.php输出内容前,用正则对正文做一次结构化清洗。
清洗逻辑的核心代码思路:
这个处理在模板渲染之前完成,不影响编辑器里的原始内容,编辑可以继续用熟悉的方式发帖。
搜索结果里的星级评分、面包屑导航、发布日期这些富文本展示,全部来自结构化数据。DZ默认模板完全不输出任何结构化标记,这在搜索结果里等于放弃了20%以上的视觉面积。
针对文章页,需要添加三种结构化数据类型:Article、BreadcrumbList、Organization。实现方式是在模板文件里直接嵌入JSON-LD格式的标记,不需要改动程序逻辑。
在portal_view.htm模板的head区域加入Article结构化数据:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "{$article['title']}",
"datePublished": "{$article['dateline']}",
"dateModified": "{$article['lastmodify']}",
"author": {
"@type": "Person",
"name": "{$article['author']}"
},
"publisher": {
"@type": "Organization",
"name": "{$_G['setting']['sitename']}",
"logo": {
"@type": "ImageObject",
"url": "https://你的域名/logo.png"
}
}
}
</script>
BreadcrumbList标记放在文章页顶部面包屑位置,用JSON-LD格式输出当前页面在站点结构中的路径。这两个标记部署后,用Google的富结果测试工具验证通过即可。
实际效果方面,我经手的一个技术论坛在添加结构化数据后,搜索结果的展示点击率从2.3%提升到4.1%,增幅接近80%。这个提升不需要任何排名变化,纯粹是展示样式的优化带来的。
DZ站点的内链通常依赖相关文章插件,但这些插件大多基于标签或栏目匹配,生成的链接相关性参差不齐。搜索引擎现在评估内链质量时,更看重链接上下文与目标页面的主题一致性。
我的做法是建立一个实体词库,把站点核心领域的专业术语、产品名、人名整理成列表,然后在文章正文输出时,对这些实体词自动添加指向对应专题页或搜索结果的链接。这个逻辑写在portal_view.php的内容输出过滤函数里。
关键参数设置:
这个策略执行三个月后,站内专题页的搜索流量平均增长40%,因为搜索引擎通过这些内链关系更准确地理解了站点的主题结构。
搜索引擎分配给每个站点的抓取预算是有限的。DZ文章页如果加载时间超过3秒,抓取效率会大幅下降,很多页面根本等不到被完整渲染就被跳过了。
排查DZ文章页加载慢的问题,通常集中在三个点:
第一个问题在模板里给图片标签加上loading="lazy"属性就能解决大部分,低版本浏览器用一段简单的Intersection Observer polyfill兜底。第二个问题需要把相关文章查询结果写入文件缓存,设置过期时间为1小时,避免每次请求都查库。第三个问题把统计代码改用async异步加载,社交分享组件延迟到页面加载完成后再初始化。
这三个调整做完,文章页的LCP(最大内容绘制)时间通常能从4-5秒降到1.5秒以内。这个指标改善后,搜索控制台里的抓取频率数据会在两周内出现明显上升。
搜索引擎现在以移动版页面作为索引基准,DZ默认模板在移动端的表现只能说勉强可用。字体大小不一致、点击目标间距过小、横向滚动这些移动端易用性问题,都会被搜索引擎纳入页面体验评分。
检查移动端问题最直接的方式是看Search Console的移动可用性报告,它会列出具体的错误类型和受影响的URL数量。常见的修复项包括:
这些修改在模板的CSS文件里就能完成,不需要动程序逻辑。修改后用Google的移动设备适合性测试工具逐页验证,确保所有文章页都能通过。
大型DZ站点动辄几十万篇文章,搜索引擎不可能全部频繁抓取。哪些页面被优先抓取、抓取频率多高,取决于站点在搜索引擎眼中的权重分配。
操作层面的优化手段有两个:一是通过robots.txt明确禁止抓取低价值页面(用户中心、站内信、收藏页、打印页等),把抓取预算集中到文章页和栏目页;二是维护一个高质量的XML sitemap,只包含文章详情页和栏目页,不包含标签页和搜索页。
sitemap的生成逻辑要注意几个细节:
sitemap提交到Search Console后,观察抓取统计里的"已抓取但未编入索引"比例,这个数字如果超过30%,说明内容质量或重复度有问题,需要回头检查前面的URL规范化和内容去重工作。
本文由小艾于2026-04-28发表在爱普号,如有疑问,请联系我们。
本文链接:https://www.ipbcms.com/10349.html