Коротка відповідь

Порядок дій, який не ламає сайт:

  1. За добу знизити TTL домену до 300 секунд.
  2. Скачати файли разом із прихованим .htaccess.
  3. Вивантажити базу через phpMyAdmin у .sql.gz.
  4. Залити файли й базу на новий сервер, поправити wp-config.php.
  5. Перевірити копію через файл hosts - до змін у DNS.
  6. Зробити повторний дамп бази і перемкнути A-записи.
  7. Увімкнути SSL, перевірити пошту, старий хостинг тримати ще 7-14 днів.

І головне наперед: якщо домен залишається той самий, міняти URL усередині бази не треба. Половина зламаних переїздів - це саме заміна посилань у базі «про всяк випадок», там, де вона не потрібна.

Що саме переїжджає

WordPress не лежить одним файлом, тож перед стартом варто бачити всю картину:

СкладоваДе вона заразЧим переноситиЧас
Файли сайтупапка public_htmlZIP через файловий менеджер або FTP10-40 хв
База MySQLокремо від файлів, у phpMyAdminекспорт у .sql.gz та імпорт5-20 хв
Домену реєстраторазміна A-записів або NS5 хв - 24 год
SSLне переноситьсяLet's Encrypt у панелі, безкоштовно1-2 хв
Пошта на доменіскриньки на старому серверістворити заново, листи забратиокрема задача
Cron-завданняу панелі старого хостингупереписати руками5 хв

Пошту забувають найчастіше: якщо [email protected] живе на хостингу, а не в Gmail, після зміни DNS листи підуть на новий сервер, де скриньок ще немає. Про це - у Кроці 7.

Крок 1. Підготовка: доступи, версії, TTL

Половина проблем при переїзді - не технічні, а «немає доступу». Зберіть до старту:

  • Доступ до старого хостингу - панель або хоча б FTP і phpMyAdmin, плюс вхід в адмінку WordPress.
  • Доступ до реєстратора домену. Найкритичніше: без нього перемкнути сайт неможливо, а відновлення доступу інколи триває довше за сам переїзд.
  • Версії PHP і MySQL - у WordPress: Інструменти → Стан сайту → Інформація. Якщо сайт роками жив на PHP 7.4, не переносьте його одразу на 8.3: старі теми й плагіни можуть віддати помилку.

Тоді ж знизьте TTL у DNS-записах до 300 секунд. TTL - це час, який провайдери тримають стару адресу в кеші: зі стандартними 3600-14400 секунд частина відвідувачів ще кілька годин ходитиме на старий сервер.

Далі оформіть тариф. Орієнтир для WordPress (ціна - у перерахунку за річної оплати):

ТарифЦінаРесурсиКому
Старт142 грн/міс1 ядро, 2 GB RAM, 10 GB NVMe, 1 сайт, 5 базвізитка, блог без магазину
Оптимал229 грн/міс2 ядра, 3 GB RAM, 20 GB NVMe, 3 сайти, 10 базвелика медіатека
Бізнес350 грн/міс3 ядра, 4 GB RAM, 30 GB NVMe, 5 сайтів, 20 базWooCommerce

Помісячно дорожче: 479, 599 і 759 грн/міс відповідно. DirectAdmin, SSL, копії двічі на добу поза сервером, пошта, WAF ModSecurity і Cloudflare є в кожному плані - порівняння на сторінці тарифів і в блоці тарифів на головній. Помилитись у менший бік не страшно, тариф підвищується без повторного переїзду - як виглядає впирання в ліміти, показував у статті «Перевищено ліміт ресурсів». А от піддомен рахується окремим сайтом: example.com плюс blog.example.com - це вже два.

Крок 2. Копія файлів зі старого хостингу

Переносяться wp-admin, wp-includes, wp-content, wp-config.php, index.php, .htaccess і решта файлів у корені.

Через файловий менеджер

Найшвидший шлях: у панелі старого хостингу зайдіть у корінь сайту, виділіть усе, натисніть Compress і скачайте один ZIP - це в рази швидше, ніж тягнути 40 тисяч дрібних файлів по FTP.

Через FTP

Якщо архівувати панель не вміє - FileZilla чи Cyberduck: хост, порт 21, логін і пароль з листа старого хостера. Обов'язково увімкніть показ прихованих файлів (Сервер → Примусово показувати приховані файли), інакше .htaccess не скопіюється, а без нього всі внутрішні сторінки віддадуть 404.

