Перенос сайта WordPress на новый домен: пошаговая инструкция

Перенос сайта WordPress на новый домен: пошаговая инструкция

Переезд WordPress на новый домен в официальном руководстве WordPress расписан как цепочка: бэкап файлов и базы, смена адресов, перенос на новый сервер, правка wp-config.php и импорт базы. Ошибка на любом шаге даёт белый экран, битые ссылки или смесь старого и нового домена в базе. Ниже рабочий порядок без магии «одной кнопки».

Бэкап файлов и базы до любых правок

Подключитесь к текущему хостингу по SFTP (доступы есть в панели провайдера) и скачайте весь корень сайта: wp-admin, wp-content, wp-includes, wp-config.php, index.php, .htaccess и прочие файлы. На VPS проще собрать архив по SSH, главное не забыть wp-content/uploads и свои конфиги:

tar czf site-backup.tar.gz -C /var/www site

Имя базы, пользователь и хост лежат в wp-config.php (DB_NAME, DB_USER, DB_HOST). Дамп снимается через phpMyAdmin (экспорт в SQL, все таблицы, с DROP TABLE для повторного импорта) или из консоли. Без свежего дампа дальше не идите.

mysqldump -u DB_USER -p DB_NAME > site.sql
# или, если есть WP-CLI
wp db export site.sql

Новый хостинг: база, файлы и wp-config.php

На новом хостинге создайте базу MySQL или MariaDB и пользователя с полными правами на неё. Запишите имя базы, логин, пароль и хост: чаще всего это localhost, но у некоторых хостеров отдельный сервер баз.

  • Залейте файлы старого сайта в корень нового по SFTP или rsync. Ставить поверх чистый WordPress не нужно.
  • Импортируйте дамп в новую базу через phpMyAdmin или mysql -u USER -p DB_NAME < site.sql.
  • Права обычно такие: файлы 644, папки 755, владелец тот пользователь, от которого работает PHP. Точные цифры зависят от хостинга.

Затем пропишите данные новой базы в wp-config.php:

define( 'DB_NAME', 'new_db' );
define( 'DB_USER', 'new_user' );
define( 'DB_PASSWORD', 'new_password' );
define( 'DB_HOST', 'localhost' ); // уточните у хостера

Ключи и соли (AUTH_KEY и остальные) можно оставить старыми. Если их поменять, всех пользователей просто разлогинит.

Замена старого адреса в базе без поломки сериализации

Старый домен лежит в настройках, записях, виджетах и сериализованных массивах плагинов. Как предупреждает руководство WordPress, простая замена строк в SQL ломает такие данные: в них записана длина строки, и после смены домена она перестаёт совпадать. Поэтому замену делают инструментами, которые понимают сериализацию: wp search-replace в WP-CLI или плагином Better Search Replace.

wp search-replace 'https://old.example' 'https://new.example' --all-tables --skip-columns=guid --dry-run
wp search-replace 'https://old.example' 'https://new.example' --all-tables --skip-columns=guid

Сначала прогон с --dry-run, потом боевой, и перед ним ещё один дамп. Колонку guid в wp_posts не трогают: по ней RSS-читалки узнают записи, и после смены GUID старые посты всплывут у подписчиков как новые.

Если WP-CLI нет, подойдёт Better Search Replace: у плагина больше миллиона активных установок, свежая версия 1.4.11, совместимость проверена с WordPress 7.1.3. Галочку замены GUID в нём оставьте выключенной.

Пока DNS ещё смотрит на старый сервер, новый можно открыть через файл hosts на своём компьютере: прописать в нём новый IP для домена и спокойно проверить сайт и админку.

Постоянные ссылки, проверка и DNS

  • В админке откройте «Настройки» → «Постоянные ссылки» и нажмите «Сохранить», ничего не меняя. WordPress перепишет правила rewrite. На Apache проверьте .htaccess, на Nginx правила живут в конфиге сервера.
  • Пройдите по главной, ключевым страницам, формам, корзине и личному кабинету, если они есть. В исходном коде страниц не должно остаться старого домена в CSS, JS и картинках.
  • Сбросьте кэш плагинов и CDN, проверьте вход в /wp-admin и SSL-сертификат для нового домена.
  • За день-два до переезда понизьте TTL записей, а потом поменяйте A/AAAA (или NS) на новый хостинг. Пока старые записи живут в кэше резолверов, часть посетителей ещё будет попадать на старый сервер.

Редирект 301 и переезд в Яндекс Вебмастере и Search Console

Если меняется именно домен, а не только хостинг, на старом сервере нужен постоянный редирект 301 с каждой страницы на такую же страницу нового домена. Так сохранятся позиции в поиске и чужие ссылки. Пример для Apache в .htaccess:

RewriteEngine On
RewriteRule ^(.*)$ https://new.example/$1 [R=301,L]

То же на Nginx:

server {
    listen 80;
    server_name old.example www.old.example;
    return 301 https://new.example$request_uri;
}

Для российского сайта главное переезд в Яндекс Вебмастере: добавьте и подтвердите оба сайта, проверьте, что robots.txt у них совпадает, настройте редирект со страниц старого сайта на такие же страницы нового и укажите новый адрес в разделе «Индексирование» → «Переезд сайта». По словам Яндекса, смена главного адреса занимает несколько недель, и сохранение позиций и трафика он не гарантирует. Сводить все старые страницы на главную нового сайта Яндекс не советует.

В Google Search Console для этого есть инструмент «Изменение адреса». Он работает, только если вы владелец обоих сайтов в одном аккаунте Google и на старом сайте уже стоят редиректы 301. Google советует держать редиректы минимум 180 дней, а старый домен продлевать ещё хотя бы год, чтобы его не перехватили.

После переезда обновите адрес в Метрике и других счётчиках, в sitemap, CDN, платёжных системах, OAuth-приложениях, вебхуках и почтовых записях SPF и DKIM, если они завязаны на домен.

Если не хочется возиться самому, перенос входит в доработки существующего сайта, по моему прайс-листу это от 5 000 ₽.

В итоге переезд на новый домен это бэкап, перенос файлов и базы, аккуратная замена адресов с учётом сериализации и без GUID, редиректы 301 и заявка на переезд в Вебмастере и Search Console. Делайте его в спокойное время и проверяйте реальные сценарии, а не только то, что открылась главная.

Источники и ссылки


Комментарии загружаются…