搜索全站
百度SEO 10 分钟阅读

标签泛滥怎么治理?WordPress 标签合并、删除与数量控制方案

几百个近义标签是站点的隐性负担。本文给出标签盘点、合并、删除的完整流程,包含安全的 SQL 操作顺序与合并后 URL 的 301 处理方案。

U
UFO_PF 2019-04-01 · 阅读 10 分钟
标签 百度SEO
阅读提示
本文约 3,607 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:写了三年文章,攒下四百多个标签

标签体系失控通常是一个渐进过程:第一年每个标签都很克制,第二年为了”覆盖更多词”开始给每篇文章打五六个标签,第三年出现了 WordPress、wordpress、WP、wp教程 四个同义标签并存。后台标签列表滚不到底,前台标签云里密密麻麻,每个标签页只有两三篇文章。这些页面被收录后,既无流量又拉低整站质量评估,还会与分类页、其他标签页形成重复内容。

原理分析:标签泛滥为什么是”质量问题”而不只是”数量问题”

标签页本质上是一个自动生成的聚合页。它的价值来自两点:聚合规模和主题唯一性。当标签过多时,这两点会同时恶化:

其一,规模被摊薄。总文章数固定,标签数从 20 涨到 400,每个标签下的文章数从 30 篇降到 1.5 篇,聚合页直接变成薄内容。

其二,唯一性丧失。SEO 和 SEO优化 两个标签下的文章集合高度重合,形成两个内容几乎一样的 URL,属于站内重复内容。百度会选择一个作为主版本,另一个大概率不展现,等于白做。

指标 健康区间 警戒信号
标签总数 / 文章总数 < 1:10 > 1:3
单标签平均文章数 ≥ 8 < 3
只用过 1 次的标签占比 < 20% > 40%
近义标签组数 0 ≥ 5 组

需要区分标签的两种定位:作为导航的标签(用户会点)和作为内部分类维度的标签(只用于筛选)。前者值得保留并做聚合页优化,后者应当合并或降级为不索引。

保姆级实操

步骤1:导出标签清单做人工分组
先把全部标签导出为 CSV,按”同义词组”手工分组。这一步无法自动化,因为语义判断只能靠人。

-- 导出全部标签及其文章数,用于人工分组
SELECT t.term_id, t.name, t.slug, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag'
ORDER BY tt.count DESC;

步骤2:合并同义标签
WordPress 后台”文章 → 标签”支持编辑标签的 slug,但真正的合并需要用”删除标签并重新分配”的逻辑。可以用插件(如 Term Management Tools)在后台批量操作,也可以用代码:

// 一次性脚本:把 source 标签下的文章全部改挂到 target 标签(用完即删)
add_action( 'init', function() {
    if ( ! current_user_can( 'manage_options' ) || ! isset( $_GET['merge_tag'] ) ) {
        return;
    }
    $source = 12; // 待合并标签 term_id
    $target = 8;  // 保留标签 term_id
    $posts  = get_objects_in_term( $source, 'post_tag' );
    foreach ( $posts as $post_id ) {
        wp_set_object_terms( $post_id, array( (int) $target ), 'post_tag', true );
        wp_remove_object_terms( $post_id, array( (int) $source ), 'post_tag' );
    }
    wp_delete_term( $source, 'post_tag' );
    wp_die( '合并完成,共处理 ' . count( $posts ) . ' 篇文章' );
} );

步骤3:批量删除零文章标签
空标签没有聚合价值,可以直接清理,但操作前必须备份数据库:

-- 先查看:没有任何文章的标签
SELECT t.term_id, t.name
FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count = 0;

-- 确认无误后再删除(请把 id 替换为上一步查到的值,操作前备份)
DELETE FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy='post_tag' AND term_id IN (101,102,103));
DELETE FROM wp_term_taxonomy WHERE taxonomy='post_tag' AND term_id IN (101,102,103);
DELETE FROM wp_terms WHERE term_id IN (101,102,103);

步骤4:给合并掉/删除掉的标签 URL 做 301
旧标签页如果有外链或已被收录,必须 301 到保留的标签页,否则产生死链:

# 合并后的旧标签页 301 到保留标签页(放在 server 块内)
rewrite ^/tag/wordpress-2/?$ /tag/wordpress/ permanent;
rewrite ^/tag/seo-youhua/?$ /tag/seo/ permanent;

步骤5:建立标签准入规则并写进编辑规范
规则示例:每篇文章标签数 2–4 个;新建标签必须先在后台搜索是否已有同义标签;单标签满 3 篇才允许创建。

步骤6:用代码限制每篇文章的标签上限
可以给编辑加一个数量提醒,减少事后清理的工作量:

// functions.php:保存文章时检查标签数量,超过 5 个记录提醒
add_action( 'save_post', function( $post_id, $post ) {
    if ( wp_is_post_revision( $post_id ) || 'post' !== $post->post_type ) {
        return;
    }
    $tags = wp_get_post_tags( $post_id, array( 'fields' => 'ids' ) );
    if ( count( $tags ) > 5 ) {
        set_transient( 'too_many_tags_' . $post_id, count( $tags ), 300 );
    }
}, 10, 2 );

步骤7:合并后重新提交 sitemap
标签 URL 变化后,需要更新 sitemap 并在搜索资源平台重新提交,同时在”URL 删除”里处理已失效的旧标签页。

常见踩坑

  1. 不备份直接跑 DELETE:wp_term_relationships 是多对多关系表,误删会丢文章与分类的关联。
  2. 只删标签不做 301:旧标签页变成 404,如果已有外链就白白损失权重,处理方法参考 404页面与状态码规范。
  3. 合并时忘记同步 slug:只改了名称没改 slug,URL 没变,重复页面依然存在。
  4. 一次性删除几百个标签:索引量短期剧烈波动,建议每周处理一批。
  5. 案例:某博客标签数从 430 治理到 60,做法是先导出清单人工分组,把 380 个近义或低频标签合并进保留标签,再对 120 个已收录的旧标签 URL 做 301。三个月后索引量下降 25%,但来自聚合页的流量翻了一倍——因为保留下来的标签页平均文章数从 3 篇涨到 22 篇,终于有了聚合价值。
  6. 用标签做内部筛选维度:把”是否已校对””是否原创”这类内部状态做成标签并开放索引,会产生一批毫无搜索价值的页面。
  7. 忽略标签云插件的输出:标签云把几百个标签全部输出到前台,等于给爬虫发了一份低质页面清单。

总结

标签治理的顺序是:导出盘点 → 人工分组 → 合并到保留标签 → 删除空标签 → 旧 URL 做 301 → 建立准入规则。其中”建立准入规则”是唯一能防止复发的一步,务必落实为编辑规范。判断治理是否见效,不看标签数量下降了多少,而看保留下来的标签页平均文章数是否升到 8 篇以上。治理完成后,聚合页策略可以按 分类页与标签页收录策略 的四条标准重新校准一遍。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。