Миграция сайта WordPress на HTTPS: редиректы и смешанный контент

Миграция сайта WordPress на HTTPS: редиректы и смешанный контент

Кратко: перевод WordPress на HTTPS — это четыре обязательных шага: сменить адреса сайта в базе (siteurl и home), заменить все http:// на https:// в контенте и настройках, настроить 301-редиректы с http на https и убрать смешанный контент — случаи, когда на https-странице подгружаются http-картинки, скрипты или стили. Пока в коде страницы остаётся хоть один http-ресурс, браузер показывает «не защищено» и зачёркивает замок, даже если сертификат установлен верно. Правильный порядок: свежий бэкап → выпуск сертификата на хостинге → смена адресов → массовая замена http на https через WP-CLI → редиректы на уровне сервера → поиск и правка mixed content → проверка canonical, sitemap, robots и Search Console. Главные грабли — сериализованные данные, которые нельзя менять обычным SQL-запросом, и жёстко прописанный http:// в теме или плагинах. Ниже — готовые команды WP-CLI, конфиги .htaccess и nginx, PHP- и JS-сниппеты, таблицы и чек-лист проверки.

Зачем переходить на HTTPS и что такое смешанный контент

HTTPS шифрует обмен между браузером и сервером: логины, данные форм, cookie сессий и содержимое страниц нельзя перехватить или подменить в открытом канале. Сегодня это не «фича для продвинутых», а базовое требование: браузеры помечают http-сайты как «не защищено», часть возможностей API попросту не работает без безопасного контекста, а поисковые системы давно используют HTTPS как один из сигналов качества. Если вы уже купили и настроили SSL-сертификат для сайта, следующий логичный шаг — полностью перевести сайт на https.

Но одного сертификата мало. Смешанный контент (mixed content) — это когда сама страница открывается по https, а часть её ресурсов подключается по http: старые картинки в постах, стили темы, скрипты плагинов, шрифты, iframe с видео. Браузер блокирует такие ресурсы или помечает страницу как небезопасную. Внешне это выглядит как «сломанный дизайн» и зачёркнутый замок в адресной строке, а по факту — потеря доверия и просадка конверсии. Именно поэтому миграция на HTTPS — это всегда два направления работы: переключить URL-адреса и вычистить смешанный контент.

Хорошая новость: в WordPress задача решаема почти полностью из командной строки, без ручного перещёлкивания тысяч ссылок. Главное — соблюдать порядок и не пропустить бэкап, о чём подробно рассказывает материал про резервное копирование WordPress.

Подготовка: бэкап, сертификат и проверка хостинга

Перед любыми правками сделайте полный снимок: файлы и базу данных. Замена адресов необратима, если ошибиться в строке, а откатить всё вручную сложнее, чем восстановить из бэкапа за пару минут. Проверьте заранее, что хостинг поддерживает бесплатный сертификат Let’s Encrypt или позволяет загрузить платный. Если сомневаетесь в тарифе и возможностях, стоит свериться со сравнением: как подобрать подходящий хостинг для сайта по параметрам и тарифам.

Убедитесь, что домен указывает на нужный сервер и что сертификат выпущен именно на ваше доменное имя — с www или без, а лучше сразу на оба варианта. Если сайт переезжает заодно на новый сервер, порядок чуть длиннее: сначала перенос файлов и базы, потом HTTPS. Как это делается шаг за шагом, описано в пошаговой инструкции про перенос сайта WordPress на другой хостинг. Доменные тонкости — в статье про выбор и регистрацию домена для сайта.

Пока сертификат ещё не активен, не включайте принудительный редирект — иначе получите цикл перенаправлений и недоступный сайт. Сначала убедитесь, что https-версия открывается и отдаёт корректный сертификат, и только потом переключайте адреса.

Меняем адреса сайта: siteurl и home

WordPress хранит два ключевых адреса: siteurl (где лежат файлы движка) и home (адрес главной страницы). Оба лежат в таблице options. Их можно менять двумя способами — временно через wp-config.php или напрямую в базе. Первый удобнее на время миграции: пока константы прописаны в конфиге, сайт будет использовать их, игнорируя значения в базе, и админка не «отвалится» после первой же правки.

