Почему важно корректно изменить URL товара в WooCommerce
Изменение URL товара в WooCommerce может привести к множеству проблем, если сделать это неправильно. Часто при смене URL автоматически создаются 301 редиректы, что не всегда желаемо: например, при массовом обновлении адресов или тестировании новых структур ссылок. Неправильное управление URL может вызвать проблемы с SEO, потерю трафика и ошибки на сайте.
Диагностика проблемы: как понять, что URL товара меняется с редиректом
Чтобы проверить, создаются ли редиректы автоматически при изменении URL, воспользуйтесь следующими шагами:
- Измените URL товара в админке WooCommerce (поле «Ярлык» или slug в настройках товара).
- Сохраните изменения.
- Откройте старую ссылку товара в браузере и посмотрите, происходит ли переадресация на новый URL (код ответа HTTP 301 или 302).
- Используйте инструменты разработчика браузера или curl, например:
curl -I https://example.com/staryj-url-tovara - Если возвращается 301/302, значит редирект настроен автоматически.
Это поведение WooCommerce и WordPress по умолчанию, чтобы не потерять SEO-ценность. Но бывают ситуации, когда редиректы не нужны.
Как изменить URL товара в WooCommerce без создания автоматического редиректа
По умолчанию WordPress создаёт редирект с помощью функции wp_old_slug_redirect(), которая срабатывает на основе сохранённых старых ярлыков (slug). Для отключения такого поведения с товарами WooCommerce нужно:
1. Отключить сохранение старого slug при обновлении товара
Добавьте следующий код в файл functions.php вашей темы или в плагин для кастомных функций:
add_filter('wp_old_slug_redirect_post_type', function($post_type) {
// Отключаем редиректы только для товаров
if ($post_type === 'product') {
return false;
}
return $post_type;
});Этот фильтр запрещает создавать редиректы для типа записи product.
2. Удалить сохранённые старые слуги у продуктов
WordPress хранит старые slug в метаданных _wp_old_slug. Их нужно удалить, чтобы редиректы не срабатывали:
function delete_old_slugs_for_products() {
global $wpdb;
$wpdb->query(
"DELETE FROM $wpdb->postmeta WHERE meta_key = '_wp_old_slug' AND post_id IN (
SELECT ID FROM $wpdb->posts WHERE post_type = 'product'
)"
);
}
delete_old_slugs_for_products();Запустите этот код один раз (например, через WP-CLI или временно добавив в functions.php и обновив админку), после чего удалите его.
Проверка результата: как убедиться, что редирект не создаётся
- Измените URL товара в админке.
- Сохраните.
- Откройте старый URL в браузере или с помощью
curl -I. - Убедитесь, что возвращается 404 или страница не переадресовывается.
Пример команды для проверки:
curl -I https://example.com/staryj-url-tovara
HTTP/1.1 404 Not FoundЧастые ошибки при отключении редиректов WooCommerce
- Код добавлен не в ту тему или файл. Если вы используете дочернюю тему, убедитесь, что код в её
functions.php. - Кэширование. Кэш плагинов или сервера может показывать старое поведение — очистите кэш.
- Плагины безопасности или SEO. Некоторые плагины могут сами создавать редиректы, проверьте их настройки.
- Не удалены старые slug. Если не удалить метаданные
_wp_old_slug, редирект останется.
Практические рекомендации по безопасности и производительности
- Отключение редиректов может привести к появлению 404 ошибок для старых URL. Убедитесь, что это не влияет на SEO или пользовательский опыт.
- Если планируется массовое изменение URL, лучше сделать временные редиректы или уведомить поисковые системы.
- Регулярно очищайте метаданные
_wp_old_slugдля поддержания чистоты базы данных. - Для массовых изменений URL используйте WP-CLI скрипты для автоматизации и контроля.
Сравнение вариантов изменения URL товара в WooCommerce
| Метод | Создаёт редирект | Применимость | Плюсы | Минусы |
|---|---|---|---|---|
| Изменение slug в админке (по умолчанию) | Да | Для большинства случаев | Сохраняет SEO, не ломает ссылки | Невозможно отключить редиректы |
Отключение редиректов через фильтр wp_old_slug_redirect_post_type + удаление метаданных | Нет | Если нужно сменить URL без редиректа | Контроль над URL, не создаёт лишних редиректов | Появление 404 на старых URL, можно потерять SEO |
| Использование плагинов для управления редиректами | По настройке | Для комплексного управления ссылками | Гибкость, возможность создавать правила | Нагрузка на сайт, нужно настраивать |