Переезд сайта обычно откладывают до последнего: старый сервер тормозит, тариф дорожает, провайдер закрывает дата-центр. А потом переносят в спешке, с часом простоя и потерянными заказами. Перенос WordPress можно сделать так, что посетители его не заметят.
Коротко
Что получится
- Переезд без простоя для посетителей
- Сайт, проверенный до переключения домена
- Старый сервер как точка отката
Что понадобится
- Резервная копия вне обоих серверов
- Новый сервер с PHP и базой не старее текущих
- WP-CLI, rsync и доступ к DNS домена
Содержание
Как устроен перенос без простоя
Сайт на WordPress состоит из двух частей, и перенести нужно обе в согласованном состоянии.
Файлы
Ядро, темы, плагины и загруженные картинки в wp-content/uploads.
База данных
Записи, страницы, настройки и пользователи.
Секрет в порядке действий: новый сервер полностью проверяется до того, как на него переключается домен.
- Копируем файлы и базу, пока старый сервер работает.
- Проверяем сайт, не трогая DNS.
- Синхронизируем изменения за время проверки.
- Переключаем домен.
- Держим старый сервер неделю-две как страховку.
Из смешанных шагов: DNS переключают до проверки или копируют базу через час после файлов.
1Подготовка
Сделайте резервную копию файлов и базы на старом сервере и сохраните её вне обоих серверов. Как настроить копии и проверить восстановление, мы разобрали в отдельной статье.
Понизьте TTL DNS-записей до 300 секунд за сутки до переезда, если DNS домена обслуживает регистратор: тогда посетители уйдут на новый сервер за минуты, а не за часы.
С включённым прокси Cloudflare этот шаг не нужен: смена IP в записи применяется почти мгновенно.
Подготовьте новый сервер с той же или более новой версией PHP и базы данных. Из инструкции как развернуть WordPress на своём сервере нужны шаги с подготовкой сервера, веб-сервером и пустой базой данных, сам WordPress ставить заново не нужно.
2Копируем базу данных
Подсвеченные значения замените на свои.
На старом сервере выгрузите базу через WP-CLI:
# на старом сервере
cd /var/www/example.com
wp db export /tmp/site.sql --allow-root
На новом сервере создайте базу и пользователя, как при обычной установке, и заберите выгрузку:
# на новом сервере
rsync -avz root@СТАРЫЙ_IP:/tmp/site.sql /tmp/
Импорт выполним в шаге 4, после копирования файлов: WP-CLI должен видеть wp-config.php.
3Копируем файлы
Копируйте файлы через rsync: он переносит права, продолжает прерванную передачу и при повторном запуске докачивает только изменения.
# на новом сервере
rsync -avz --progress root@СТАРЫЙ_IP:/var/www/example.com/ /var/www/example.com/
chown -R www-data:www-data /var/www/example.com
Без неё rsync создаст вложенный каталог example.com/example.com.
4Импорт и настройка
Импортируйте базу и укажите новые данные доступа к ней в wp-config.php:
cd /var/www/example.com
sudo -u www-data wp config set DB_NAME wordpress
sudo -u www-data wp config set DB_USER wpuser
sudo -u www-data wp config set DB_PASSWORD 'ПАРОЛЬ_НОВОЙ_БАЗЫ'
sudo -u www-data wp db import /tmp/site.sql
Домен прежний
Адреса в базе менять не нужно.
Домен новый
Замените адреса командой wp search-replace: она корректно обрабатывает сериализованные данные.
sudo -u www-data wp search-replace 'https://старый-домен.ru' 'https://example.com' --skip-columns=guid
Ручная замена ломает настройки виджетов и плагинов: в сериализованных данных хранится длина строки, и после замены она не совпадает.
5Проверяем сайт до переключения DNS
Главный шаг для переезда без простоя. Откройте на своём компьютере файл hosts и направьте домен на новый сервер только для себя.
| Система | Файл hosts |
|---|---|
| Windows | C:\Windows\System32\drivers\etc\hosts |
| macOS и Linux | /etc/hosts |
Добавьте строку:
IP_НОВОГО_СЕРВЕРА example.com www.example.com
Теперь ваш браузер открывает сайт с нового сервера, а остальные посетители продолжают видеть старый.
Проверьте на новом сервере:
С прокси Cloudflare строка в hosts ведёт браузер напрямую на сервер, минуя Cloudflare. Для проверки по HTTPS на новом сервере уже нужен сертификат, варианты в следующем шаге.
6Сертификат на новом сервере
Обычный выпуск Let's Encrypt требует, чтобы домен уже указывал на сервер. Чтобы HTTPS работал сразу после переключения, есть три варианта.
Копия действующего сертификата
Перенесите его со старого сервера вместе с ключом, а после переключения DNS выпустите новый.
Origin CA от Cloudflare
Если домен работает через прокси Cloudflare в режиме Full (strict). О режимах - в статье Cloudflare для новичка.
Выпуск через DNS-проверку
Она не зависит от того, куда сейчас указывает домен.
7Финальная синхронизация
Пока вы проверяли сайт, на старом сервере могли появиться записи, комментарии или заказы. Перед переключением включите там режим обслуживания, чтобы данные перестали меняться:
# на старом сервере
wp maintenance-mode activate --allow-root
Повторите выгрузку базы и rsync файлов: второй проход займёт секунды, потому что копируются только изменения. Затем снова импортируйте базу на новом сервере.
Сайт-визитка или блог без комментариев, если за время проверки на сайте ничего не публиковали.
8Переключаем доменминуты
Измените A-записи домена и www на IP нового сервера. Уберите строку из hosts, чтобы видеть сайт как посетители.
9Не выключайте старый сервер сразу1-2 недели
Кэш DNS
Часть посетителей и роботов может обращаться к старому IP.
Точка отката
Пригодится, если на новом сервере всплывёт проблема.
Отключайте старый сервер, только когда в его журналах не осталось обращений.
Частые ошибки при переносе
Не хватает расширения PHP или стоит другая версия PHP.
Сравните вывод php -m на обоих серверах
Файлы в wp-content/uploads принадлежат не пользователю веб-сервера.
Верните права командой chown из шага 3
В Nginx не настроен try_files или в Apache не включён mod_rewrite.
Настройте try_files или включите mod_rewrite
При смене домена не выполнили wp search-replace или адрес закэширован плагином кэша.
Замените адреса из шага 4, проверьте плагин кэша
Как это устроено в Kesyio
Проверка сервера перед переездом
Если новый сервер подключён к Kesyio, перед переносом удобно проверить его состояние прямо в кабинете. Проверка покажет:
- работают ли веб-сервер и база данных;
- насколько заполнен диск;
- сколько доменов уже размещено на сервере.
Это помогает не переехать на сервер, где через месяц закончится место. Автоматического переноса существующего сайта между серверами в Kesyio нет: перенос выполняется по шагам из этой статьи.
Вопросы и ответы
Сколько времени занимает перенос сайта?
Для блога или сайта-визитки размером до нескольких гигабайт перенос с проверкой занимает час-два. Больше всего времени уходит на копирование загруженных файлов и проверку, а само переключение DNS - минуты.
Можно ли перенести сайт плагином?
Да, плагины миграции упаковывают файлы и базу в архив и распаковывают на новом сервере. Для небольших сайтов это удобно, но на крупных такие архивы упираются в лимиты загрузки и памяти, и перенос через rsync и WP-CLI надёжнее.
Потеряются ли позиции в поиске после переноса?
Если домен и адреса страниц не меняются, нет: для поисковиков это тот же сайт. Риск появляется, только если сайт долго недоступен или отвечает ошибками во время переезда.
Нужно ли менять что-то в Search Console?
При переносе на новый сервер без смены домена - нет. При смене домена используйте инструмент смены адреса в Search Console и настройте 301-редиректы со всех старых адресов.
Итог
- Сначала полная копия и проверка на новом сервере, потом переключение домена.
- Перед началом: резервная копия вне обоих серверов и низкий TTL.
- Проверка через
hostsпоказывает новый сервер только вам. - Финальная синхронизация и старый сервер в запасе делают переезд рутиной на пару часов.


