织梦如何清理历史静态html文件
织梦每次“一键更新”都会在 /a/ 下生成新的 HTML 文件,但删除文章、改 URL 规则后旧文件并不会自动清理,日积月累磁盘占用惊人,还可能被搜索引擎抓到造成“死页面”。本文给出系统化的清理方案。
一、为什么会有历史静态文件
- 删除文章后
/a/2026/0729/123.html仍保留; - 改 URL 规则后旧路径文件未删;
- 批量重新生成时旧文件被覆盖,但目录层级会冗余;
- 采集测试时产生的临时 HTML。
这些文件占磁盘、被搜索引擎抓取后产生 404 与重复内容,必须定期清理。
二、第一步:盘点磁盘占用
用 du 查看各目录占用:
du -sh /www/wwwroot/yourdomain.com/a/*
du -sh /www/wwwroot/yourdomain.com/a/2026/*
找出占用最大的年份/月份目录。再用 find 统计 HTML 文件总数:
find /www/wwwroot/yourdomain.com/a -name "*.html" | wc -l
三、第二步:对比数据库找出孤儿文件
核心思路:列出磁盘上所有 HTML 文件名中的 aid,对照 dede_archives 表,找出数据库里已不存在但磁盘上仍有的“孤儿文件”。
<?php
// orphan_clean.php
require_once dirname(__FILE__).'/include/common.inc.php';
$dir='/www/wwwroot/yourdomain.com/a';
$rii=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
$orphans=[];
foreach ($rii as $f) {
if (!$f->isFile() || $f->getExtension() !='html') continue;
if (preg_match('/(\d+)\.html$/', $f->getFilename(), $m)) {
$aid=intval($m[1]);
$row=$dsql->GetOne("SELECT id FROM dede_archives WHERE id=$aid");
if (!$row) {
$orphans[]=$f->getPathname();
}
}
}
file_put_contents(__DIR__.'/orphans.txt', implode("\n", $orphans));
echo "found ".count($orphans)." orphan files\n";
脚本只生成清单不删除,先人工抽样核对再批量删,避免误删。
四、第三步:删除孤儿文件
核对清单后执行:
# 删除清单中的文件
xargs rm -f < /www/wwwroot/yourdomain.com/orphans.txt
# 删除空目录
find /www/wwwroot/yourdomain.com/a -type d -empty -delete
五、按时间清理旧快照
有些场景需要清理 N 天前的 HTML(如测试环境的快照):
# 删除 180 天前的 HTML
find /www/wwwroot/yourdomain.com/a -name "*.html" -mtime +180 -delete
# 删除 180 天前的空目录
find /www/wwwroot/yourdomain.com/a -type d -mtime +180 -empty -delete
六、保留策略
不要无差别清理,建议:
- 已收录且仍在引流的文章 HTML 必须保留;
- 已做 301 跳转的旧 URL 文件可删除(301 在 Nginx 配置);
- 同 aid 多个版本(覆盖前的旧文件)保留最新一个;
- 采集测试目录
/a/test/整目录清理。
七、自动化定期清理
把清理脚本加入宝塔计划任务,每周日凌晨执行:
0 3 * * 0 /www/server/php/74/bin/php /www/wwwroot/yourdomain.com/orphan_clean.php
0 4 * * 0 xargs rm -f < /www/wwwroot/yourdomain.com/orphans.txt
0 5 * * 0 find /www/wwwroot/yourdomain.com/a -type d -empty -delete
并在脚本里加入日志记录,便于追溯每次清理了多少文件。
八、清理后收尾
- 更新 sitemap.xml,删除失效 URL;
- 百度搜索资源平台提交死链清单(清理掉的 URL);
- 检查 robots.txt 是否需要更新;
- 对清理掉的 URL 在 Nginx 配置统一返回 410 Gone,告知搜索引擎已永久删除。
九、注意事项
- 清理前必须完整备份
/a/目录或对数据库做快照; - 正在被采集的目录不要清理,避免采集失败;
- CDN 缓存要同步刷新,否则用户仍能访问到已删除的页面;
- 历史文件多的站点建议先把
/a/挂到独立磁盘,便于扩容。
静态文件清理是织梦运维中常被忽略的环节。建议把“盘点占用 → 孤儿检测 → 计划任务定期清理 → 死链提交”做成固定流程,让站点磁盘占用长期保持健康,同时避免无效页面稀释站点权重。