Диагностика проблемы с переадресацией после изменения URL товара
В WooCommerce изменение URL товара (slug) без корректной настройки 301 редиректа приводит к ошибке 404 и потере SEO трафика. Основная причина — отсутствие автоматического обновления правил переадресации на старые ссылки.
Проверить проблему можно так:
- Измените URL товара в админке WooCommerce (редактирование «ЧПУ» товара).
- Попробуйте зайти на старый URL товара в браузере.
- Если появляется страница 404, значит редирект не настроен.
Для диагностики также используйте инструменты, например, httpstatus.io, чтобы увидеть статус HTTP при переходе по старому URL.
Пошаговое решение: как автоматически настроить редиректы после смены URL товара
1. Добавление кастомного кода для записи старого URL и создания редиректа
WooCommerce не создаёт редиректы автоматически. Нужно записывать старый URL до изменения и при сохранении настроить редирект с помощью 301. Ниже пример кода, который:
- Сохраняет предыдущий slug товара в метаполе.
- При изменении URL создаёт правило редиректа.
add_action('save_post_product', 'wpdir_woocommerce_redirect_old_slug', 10, 3);
function wpdir_woocommerce_redirect_old_slug($post_ID, $post, $update) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
$old_slug = get_post_meta($post_ID, '_old_slug', true);
$new_slug = $post->post_name;
if ($update && $old_slug && $old_slug !== $new_slug) {
// Добавим редирект со старого URL на новый
add_filter('template_redirect', function() use ($old_slug, $new_slug) {
$requested_slug = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if ($requested_slug === 'product/' . $old_slug) {
wp_redirect(site_url('/product/' . $new_slug), 301);
exit;
}
});
}
// Обновляем метаполе старого slug
update_post_meta($post_ID, '_old_slug', $new_slug);
}
2. Очистка пермалинков
После изменения URL товара всегда переходите в Настройки > Постоянные ссылки и нажимайте «Сохранить изменения» без изменений, чтобы обновить правила перезаписи.
Проверка результата после внедрения
- Измените URL любого товара.
- Попробуйте зайти на старый URL — должен произойти 301 редирект на новый.
- Проверьте заголовки HTTP с помощью curl или онлайн-сервисов. Например:
curl -I https://example.com/product/starij-slug
Ответ должен содержать HTTP/1.1 301 Moved Permanently и заголовок Location с новым URL.
Частые ошибки и как их исправить
- Редирект не срабатывает: проверьте, что код добавлен в functions.php активной темы или плагина, и что нет конфликтов с другими редиректами.
- Изменение slug не сохраняется в метаполе: убедитесь, что при сохранении поста вызывается
update_post_metaи что не происходит автосейв без обновления. - Переадресация циклична: проверьте, что условие сравнивает именно старый slug и не вызывает редирект, если URL уже новый.
- Перманентные ссылки не обновлены: всегда сохраняйте структуру постоянных ссылок после правок URL.
Практические советы по безопасности и производительности
- Не добавляйте слишком сложные функции в хук
template_redirect. В нашем примере фильтр добавляется условно, только при сохранении поста — для более стабильной работы лучше реализовать редиректы через сервер (htaccess/nginx) или использовать специализированные плагины. - Для массового управления редиректами рекомендуем использовать плагины типа Redirection, которые позволяют импортировать и контролировать перенаправления с удобным интерфейсом.
- Если у вас много товаров и частые изменения URL, храните редиректы в отдельной таблице или используйте transient API для кеширования, чтобы не нагружать сайт.
Сравнение вариантов реализации редиректов после изменения URL товара
| Метод | Преимущества | Недостатки | Пример использования |
|---|---|---|---|
| Код в functions.php | Быстрая настройка, полный контроль | Требует навыков, возможны ошибки, нагрузка при некорректной реализации | Пример кода выше |
| Плагин Redirection | Удобный интерфейс, логирование, импорт/экспорт | Дополнительный плагин, может влиять на скорость | Установка через админку, настройка правил |
| Редиректы на уровне сервера (htaccess/nginx) | Максимальная производительность, отсутствие нагрузки на WP | Требует доступа к серверу, сложность настройки для динамических URL | Правила в .htaccess или конфигурации nginx |
Для большинства магазинов WooCommerce оптимальным будет комбинирование плагина для управления редиректами с базовой автоматизацией через код, как описано выше.