Переносили сайт на другой хостинг? Сделали замену в базе на новый домен, а виджеты все пропали?

Все дело в том, что WordPress хранит много данных в сериализованных массивах, в которых нельзя просто так заменить адрес старого сайта на новый, поскольку там же содержится информация о длине строки. Если длина изменится, сериализованные данные могут повредиться. Из-за этого после переноса могут пропасть не только виджеты, но и другие настройки.

Кроме виджетов часто ломаются формы Contact Form 7. Проблемы могут возникнуть и с настройками тем, плагинов и других компонентов, которые хранят данные в базе.

Переносили сайт на другой хостинг? Сделали замену в базе на новый домен, а виджеты все пропали?

Что же делать?

Самый надежный способ, воспользоваться утилиткой Search Replace DB WordPress. Она выполнит «правильную» замену старого домена на новый и корректно обработает сериализованные данные.

  1. Распаковать в корень сайта, например /search-replace/
  2. Перейти в браузере в /search-replace/
  3. Ввести старый домен в поле Replace, новый домен в поле With
  4. Запустить Dry Run — проверка без самой замены
  5. Если не возникло ошибок, запускаем Live Run

Не забудьте сделать бекап базы!

После завершения работы обязательно удалите папку /search-replace/ с сайта. Оставлять его на рабочем сайте небезопасно, поскольку скрипт позволяет вносить изменения в базу данных.

Почему обычная замена в базе не подходит?

Если просто выполнить замену старого домена на новый через phpMyAdmin или SQL-запросом, можно повредить сериализованные данные.

Например, условно WordPress может хранить строку так:

s:18:"old-site.ru";

Здесь 18 — длина строки. Если заменить домен на строку другой длины, это значение тоже должно измениться. Обычный поиск и замена об этом не знает.

Именно поэтому после такой замены WordPress может перестать правильно читать сохраненные настройки — например, виджеты внезапно исчезают или сбрасываются.

Чем еще можно заменить Search Replace DB?

Сейчас есть несколько способов выполнить такую замену.

Если есть доступ к консоли сервера, можно использовать WP-CLI:

wp search-replace 'old-site.ru' 'new-site.ru'

WP-CLI умеет корректно обрабатывать сериализованные данные. Для предварительной проверки можно добавить —dry-run — команда покажет, что будет изменено, но не внесет изменения в базу.

Еще один вариант — плагин Better Search Replace. Он также поддерживает сериализованные данные и имеет режим Dry Run, поэтому может использоваться непосредственно из админки WordPress.

Но если сайт уже перенесен и доступа к админке нет, старый вариант с Search Replace DB остается удобным решением.

Что проверить после переноса?

После замены домена стоит проверить сайт целиком:

  • открываются ли страницы и записи;
  • работают ли виджеты;
  • отображаются ли формы;
  • загружаются ли изображения;
  • работают ли меню и ссылки;
  • не осталось ли ссылок на старый домен.

Также полезно зайти в Настройки > Постоянные ссылки и просто нажать «Сохранить изменения». При переносе это помогает обновить правила ЧПУ. WordPress также рекомендует после миграции проверить оставшиеся упоминания старого URL в базе.

Итоги

Главное при переносе WordPress — не делать обычную замену домена во всей базе, если в ней есть сериализованные данные.

Используйте инструмент, который умеет работать с сериализацией: Search Replace DB, WP-CLI или Better Search Replace. И обязательно сделайте резервную копию базы перед заменой.