wplinks.ru wordpress WPLinks.ru

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

В WooCommerce смена URL товара почти всегда оставляет после себя старые ссылки: из поиска, из рассылок, из закладок, из рекламных кампаний. Если ничего не сделать, посетитель увидит 404, а поисковик — цепочку ошибок вместо нормального перехода на новый адрес. На практике задача сводится не к «сделать редирект вообще», а к тому, чтобы перенаправлять старые товарные URL на правильные новые адреса без лишних цепочек и без ручной правки каждого случая.

Ниже — рабочая схема: как диагностировать проблему, какие варианты решения реально использовать в WooCommerce и как проверить результат после внедрения.

Когда проблема проявляется и что именно ломается

Типичный сценарий выглядит так: вы меняете slug товара, переносите товар в другую категорию, включаете более короткие URL или меняете структуру постоянных ссылок. Старый адрес перестает открываться, а на сайте остаются:

  • ссылки из старых карточек и баннеров;
  • URL из индекса поисковиков;
  • внутренние ссылки из статей, категорий и фильтров;
  • ссылки из email-рассылок и мессенджеров;
  • ссылки из рекламных кампаний, которые уже нельзя быстро заменить.

Если товар просто переименовали, а URL изменился, самый безопасный вариант — 301-редирект со старого адреса на новый. Если товар удален окончательно, иногда лучше вести на ближайший аналог или категорию, но не на главную страницу «на всякий случай».

Диагностика: как понять, какие URL нужно перенаправить

Перед настройкой редиректов нужно собрать список старых адресов. Не полагайтесь на память: в WooCommerce старые URL часто всплывают в неожиданных местах. Проверьте:

  • отчеты 404 в Google Search Console;
  • логи сервера или аналитики, если они собирают несуществующие страницы;
  • внутренние ссылки в контенте через поиск по базе;
  • старые sitemap, если они уже успели попасть в индекс;
  • страницы товара в кэше браузера и внешних сервисах.

Если у вас уже есть плагин для аудита ссылок, удобно сначала выгрузить список битых URL, а потом сопоставить их с новыми адресами товаров. Для массовой проверки достаточно пройтись по старым ссылкам вручную и убедиться, что они возвращают именно 404, а не цепочку из нескольких редиректов.

Что считать правильным результатом диагностики

Правильная картина такая: старый товарный URL открывается один раз и сразу отдает 301 Moved Permanently на новый адрес. Не должно быть переходов вида старый URL → промежуточный URL → новый URL. Чем короче цепочка, тем лучше для скорости и для индексации.

Пошаговое решение: редирект через код для конкретных товаров

Если нужно перенаправить ограниченное число товаров, самый прозрачный вариант — добавить правило в тему или в небольшой mu-plugin. Это удобно, когда URL меняются точечно и вам важно видеть логику в коде, а не в интерфейсе плагина.

Пример: старый URL товара /product/old-name/ должен вести на /product/new-name/.

add_action('template_redirect', function () {
    if (is_admin()) {
        return;
    }

    $request_uri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';
    $path = parse_url($request_uri, PHP_URL_PATH);

    $map = [
        '/product/old-name/' => '/product/new-name/',
        '/product/old-name-2/' => '/product/new-name-2/',
    ];

    if (isset($map[$path])) {
        wp_redirect(home_url($map[$path]), 301);
        exit;
    }
});

Этот способ хорош тем, что не зависит от стороннего плагина и не создает лишней нагрузки, если список редиректов небольшой. Но он требует дисциплины: карту старых и новых URL нужно поддерживать вручную.

Как сделать редирект более гибким

Если у товара меняется только slug, а структура остается прежней, можно хранить старый адрес в метаполе и использовать его как источник для перенаправления. Это уже удобнее для магазинов, где URL меняются регулярно.

add_action('template_redirect', function () {
    if (!is_singular('product')) {
        return;
    }

    $product_id = get_queried_object_id();
    $old_path = get_post_meta($product_id, '_old_product_path', true);

    if (!$old_path) {
        return;
    }

    $request_uri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';
    $path = trailingslashit(parse_url($request_uri, PHP_URL_PATH));

    if (trailingslashit($old_path) === $path) {
        wp_redirect(get_permalink($product_id), 301);
        exit;
    }
});

Здесь важно хранить именно путь, а не полный URL, чтобы сайт не зависел от домена, протокола и тестовых поддоменов. Такой подход особенно полезен при переносе магазина между окружениями.

Когда лучше использовать плагин, а когда код

