В 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 это почти всегда превращается в потерю трафика и лишнюю нагрузку на поддержку.