织梦清理废弃tag标签sql语句

废弃 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 体系保持精炼,真正服务于站内导航与搜索引擎理解。