Перенос WordPress на другой хостинг занимает пару часов, а разгребают последствия иногда неделю. Файлы и база копируются без сюрпризов, ломается всё вокруг: адреса внутри базы, права на файлы, почта, кэш и сертификат. Ниже порядок, по которому мы переезжаем сами и возим клиентские сайты.
Свой сайт мы перевозили в этом году, вместе с ним ехали блог и медиатека. Часть граблей из списка ниже собрана именно тогда, остальное накопилось за клиентские переезды.
Почему простой переезд превращается в аварию
WordPress не хранит адрес сайта в одном месте. Он лежит в настройках базы, в ссылках внутри статей, в путях к картинкам, в настройках темы, в кэше. Скопировать файлы и дамп легко, а собрать эти адреса воедино получается не с первого раза.
Типичная картина после неаккуратного переезда: главная открывается, внутренние страницы отдают 404, часть картинок не грузится, настройки темы сброшены к заводским. Чинится каждая проблема за пять минут, но чинить приходится на живом сайте, куда уже идёт реклама. Отсюда правило: домен переключают только после того, как копия на новом сервере проверена.
Подготовка: что собрать до того, как что-то трогать
Полная копия файлов и базы. Архив всей папки сайта плюс дамп базы, скачанный к себе на диск. Это не тот бэкап, который делает хостинг по расписанию, а отдельный снимок перед работой. Про регулярные копии писали в статье Бэкап сайта.
Список плагинов и версий. Активные плагины, версия PHP и MySQL на старом хостинге. Если на новой площадке PHP свежее на две версии, старый плагин может не запуститься. Какие расширения держать, а какие выбрасывать, разбирали в материале про плагины WordPress.
Доступы. Панели обоих хостингов, FTP или SSH, база, регистратор домена, почта. Отдельно: у кого физически лежит домен. Бывает, что он зарегистрирован на бывшего подрядчика, и это выясняется в момент переключения.
Замер скорости "до". Главная и одна внутренняя страница, время ответа сервера и полной загрузки. Без него потом не понять, стало быстрее или показалось.
TTL у DNS-записей. За сутки до переезда снизить время жизни записей до 300 секунд. Тогда переключение разлетится по сети за минуты, а не за полдня.
Три способа переноса и когда какой уместен
| Способ | Кому подходит | Риск |
|---|---|---|
| Вручную: архив файлов плюс дамп базы | Любой сайт, особенно тяжёлый магазин | Забыть про сериализованные данные |
| Плагин миграции | Сайты до 2-3 ГБ, блог или визитка | Обрыв по лимитам PHP на середине |
| Средствами хостинга | Когда на новой площадке есть готовый перенос | Переносит не всё, часто пропускает крон |
Ручной способ надёжнее, потому что вы видите каждый шаг. Из плагинов чаще встречаются All-in-One WP Migration, Duplicator и WP Migrate: бесплатных версий хватает для обычного сайта.
Перенос силами хостинга для простого блога честно работает, но он почти никогда не переносит плановые задачи и нестандартные настройки веб-сервера. Список проверок после него тот же самый.
Адреса внутри базы: шаг, на котором ломается больше всего
Сайт временно доступен по техническому адресу нового хостинга, а потом станет доступен по своему домену. Значит, адреса в базе надо менять. Здесь и начинается интересное.
Часть настроек WordPress хранит в сериализованном виде: перед каждой строкой записана её длина в символах, вида s:21:"https://example.ru/wp". Если заменить текст обычным поиском и заменой в дампе, текст поменяется, а число 21 останется прежним, и PHP такую запись прочитать не сможет.
Внешне это выглядит как слетевшие настройки: тема сбросилась, виджеты пропали, у слайдера пустые поля. Данные не потеряны, они просто перестали читаться. Правильных способов два:
- WP-CLI:
wp search-replace 'https://old.ru' 'https://new.ru' --all-tables --dry-run, посмотреть отчёт, затем повторить без--dry-run. Длины пересчитываются сами. - Плагин миграции, если переносите им: внутри он делает то же самое.
Отдельно правятся siteurl и home в настройках и константы в wp-config.php, если адрес прописан там жёстко. Этот файл вообще стоит открыть глазами: там же данные подключения к базе, на новом хостинге они другие.
Про права на файлы. После распаковки архива под другим пользователем WordPress теряет запись в папку загрузок. Рабочие значения: 755 на папки, 644 на файлы, владелец совпадает с пользователем веб-сервера. Симптом: медиафайлы не загружаются, обновления просят FTP-доступ.
Почта и DNS переезжают отдельно от сайта
Самая обидная поломка при переезде не в сайте, а в почте. Они связаны только именем домена, а живут в разных местах и настраиваются разными записями.
Когда вы переводите домен на DNS-серверы нового хостинга, тот подставляет свою зону по умолчанию: A-запись на свой сервер и MX-записи на свою почту. Если почта была на Яндексе или на старом хостинге, письма начинают приходить в пустой ящик, а отправитель ошибки не видит. Выясняется это через день-два по звонку "я вам писал".
Что делать: перед сменой DNS выписать текущую зону целиком и перенести в новую все записи, кроме A-записи сайта. Особенно MX и TXT-записи почты, без них ваши письма уходят в спам.
Проще другой путь: оставить DNS там, где они были, и поменять единственную A-запись на новый IP-адрес. Тогда почта переезда вообще не замечает. Мы почти всегда идём так.
Проверка на тестовом адресе до переключения
Копию проверяют, пока домен ещё смотрит на старый сервер. Способа два.
Технический адрес хостинга. Быстро, но WordPress начнёт подставлять его в ссылки, и потом придётся переписывать обратно. Годится для беглого взгляда.
Файл hosts на своём компьютере. Прописываете новый IP и домен: для вас сайт открывается уже с нового сервера по нормальному адресу, для всех остальных пока со старого. В базе менять ничего не нужно, так и проверяем.
Смотреть надо внутренние страницы, админку, картинки, отправку формы, тестовый заказ в магазине. Если 404 отдают все страницы кроме главной, дело в постоянных ссылках: зайти в их настройки и сохранить заново, это пересоберёт правила веб-сервера.
Отдельно: на тестовой копии индексация закрыта, после переключения её надо открыть. Забытая галочка "попросить поисковые системы не индексировать сайт" выносит сайт из выдачи за неделю.
Порядок переключения с минимальным простоем
Домен трогают последним, когда всё остальное готово.
- За сутки снизить TTL DNS-записей до 300 секунд.
- Поднять копию на новом хостинге и проверить через hosts.
- Выпустить SSL-сертификат заранее. Бесплатный Let's Encrypt делается за минуты, но требует, чтобы домен уже указывал сюда, поэтому у многих хостеров есть выпуск по DNS-проверке.
- Закрыть приём заказов и правки на старом сайте на время финальной синхронизации.
- Снять свежий дамп базы со старого сервера и залить поверх копии, чтобы не потерять заявки последних часов.
- Поменять A-запись на новый IP.
- Дождаться разлёта записей, обычно 5-30 минут при низком TTL.
- Проверить сайт, включить кэш, вернуть TTL к обычному значению.
Старый хостинг не отключайте недели две. Он стоит копейки, а пригодиться может в любой момент.
Если вместе с переездом меняются адреса страниц, понадобятся постоянные редиректы: как их собрать, разобрано в статье про 301 редирект. Общие принципы переезда независимо от движка есть в материале Как перенести сайт на другой хостинг.
Что проверить после переезда
Чек-лист первых суток, по нему и принимаем работу:
- Главная и три-четыре внутренние страницы открываются, в адресной строке замок.
- Постоянные ссылки: категории, статьи, карточки товаров.
- Картинки в статьях и медиатека, загрузка нового файла проходит.
- Формы: тестовая заявка дошла письмом. Письма с нового сервера часто попадают в спам, пока не настроены SPF и DKIM.
- Оплата в магазине: тестовый платёж, возврат на страницу успеха, статус заказа.
- Файл robots.txt и настройка индексации в админке.
- Плановые задачи: у WordPress свой планировщик, и на кэшированном сайте он может простаивать. Проверьте, выходят ли отложенные публикации.
- Кэш и оптимизация включены заново, скорость замерена и сравнена с цифрой "до".
- Сертификат: срок действия и автопродление.
- Резервное копирование на новой площадке настроено сразу, а не потом.
Если пошло не так: откат
План отката пишется до переезда, а не в момент паники. Он короткий, потому что старый сайт всё это время цел: возвращаете A-запись на старый IP, ждёте несколько минут, проверяете. Ради этого старый хостинг и не отключают сразу.
Опасный момент один: заказы и заявки, успевшие прийти на новый сервер. Если откатываетесь через несколько часов, выгрузите их из новой базы и перенесите руками. Поэтому финальную синхронизацию базы и делают прямо перед сменой записи, чтобы окно расхождения было минимальным.
Что из этого главное
Переезд WordPress ломается не в копировании, а в мелочах вокруг: сериализованные данные в базе, почтовые записи в DNS, права на файлы, забытая галочка индексации. Все они лечатся заранее, если копия проверена до переключения домена, а старый сервер живёт ещё пару недель. Технически работа занимает 2-4 часа для обычного сайта и день для магазина с интеграциями.
Заодно переезд повод пересмотреть саму площадку: требования к ней разбирали в статье про хостинг для WordPress. А если чек-лист выше выглядит понятно, но заниматься этим некогда, переезд входит в наши работы по поддержке сайтов: забираем доступы, везём и остаёмся на связи первые дни после переключения.

