wplinks.ru wordpress WPLinks.ru

Как установить автоматические редиректы при изменении URL в WooCommerce

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

При смене URL товаров или категорий в WooCommerce без настройки редиректов пользователи и поисковые системы получают ошибку 404. Это негативно сказывается на SEO и пользовательском опыте. Часто проблема проявляется после массового импорта товаров, переименования категорий или изменения структуры постоянных ссылок.

Типичные признаки проблемы:

  • Переход по старым URL ведет на страницу 404.
  • В Google Search Console появляются ошибки «Страница не найдена».
  • Падение трафика и позиций в поиске после изменения URL.

Как реализовать автоматические редиректы при смене URL в WooCommerce

Почему стандартных функций WordPress недостаточно

WordPress не создает редиректы автоматически при смене URL товаров или категорий в WooCommerce. Для этого необходимо самостоятельно отслеживать изменения и программно создавать 301 редиректы с устаревших адресов.

Пошаговое решение с примером кода

Реализуем перехват события изменения слагов (slug) товаров и категорий и добавим редирект через специальную таблицу или запись в опциях.

1. Отслеживание изменений слага товара

add_action('post_updated', function($post_ID, $post_after, $post_before) {
    if ($post_after->post_type !== 'product') return;
    $old_slug = $post_before->post_name;
    $new_slug = $post_after->post_name;
    if ($old_slug !== $new_slug) {
        $old_url = home_url('/product/' . $old_slug . '/');
        $new_url = home_url('/product/' . $new_slug . '/');
        // Добавляем редирект в опцию (можно заменить на запись в БД)
        $redirects = get_option('wc_product_redirects', []);
        $redirects[$old_url] = $new_url;
        update_option('wc_product_redirects', $redirects);
    }
}, 10, 3);

2. Отслеживание изменений слага категории (product_cat)

add_action('edited_product_cat', function($term_id, $tt_id) {
    $term = get_term($term_id, 'product_cat');
    $old_slug = get_term_meta($term_id, '_old_slug', true);
    $new_slug = $term->slug;
    if ($old_slug && $old_slug !== $new_slug) {
        $old_url = get_term_link($old_slug, 'product_cat');
        $new_url = get_term_link($term_id, 'product_cat');
        if (!is_wp_error($old_url) && !is_wp_error($new_url)) {
            $redirects = get_option('wc_category_redirects', []);
            $redirects[$old_url] = $new_url;
            update_option('wc_category_redirects', $redirects);
        }
    }
    update_term_meta($term_id, '_old_slug', $new_slug);
}, 10, 2);

3. Обработка редиректов на уровне front-end

add_action('template_redirect', function() {
    $redirects = array_merge(
        (array) get_option('wc_product_redirects', []),
        (array) get_option('wc_category_redirects', [])
    );
    $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    if (isset($redirects[$current_url])) {
        wp_redirect($redirects[$current_url], 301);
        exit;
    }
});

Проверка результата после внедрения

  1. Переименуйте товар или категорию в админке WooCommerce.
  2. Попробуйте перейти по старому URL в браузере — должен сработать редирект на новый URL.
  3. Проверьте в консоли разработчика HTTP-код ответа — должен быть 301.
  4. В Google Search Console ошибки 404 по старым URL должны исчезать со временем.

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

  • Редиректы не срабатывают: проверьте, что template_redirect хук подключен и код не конфликтует с другими плагинами кэширования или редиректов.
  • Неправильные URL в редиректах: используйте home_url() и get_term_link() для правильного формирования ссылок.
  • Редиректы на старый URL не добавляются: убедитесь, что слуги действительно изменились и что опции записываются корректно.
  • Проблемы с производительностью: при большом количестве редиректов лучше переносить хранение в отдельную таблицу и оптимизировать поиск.

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

  • Не храните редиректы в опциях, если их много — используйте отдельную таблицу с индексами для быстрого поиска.
  • Добавьте очистку устаревших редиректов при удалении товаров или категорий.
  • Используйте wp_safe_redirect(), если редиректы могут вести на внешние ресурсы.
  • Тестируйте редиректы на локальной среде и после установки на продакшен включите кэширование и проверьте логи ошибок.

Сравнение способов реализации редиректов при смене URL в WooCommerce

МетодПлюсыМинусы
Плагин (например, Redirection)Простота, интерфейс, логированиеЗависимость от плагина, лишняя нагрузка
Код на хуках (как в статье)Контроль, без сторонних плагиновТребует навыков, может нагрузить БД при большом объеме
Редиректы через .htaccessОчень быстро, на уровне сервераСложно автоматизировать, не подходит для динамических URL
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше