Как удалить пустую категорию в WooCommerce без потери SEO

Диагностика проблемы с пустыми категориями в WooCommerce

Пустые категории в WooCommerce появляются, когда удаляются все товары из категории, но сама категория остается. Это негативно влияет на пользовательский опыт и SEO, так как страница категории остается в индексе поисковиков, но не содержит товаров и имеет низкую ценность.

Проверить наличие пустых категорий можно через админку WordPress: Товары > Категории. Обратите внимание на столбец "Количество товаров" — категории с нулевым значением считаются пустыми.

Также полезно убедиться, что в базе данных нет артефактов. Для этого выполните SQL-запрос через phpMyAdmin или wpdb:

SELECT term_id, name FROM wp_terms WHERE term_id NOT IN (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy = 'product_cat');

Если запрос вернет категории без таксономий, их нужно удалить.

Пошаговое решение: безопасное удаление пустых категорий с сохранением SEO

1. Резервное копирование

Перед любыми изменениями создайте полную резервную копию базы данных и файлов сайта. Это позволит откатиться при ошибках.

2. Удаление пустых категорий вручную через админку

Если категорий немного, удалите их через Товары > Категории, выбрав категории с 0 товаров и нажав "Удалить".

3. Автоматизация удаления пустых категорий с редиректом

При удалении категории важно сделать 301 редирект с URL категории на страницу родительской категории или на главную магазинную страницу, чтобы сохранить SEO вес и избежать битых ссылок.

Для этого используйте следующий пример кода, который удалит пустые категории и создаст редиректы:

function remove_empty_product_categories_with_redirect() {
    $empty_cats = get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => true, // true чтобы получить непустые, поменяем на false
        'fields' => 'all',
        'meta_query' => array(),
    ));

    // Получаем все категории с количеством товаров 0
    $all_cats = get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
    ));

    foreach ($all_cats as $cat) {
        if ($cat->count === 0) {
            $parent_id = $cat->parent;
            $redirect_url = $parent_id ? get_term_link($parent_id, 'product_cat') : wc_get_page_permalink('shop');
            $cat_link = get_term_link($cat);
            if (!is_wp_error($cat_link) && !is_wp_error($redirect_url)) {
                // Добавляем редирект в .htaccess или через плагин редиректов
                // Ниже пример добавления редиректа в плагин Redirection через API, если он установлен
                if (function_exists('redirection_add_redirect')) {
                    redirection_add_redirect(array(
                        'source_url' => wp_make_link_relative($cat_link),
                        'target_url' => $redirect_url,
                        'action_type' => 'redirect',
                        'match_type' => 'url',
                        'status_code' => 301,
                    ));
                } else {
                    // Если плагина нет, рекомендуем вручную настроить редиректы
                }
            }
            // Удаляем категорию
            wp_delete_term($cat->term_id, 'product_cat');
        }
    }
}
// Запуск функции один раз, например из WP-CLI или отдельным скриптом
// remove_empty_product_categories_with_redirect();

Обратите внимание: автоматическое добавление редиректов требует плагина Redirection или ручной настройки. Без редиректов удаление категории приведет к 404.

Проверка результата

  • Перейдите в Товары > Категории и убедитесь, что пустые категории удалены.
  • Проверьте в браузере URL ранее удаленных категорий — они должны корректно редиректить на родительскую категорию или страницу магазина.
  • Используйте онлайн-инструменты (например, httpstatus.io) для проверки редиректов 301.
  • Проверьте файл журнала ошибок сервера и логи плагина редиректов на наличие ошибок.

Частые ошибки и как их исправить

  • Удаление категории без редиректа: приводит к ошибкам 404 и потере SEO. Решение — всегда настраивайте 301 редиректы.
  • Удаление категории с товарами: категорически запрещено, так как товары потеряют связь с категорией. Проверьте $cat->count перед удалением.
  • Автоматическое удаление без резервного копирования: рискуете потерять данные. Всегда создавайте бэкап.
  • Редиректы настроены некорректно: проверьте правильность URL и статус коды.

Практические советы по безопасности и производительности

  • Выполняйте операции удаления категорий на тестовом сайте перед продуктивным.
  • Используйте транзакции при массовом удалении через SQL, чтобы избежать частичной потери данных.
  • Для SEO-оптимизации категорически важно настроить корректные редиректы.
  • Регулярно очищайте базу данных от неиспользуемых терминов с помощью плагинов типа Clearfy Pro (ссылка).

Сравнение способов удаления пустых категорий

МетодПреимуществаНедостаткиSEO
Ручное удаление через админкуПростота, контрольНе подходит для большого объемаНужно вручную настроить редиректы
Автоматизация с кодом и редиректамиЭкономит время, снижает ошибкиТребует навыков, настройка редиректовРедиректы можно настроить автоматически
Удаление через SQLБыстрота для больших сайтовРиск повреждения данных, требует резервного копированияРедиректы не создаются автоматически
Как запретить удаление товаров в WooCommerce после покупки
19.05.2026
Как избежать проблем с кешированием AJAX-запросов в WooCommerce
23.04.2026
Как удалить неиспользуемые мета-данные в WordPress
08.12.2025
Как запретить удаление товаров в WooCommerce после покупки
16.06.2026
Как использовать REST API в WordPress для создания кастомных эндпоинтов
12.12.2025