Диагностика проблемы с неработающими ссылками в WooCommerce после смены домена
После смены домена в WordPress-магазине на WooCommerce часто возникает ситуация, когда ссылки на товары, категории или страницы корзины перестают работать, выдавая ошибку 404 или перенаправляя на старый домен. Это связано с тем, что в базе данных и настройках сайта остались старые URL, а также с тем, что постоянные ссылки (permalinks) не были корректно обновлены.
Основные симптомы:
- Страницы товаров возвращают ошибку 404;
- Категории товаров не открываются;
- Ссылки на корзину или оформление заказа ведут на старый домен;
- В админке WooCommerce видны ссылки со старым доменом.
Пошаговое решение: обновление ссылок и очистка кэша
1. Проверка настроек WordPress и WooCommerce
Перейдите в Настройки > Общие и убедитесь, что значения Адрес WordPress (URL) и Адрес сайта (URL) обновлены на новый домен.
2. Обновление постоянных ссылок
Перейдите в Настройки > Постоянные ссылки и нажмите кнопку Сохранить изменения без изменений. Это сбросит и обновит правила URL в .htaccess.
3. Массовая замена URL в базе данных
Для корректной замены всех ссылок со старого домена на новый в базе данных используйте WP-CLI или плагин Clearfy Pro с функцией Search and Replace.
Пример команды WP-CLI:
wp search-replace 'https://staryj-domain.ru' 'https://novyj-domain.ru' --skip-columns=guid --all-tables
Опция --skip-columns=guid важна, чтобы не менять ссылки в поле GUID, что может повредить RSS-ленты.
4. Очистка кэша
Если на сайте установлен кеширующий плагин (например, WP Super Cache, W3 Total Cache), необходимо выполнить полную очистку кэша.
Также, если используется серверное кэширование (например, Redis, Memcached), очистите его через панель управления или SSH.
5. Проверка .htaccess и настроек сервера
Убедитесь, что в .htaccess нет правил, жестко указывающих старый домен. Если есть, замените их или удалите.
Проверка результата после внедрения
- Откройте в браузере страницу любого товара и убедитесь, что она открывается без ошибки 404.
- Проверьте, что ссылки в меню категорий ведут на новый домен.
- Перейдите на страницу корзины и оформления заказа, проверьте адрес в адресной строке.
- В админке в списке товаров проверьте, что ссылки отображаются с новым доменом.
Частые ошибки и как их исправить
- Ошибка: После замены URL некоторые страницы все равно ведут на старый домен.
Причина: Кэш браузера или плагинов не очищен.
Решение: Очистите кэш браузера, а также кэш плагинов и сервера. - Ошибка: При выполнении
search-replaceсломались ссылки RSS и GUID.
Причина: Замена в поле GUID.
Решение: Используйте параметр--skip-columns=guidпри WP-CLI или исключите поле GUID в плагинах. - Ошибка: Ссылки WooCommerce ведут на старый домен, хотя WordPress настроен правильно.
Причина: Неверные настройки в базе данных WooCommerce.
Решение: Проверьте таблицыwp_options(опцииwoocommerce_cart_page_id,woocommerce_checkout_page_id) и обновите при необходимости.
Практические советы по безопасности и производительности
- Перед массовой заменой URL обязательно сделайте резервную копию базы данных.
- Для больших сайтов используйте WP-CLI — это быстрее и надежнее, чем плагины.
- После смены домена настройте 301 редиректы со старого домена на новый, чтобы сохранить SEO и не потерять посетителей.
- Если используете CDN, обновите настройки, чтобы он работал с новым доменом.
- Проверяйте, что SSL-сертификат корректно установлен на новом домене, иначе WooCommerce и WordPress могут выдавать предупреждения безопасности.
Сравнение вариантов обновления URL
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| WP-CLI search-replace | Быстро, полно, контролируемо | Требует доступа к серверу и навыков | Для опытных пользователей и больших сайтов |
| Плагин Clearfy Pro | Удобный интерфейс, дополнительные функции очистки | Нагрузка на сайт, не всегда безопасно для больших БД | Для небольших сайтов и тех, кто не владеет терминалом |
| Ручная замена через phpMyAdmin | Прямой контроль над запросами | Риск ошибок, требует SQL-знаний | Только при полном понимании SQL и структуры БД |
Пример кода для обновления URL в пользовательских мета-данных
function update_custom_meta_urls( $old_url, $new_url ) {
global $wpdb;
$meta_keys = [ '_custom_link', '_product_url' ]; // Пример ключей мета-данных
foreach ( $meta_keys as $key ) {
$wpdb->query( $wpdb->prepare(
"UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key = %s",
$old_url, $new_url, $key
));
}
}
// Использование
update_custom_meta_urls('https://staryj-domain.ru', 'https://novyj-domain.ru');
Этот код можно разместить в functions.php темы или в отдельном плагине для однократного запуска.
Как проверить ссылки программно через WP-CLI
wp post list --post_type=product --fields=ID,post_title
# Затем для каждого ID проверить мета-поля или контент на наличие старого домена
wp post meta get 123 _custom_link
# или
wp post get 123 --field=post_content | grep 'staryj-domain.ru'