<?php
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
define('FORCE_SSL_ADMIN', true);

После того как убедитесь, что сайт открывается по https и админка работает, значения можно перенести в базу и убрать константы из конфига. Сделать это правильно лучше через WP-CLI, а не через phpMyAdmin — так вы не поймаете опечатку в имени таблицы. Основные команды собраны в гайде по WP-CLI для новичков.

wp option update home 'https://example.com'
wp option update siteurl 'https://example.com'
wp option get siteurl

Отдельно стоит держать в голове, что адреса хранятся в разных местах, и заменить их все разом одной кнопкой нельзя. Ниже — карта, которая помогает не пропустить ничего.

Где хранится адрес Что именно Как менять
wp_options siteurl, home wp option update или WP-CLI search-replace
Контент записей и страниц Ссылки и картинки внутри текста Массовая замена в базе
Настройки темы и плагинов Логотип, фоны, слайдеры, меню Сериализованные значения, менять только инструментом
Файлы темы и плагинов Хардкод http:// в шаблонах Ручная правка кода

Массовая замена http на https в базе

Вручную пройтись по всем записям невозможно, поэтому используется массовая замена. Ключевой инструмент — команда WP-CLI search-replace: она корректно обрабатывает сериализованные массивы, в отличие от прямого SQL-запроса. Всегда сначала прогоняйте прогон в режиме --dry-run, чтобы увидеть, сколько совпадений будет изменено.

wp search-replace 'http://example.com' 'https://example.com' --all-tables --precise --dry-run
wp search-replace 'http://example.com' 'https://example.com' --all-tables --precise

Флаг --all-tables заставляет заменить значения во всех таблицах, а не только в стандартных. Для старых инсталляций поддержите и вариант с www, и без, чтобы не осталось «полуссылок». Если WP-CLI недоступен, минимальный SQL-запрос для самых важных полей выглядит так — но помните, что он не починит сериализованные данные.

UPDATE wp_options SET option_value = replace(option_value, 'http://example.com', 'https://example.com') WHERE option_name IN ('home','siteurl');

Не трогайте поле guid у записей. Оно является внутренним идентификатором и не используется для вывода ссылок, поэтому менять его не нужно и даже вредно. Если после замены что-то в админке ведёт себя странно, включите отладку по инструкции WP_DEBUG и отладка WordPress и посмотрите логи.

301-редиректы: .htaccess и nginx

После смены адресов старые http-ссылки, индексы поисковиков и закладки пользователей должны попадать на новые https-адреса. Делается это постоянным редиректом 301 — он передаёт вес страницы и сообщает поисковикам, что адрес изменился навсегда. На сервере с Apache правило добавляется в начало .htaccess, до стандартных правил WordPress.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

На nginx того же эффекта добиваются на уровне сервера отдельным блоком, который слушает 80-й порт и сразу возвращает https. Это надёжнее, чем правила в теме.

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

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

add_action('template_redirect', function () {
    if (!is_ssl()) {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
        exit;
    }
});

Сравнение способов помогает выбрать подходящий для вашего окружения.

Способ Уровень Плюсы Минусы
Плагин WordPress Просто включить, без правки файлов Зависимость, лишняя нагрузка
.htaccess Apache Работает до загрузки PHP, быстро Нужен доступ к файлу, ошибка ломает сайт
nginx Сервер Самый быстрый и надёжный вариант Требует правки конфига сервера
template_redirect Тема / PHP Гибкие условия и исключения Срабатывает позже, тратит ресурсы

Смешанный контент: как найти и починить

Когда редиректы настроены, наступает самый кропотливый этап — поиск ресурсов, которые всё ещё грузятся по http. Чаще всего это изображения внутри старых постов, скрипты и стили, подключённые жёстко, шрифты, встроенные видео и кнопки виджетов. Откройте консоль браузера: вкладка Console покажет предупреждения вида «Mixed Content», а во вкладке Network отфильтруйте запросы по http. Быстро просканировать текущую страницу можно коротким сниппетом в консоли.

document.querySelectorAll('[src],[href]').forEach(function (el) {
  var url = el.getAttribute('src') || el.getAttribute('href');
  if (url && url.indexOf('http://') === 0) {
    console.warn('Mixed content:', url);
  }
});

