废弃 tag 是站点长期运营中常见的"数据垃圾",会拖慢查询、产生 404 链接,影响 SEO 表现。本文给出安全清理的 SQL 语句。
一、废弃 tag 的来源
织梦 tag 存储于 dede_tagindex(tag 索引表)与 dede_taglist(文档关联表)。当文档被删除但关联记录未清理、tag 文档数为 0、tag 长时间无访问时,即形成废弃 tag。
二、备份前置步骤
注意:执行任何清理 SQL 前必须备份数据库!宝塔 → 数据库 → 备份,或使用 mysqldump 导出。
mysqldump -u root -p dede_db dede_tagindex dede_taglist > /backup/tag_backup_20250729.sql
三、清理 SQL 语句
3.1 清理文档数为 0 的 tag
DELETE FROM dede_tagindex WHERE total <=0;
3.2 清理无关联文档的 tag
DELETE FROM dede_tagindex
WHERE id NOT IN (
SELECT DISTINCT tid FROM dede_taglist
);
3.3 清理 dede_taglist 中的孤儿记录
DELETE FROM dede_taglist
WHERE aid NOT IN (
SELECT id FROM dede_archives
);
3.4 同步 tag 计数
UPDATE dede_tagindex t
SET t.total=(
SELECT COUNT(*) FROM dede_taglist l WHERE l.tid=t.id
);
建议:执行后再次执行 3.1 删除计数归零的 tag。
四、清理中文乱码 tag
历史编码转换可能产生乱码 tag,识别特征为 tag 字段含特殊字符:
DELETE FROM dede_tagindex
WHERE tag REGEXP '[^a-zA-Z0-9\x{4e00}-\x{9fa5}\x{3000}-\x{303f}\x{ff00}-\x{ffef}]'
AND total=0;
五、重建索引与缓存
清理完成后需重建索引并刷新缓存:
OPTIMIZE TABLE dede_tagindex;
OPTIMIZE TABLE dede_taglist;
REPAIR TABLE dede_tagindex;
后台 → 生成 → 一键更新 → 更新 tag 列表页,刷新前台 tag 链接。
六、常见问题原因分析
6.1 删除后 tag 页 404
原因:tag 缓存未刷新,模板仍输出已删除 tag 链接。
解决:清理 /data/cache/tag_*.php 并重新生成 tag 列表。
6.2 误删有文档的 tag
原因:SQL 条件写错,未限定 total=0。
注意:先执行 SELECT 预览待删除数据,确认无误后再执行 DELETE。
七、自动化维护
建议每月执行一次清理,可加入宝塔计划任务:
#!/bin/bash
mysql -u root -pYOURPASS dede_db <<EOF
DELETE FROM dede_tagindex WHERE total <=0;
UPDATE dede_tagindex t SET t.total=(SELECT COUNT(*) FROM dede_taglist l WHERE l.tid=t.id);
DELETE FROM dede_tagindex WHERE total <=0;
OPTIMIZE TABLE dede_tagindex;
EOF
八、行动指引
建立月度 tag 健康度报告:统计 tag 总数、活跃 tag 数、零文档 tag 占比。对高价值 tag 进行聚合运营,做成专题页提升 SEO;对低价值 tag 周期性清理,让 tag 体系保持精炼,真正服务于站内导航与搜索引擎理解。