Диагностика проблемы с пустыми категориями в 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 | Быстрота для больших сайтов | Риск повреждения данных, требует резервного копирования | Редиректы не создаются автоматически |