Найденные адреса в контенте исправляются той же массовой заменой. Но бывает и так, что правильная строка в базе уже https, а на странице ресурс всё равно грузится по http — это значит, что адрес формируется в коде. Тогда помогает фильтр, который принудительно правит ссылку на выводе. Такой сниппет удобно держать в дочерней теме, а не в основной.

add_filter('the_content', function ($content) {
    return str_replace('http://example.com', 'https://example.com', $content);
});

Понимать, откуда приходит смешанный контент, помогает таблица ниже. Проверьте подключение стилей и скриптов — правильный способ описан в статье про подключение CSS и JS в WordPress.

Источник Пример Решение
Картинки в постах <img src=»http://…»> Массовая замена http на https
Скрипты и стили темы Хардкод в header.php Правка кода или фильтр
Шрифты и иконки @import по http Замена в CSS на // или https
Встроенные видео и iframe Старый embed-код Обновить код вставки

Попутно стоит заняться скоростью: миграция — хороший повод проверить оптимизацию изображений в WordPress и минификацию и объединение CSS и JS.

Сложные случаи: сериализация, хардкод, темы и плагины

Самая частая ошибка новичка — «починить» ссылки прямым SQL-запросом по всей таблице. В WordPress многие настройки хранятся в виде сериализованных массивов, где длина строки зашита в её формате. Если заменить http на https обычным replace, длина не совпадёт, строка «сломается», и настройки превратятся в мусор. Именно поэтому используют WP-CLI search-replace, который корректно пересчитывает сериализацию.

Второй случай — жёстко прописанный адрес в коде. Ищите строку http:// по файлам темы и плагинов: в шаблонах, настройках по умолчанию, редиректах внутри плагинов. Для поиска по коду удобно использовать grep или редактор проекта, а не перебирать файлы вручную. Дочерняя тема даёт безопасное место для правок — об этом подробно в материале про дочернюю тему WordPress.

Третий случай — кэш. После замены адресов очистите кэш плагина, кэш браузера и, если он есть, кэш на уровне сервера или CDN. Иначе на странице может оставаться старая http-версия ресурсов, и вы будете искать несуществующую проблему. Общие принципы описаны в гайде по кэшированию WordPress.

И не забудьте про почту и формы: после смены адреса письма WordPress должны формировать корректные ссылки. Если письма «ломаются» или не доходят, разберитесь с настройкой по статье про настройку SMTP и wp_mail.

Дополнительная защита: HSTS и принудительный SSL

Когда сайт стабильно работает по https, стоит закрепить это на уровне политики безопасности. Заголовок HSTS (Strict-Transport-Security) заставляет браузер впредь обращаться к сайту только по https, даже если пользователь вручную введёт http. Добавить его можно на сервере или через хук.

add_action('send_headers', function () {
    header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
});

Настройка FORCE_SSL_ADMIN в wp-config.php (см. выше) заставляет админку работать только по https, а сам сайт удобно держать под общим принудительным SSL. В связке с базовыми правилами это заметно снижает риск утечек. Основные настройки защиты собраны в материале про безопасность WordPress для новичков, а порядок обновлений — в статье про безопасное обновление WordPress.

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

Проверка после миграции: редиректы, SEO и аналитика

Проверка — обязательная часть миграции. Пройдите чек-лист: главная, внутренние страницы, карточки товаров, формы, поиск по сайту. Посмотрите в консоли браузера, что не осталось предупреждений Mixed Content, а замок в адресной строке отображается без предупреждений. Проверьте, что http-адрес отдаёт 301 на https, а не 200 и не цикл.

curl -I http://example.com

Дальше — задача сохранить позиции в поиске. Убедитесь, что canonical-ссылки ведут на https-адреса, карта сайта обновлена и доступна по новому протоколу, а robots.txt не закрывает важные разделы. Про sitemap читайте в статье про XML-карту сайта для Яндекса и Google, про запреты — в материале robots.txt и noindex в WordPress, а про структуру ссылок — про ЧПУ и настройку permalinks.

