Диагностика проблемы с перенаправлениями после изменения URL товаров
При изменении URL товаров в WooCommerce часто возникают ошибки 404 или потеря SEO-позиций из-за некорректной настройки перенаправлений. Основная причина — отсутствие правильных 301 редиректов со старых адресов на новые. Пользователи и поисковые системы попадают на несуществующие страницы, что ухудшает конверсию и ранжирование.
Проверить проблему можно с помощью инструментов Google Search Console (раздел «Покрытие»), сервисов мониторинга 404 ошибок (например, WPScan), а также вручную — открыв старые URL в браузере.
Пошаговое решение: автоматизация перенаправлений при изменении URL товаров
1. Использование хука для отслеживания изменений URL
WooCommerce хранит URL товаров в виде постоянных ссылок (permalink). Для автоматического создания перенаправлений при изменении URL можно использовать хук post_updated, проверяя, изменился ли слаг товара.
function wpmoney_redirect_on_product_slug_change( $post_ID, $post_after, $post_before ) {
if ( 'product' !== $post_after->post_type ) {
return;
}
// Получаем слаги до и после обновления
$old_slug = $post_before->post_name;
$new_slug = $post_after->post_name;
if ( $old_slug !== $new_slug ) {
$old_url = site_url( '/product/' . $old_slug . '/' );
$new_url = site_url( '/product/' . $new_slug . '/' );
// Сохраняем редирект в опции (будет обрабатываться в следующем шаге)
$redirects = get_option( 'wpmoney_product_redirects', [] );
$redirects[ $old_url ] = $new_url;
update_option( 'wpmoney_product_redirects', $redirects );
}
}
add_action( 'post_updated', 'wpmoney_redirect_on_product_slug_change', 10, 3 );
2. Обработка перенаправлений на этапе загрузки страницы
Теперь нужно перехватывать запросы к старым URL и делать 301 редиректы на новые адреса. Это делается через хук template_redirect.
function wpmoney_handle_product_redirects() {
$redirects = get_option( 'wpmoney_product_redirects', [] );
$current_url = home_url( add_query_arg( null, null ) );
if ( isset( $redirects[ $current_url ] ) ) {
wp_redirect( $redirects[ $current_url ], 301 );
exit;
}
}
add_action( 'template_redirect', 'wpmoney_handle_product_redirects' );
Проверка результата после внедрения
- Измените слаг любого товара в админке WooCommerce.
- Попробуйте открыть старый URL этого товара в браузере.
- Убедитесь, что происходит редирект на новый URL с кодом ответа 301. Проверить код можно через браузерные расширения (например, Redirect Path) или curl:
curl -I https://example.com/product/old-slug/. - Проверьте Google Search Console на отсутствие новых 404 ошибок по старым адресам.
Частые ошибки и как их исправить
- Редиректы не срабатывают: Проверьте, что код подключен в functions.php или в отдельном плагине, и хуки добавлены корректно.
- Несоответствие URL: Убедитесь, что строите старые и новые URL на основе правильной структуры постоянных ссылок WooCommerce. В некоторых случаях может отличаться база URL (например, /shop/product/).
- Зацикливание редиректов: Если старый URL совпадает с новым, проверяйте условие изменения слага и не создавайте редирект в таком случае.
- Переполнение опции с редиректами: Если много изменений, стоит реализовать очистку устаревших редиректов или хранить их в базе данных более эффективно, например, в пользовательской таблице.
Практические советы по безопасности и производительности
- Не используйте сторонние плагины перенаправлений без контроля: они могут замедлять сайт из-за большого количества правил в .htaccess.
- Храните перенаправления в виде опции, если их мало, или в отдельной таблице при большом объеме — это ускорит поиск и уменьшит нагрузку.
- Проверяйте редиректы на наличие циклов и избыточных переходов для сохранения SEO и UX.
- Регулярно удаляйте устаревшие перенаправления, чтобы база не разрасталась.
Сравнение способов реализации перенаправлений в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагины (Redirection, Yoast SEO) | Удобный интерфейс, гибкие правила | Дополнительная нагрузка, риск конфликтов, зависят от плагина |
| Редиректы в .htaccess | Высокая скорость, минимальная нагрузка | Требуют знаний, неавтоматизированы, сложно масштабировать |
| Код на PHP с хуками (как в статье) | Автоматизация, гибкость, интеграция с WooCommerce | Нужно тестировать, возможна нагрузка при большом количестве правил |