问题背景

在默认情况下,WordPress 会在分类(Category)的 URL 结构中自动添加 category 作为前缀,例如:

https://nextaiedge.com/category/[blog]

对于 SEO 友好的 URL 结构,我们希望去掉 category 这个层级,使 URL 变成:

https://nextaiedge.com/[blog]

然而,WordPress 默认不支持去掉 category 层级,因此需要手动修改规则或使用插件来实现。

常见错误方法

有些会尝试修改 固定链接 设置,希望能移除 category,但即使在分类前缀中留空,WordPress 仍然会自动添加 category 层级。

部分用户通过 .htaccess 添加 301 重定向规则,例如:

RewriteRule ^category/(.+)$ /$1 [L,R=301]

虽然这种方法可以让 URL 看起来去掉了 category,但本质上只是做了重定向,并没有真正修改 WordPress 的 URL 生成规则。从seo的角度来讲,可以一步到位的就不需要做301,属于备选方案。

有效解决方案

方法 1:使用插件(最简单)

最简单的方法是使用 Remove Category URL 插件,它能直接移除 category 层级,无需 301 重定向。

步骤

  1. 进入 WordPress 后台插件安装插件
  2. 搜索插件:No Category Base(WPML)
  3. 安装并启用插件
  4. 清除缓存(LiteSpeed Cache / Cloudflare)
  5. 访问分类 URL,检查是否已去掉 category

优点:简单快捷,适合不懂代码的用户 ❌ 缺点:需要安装额外的插件


方法 2:修改 functions.php(代码方式,无需插件)

如果你不想依赖插件,可以直接修改 functions.php,让 WordPress 直接生成不带 category 的 URL。

步骤

  1. 进入 WordPress 后台外观主题文件编辑器
  1. 找到 functions.php,在文件末尾添加以下代码:
// 移除 category URL 层级
add_filter('category_link', 'remove_category_slug', 10, 2);
function remove_category_slug($catlink, $category_id) {
    $category = get_category($category_id);
    if ($category->parent == 0) {
        $catlink = str_replace('/category/', '/', $catlink);
    }
    return $catlink;
}

// 重写规则,让 WordPress 识别没有 category 的 URL
add_action('init', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules() {
    global $wp_rewrite;
    $wp_rewrite->extra_permastructs['category']['struct'] = '%category%';
}
  1. 保存 functions.php
  2. 进入 WordPress 后台设置固定链接
  3. 点击“保存更改”(不修改内容,点击保存即可刷新规则)
  4. 清除缓存,测试分类 URL

优点

  • 直接修改 WordPress URL 生成逻辑,不做 301 重定向
  • 不依赖插件,避免额外插件带来的安全隐患

缺点

  • 需要手动添加代码,不适合小白用户

方法 3:使用 .htaccess(不推荐)

如果你只是想让旧的 category 结构自动跳转到新的 URL,而不修改 WordPress 生成的 URL 方式,可以在 .htaccess 里添加以下规则:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# 让分类 URL 不包含 category
RewriteCond %{REQUEST_URI} ^/category/(.+)$
RewriteRule ^category/(.+)$ /$1 [R=301,L]

# WordPress 规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

但这并没有真正去掉 category,只是做了 301 跳转,因此 不推荐

优点

  • 适用于已有大量 category 目录的旧站,防止 404 错误

缺点

  • 只是跳转,不是去掉 category,新文章仍然会生成 category/ 结构

总结:最优方案推荐

方法适合用户是否真正去掉 category难度
插件:Remove Category URL小白✅ 是⭐⭐⭐⭐(简单)
修改 functions.php代码熟练者✅ 是⭐⭐⭐(需手动添加代码)
.htaccess 301 跳转旧站 SEO 保护❌ 只是跳转⭐(简单但不推荐)

如果你想 最简单地去掉 category 层级,推荐 方法 1(插件)
如果你不想安装插件,推荐 方法 2(代码修改)
如果你只想做 301 重定向,推荐 方法 3(.htaccess)

如果你每种方式尝试起来都觉得不稳妥,可以自己建个站,把对应项测试好,再做复用。

Scroll to Top