Как убрать category из URL рубрик WordPress
← Блог
WordPress · 05.10.2026 · 6 мин чтения

Как убрать category из URL рубрик WordPress

Убрать /category/ из адресов рубрик WordPress можно через Yoast SEO или собственный код. Например, адрес /category/wordpress/ станет /wordpress/.

Перед изменением проверь совпадения адресов и подготовь редиректы. Само сокращение URL не гарантирует рост позиций в поиске, а ошибка в настройке может закрыть доступ к страницам. Ниже — оба способа и проверка результата.

Можно ли убрать category в настройках WordPress

В «Настройки → Постоянные ссылки» есть поле «Префикс рубрик». В нём можно задать другое слово, например topics: адреса станут /topics/wordpress/. Если оставить поле пустым, WordPress подставит category. Убрать префикс совсем штатно нельзя.

В старых инструкциях советуют вписать в это поле точку. Не делай так: адреса превращаются в /./wordpress/, а некоторые плагины и пагинация начинают работать непредсказуемо. Надёжнее один из двух способов ниже.

Проверка совпадений адресов рубрик и страниц

Без префикса рубрика, страница и запись могут получить одинаковый адрес /ярлык/. Результат зависит от порядка правил: вместо страницы может открыться архив рубрики. Для каждого раздела нужен уникальный путь.

  • Сравни ярлыки рубрик с ярлыками страниц и записей. Например, рубрика news и страница news не уживутся.
  • У дочерних рубрик адрес включает родителя: /wordpress/themes/. Он может совпасть с дочерней страницей с таким же путём.
  • Изменятся адреса всех рубрик. Если они уже в поиске, со старых адресов нужен 301-редирект, иначе поисковики увидят 404 и будут заново искать страницы.

Ярлыки рубрик удобно посмотреть в «Записи → Рубрики» в колонке «Ярлык». Через WP-CLI — командой wp term list category --fields=slug.

Способ 1. Убрать category через Yoast SEO

Если Yoast SEO уже стоит, это самый простой путь. Открой «Yoast SEO → Настройки → Категории и метки → Рубрики» и выключи переключатель «Сохраните префикс категорий в ярлыке» (в английском интерфейсе — «Show the categories prefix in the slug»). Затем сохрани изменения.

Что Yoast делает после этого:

  • убирает префикс из всех ссылок на рубрики — в меню, крошках, карте сайта;
  • создаёт правила адресов для каждой рубрики, включая страницы пагинации и RSS;
  • перенаправляет старые адреса /category/…/ на новые с кодом 301;
  • пересобирает правила при создании, изменении и удалении рубрики.

Способ 2. Убрать category кодом без плагина

Пример включает четыре части: новые ссылки, правила адресов, редиректы и пересборку правил. Добавь все части в отдельный плагин или functions.php дочерней темы. Изменения в файлах родительской темы могут пропасть при обновлении.

Не включай этот код одновременно с удалением префикса в Yoast: обе реализации меняют одни и те же правила. Сначала проверь вариант на копии сайта.

function mytheme_category_base() {
    $base = trim( (string) get_option( 'category_base' ), '/' );
    return $base ? $base : 'category';
}

function mytheme_category_link( $link ) {
    $home = trailingslashit( home_url() );
    $old  = $home . mytheme_category_base() . '/';

    return 0 === strpos( $link, $old ) ? $home . substr( $link, strlen( $old ) ) : $link;
}
add_filter( 'category_link', 'mytheme_category_link' );

Фильтр category_link срабатывает внутри get_category_link() и get_term_link(). Поэтому новые адреса сразу получат меню, крошки, виджеты и карта сайта. Префикс отрезается только в начале адреса: рубрика с ярлыком category не сломается.

Правила адресов

