Убрать /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. Не перенаправляй пути, которые теперь принадлежат страницам или записям.