Перенос сайта на WordPress с одного сервера на другой — задача, с которой рано или поздно сталкивается любой разработчик или владелец сайта. Несмотря на кажущуюся простоту, процесс может сопровождаться множеством технических нюансов и подводных камней, которые приводят к ошибкам в работе сайта, потере данных или неправильному отображению контента.
Основные причины проблем при переносе WordPress между серверами
Перед тем как перейти к решениям, разберем, почему возникают сложности:
- Различия в конфигурации серверов: версии PHP, MySQL, настройки Apache/Nginx могут отличаться и влиять на работу сайта.
- Неполный перенос файлов и базы данных: забытые или некорректно экспортированные таблицы, файлы плагинов, медиафайлы.
- Неверные пути и URL в базе данных: при смене домена или структуры URL старые ссылки сохраняются, что приводит к ошибкам.
- Проблемы с правами доступа к файлам и папкам: неправильно выставленные chmod/chown влияют на загрузку и выполнение скриптов.
- Кэш и сессии: остатки кэша на сервере или в браузере могут показывать устаревшую версию сайта.
Подготовка к переносу WordPress: пошаговое руководство
Чтобы избежать проблем, нужно тщательно подготовиться:
1. Резервное копирование
Создайте полную резервную копию сайта, включая:
- Все файлы WordPress, включая wp-content, плагины и темы.
- Экспорт базы данных в формате SQL через phpMyAdmin или команду
mysqldump.
Для удобства можно использовать плагин Clearfy Pro, который поможет оптимизировать базу перед экспортом и удалить мусорные данные.
2. Анализ конфигурации сервера
Проверьте версии PHP и MySQL на новом сервере, а также настройки PHP (memory_limit, max_execution_time), которые могут влиять на работу WordPress. Для этого создайте файл phpinfo.php с содержимым:
<?php
phpinfo();
?>и загрузите на оба сервера, чтобы сравнить параметры.
3. Перенос и импорт
Скопируйте файлы на новый сервер через FTP/SFTP, затем импортируйте базу данных. При импорте через phpMyAdmin выберите корректную кодировку (utf8mb4) для сохранения всех символов.
Корректировка базы данных после переноса
Одна из самых частых причин проблем — сохранённые старые URL или пути в базе данных. Для их замены используйте специализированные скрипты, например wpsearchreplace или плагин Clearfy Pro, который предлагает удобный интерфейс для поиска и замены.
Пример замены URL с помощью WP-CLI, если у вас есть доступ к командной строке:
wp search-replace 'http://old-domain.com' 'http://new-domain.com' --skip-columns=guidОбратите внимание, что столбец guid не рекомендуется изменять, чтобы избежать проблем с RSS и плагинами.
Настройка прав и очистка кэша
После переноса необходимо проверить права доступа к файлам и папкам:
- Папки: 755
- Файлы: 644
Неправильные права могут привести к ошибкам 403 или невозможности загрузки медиа.
Также рекомендуем очистить кэш, если вы используете плагины кэширования (например, WP Super Cache или W3 Total Cache), либо удалить содержимое папок wp-content/cache вручную.
Автоматизация переноса с помощью плагинов
Если переносы вы делаете регулярно, стоит использовать специализированные инструменты:
- All-in-One WP Migration — простой плагин для экспорта и импорта сайта целиком.
- Duplicator — позволяет создавать архивы сайта и базы с удобной установкой на новом сервере.
- WP Migrate DB — помогает сделать поиск и замену URL и путей в базе данных.
Для более продвинутого контроля можно подключить WP-Cron задачи для автоматической синхронизации данных между серверами, что пригодится при многосерверных конфигурациях.
Пример пользовательской функции для очистки старых URL в базе данных
Если вы хотите автоматизировать поиск и замену в базе без WP-CLI, попробуйте такую функцию:
function wordpressy_replace_urls_in_db($old_url, $new_url) {
global $wpdb;
$tables = $wpdb->get_results("SHOW TABLES", ARRAY_N);
foreach ($tables as $table) {
$table_name = $table[0];
$columns = $wpdb->get_results("SHOW COLUMNS FROM {$table_name}", ARRAY_A);
foreach ($columns as $column) {
if (strpos($column['Type'], 'text') !== false || strpos($column['Type'], 'varchar') !== false) {
$wpdb->query($wpdb->prepare(
"UPDATE {$table_name} SET {$column['Field']} = REPLACE({$column['Field']}, %s, %s) WHERE {$column['Field']} LIKE %s",
$old_url, $new_url, '%' . $wpdb->esc_like($old_url) . '%'
));
}
}
}
}
// Использование
wordpressy_replace_urls_in_db('http://old-domain.com', 'http://new-domain.com');Эта функция перебирает все таблицы и колонки с типом текста и заменяет старый URL на новый. Используйте с осторожностью и только после резервного копирования.
Особенности при переносе сайтов с мультиязычностью и сложными плагинами
Если ваш сайт использует мультиязычные плагины, например WPML или Polylang, необходимо дополнительно проверить настройки языков и ссылки после переноса.
Для плагинов с собственными таблицами и сложными настройками (например, WooCommerce, WPGPT) убедитесь, что все зависимости и версии совпадают, чтобы избежать конфликтов. Для WPGPT, например, после переноса проверьте корректность ключей API и настроек интеграций через официальную документацию.