dede列表页如何解决内容重复问题?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

核心原因分析

重复,本质上是因为多个不同的URL指向了完全相同或高度相似的内容,搜索引擎在抓取时,会认为这些是重复页面,从而可能进行“去重”处理,导致权重分散,甚至影响网站的整体收录和排名。


常见原因及解决方案

请按照以下顺序逐一排查,通常能解决90%以上的重复问题。

原因1:分页造成的重复(最常见)

这是最典型的情况,list.php?tid=1list.php?tid=1&PageNo=2 被认为是两个页面,但它们共享了大部分内容。

解决方案:设置 canonical 标签

canonical 标签是告诉搜索引擎“哪个页面是主要的、规范的版本”的最佳方式,在所有分页页面中,都指向第一页。

  1. 找到列表页模板文件: 通常位于 /templets/default/list_article.htm 或你自定义的模板目录下。

  2. <head> 标签内添加 canonical 标签: 在 <head></head> 之间,加入以下代码,DedeCMS 有专门的标签来获取当前栏目链接。

    <head>{dede:field.title/}_{dede:global.cfg_webname/}</title>
    <meta name="keywords" content="{dede:field.keywords/}" />
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
    <!-- 在这里添加 canonical 标签 -->
    <link rel="canonical" href="{dede:global.cfg_basehost/}{dede:field name='typeurl'/}" />
    <!-- 其他 head 内容... -->
    </head>

    代码解释

    • {dede:global.cfg_basehost/}:获取你的网站域名,如 https://www.yoursite.com
    • {dede:field name='typeurl'/}:获取当前栏目的首页链接,即 list.php?tid=1 这种形式。
    • 这样设置后,list.php?tid=1&PageNo=2list.php?tid=1&PageNo=3 等所有分页页面的 canonical 指向都会是 https://www.yoursite.com/list.php?tid=1,完美解决了分页重复问题。

原因2:栏目列表页与文章内容页重复

如果你的文章内容页的摘要和列表页的摘要一模一样,或者列表页调用了文章的全文,就会导致列表页和文章页内容高度重复。

解决方案:优化列表页的调用标签

确保列表页调用的是文章的摘要,而不是全文。

  1. 找到列表页模板文件/templets/default/list_article.htm

  2. 检查文章调用循环标签:通常是这样的结构:

    {dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
        <div>[field:description/]...</div> <!-- 这里是关键 -->
    </li>
    {/dede:list}
  3. 确保使用 description 字段

    • [field:description/] 调用的是文章的摘要,这是正确的做法。
    • 错误做法:如果你使用了 [field:body/][field:text/],那就会调用文章全文,造成严重重复,请务必删除或替换掉它们。
    • 如果摘要为空:可以在后台“批量维护” -> “文档HTML更新”中,选择“更新摘要”,让系统自动为没有摘要的文章生成。

原因3:不同栏目交叉调用内容

你在首页调用“新闻”栏目的文章,又在“产品”栏目页也调用了“新闻”栏目的文章,如果这两个栏目页的模板不同,就会导致内容重复。

解决方案:规范栏目调用,使用“arclist”标签时指定栏目ID

在调用外部栏目的内容时,务必指明 typeid

  • 错误示例:在首页调用新闻,但没有指定栏目ID,或者调用了多个栏目。
    {dede:arclist row="10"} <!-- 没有指定typeid,可能调用全站最新 -->
  • 正确示例:明确指定只调用“新闻”栏目(假设ID为1)的内容。
    {dede:arclist typeid='1' row="10"}
    <a href="[field:arcurl/]">[field:title/]</a>
    {/dede:arclist}

原因4:URL形式多样化导致重复

DedeCMS 默认可以生成多种URL,

  • 动态:list.php?tid=1
  • 伪静态:list/1.html
  • 目录形式:category/1/

如果这些URL同时存在,就会被搜索引擎视为重复页面。

解决方案:统一URL形式并设置301重定向

  1. 统一URL:在后台“系统” -> “系统基本参数” -> “核心设置”中,选择一种你喜欢的URL形式(推荐“栏目目录”),然后更新所有文档和HTML。
  2. 设置301重定向
    • 伪静态方案:确保你的服务器(如Apache) .htaccess 文件配置正确,将动态URL和目录形式的URL都重定向到你选择的最终URL形式。
    • Nginx服务器:在 nginx.conf 或站点配置文件中添加重定向规则。
    • DedeCMS自带功能:在“系统” -> “SQL命令行工具”中,可以执行一些SQL来统一URL,但操作有风险,建议先备份数据库。

深层原因及解决方案

如果以上方法都无法解决问题,可能需要检查更深层次的原因。

原因5:arclist 标签的缓存问题

arclist 标签有缓存机制,如果缓存未更新,可能导致显示的内容与数据库不一致,从而产生一些“幽灵”重复内容。

解决方案:关闭或清理 arclist 缓存

  1. 临时关闭:在 arclist 标签中加上 cache='no' 属性,但这会影响性能,仅作测试用。
    {dede:arclist typeid='1' cache='no'}
  2. 清理缓存:在后台“系统” -> “缓存管理”中,清空所有缓存,特别是“自定义标签缓存”。

原因6:自定义模型或特殊字段

如果你使用了自定义模型,并且列表页调用了特殊字段(如下载地址、图集内容等),这些字段的内容也可能导致重复。

解决方案:检查并优化自定义模型模板

检查你的自定义模型列表页模板,确保只调用必要的、能区分不同文章的字段,避免调用重复性高的数据。

原因7:数据库问题(罕见)

极少数情况下,数据库中可能存在重复的文档记录(dede_archives 表)。

解决方案:检查数据库

这是一个高风险操作,操作前务必备份数据库!

  1. 登录phpMyAdmin
  2. 执行以下SQL查询来检查是否有完全重复的标题和内容(titlebody 字段):
    SELECT title, body, COUNT(*) as count
    FROM dede_archives
    GROUP BY title, body
    HAVING count > 1;
  3. 如果查询结果有数据,说明存在重复记录,你需要根据实际情况手动删除重复的ID。

检查和验证方法

修复完成后,如何验证问题是否解决?

  1. 使用站长工具

    • 百度搜索资源平台:使用“抓取诊断”工具,输入你的列表页URL,查看百度识别的内容是否是你期望的。
    • Google Search Console:使用“URL 检查”工具,查看 Google 抓取到的页面快照,并检查“网址”报告中的重复页面。
  2. 使用SEO工具

    使用如Screaming Frog、Sitebulb等网站爬虫工具,抓取你的网站,在生成的报告中,查看是否有“重复的标题”或“重复的页面描述”警告,这些工具能非常直观地展示出重复的URL和内容。

排查清单

遇到列表页重复问题,按以下步骤操作:

  1. 【必做】 在列表页模板 <head> 中添加 canonical
  2. 【必做】 检查列表页模板,确保调用的是 `[field:description/] (,而不是全文。
  3. 【必做】 检查首页、其他栏目页的调用标签,确保 typeid 明确,不交叉调用。
  4. 【推荐】 统一网站的 URL形式,并设置301重定向。
  5. 【可选】 清理 DedeCMS缓存
  6. 【最后手段】 检查数据库中是否存在 重复记录(操作前备份!)。

按照这个流程,绝大多数DedeCMS列表页重复问题都能得到有效解决。

-- 展开阅读全文 --
头像
dede分页打不开
« 上一篇 今天
织梦相关tag调用
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码