Коротка відповідь
Порядок дій, який не ламає сайт:
- За добу знизити TTL домену до 300 секунд.
- Скачати файли разом із прихованим
.htaccess. - Вивантажити базу через phpMyAdmin у
.sql.gz. - Залити файли й базу на новий сервер, поправити
wp-config.php. - Перевірити копію через файл
hosts- до змін у DNS. - Зробити повторний дамп бази і перемкнути A-записи.
- Увімкнути SSL, перевірити пошту, старий хостинг тримати ще 7-14 днів.
І головне наперед: якщо домен залишається той самий, міняти URL усередині бази не треба. Половина зламаних переїздів - це саме заміна посилань у базі «про всяк випадок», там, де вона не потрібна.
Що саме переїжджає
WordPress не лежить одним файлом, тож перед стартом варто бачити всю картину:
| Складова | Де вона зараз | Чим переносити | Час |
|---|---|---|---|
| Файли сайту | папка public_html | ZIP через файловий менеджер або FTP | 10-40 хв |
| База MySQL | окремо від файлів, у phpMyAdmin | експорт у .sql.gz та імпорт | 5-20 хв |
| Домен | у реєстратора | зміна A-записів або NS | 5 хв - 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. Перемкнути домен без втрати даних
Копія працює - переводимо трафік:
- Заморозьте зміни на старому сайті на 20-30 хвилин: не публікуйте записи, попередьте менеджерів, що замовлення можуть не дійти. Для магазину краще нічний час.
- Зробіть повторний експорт бази і перезалийте на новий сервер: за час переїзду там могли з'явитись свіжі замовлення й заявки. Перед імпортом видаліть таблиці в новій базі (phpMyAdmin: виділити всі → Видалити), інакше дані накладуться одні на одні.
- Змініть A-записи у реєстратора:
@іwwwмають вказувати на IP нового сервера. Альтернатива - прописати NS-сервери хостингу. - Зачекайте. Зі зниженим 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.
Чек-лист переїзду
- Зібрані доступи: старий хостинг, реєстратор домену, адмінка WordPress.
- TTL знижено до 300 секунд за добу до старту, тариф оформлено.
- Файли скачані разом із
.htaccess, кеш і старі архіви не тягнули. - База вивантажена в
.sql.gz, ім'я звірене зwp-config.php. - Домен доданий у панелі,
index.phpлежить прямо вpublic_html. - База імпортована,
wp-config.phpоновлено,$table_prefixне змінювався. - Копія перевірена через
hosts: головна, внутрішні, адмінка, форми, кошик. - Повторний дамп бази зроблено безпосередньо перед перемиканням.
- A-записи
@іwwwвказують на новий IP, рядки зhostsприбрані. - SSL випущено, Force SSL увімкнено, змішаного контенту немає.
- Пошта на місці, тестовий лист із форми дійшов, cron-завдання відтворені.
- Постійні посилання пересохранені, старий хостинг оплачений ще на 7-14 днів.
Підсумок
Переїзд виглядає страшно рівно доти, доки ви не розділите його на чотири незалежні речі: файли, база, домен, пошта. Файли й база копіюються без поспіху - сайт у цей час працює на старому місці. Ризикований лише момент перемикання DNS, і той знешкоджується зниженим TTL та повторним дампом бази. Не переносьте DNS першими, не міняйте $table_prefix, не вимикайте старий хостинг наступного ж дня - і переїзд пройде непомітно.
Якщо часу немає або випадок нетиповий - магазин із живими замовленнями, кілька сайтів на акаунті, база на кілька гігабайтів - напишіть мені в Telegram. Перенесення роблю сам і безкоштовно, зазвичай від 30 хвилин до 2 годин, від вас потрібні лише доступи. Обрати план можна на сторінці хостингу, а якщо все зрозуміло - замовити Старт за 142 грн/міс і переїжджати сьогодні.