function mytheme_category_rewrite_rules() {
    $rules = array();

    foreach ( get_categories( array( 'hide_empty' => false ) ) as $category ) {
        $path = $category->slug;

        if ( $category->parent ) {
            $parents = get_category_parents( $category->parent, false, '/', true );
            if ( is_wp_error( $parents ) ) {
                continue;
            }
            $path = $parents . $path;
        }

        $path = '(' . preg_quote( $path, '#' ) . ')';

        $rules[ $path . '/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $rules[ $path . '/page/?([0-9]{1,})/?$' ]                   = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $rules[ $path . '/?$' ]                                      = 'index.php?category_name=$matches[1]';
    }

    return $rules;
}
add_filter( 'category_rewrite_rules', 'mytheme_category_rewrite_rules' );

Фильтр category_rewrite_rules получает стандартные правила с префиксом, а функция возвращает вместо них свои: по три правила на рубрику — архив, страницы пагинации и RSS. Правила строятся по списку рубрик, поэтому новая рубрика заработает только после пересборки правил. Об этом — последняя часть кода.

Пример рассчитан на латинские ярлыки рубрик. Кириллические ярлыки хранятся в базе в закодированном виде, и сопоставлять их с адресом сложнее. Транслитерацию ярлыков обычно делает плагин вроде Cyr-To-Lat. Если ярлыки остались кириллическими, проще включить опцию Yoast — он учитывает и этот случай.

Редирект со старых адресов

Без префиксных правил старый адрес /category/wordpress/ отдаёт 404. Функция ловит такой ответ, находит рубрику по пути и отправляет на новый адрес с кодом 301, сохраняя номер страницы:

function mytheme_redirect_old_category_urls() {
    if ( ! is_404() ) {
        return;
    }

    $path    = trim( (string) wp_parse_url( $_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH ), '/' );
    $pattern = '#^' . preg_quote( mytheme_category_base(), '#' ) . '/(.+?)(?:/page/(\d+))?$#';

    if ( ! preg_match( $pattern, $path, $matches ) ) {
        return;
    }

    $category = get_category_by_path( $matches[1] );
    if ( ! $category ) {
        return;
    }

    $url = get_category_link( $category );
    if ( ! empty( $matches[2] ) && (int) $matches[2] > 1 ) {
        $url = trailingslashit( $url ) . user_trailingslashit( 'page/' . (int) $matches[2], 'paged' );
    }

    wp_safe_redirect( $url, 301 );
    exit;
}
add_action( 'template_redirect', 'mytheme_redirect_old_category_urls', 5 );

Обработчик запускается с приоритетом 5, до стандартного redirect_canonical. Иначе WordPress может попытаться угадать адрес для страницы 404 и отправить посетителя не в ту рубрику.

Код рассчитан на WordPress в корне домена. Для установки в подпапке нужно изменить обработку пути.

Пересборка правил

function mytheme_schedule_rewrite_flush() {
    add_action( 'shutdown', 'flush_rewrite_rules' );
}
add_action( 'created_category', 'mytheme_schedule_rewrite_flush' );
add_action( 'edited_category', 'mytheme_schedule_rewrite_flush' );
add_action( 'delete_category', 'mytheme_schedule_rewrite_flush' );

Пересборка правил — дорогая операция. Поэтому она выполняется только при изменении рубрик и в самом конце запроса, когда изменения уже сохранены. На каждой загрузке страницы flush_rewrite_rules() вызывать нельзя.

После добавления кода один раз открой «Настройки → Постоянные ссылки» и нажми «Сохранить изменения». Так WordPress соберёт новые правила.

Что проверить после изменения URL

  • Ссылки на рубрики в меню и в записях ведут на адреса без префикса, и архивы открываются.
  • Старый адрес отдаёт 301 на новый. Проверить можно в терминале: curl -I https://example.com/category/wordpress/ — в ответе должны быть 301 и заголовок Location с новым адресом.
  • Работают страницы пагинации /wordpress/page/2/ и лента /wordpress/feed/. Если вторая страница отдаёт 404, причины разобраны в статье о постраничной навигации.
  • Страницы и записи, чьи ярлыки похожи на рубрики, по-прежнему открываются.
  • В карте сайта и в canonical на страницах рубрик — новые адреса.

Если в шаблоне есть хлебные крошки, они получат новые адреса автоматически: ссылки на рубрики строятся через get_category_link(). Как собрать такие крошки, описано в статье о хлебных крошках без плагина. Другие функции для ссылок на рубрики и страницы собраны в статье о ссылках в WordPress.

Как вернуть префикс

Чтобы вернуть префикс, включи его в Yoast или удали добавленный код, затем сохрани постоянные ссылки. Проверь, что старые архивы снова открываются.

Если адреса без префикса уже использовались, настрой с них 301-редиректы на восстановленные URL. Не перенаправляй пути, которые теперь принадлежат страницам или записям.

Документация

Есть вопрос или дополнение?

Обсудить в Telegram

Добавить комментарий