Проста заміна адреси в налаштуваннях WordPress не переносить сайт на новий домен: старий URL залишається в тисячах записів бази даних, зокрема в серіалізованих масивах налаштувань конструкторів сторінок. Розбираємо правильний порядок зміни домену без поломки верстки.
Чому не можна просто поміняти адресу в налаштуваннях
Адреса сайту зберігається не лише у двох полях siteurl і home таблиці wp_options. Посилання на старий домен розкидані по вмісту записів, метаполях, налаштуваннях меню і віджетів, а частина плагінів і конструкторів сторінок на кшталт Elementor зберігає налаштування у вигляді серіалізованих PHP-масивів. Якщо замінити в них домен звичайним пошуком-заміною в тексті, довжина рядка в серіалізованих даних не збіжиться з реальною, і PHP не зможе розібрати масив — блоки на сторінці перестануть відображатися.
Підготовка: резервна копія і оцінка обсягу правок
Перед будь-якими правками бази даних зробіть повну резервну копію файлів і бази — порядок описано в статті WordPress бекап: UpdraftPlus і ручний метод. Потім порахуйте, скільки записів містить стару адресу:
# Порахувати кількість згадувань старого домену в базі даних
wp db query "SELECT COUNT(*) FROM wp_options WHERE option_value LIKE '%old-domain.com%'"
Коли результат більший за нуль хоча б в одній таблиці — звичайний SQL-запит UPDATE небезпечний, потрібен інструмент, який уміє працювати із серіалізованими даними.
Заміна URL через WP-CLI: безпечний спосіб
Команда wp search-replace вміє знаходити і коректно перераховувати довжину рядків усередині серіалізованих масивів — це головна відмінність від звичайного SQL-запиту:
# Спочатку перевірити список змін без запису в базу (dry run)
wp search-replace 'old-domain.com' 'new-domain.com' --dry-run
# Виконати заміну по всіх таблицях, включно з мультисайтом
wp search-replace 'old-domain.com' 'new-domain.com' --all-tables
Прапорець --dry-run покаже кількість зачеплених рядків у кожній таблиці без реального запису — обов'язково перевірте цифри перед бойовим запуском. Повний перелік подібних команд WP-CLI для роботи з базою — у статті Команди WP-CLI: пошук-заміна в БД і створення адміна.
Що перевірити після заміни домену
Після виконання search-replace пройдіться за контрольними пунктами:
| Що перевірити | Де дивитися |
|---|---|
| Зображення і файли в записах | Відкрити 3-4 старі записи і перевірити, що картинки завантажуються |
| Налаштування Elementor та інших конструкторів | Відкрити сторінку в редакторі конструктора, а не лише на фронті |
| Меню і віджети | Розділ «Вигляд → Меню», перевірити пункти меню вручну |
| Постійні посилання | Налаштування → Постійні посилання → Зберегти зміни |
Коли після заміни частина блоків на сторінках взагалі зникла, а не просто посилається на стару адресу — ймовірно, заміна пройшла не через search-replace, а звичайним SQL-запитом і пошкодила серіалізацію; відновіть базу з резервної копії і повторіть крок із WP-CLI.
Налаштування редиректів зі старого домену
Навіть після повної заміни адреси в базі старий домен варто на певний час залишити в DNS і налаштувати на ньому редирект 301 на нову адресу — це зберігає позиції в пошуку і не втрачає переходи за старими посиланнями із зовнішніх джерел. Правило додається в .htaccess старого сайту:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.com$ [NC]
RewriteRule ^(.*)$ https://new-domain.com/$1 [R=301,L]
Тримайте редирект активним щонайменше 3-6 місяців, поки пошукові системи не переіндексують посилання на новий домен.
Чек-лист зміни домену WordPress
- Зроблено повну резервну копію файлів і бази даних перед початком робіт.
- Заміну URL виконано командою
wp search-replace, а не прямим SQL-запитом. - Перевірено зображення, конструктори сторінок, меню і віджети.
- Постійні посилання пересзбережено в налаштуваннях WordPress.
- На старому домені налаштовано редирект 301 на нову адресу.