# Зміна домену WordPress: заміна URL у базі даних

> Зміна домену WordPress без поломок: правильний порядок заміни URL у базі даних, серіалізовані дані й налаштування редиректів.

Проста заміна адреси в налаштуваннях WordPress не переносить сайт на новий домен: старий URL залишається в тисячах записів бази даних, зокрема в серіалізованих масивах налаштувань конструкторів сторінок. Розбираємо правильний порядок зміни домену без поломки верстки.

## Чому не можна просто поміняти адресу в налаштуваннях

Адреса сайту зберігається не лише у двох полях `siteurl` і `home` таблиці `wp_options`. Посилання на старий домен розкидані по вмісту записів, метаполях, налаштуваннях меню і віджетів, а частина плагінів і конструкторів сторінок на кшталт Elementor зберігає налаштування у вигляді серіалізованих PHP-масивів. Якщо замінити в них домен звичайним пошуком-заміною в тексті, довжина рядка в серіалізованих даних не збіжиться з реальною, і PHP не зможе розібрати масив — блоки на сторінці перестануть відображатися.

## Підготовка: резервна копія і оцінка обсягу правок

Перед будь-якими правками бази даних зробіть повну резервну копію файлів і бази — порядок описано в статті [WordPress бекап: UpdraftPlus і ручний метод](https://www.zevshost.net/uk/kb/wordpress-backup-nastroika/). Потім порахуйте, скільки записів містить стару адресу:

```
# Порахувати кількість згадувань старого домену в базі даних
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: пошук-заміна в БД і створення адміна](https://www.zevshost.net/uk/kb/wp-cli-komandi/).

## Що перевірити після заміни домену

Після виконання `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 на нову адресу.

---

Джерело: https://www.zevshost.net/uk/kb/wordpress-smena-domena-url/