Не забудьте обновить адрес сайта в панелях вебмастера: Яндекс.Вебмастер и Google Search Console переключаются на https-версию, там же стоит проверить, что загрузка карты сайта и обход проходят без ошибок. Если аналитика настроена, счётчики продолжат собирать данные, но проверьте, что скрипт подключается по https и не блокируется. Верификация домена в сервисах, привязанная к http, может потребовать повторного подтверждения.

TimeWeb

Частые вопросы о миграции WordPress на HTTPS

Можно ли просто заменить http на https в базе через SQL?

Для полей home и siteurl обычный запрос подойдёт, но для всей базы — нет. Многие настройки хранятся в сериализованном виде, где длина строки зашита в формате данных, и простая замена ломает структуру. Используйте WP-CLI search-replace с флагом —all-tables: он корректно пересчитывает сериализацию. Перед запуском всегда делайте прогон с —dry-run и свежий бэкап базы.

Что такое смешанный контент и как его найти?

Смешанный контент — это ресурсы, которые подключаются по http на странице, открытой по https: картинки, скрипты, стили, шрифты, iframe. Из-за них браузер помечает сайт как небезопасный или блокирует ресурсы. Найти их можно в консоли браузера: вкладка Console покажет предупреждения Mixed Content, а вкладка Network позволит отфильтровать http-запросы. Для быстрой проверки страницы подойдёт короткий JavaScript-сниппет, который перебирает атрибуты src и href.

Нужно ли менять поле guid у записей при переходе на HTTPS?

Нет, менять guid не нужно и не рекомендуется. Это внутренний идентификатор записи, который не используется для формирования ссылок на сайте. Он служит лишь для распознавания записей в RSS, поэтому смена протокола на него не влияет. Меняйте только реальные адреса: siteurl, home, ссылки в контенте и настройках.

Почему после перехода браузер пишет «не защищено»?

Если сертификат установлен и сайт открывается по https, но браузер предупреждает, значит, на странице остался смешанный контент. Даже один http-ресурс отменяет «зелёный замок». Проверьте консоль и сеть на предмет http-запросов, почините картинки и скрипты, очистите кэш плагина, браузера и CDN. Часто виновники — старые изображения внутри постов и жёстко подключённые шрифты.

Потеряю ли я позиции в SEO после перехода на HTTPS?

При правильной настройке — нет, а со временем позиции обычно растут. Критично настроить постоянные 301-редиректы с http на https, чтобы передать вес страниц, и сохранить те же URL-структуры. Проверьте canonical, обновите карту сайта и robots, переключите сайт в панелях вебмастера на https-версию. Временные колебания возможны, но это нормальный этап переиндексации.

Как настроить 301-редирект с http на https?

Надёжнее всего — на уровне сервера: на nginx отдельный блок с listen 80 и return 301, на Apache — правило RewriteCond и RewriteRule в начале .htaccess. Плагин или хук template_redirect тоже работают, но срабатывают позже и тратят ресурсы. Включайте редирект только после того, как убедились, что https-версия и сертификат работают корректно, иначе рискуете получить цикл перенаправлений.

Вывод

Миграция WordPress на HTTPS сводится к понятной последовательности: бэкап, сертификат, смена адресов siteurl и home, массовая замена http на https через WP-CLI, 301-редиректы на уровне сервера, вычистка смешанного контента и финальная проверка редиректов, canonical, sitemap и панелей вебмастера. Если пройти эти шаги по порядку, сайт переедет без потери позиций и без «сломанного» дизайна.

Главное — не экономить на двух вещах: на бэкапе перед началом и на корректном инструменте замены. Сериализованные данные и хардкод в коде — те два места, где чаще всего ломаются даже опытные разработчики. А смешанный контент, который легко не заметить, стоит проверять вручную в консоли браузера, а не «на глаз».

Если не хочется разбираться с базой, серверными конфигами и поиском mixed content самостоятельно, эту работу можно поручить команде. Мы переводим сайты на HTTPS, настраиваем редиректы, чистим смешанный контент и проверяем SEO после миграции. Посмотрите услуги разработки и поддержки сайтов, изучите портфолио выполненных проектов и почитайте блог о сайтах и продвижении. Опишите задачу через форму контактов — подскажем, что нужно именно вашему сайту и как переехать без риска.

Clearfy

Поделиться:
Telegram ВКонтакте