Во-первых, нужно понять возможность перевода сайта на https (рассматриваем самый популярный вариант - бесплатный сертификат Let’s Encrypt). Что может помешать:
проблема: хостинг, на котором размещен сайт, не выдает/не устанавливает такие сертификаты (если еще такие существуют:)
решение: всегда есть возможность выпустить сертификат непосредственно в сертификационном центре и установить на хостинг путем добавления записей вручную, ну и техническая поддержка в этом случае в помощь.
проблема: размещено несколько сайтов на одной админке и неосновные домены являются алиасами, для которых выпуск ssl-сертификатов невозможен
решение: для основного сайта выпуск возможен, но необходимо будет воспользоваться видоизмененным редиректом в файле .htaccess для склейки, а для перевода алиаса на защищенный протокол выход один - сделать его НЕ алиасом.
проблема: у домена есть поддомены
решение: нужна возможность выпуска отдельных сертификатов для каждого поддомена ИЛИ выпуск сертификата Wild, который распространяется и на поддомены (не более 99).
проблема: на сайте есть контент, использующий данные с других сайтов, не перешедших на https
решение: ждать пока все сторонние сайты перейдут на защищенное соединение, либо отказаться от этого контента
Во-вторых, заказать и установить ssl сертификат:
Если сайт представляет собой интернет-магазин, то бесплатный сертификат не подойдет.
В-третьих, настроить сайт на работу по новому протоколу и корректную обработку ссылок.
Настройки административной панели для перехода на https протокол: время и сложность зависят от "админки" (где-то пара кнопок, где-то чуть дольше). Для MODX REVO две системные настройки link_tag_scheme (значение - 1) и server_protocol (значение - https), внимательно с контекстами (! если используете несколько контекстов, то поменять настройки каждого контекста на https).
Настроить редирект в .htaccess. Во всех правилах с явным указанием протокола поменять на https, а также добавить склейку двух зеркал http и https. Причем делать это нужно аккуратно, так как на одном хостинге правило может работать корректно, а на другом вызвать циклическую переадресацию.
Вариантов правил склейки несколько (решается методом проб и перебора :). Нужен доступ к файлу .htaccess по ftp или через хостинг, чтоб отменять в случае неудачи), наиболее часто используемые:
Вариант 1
RewriteCond %{ HTTPS} =off
RewriteRule (.*) https://%{ HTTP_HOST}%{ REQUEST_URI} [QSA,L]
Вариант 2 (!)
RewriteCond %{ SERVER_PORT} !^443$
RewriteRule .* https://%{ SERVER_NAME}%{ REQUEST_URI} [R=301,L]
Вариант 3
RewriteCond %{ ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{ HTTP_HOST}%{ REQUEST_URI} [L,R=301]
Вариант 4 (!)
RewriteCond %{ HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{ HTTP_HOST}/$1 [R=301,L]
Вариант 5
RewriteCond %{ HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule ^(.*)$ https://www.domain.com/$1 [L]
#не забудьте заменить на ваш домен
Вариант 6
RewriteCond %{ HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{ SERVER_NAME}%{ REQUEST_URI} [R=301,L]
Вариант 7.
RewriteCond %{ HTTP:X-Forwarded-Proto} !https
RewriteCond %{ HTTPS} off
RewriteRule ^ https://%{ HTTP_HOST}%{ REQUEST_URI} [L,R=301,NE]
Далее, все стили, скрипты, шрифты должны грузиться через https. Нужно проверить и исправить, как вариант скачать на сайт и грузить их локально.
Если есть абсолютные внутренние ссылки, заменить их на относительные (без указания протокола и домена).
Все внешние ссылки заменить на безпротоколовый вариант (начинать с //, например href=”//a-tum.ru”). К сожалению, при этом (замечено на modx) ссылки открываются через протокол https и если его нет на внешнем сайте, то попадаем на ошибку.
Проверить файлы robots.txt и sitemap.xml (везде должен быть https протокол).
Скинуть кеш сайта.
Полностью проверить работоспособность сайта (все ли страницы корректно открываются, отправляются ли формы, работают ли скрипты, калькуляторы и т.п., личный кабинет, интернет-магазин, онлайн-оплата и т.д.)
В-четвертых, не забыть про поисковую оптимизацию и по-максимуму сгладить этот переход. Временное падение позиций, посещаемости и других показателей неизбежно, но его можно минимизировать.