
Переход WordPress на HTTPS кажется задачей на десять минут: поставил сертификат, поменял адрес в настройках, готово. На практике половина таких переездов заканчивается замком с предупреждением в адресной строке, вторая половина — падением трафика на месяц из-за того, что старая версия сайта осталась в индексе и конкурирует с новой. Обе беды предотвращаются, если делать шаги в правильном порядке.
Ниже — полный порядок перевода сайта на защищённый протокол: от смены адресов в настройках до переклейки зеркал в Вебмастере и того, что реально происходит с позициями в первые недели. В SEO с 2005 года, и через мои руки прошло достаточно таких переездов, чтобы знать, где именно они ломаются.
Что именно меняется при переходе на HTTPS
С точки зрения поисковых систем http://site.ru и https://site.ru — два разных сайта. Не две версии одного, а именно два: с раздельными индексами, раздельными позициями и раздельно накопленными сигналами. Задача переезда — не просто включить шифрование, а корректно склеить эти два сайта в один и передать всё накопленное новой версии.
Отсюда вытекает главный принцип: важна не установка сертификата, а полнота склейки. Сертификат ставится за минуту, часто автоматически и бесплатно средствами панели хостинга. А вот перевод всех адресов, редиректов, канонических ссылок и карты сайта на новый протокол — это работа, где пропущенная мелочь стоит месяцев.
Второе, что меняется, — поведение браузера. Если защищённая страница подгружает хотя бы одну картинку, стиль или скрипт по незащищённому протоколу, браузер считает соединение небезопасным. В лучшем случае пропадает замок, в худшем — ресурс блокируется, и на сайте отваливаются стили или скрипты. Это и есть смешанный контент.
Третье — служебные файлы. Карта сайта, robots.txt, канонические ссылки, разметка, счётчики, ссылки в письмах — везде остаётся старый протокол, и каждое такое место работает против склейки. Общий обзор задачи я давал в материале «Переход с HTTP на HTTPS», здесь же — конкретный порядок для WordPress.
Адреса сайта в настройках: с чего начать
Перед любыми правками сделайте копию файлов и дампа базы. Дальше будет массовая замена по базе, и без копии откат невозможен.
Сначала убедитесь, что сертификат установлен и работает: откройте сайт по адресу с https вручную. Если страница открывается, пусть даже без замка, — сертификат на месте. Если браузер ругается на несоответствие имени или на просроченный сертификат, дальше идти нельзя: сначала чините сертификат. Какие бывают типы и чем они отличаются, разбирал в заметке «Что такое сертификат SSL».
Затем меняются два поля в разделе общих настроек: «Адрес WordPress» и «Адрес сайта». Оба переводятся на https. После сохранения вас выкинет из админки — это нормально, войдите заново уже по защищённому адресу.
Если поля недоступны для правки (так бывает, когда адреса заданы константами), меняйте их в wp-config.php:
define( 'WP_HOME', 'https://site.ru' );
define( 'WP_SITEURL', 'https://site.ru' );
Те же константы — страховка на случай, когда после смены адресов админка перестала открываться: значения из конфига перекрывают базу и возвращают доступ.
Смешанный контент: где он прячется
Смена настроек не меняет содержимое записей. В базе остаются тысячи ссылок с полным адресом на старом протоколе: картинки в статьях, внутренние ссылки, фоны в стилях, вставки скриптов.
Найти их проще всего консолью браузера: откройте страницу, вкладку с сообщениями об ошибках, и браузер перечислит все ресурсы, загруженные по незащищённому протоколу. Проверять надо не только главную — типовые места отличаются по типам страниц. Отдельно пройдитесь по карточке товара, статье блога, странице с формой и страницей с картой.
Источники смешанного контента в порядке частоты такие. Изображения, вставленные в записи с полным адресом. Файлы стилей и скриптов, подключённые в теме жёстко прописанным адресом. Фоновые картинки внутри CSS. Виджеты и вставки сторонних сервисов — карты, видео, чаты, счётчики. Настройки плагинов, где адрес логотипа или файла указан вручную. И параметры темы, сохранённые в отдельной таблице настроек.
Ловушка, о которой узнают позже всех: настройки тем и конструкторов страниц хранятся не обычным текстом, а в сериализованном виде. Об этом — следующий раздел.
Замена адресов в базе: сериализованные данные
Соблазн велик: выполнить простой SQL-запрос вида замены подстроки по таблице записей и закрыть вопрос. Для содержимого статей это действительно работает. Для настроек — ломает сайт.
Причина в устройстве сериализации. PHP сохраняет массивы строкой, в которой перед каждым значением записана его длина в символах. Строка http://site.ru длиннее строки https://site.ru на один символ. Слепая замена меняет содержимое, но не трогает записанную длину — и PHP при чтении такого массива получает мусор. Внешне это выглядит как слетевшие настройки темы, пропавшие виджеты, пустой конструктор страниц.
| Способ замены | Где безопасен | Где ломает | Комментарий |
|---|---|---|---|
| SQL-запрос REPLACE по таблице записей | Поле содержимого записей и страниц | Таблица настроек, метаполя, настройки конструкторов | Быстро, но применимо только к обычному тексту |
| Плагин поиска и замены с поддержкой сериализации | Вся база целиком | Практически нигде, если включён режим сухого прогона | Оптимальный вариант для большинства сайтов |
| Консольная утилита WP-CLI, команда search-replace | Вся база, с корректной пересборкой сериализованных значений | Нигде | Требует доступа к командной строке; лучший вариант при его наличии |
| Ручная правка в phpMyAdmin | Единичные значения, которые вы видите глазами | Массовые операции — велик риск опечатки | Годится для точечной доводки после основной замены |
| Фильтр в теме, подменяющий протокол на лету | Как временный костыль на день переезда | Как постоянное решение: база остаётся грязной | Не заменяет реальную замену адресов |
Практическая рекомендация: делайте замену инструментом, который умеет корректно пересобирать сериализованные значения, и обязательно сначала в режиме предварительного просмотра, где показывается количество совпадений без внесения изменений. Замену выполняйте с полным адресом — http://site.ru на https://site.ru, а не просто http на https: иначе вы переделаете ещё и внешние ссылки на чужие сайты, часть из которых по защищённому протоколу не работает.
После замены проверьте выборочно: открыть три-четыре старые статьи, посмотреть картинки, открыть настройки темы, посмотреть виджеты. Если что-то слетело — откатываетесь из копии, а не чините руками.
Редирект на уровне сервера
Даже после замены адресов старые страницы остаются доступны по незащищённому протоколу. Для поисковика это полный набор дублей: каждая страница существует дважды. Лечится единственным правильным способом — постоянным редиректом со старого протокола на новый.
Ставить его надо на уровне сервера, а не плагином. Плагин поднимает всё ядро WordPress ради одного заголовка перенаправления: это лишние запросы к базе и лишние миллисекунды на каждом обращении. Серверное правило отрабатывает до запуска PHP.
На Apache правило добавляется в .htaccess выше блока WordPress:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
Расположение принципиально: внутренний обработчик WordPress перехватывает запросы, и правило, поставленное ниже, до выполнения не дойдёт. На nginx перенаправление делается директивой возврата постоянного кода в блоке, слушающем незащищённый порт.
Дальше — три проверки. Первая: редирект должен быть один прыжок, а не цепочка. Частая ошибка — сначала перенаправление на версию с www, потом на защищённый протокол, потом на адрес со слешем. Каждый лишний прыжок замедляет ответ и размывает передачу сигналов. Вторая: код ответа должен быть 301, а не 302. Временное перенаправление оставляет старый адрес в индексе. Третья: не должно быть петли — когда сервер бесконечно перебрасывает страницу на саму себя. Типовая причина петли на панельном хостинге — балансировщик, который передаёт запрос уже расшифрованным, из-за чего условие проверки протокола никогда не срабатывает; в этом случае условие пишется по заголовку, который передаёт балансировщик.
Разбор частых ошибок именно этого этапа собран в материале «HTTPS, который убивает SEO: 4 ошибки переезда, после которых трафик падает в ноль».
Канонические адреса, карта сайта и robots.txt
Редирект решает вопрос для тех, кто пришёл по старому адресу. Но поисковику надо ещё явно сказать, какая версия основная. Это делается тремя способами одновременно.
| Элемент | Что проверить | Типовая ошибка |
|---|---|---|
| Канонический адрес в исходном коде | Ссылка указывает на защищённый адрес той же страницы | Канонический адрес остался на старом протоколе — тогда вы редиректом ведёте на новую версию, а кодом страницы говорите, что главная старая |
| Карта сайта | Все адреса внутри с защищённым протоколом, дата изменения свежая | Карта сгенерирована до переезда и лежит в кэше плагина |
| Файл robots.txt | Строка со ссылкой на карту сайта указывает на защищённый адрес | Осталась старая строка; робот идёт по редиректу и часть систем это игнорирует |
| Внутренние ссылки в шаблонах | Меню, логотип, кнопки, футер ведут на защищённые адреса | Жёстко прописанные адреса в файлах темы, которые замена по базе не задела |
| Разметка и метатеги для соцсетей | Адреса изображений и страницы указаны с новым протоколом | Метатег с адресом картинки собирается из старого значения в настройках |
| Счётчики и внешние сервисы | В настройках счётчика указан адрес с защищённым протоколом | Статистика начинает считаться как для нового сайта |
Отдельно про канонические адреса: это самая частая причина того, что переезд «сделан», а поиск продолжает показывать старые адреса. Проверяется за минуту — откройте исходный код любой страницы и найдите строку с указанием канонической ссылки. Подробно логика канонических адресов и их взаимодействие с редиректами разобрана в материале «Полный гайд по канониклам, редиректам и дублям: разбираем раз и навсегда», а про устройство самой карты сайта — в статье «Карта сайта Sitemap».
Переклейка зеркал в Вебмастере
После технической части идёт часть, которую пропускают чаще всего. В панели Яндекс.Вебмастера сайт с защищённым протоколом надо добавить как отдельный ресурс и подтвердить права на него: для панели это новый сайт.
Дальше в разделе переезда сайта указывается, что основным зеркалом становится версия с защищённым протоколом. Панель проверит, что редирект настроен корректно и что обе версии доступны для проверки, и поставит задачу на переклейку. Занимает она обычно от нескольких дней до двух-трёх недель.
Здесь есть частая ошибка: люди снимают старый сайт с проверки или удаляют его из панели сразу после добавления нового. Делать этого не надо — старый ресурс должен оставаться подтверждённым, пока переклейка не завершится, иначе система не сможет сверить версии.
Что проверить в панели после переезда. В разделе диагностики не должно появиться новых критичных ошибок. В статистике обхода в первые дни будет всплеск: робот заново обходит все адреса. В разделе страниц в поиске старые адреса начнут заменяться новыми — это тот показатель, по которому видно ход переклейки. И отдельно отправьте на переобход главную и ключевые разделы уже по новому адресу.
Для Google отдельная процедура переезда не нужна: там достаточно корректных редиректов и канонических адресов, а версии сайта добавляются в панель как отдельные ресурсы для контроля. Влияет ли сам факт защищённого соединения на позиции, разбирал в заметке «Влияет ли HTTPS на позиции сайта».
Если переезд предстоит на нагруженном сайте и рисковать не хочется, помогу провести его: заказать продвижение сайта можно с полным техническим сопровождением, работаю с проектами лично.
Чего ждать от позиций и когда переезд не нужен
Реалистичная картина первых недель выглядит так. Первые три-семь дней: часть страниц по-прежнему показывается по старым адресам, часть уже по новым, позиции немного дёргаются. Вторая-третья неделя: индекс перестраивается, в панели видно рост доли новых адресов, возможна временная просадка по части запросов. Четвёртая-шестая неделя: показатели возвращаются к прежним значениям, дальше рост идёт по обычным причинам.
Просадка на пару недель — нормальное явление даже при идеально сделанном переезде. Ненормально — просадка, которая длится второй месяц и не восстанавливается. Это всегда означает недоделанную склейку: где-то остались доступные страницы на старом протоколе, канонические адреса указывают не туда или редирект отдаёт временный код.
Отдельно — три ситуации, когда переезд лучше отложить. Первая: сайт находится в процессе других крупных изменений — смены структуры адресов, переноса на новый движок, редизайна. Смешивать два переезда нельзя, потому что при просадке вы не поймёте, что именно её вызвало. Вторая: сертификат бесплатный и продлевается вручную. Просроченный сертификат отдаёт браузеру ошибку и обнуляет трафик за сутки; переезжать имеет смысл только на автоматическое продление. Третья: на сайте много старого содержимого с жёстко прописанными адресами внешних ресурсов, работающих только по незащищённому протоколу — например, встроенные виджеты давно заброшенных сервисов. Их надо сначала убрать, иначе замок пропадёт сразу после переезда.
После завершения склейки останется техническая уборка: битые ссылки, лишние прыжки в цепочках, слетевшая вёрстка на отдельных страницах. Это отдельная задача на доработку сайта, и делать её надо не в день переезда, а через неделю, когда картина устоится.
Частые вопросы
Обязателен ли платный сертификат? Для обычного сайта нет. Бесплатные сертификаты с автоматическим продлением шифруют соединение так же и распознаются браузерами одинаково. Платные нужны там, где требуется расширенная проверка организации или покрытие нестандартного набора поддоменов.
Можно ли обойтись плагином принудительного перевода на HTTPS? Как временная мера на день переезда — можно. Как постоянное решение — нет: база остаётся с адресами на старом протоколе, а перенаправление выполняется средствами PHP на каждом запросе. При отключении плагина сайт мгновенно вернётся в исходное состояние.
Надо ли менять адреса в счётчиках и рекламных кампаниях? Да. В настройках счётчика указывается адрес сайта, в объявлениях — ссылки на страницы. Если оставить старый протокол, каждый переход будет проходить через редирект, а часть систем аналитики начнёт считать переходы как с внешнего источника.
Сколько держать редирект со старого протокола? Постоянно. Внешние ссылки на старые адреса живут годами, и снятое правило превратит их в недоступные страницы.
Почему пропал замок, хотя смешанного контента консоль не показывает? Проверьте страницу целиком, а не только верх: ресурс может подгружаться скриптом уже после загрузки. Ещё вариант — картинка внутри содержимого, которое отдаётся через кэш и не обновилось после замены адресов.
Влияет ли переезд на скорость сайта? Шифрование добавляет минимальные накладные расходы, которые с лихвой перекрываются возможностью включить более быстрый протокол передачи данных. На практике корректно настроенный защищённый сайт работает быстрее незащищённого.
Коротко
- Для поисковика версии сайта на разных протоколах — два разных ресурса; задача переезда не в сертификате, а в полной склейке.
- Порядок такой: сертификат, адреса в настройках, замена адресов в базе, серверный редирект, канонические адреса и карта сайта, переклейка в Вебмастере.
- Массовая замена по базе обязана корректно пересобирать сериализованные значения, иначе слетят настройки темы и конструктора страниц.
- Редирект ставится на уровне сервера одним прыжком с постоянным кодом; цепочки и петли — самые частые причины неудачного переезда.
- Канонический адрес, оставшийся на старом протоколе, отменяет весь эффект редиректа: поиск продолжит держать в индексе старые адреса.
- Просадка на две-три недели нормальна; просадка второго месяца означает недоделанную склейку, а не «алгоритм так решил».
Если переезд уже сделан, а трафик не вернулся, посмотрим, где именно потерялась склейка, — записывайтесь на консультацию по продвижению, разберём панель вебмастера и коды ответов по вашему списку адресов.
Увеличьте позиции и продажи вашего сайта
Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:
Остались вопросы по продвижению?
Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →
Комментарии
Евстигней Пожарский
Сделал замену адресов SQL-запросом по всей базе. Сайт открывается, но настройки темы обнулились и конструктор страниц показывает пустые блоки. Это то самое про сериализацию?
Анатолий Кузнецов автор
Именно оно. Слепая замена подстроки поменяла содержимое сериализованных массивов, но не пересчитала записанные длины строк, и теперь PHP не может их прочитать. Чинить это точечно почти невозможно: повреждённых значений обычно сотни, и каждое надо пересобирать вручную. Правильный путь — восстановить базу из копии, сделанной до замены, и повторить операцию инструментом, который умеет работать с сериализацией: либо специализированным плагином поиска и замены, либо консольной командой search-replace. Оба варианта корректно пересобирают массивы. Если копии нет, остаётся заново настроить тему и пересобрать страницы конструктора — неприятно, но быстрее, чем чинить битые массивы. И на будущее: перед любой массовой операцией с базой копия делается всегда, даже если операция выглядит безобидно.
Сосипатра Сумарокова
Прописала редирект в .htaccess, получила бесконечную переадресацию. Хостинг с балансировщиком. Что делать?
Анатолий Кузнецов автор
Классическая ситуация. Балансировщик расшифровывает соединение и передаёт запрос вашему серверу уже в открытом виде. Условие проверки протокола на стороне сервера при этом никогда не выполняется: сервер честно видит незащищённый запрос и снова отправляет на защищённый адрес, и так по кругу. Решение — проверять не сам протокол, а заголовок, который передаёт балансировщик: обычно это X-Forwarded-Proto со значением https. Условие в правиле переписывается на проверку этого заголовка. Точное имя заголовка лучше уточнить в поддержке хостинга, потому что оно отличается от площадки к площадке. Пока разбираетесь, правило лучше закомментировать: петля отдаёт роботу ошибку и сайт в это время фактически недоступен для обхода.
Евлампия Неклюдова
Переехали месяц назад, в выдаче до сих пор половина страниц со старым адресом. Редирект работает, проверяла. Что не так?
Анатолий Кузнецов автор
Проверьте три вещи по порядку. Первая и самая вероятная — канонический адрес: откройте исходный код страницы и посмотрите, на какой протокол указывает каноническая ссылка. Если на старый, вы редиректом ведёте на новую версию, а кодом страницы сообщаете, что основная — старая, и поисковик слушает код. Вторая — карта сайта: она могла сгенерироваться до переезда и лежать в кэше плагина, а в robots.txt осталась ссылка на старый адрес карты. Третья — сам код редиректа: убедитесь, что это 301, а не 302. Временный код специально означает «страница вернётся на прежний адрес», и старые адреса будут держаться в индексе сколько угодно долго. Плюс отдельно проверьте, добавлен ли новый ресурс в Вебмастер и указан ли переезд в разделе основного зеркала — без этого склейка идёт заметно медленнее.
Захар Дельвиг
Замок появляется не на всех страницах. На главной есть, в блоге пропадает. Консоль ругается на одну картинку в футере, которой на главной нет.
Аристарх Чернышёв
Стоит ли переезжать, если сайт полностью информационный, форм нет, персональные данные не собираются?
Анатолий Кузнецов автор
Стоит, и причина не в персональных данных. Во-первых, браузеры давно помечают незащищённые сайты предупреждением в адресной строке, а часть пользователей на такое предупреждение реагирует уходом — это прямая потеря поведенческих показателей. Во-вторых, современные быстрые протоколы передачи данных работают только поверх защищённого соединения, то есть без него вы отрезаны от заметного выигрыша в скорости. В-третьих, комментарии и поиск по сайту — это тоже формы, и они передают данные открытым текстом. И в-четвёртых, доля незащищённых сайтов в выдаче уже настолько мала, что это скорее сигнал заброшенности ресурса, чем нейтральная особенность. Единственная причина отложить — если у вас прямо сейчас идёт другой переезд или крупная перестройка сайта: два больших изменения одновременно делать нельзя.
Севериан Салтыков
В Вебмастере добавил новый ресурс, а старый удалил сразу же, чтобы не мешался. Теперь переезд не подтверждается. Восстановить можно?
Анатолий Кузнецов автор
Можно, ничего непоправимого не произошло. Добавьте старую версию сайта в панель заново и подтвердите права — способ подтверждения тот же, что и для новой версии, файлом или метатегом, они работают для обоих адресов, потому что физически это один и тот же сервер. После этого в разделе основного зеркала укажите, что главной становится версия с защищённым протоколом. Панели нужны оба подтверждённых ресурса, чтобы сверить редиректы и убедиться, что вы владелец обеих версий. Держите старый ресурс подтверждённым до тех пор, пока в разделе страниц в поиске новые адреса не заменят старые полностью, — обычно это две-три недели. И параллельно проверьте, что редирект отдаёт постоянный код: панель не подтвердит переезд при временном перенаправлении.
Капитолина Бахтеярова
После переезда Метрика показывает обвал трафика в ноль и одновременно всплеск новых посетителей. Это сломалась статистика или реально что-то случилось?
Иулиания Бестужева
Сертификат бесплатный, продлевается автоматически панелью. Один раз продление не сработало, сайт сутки отдавал предупреждение. Как за этим следить?
Онисим Шемякин
Правильно ли я понимаю, что редирект надо ставить выше блока WordPress в .htaccess? У меня он был ниже и не работал вообще.
Ануфрий Трубецкой
Делал замену только по таблице записей, настройки не трогал. Часть картинок в старых статьях всё равно грузится по старому протоколу — они вставлены как относительные пути к папке загрузок.
Емельян Чаадаев
Есть ли смысл одновременно с переездом убрать www? Или лучше двумя этапами?
Мокей Тургенев
Переехал по вашему порядку, просадка была две недели, на пятой всё вернулось и даже подросло. Главное было не паниковать и не начать что-то переделывать на второй неделе.