织梦CMS技术问答

织梦如何批量清理空文档

DedeCMS数据清理站点维护

织梦站点运营一段时间后,常会堆积一批“空文档”——标题存在但正文为空、或正文仅有几个字符的文档。这些空文档不仅占用数据库,还会被搜索引擎抓取后判定为低质页面,拖累整站权重。批量清理空文档是织梦日常维护中不可忽视的一环。

一、空文档的成因

清理前先了解空文档是怎么来的,才能从源头阻断再生:

  • 采集失败:采集规则失效,正文未抓到,只存了标题。
  • 手动误建:后台发布时只填标题就提交,正文留空。
  • 定时发布异常:批量录入时正文字段未写入。
  • 字符数极少:正文仅几十字,实质等同于空文档。
  • 伪原创失败:替换后正文被清空或截断。

二、清理前的准备工作

警告:删除操作不可逆,务必先备份再清理。
  1. 备份数据库:在宝塔或 phpMyAdmin 中导出整库 SQL,命名带日期。
  2. 备份静态文件:打包 /a/ 目录(织梦默认HTML存放目录)。
  3. 导出空文档清单:先查出空文档列表存为 CSV,便于事后核对与提交死链。
  4. 站点低峰执行:选择凌晨操作,避免影响在线访问。

三、识别空文档的 SQL

织梦正文存在 dede_addonarticle 表的 body 字段,标题与状态在 dede_archives 表。空文档判定标准:body 为空、或去除标签后字符数低于阈值。

1. 查询正文为空的文档

SELECT a.id, a.title, a.typeid, a.senddate
FROM dede_archives a
LEFT JOIN dede_addonarticle b ON a.id=b.aid
WHERE a.channel=1
  AND (b.body IS NULL OR TRIM(b.body)='' 
       OR TRIM(REPLACE(REPLACE(b.body,' ',''),' ',''))='');

2. 查询正文过短的文档

去除 HTML 标签后正文少于 100 字符的文档,建议一并清理:

SELECT a.id, a.title, LENGTH(REGEXP_REPLACE(b.body, '<[^>]+>', '')) AS len
FROM dede_archives a
JOIN dede_addonarticle b ON a.id=b.aid
WHERE a.channel=1
  AND LENGTH(REGEXP_REPLACE(b.body, '<[^>]+>', '')) < 100;

注意:MySQL 5.7 以下不支持 REGEXP_REPLACE,可改用 PHP 端 strip_tags 后统计长度再删除。

四、批量删除空文档

删除须同时清理主表、附加表、TAG 关联表,否则会留下孤儿数据。推荐用 PHP 脚本调用织梦自带删除逻辑,而非直接 DELETE:

// clean_empty.php
require_once(dirname(__FILE__).'/include/common.inc.php');
require_once(DEDEINC.'/oxwindow.class.php');
require_once(DEDEADMIN.'/inc/inc_batchup.php');

$ids=array(); // 上一步查出的空文档 id 数组
foreach ($ids as $id) {
    DelArc($id); // 织梦自带删除函数,会清理主表/附加表/TAG/HTML
}
echo "已清理 ".count($ids)." 篇空文档";

若不便运行脚本,也可在后台 → 核心 → 批量维护 → “批量管理文档”中按条件筛选后删除,但效率较低,适合少量清理。

五、删除后的善后

1. 重新生成静态

删除文档后,相关栏目列表页与首页仍可能保留旧链接,需重新生成 HTML:

后台 → 生成 → 一键更新网站 → 更新所有

2. 提交死链

已被搜索引擎收录的空文档 URL,删除后会变成死链。把空文档原 URL 整理成 txt,上传到根目录并在百度站长平台提交死链:

https://www.example.com/old-empty-1.html
https://www.example.com/old-empty-2.html

3. 修复 robots

若部分空文档来自采集失败,可在 robots.txt 中屏蔽采集来源目录,避免再次被抓取入库。

六、防止空文档再生

  • 发布前校验:修改 article_add.php,提交时校验正文字符数低于 100 则拦截。
  • 采集后审核:采集的文档默认设为“未审核”,人工抽查后再上线。
  • 定时巡检:宝塔添加计划任务,每周执行一次空文档查询脚本,输出报表。
  • 权限管控:限制编辑账号直接发布权限,必须经过审核。
提示:可在发布页用 JS 实时统计正文字数并提示,从源头避免空文档提交。

七、清理效果验证

清理完成后,通过三个维度验证效果:百度站长平台“索引量”是否回升、site 域名快照中空文档是否消失、栏目列表页是否还有死链。若索引量在 1~2 周内回升,说明清理有效。

后续建议

空文档清理不是一次性动作,建议纳入月度维护计划:每月跑一次空文档查询脚本,及时清理新生成的低质文档。同时把发布校验、采集审核等防再生措施落实到位,让站点始终保持“干净”的内容库,这才是织梦站点长期获得良好收录的基础保障。