Проблема: категория в URL мешает SEO и удобству пользователей
По умолчанию WordPress добавляет префикс категории в URL записей, например: site.ru/category/novosti/post-name. Иногда это нежелательно — вы хотите короткие и чистые URL вида site.ru/novosti/post-name или просто site.ru/post-name. Удаление категории из URL улучшает читаемость и может позитивно повлиять на SEO.
Диагностика проблемы
Для начала убедитесь, что в настройках постоянных ссылок в разделе "Настройки > Постоянные ссылки" в поле "Основная структура" указан «/%category%/%postname%/» или аналогичная, которая выводит категорию в URL.
Если категория отображается в URL, можно проверить, есть ли редиректы и ошибки 404 после изменений, чтобы избежать потери трафика.
Пошаговое решение удаления категории из URL без плагинов
Шаг 1. Измените структуру постоянных ссылок
В разделе "Настройки > Постоянные ссылки" поставьте структуру на /%postname%/. Это уберёт категорию из URL записей.
Шаг 2. Добавьте правила перенаправления для старых URL с категорией
Чтобы не потерять трафик с ранее индексированных ссылок, нужно настроить 301 редиректы с URL с категорией на новые. Это можно сделать через файл .htaccess (если используется Apache) или с помощью кода в functions.php.
Пример кода для редиректа через functions.php:
function redirect_old_category_urls() {
if (is_singular('post')) {
$current_url = home_url(add_query_arg(array(), \$_SERVER['REQUEST_URI']));
if (strpos($current_url, '/category/') !== false) {
$new_url = str_replace('/category/', '/', $current_url);
wp_redirect($new_url, 301);
exit;
}
}
}
add_action('template_redirect', 'redirect_old_category_urls');Шаг 3. Удалите базу категории из WordPress
Чтобы WordPress не добавлял «category» в URL категорий, уберите базу категории с помощью фильтра category_rewrite_rules и функции register_taxonomy с параметром rewrite.
Добавьте в functions.php следующий код:
function remove_category_base() {
global $wp_rewrite;
$wp_rewrite->extra_permastructs['category']['struct'] = '%category%';
}
add_action('init', 'remove_category_base');После этого обновите настройки постоянных ссылок (просто нажмите "Сохранить изменения" в настройках). Это пересоздаст правила перезаписи.
Проверка результата после внедрения
- Откройте любую запись, которая ранее имела в URL категорию — убедитесь, что URL теперь без «category».
- Попробуйте перейти по старому URL с «category» — должна произойти переадресация на новый URL.
- Проверьте в консоли браузера код ответа 301 для старого URL.
- Используйте онлайн-инструменты проверки редиректов (например, https://httpstatus.io/) для подтверждения.
Частые ошибки и как их исправить
- Ошибка 404 после удаления категории
Причина: не обновлены правила перезаписи или кэш. Решение: зайдите в "Настройки > Постоянные ссылки" и нажмите "Сохранить изменения" для сброса правил. Очистите кэш сайта и браузера. - Конфликты URL с одинаковыми слагами постов и категорий
Причина: убрав категорию из URL, записи и категории могут иметь одинаковые адреса. Решение: проверьте уникальность слагов, при необходимости переименуйте категории или посты. - Редиректы не срабатывают
Причина: код в functions.php не подключается или приоритет хука неверный. Решение: убедитесь, что код не вызывает ошибок, используйте хукtemplate_redirectи проверяйте логи ошибок.
Практические советы по безопасности и производительности
- Редиректы лучше обрабатывать на уровне веб-сервера (nginx или Apache) для максимальной производительности.
- Обновляйте правила перезаписи после любых изменений в структуре URL.
- Используйте кеширование страниц и редиректов, чтобы снизить нагрузку на сервер.
- Следите за тем, чтобы URL не имели дублирующегося контента — это важно для SEO.
Сравнение методов удаления категории из URL
| Метод | Преимущества | Недостатки |
|---|---|---|
| Изменение структуры постоянных ссылок | Простота настройки, без кода | Потеря прежних URL без редиректов, возможны ошибки 404 |
| Редиректы через functions.php | Гибкий контроль, можно писать логику | Нагрузка на PHP, возможны задержки |
| Редиректы на уровне .htaccess/nginx | Очень быстро, не нагружает PHP | Сложнее в настройке, требует доступа к серверу |
| Плагины (например, Remove Category URL) | Удобно, часто с дополнительным функционалом | Дополнительная нагрузка, зависимость от стороннего кода |