Не тягніть із собою wp-content/cache, wp-content/updraft, папки бекап-плагінів на кшталт ai1wm-backups і старі архіви в корені: часто це половина обсягу сайту.

Крок 3. Вивантажити базу даних

Спершу подивіться, яка база потрібна. Відкрийте wp-config.php - там є чотири рядки: DB_NAME (ім'я бази), DB_USER (користувач), DB_PASSWORD (пароль) і DB_HOST (майже завжди localhost). Вивантажувати треба саме ту базу, що в DB_NAME, а не «схожу за назвою».

Через phpMyAdmin

Відкрийте phpMyAdmin у панелі старого хостингу, оберіть базу зі списку зліва, вкладка Експорт → спосіб Звичайний → формат SQL → стиснення gzip. Отримаєте файл base.sql.gz - зазвичай у 5-10 разів менший за оригінал.

Якщо база велика

Бази понад 100-200 МБ через браузер вивантажуються погано: експорт обривається на таймауті, імпорт впирається в ліміт завантаження. Тоді - mysqldump по SSH або напишіть мені в Telegram, заллю з консолі.

Крок 4. Розгорнути сайт на новому сервері

Далі все відбувається в DirectAdmin. Бачите панель уперше - тримайте поруч статтю DirectAdmin: перші кроки після замовлення.

Файли

Спочатку додайте домен: Account Manager → Domain Setup → Add New Domain, вводите example.com без www і без https. Панель створить корінь сайту /domains/example.com/public_html/. Заливаєте туди ZIP через System Info & Files → File Manager → Upload files і тиснете Extract. Часта помилка: всередині public_html утворюється ще одна папка з назвою сайту. Правильно, коли index.php і wp-config.php лежать прямо в public_html.

База

Account Manager → MySQL Management → Create new Database: придумуєте ім'я бази, користувача і пароль. DirectAdmin додасть префікс акаунта: ввели wp - реальне ім'я буде admin_wp. Далі phpMyAdmin → щойно створена база → вкладка Імпорт → файл .sql.gz. Розпаковувати архів не треба, phpMyAdmin розуміє gzip.

wp-config.php

Відкрийте wp-config.php у File Manager і впишіть нові DB_NAME, DB_USER та DB_PASSWORD - ті, що показала панель; DB_HOST залишається localhost. Рядок $table_prefix не чіпайте: він має збігатися з тим, що всередині бази, інакше WordPress побачить порожню базу і запропонує встановитись заново. Права доступу: папки 755, файли 644, для wp-config.php краще 640.

Крок 5. Перевірити сайт до перемикання DNS

Цей крок відрізняє спокійний переїзд від нервового: ви відкриваєте копію на новому сервері зі свого комп'ютера, поки для решти світу сайт працює на старому. Робиться через файл hosts.

У Windows це C:\Windows\System32\drivers\etc\hosts (відкрити Блокнотом від імені адміністратора), у macOS і Linux - /etc/hosts через sudo. Додайте два рядки, підставивши замість 198.51.100.10 IP нового сервера з листа: 198.51.100.10 example.com і 198.51.100.10 www.example.com.

Збережіть, повністю закрийте браузер і відкрийте сайт - тепер ви бачите нову копію. Перевіряйте по-справжньому: головна, дві-три внутрішні сторінки, картинки, вхід у /wp-admin, форма зворотного зв'язку, а для магазину - кошик і оформлення замовлення.

Після перевірки обов'язково приберіть ці рядки з hosts. Інакше через тиждень ви бачитимете один сайт, а ваші клієнти - зовсім інший.

Крок 6. Перемкнути домен без втрати даних

Копія працює - переводимо трафік:

  1. Заморозьте зміни на старому сайті на 20-30 хвилин: не публікуйте записи, попередьте менеджерів, що замовлення можуть не дійти. Для магазину краще нічний час.
  2. Зробіть повторний експорт бази і перезалийте на новий сервер: за час переїзду там могли з'явитись свіжі замовлення й заявки. Перед імпортом видаліть таблиці в новій базі (phpMyAdmin: виділити всі → Видалити), інакше дані накладуться одні на одні.
  3. Змініть A-записи у реєстратора: @ і www мають вказувати на IP нового сервера. Альтернатива - прописати NS-сервери хостингу.
  4. Зачекайте. Зі зниженим TTL більшість відвідувачів переходить за 5-15 хвилин, повне розходження по світу - до 24 годин.

Поки DNS розходяться, сайт працює на обох серверах одночасно. Тому старий хостинг не вимикайте одразу - тримайте оплаченим ще 7-14 днів. Це і страховка, і можливість дозабрати забуте.

Крок 7. SSL, пошта і дрібниці після переїзду

SSL випускається заново і лише після того, як домен вказує на новий сервер: Account Manager → SSL Certificates → Free & automatic certificate from Let's Encrypt, відмітити домен і www-версію, потім увімкнути Force SSL. Сертифікат видається за хвилину і поновлюється кожні 90 днів автоматично. Якщо замок є, а браузер лається на «незахищені елементи» - це змішаний контент, розібрано в статті навіщо сайту SSL.

Пошта. Два сценарії. Якщо пошта в Gmail чи Workspace - MX-записи не чіпайте, міняйте лише A. Якщо скриньки жили на старому хостингу - створіть їх наново в E-mail Manager → E-mail Accounts ще до перемикання DNS, а листи заберіть поштовим клієнтом. Форми на сайті часто шлють листи через SMTP-плагін старого сервера - перевірте й це.

Постійні посилання. Зайдіть у Налаштування → Постійні посилання і натисніть «Зберегти», нічого не міняючи: WordPress перезапише .htaccess під новий сервер, і це лікує більшість 404.

Cron. Якщо у wp-config.php є рядок DISABLE_WP_CRON, завдання запускалось системним cron'ом старого хостингу - відтворіть його в Advanced Features → Cron Jobs, інакше зупиняться розсилки й заплановані публікації.

Найчастіші помилки після переїзду

  • «Error establishing a database connection» - у wp-config.php старі дані бази або забутий префікс акаунта в її імені.
  • Біла сторінка - помилка PHP, найчастіше версія не та, на якій сайт жив. Перемкніть її в панелі на 8.1 або 8.2 і дивіться error.log у папці домену.
  • Головна працює, внутрішні сторінки - 404 - не переїхав .htaccess. Пересохраніть постійні посилання.
  • Сайт кидає на старий сервер - або DNS ще не розійшлись, або лишився рядок у файлі hosts.
  • Нескінченний редирект - Force SSL увімкнено одночасно з плагіном примусового https. Залиште щось одне.
  • Зламані посилання після зміни домену - не робіть заміну через SQL REPLACE: частина даних зберігається серіалізовано, і заміна ламає налаштування тем. Потрібен Better Search Replace або WP-CLI.

Чек-лист переїзду

  1. Зібрані доступи: старий хостинг, реєстратор домену, адмінка WordPress.
  2. TTL знижено до 300 секунд за добу до старту, тариф оформлено.
  3. Файли скачані разом із .htaccess, кеш і старі архіви не тягнули.
  4. База вивантажена в .sql.gz, ім'я звірене з wp-config.php.
  5. Домен доданий у панелі, index.php лежить прямо в public_html.
  6. База імпортована, wp-config.php оновлено, $table_prefix не змінювався.
  7. Копія перевірена через hosts: головна, внутрішні, адмінка, форми, кошик.
  8. Повторний дамп бази зроблено безпосередньо перед перемиканням.
  9. A-записи @ і www вказують на новий IP, рядки з hosts прибрані.
  10. SSL випущено, Force SSL увімкнено, змішаного контенту немає.
  11. Пошта на місці, тестовий лист із форми дійшов, cron-завдання відтворені.
  12. Постійні посилання пересохранені, старий хостинг оплачений ще на 7-14 днів.

Підсумок

Переїзд виглядає страшно рівно доти, доки ви не розділите його на чотири незалежні речі: файли, база, домен, пошта. Файли й база копіюються без поспіху - сайт у цей час працює на старому місці. Ризикований лише момент перемикання DNS, і той знешкоджується зниженим TTL та повторним дампом бази. Не переносьте DNS першими, не міняйте $table_prefix, не вимикайте старий хостинг наступного ж дня - і переїзд пройде непомітно.

Якщо часу немає або випадок нетиповий - магазин із живими замовленнями, кілька сайтів на акаунті, база на кілька гігабайтів - напишіть мені в Telegram. Перенесення роблю сам і безкоштовно, зазвичай від 30 хвилин до 2 годин, від вас потрібні лише доступи. Обрати план можна на сторінці хостингу, а якщо все зрозуміло - замовити Старт за 142 грн/міс і переїжджати сьогодні.