Если редиректов много, а команда не хочет лезть в шаблоны, проще использовать специализированный плагин для управления редиректами. Но у плагина есть компромисс: вы получаете интерфейс и журнал ошибок, но добавляете еще один слой логики и зависимость от настроек.

ПодходКогда подходитМинус
Код в теме или mu-pluginНебольшой список стабильных редиректовНужно поддерживать вручную
Плагин редиректовЧастые изменения URL и работа без разработчикаДополнительная нагрузка и зависимость от интерфейса
Серверные правилаМассовые и предсказуемые шаблоны URLНужен доступ к конфигу сервера

Если вы уже используете инструменты для чистки дублей и SEO-обслуживания сайта, имеет смысл держать редиректы и канонические адреса в одном рабочем процессе. Например, в Clearfy Pro есть набор функций для технической оптимизации WordPress, но использовать его стоит только там, где вам реально нужен такой набор задач, а не ради одного редиректа.

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

После настройки не ограничивайтесь открытием ссылки в браузере. Проверка должна быть технической:

  • старый URL возвращает 301;
  • новый URL открывается с 200 OK;
  • в цепочке нет промежуточных переходов;
  • внутренние ссылки на сайте уже ведут на новый адрес;
  • в Search Console больше не растет число 404 по этому товару.

Проверить ответ сервера можно через curl:

curl -I https://example.com/product/old-name/

В ответе ищите строку HTTP/2 301 или HTTP/1.1 301 Moved Permanently и заголовок Location с новым адресом. Если вместо этого вы видите 200, значит редирект не сработал. Если видите 302, это временный редирект, и для постоянной смены URL он обычно не подходит.

Дополнительно проверьте страницу в режиме инкогнито и очистите кэш, если на сайте стоит кэширующий плагин или серверный кэш. Иногда редирект уже настроен, но старый ответ продолжает отдаваться из кэша.

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

Редирект ведет на главную страницу

Так делают, когда не знают, куда перенаправить старый товар. Для SEO это слабое решение: пользователь теряет контекст, а поисковик видит нецелевое перенаправление. Лучше вести на новый товар, похожий товар или релевантную категорию.

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

Например, старый URL сначала идет на промежуточный адрес, а потом еще раз на новый. Это часто случается после нескольких переименований товара. Решение простое: всегда обновляйте правило так, чтобы старый URL вел сразу на финальный адрес.

Редирект срабатывает только для части URL

Обычно причина в несовпадении слэшей, регистра символов или в том, что в карте редиректов указан путь без учета реального REQUEST_URI. Сравнивайте именно нормализованный путь и проверяйте, как WordPress формирует permalink на конкретном сайте.

Плагин редиректов конфликтует с кэшем

Если редирект настроен, но браузер или CDN продолжает отдавать старый ответ, очистите кэш на всех уровнях: плагин, сервер, CDN, браузер. После этого повторите проверку через curl, а не только через интерфейс сайта.

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

Редиректы — это не только про SEO, но и про стабильность. Несколько практических правил:

  • не храните десятки тысяч редиректов в произвольном PHP-массиве, если они часто меняются; для массовых правил лучше использовать серверный уровень или специализированный механизм;
  • не делайте редирект на основе непроверенных параметров из URL без валидации, иначе можно получить открытый редирект;
  • не используйте 302 там, где URL изменился навсегда;
  • после массового изменения slug обновите внутренние ссылки в контенте, чтобы не держать сайт на редиректах;
  • если товар удален окончательно, проверьте, не стоит ли вернуть 410 для действительно исчезнувших страниц, но делайте это только осознанно.

Если у вас магазин на WooCommerce с большим количеством контента, полезно держать под контролем не только редиректы, но и связанные технические задачи: дубли, устаревшие ссылки, лишние архивы и мусорные URL. Это снижает число 404 и упрощает поддержку сайта.

Что проверить после изменения URL товара в WooCommerce

  • старый адрес отвечает 301 и ведет на новый товар;
  • новый товар открывается без ошибок;
  • внутренние ссылки в карточках, статьях и меню обновлены;
  • кэш очищен на всех уровнях;
  • в Search Console не появляются новые 404 по старому URL;
  • в sitemap остался только актуальный адрес товара.

Если редиректов немного, кодовый вариант обычно быстрее и прозрачнее. Если URL меняются постоянно и этим занимается контент-менеджер, удобнее вынести управление в инструмент с интерфейсом. Главное — не оставлять старые товарные ссылки без ответа: в WooCommerce это почти всегда превращается в потерю трафика и лишнюю нагрузку на поддержку.

×

Время действовать!

Суперцены на
WordPress!

-20%
на премиум темы

Не упусти шанс ⋙