本文约 3,870 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:一个站点 38 个分类、900 个标签
接过手的站点里,最离谱的一个有 38 个分类、912 个标签。其中 700 多个标签只被用过一次,分类里还嵌套了四层。
结果是:分类页全是只有两三篇文章的”薄内容页”,Google Search Console 里”已抓取但未索引”几千条;标签页之间内容高度重复,被判为 doorway pages;用户根本找不到东西。
分类和标签是 WordPress 最基础也最容易被滥用的功能。它们的正确用法其实只有几条规则,但必须一开始就遵守。
原理分析:它们的本质都是”分类法”
WordPress 底层把分类和标签统一叫分类法(Taxonomy),都存在同一套表里:
-- 分类法定义
SELECT * FROM wp_term_taxonomy WHERE taxonomy IN ('category','post_tag');
-- 条目
SELECT t.name, tt.taxonomy, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON tt.term_id = t.term_id
ORDER BY tt.count ASC LIMIT 30;
区别只有三个:
| 维度 | 分类 category | 标签 post_tag |
|---|---|---|
| 层级 | 支持父子层级 | 扁平,无层级 |
| 是否必填 | 文章必须属于某个分类(默认”未分类”) | 可为空 |
| 用途定位 | 内容大纲 / 目录 | 内容的横向属性 / 关键词 |
用书做比喻:分类是书架,标签是书的内容关键词。一本书只能放在一个书架格子里,但可以有十几个关键词。
关键点:每个分类法条目都有自己的归档页 URL(/category/xxx/、/tag/xxx/),都会被搜索引擎收录。这就是滥用会导致薄内容页的原因——每个条目都必须有足够的内容支撑一个页面。
保姆级实操
第一步:规划分类(自上而下)
分类是目录,应该提前规划、长期稳定、数量克制。
原则:
- 数量 5~12 个。少于 5 个说明内容太窄,多于 12 个说明分得太细;
- 按用户视角分,不按内部组织结构分。用户不会按”技术部/市场部”找内容,会按”建站教程/SEO/插件”找;
- 每个分类至少能支撑 10 篇文章。达不到就先合并,等文章多了再拆;
- 层级最多两层。三层以上 URL 变长、面包屑难看、爬虫抓取深度增加。
对本站(WordPress 技术站)的合理分类结构:
WordPress 系统基础
WordPress 插件
WordPress 主题
WordPress 建站实战
百度 SEO
Google SEO
多语言
站点变现
第二步:使用标签(自下而上)
标签是横向索引,不需要提前规划,写到哪加到哪,但要有纪律:
- 一篇 3~5 个标签,不要 15 个;
- 不要建和分类重复的标签(有”插件”分类就别再打”插件”标签);
- 不要建只用过一次的标签。用了一次说明这个概念不重要,或者应该放进正文;
- 同义词要统一:要么都用”缓存”,要么都用”cache”,不要两个都建。
检查只用过一次的标签:
SELECT t.name, tt.count
FROM wp_terms t
JOIN wp_term_taxonomy tt ON tt.term_id = t.term_id
WHERE tt.taxonomy = 'post_tag' AND tt.count <= 1;
批量清理:
wp term list post_tag --fields=term_id,name,count --format=csv | awk -F, '$3<=1 {print $1}' | xargs -r -n1 wp term delete post_tag --yes
第三步:合并同义标签
后台 文章 → 标签 → 找到目标标签 → 快速编辑 → 改别名为已存在的同义词。WordPress 会自动把条目合并(slug 相同的会合并)。
更可控的方式:
wp term list post_tag --slug=cache --fields=term_id
wp term list post_tag --slug=缓存 --fields=term_id
# 手工把文章从旧标签迁移到新标签后删除旧标签
第四步:设置 URL 与 SEO
- 分类基础(category base):设置 → 固定链接 → 分类目录前缀。建议留空或改成
/topic/,去掉默认的/category/这个无意义层级。 - 标签页是否索引:大多数站点的标签页应该
noindex。理由是标签页内容全是同类文章列表,和分类页、搜索页高度重复。 - RankMath / Yoast 里可以单独设
noindex标签归档页; -
或者手工:
php
add_action( 'wp_head', function() {
if ( is_tag() ) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
}); -
例外:如果某个标签聚集了大量高质量内容(比如”WordPress 缓存”有 40 篇),可以做成一个 标签专题页并允许索引,甚至手工写导语。
第五步:用分类和标签做内链
内链是分类标签最大的 SEO 价值。三种做法:
- 文章底部”相关阅读”:用插件(Yet Another Related Posts Plugin / RankMath 的相关文章)自动按标签匹配输出 5~8 篇;
- 正文中锚文本:写文章时给关键词挂上对应标签页或分类页的链接;
- 侧边栏/面包屑:面包屑导航里带分类层级,既利于用户也利于爬虫理解结构。
批量给已有文章加相关阅读:
// 简化的相关文章函数
function mmf_related_posts( $post_id, $limit = 6 ) {
$tags = wp_get_post_tags( $post_id, array( 'fields' => 'ids' ) );
if ( empty( $tags ) ) {
return array();
}
return get_posts( array(
'tag__in' => $tags,
'post__not_in' => array( $post_id ),
'posts_per_page' => $limit,
'orderby' => 'rand',
) );
}
第六步:自定义分类法(进阶)
如果内容有”分类+标签”之外的维度,可以注册自定义分类法:
add_action( 'init', function() {
register_taxonomy( 'difficulty', 'post', array(
'label' => '难度等级',
'hierarchical' => true,
'public' => true,
'rewrite' => array( 'slug' => 'level' ),
'show_in_rest' => true,
) );
});
注册后记得去 设置 → 固定链接 点一次保存刷新规则。
常见踩坑与失败案例
- 案例一:某站把每个关键词都建成标签,两年攒了 900 个,其中 700 个只用过一次。Google 索引里 60% 是这种薄标签页,整站质量分被拉低。清理后 3 个月,索引量降了 40% 但自然流量涨了 25%。
- 改分类别名导致 404:改 slug 必须做 301。用插件 Redirection 自动记录。
- 案例二:分类嵌套三层,
/category/a/b/c/,面包屑显示四段,标题被 Google 截断。改成两层后 CTR 明显改善。 - 删了分类没删关系:SQL 直接删
wp_terms会留下wp_term_relationships孤儿行。要用wp term delete或后台删除。 - 未分类:默认分类”未分类”一定要改名或设置默认分类,否则大量文章挂在一个叫”未分类”的分类下,前台很难看。设置 → 撰写 → 默认文章分类。
- 标签页分页:
/tag/xx/page/2/如果标签页已noindex,分页也一起noindex,避免产生大量无索引但有抓取的页面浪费抓取预算。
总结
分类和标签的使用纪律可以压缩成四句话:分类自上而下规划、5~12 个、两层以内、每个至少 10 篇内容;标签自下而上添加、每篇 3~5 个、不和分类重复、只用一次的就删;标签页默认 noindex,只有内容足够厚的才放开;两者最大的价值是做内链,不是堆 URL。定期检查”只用过一次的标签”和”文章数 < 5 的分类”,这两张清单是站点结构健康的体温计。
