Po opublikowaniu wpisu dotyczącego wad i zalet certyfikatów SSL dostałem od wielu z was e-maile z pytaniem jak poprawnie, a przede wszystkim bezpiecznie z punktu widzenia pozycjonowania serwisu, dosłownie przenieść cały serwis na protokół HTTPS. Cieszę się, że wpis ten was zainspirował do migracji na SSL, i że zwracacie się z tym pytaniem do mnie.
Cieszę się także, że mogę Wam pomóc, co więcej, pokażę statystyki z „narzędzi dla webmasterów” jednej z większych stron, na których wykonywałem tego typu manewr. Można zauważyć, jak przejście na HTTPS wpłynęło na wyniki wyszukiwania w Google.
Instalacja certyfikatu SSL na hostingu WWW
Najpierw musimy zająć się samym certyfikatem SSL. Tutaj procedura będzie się różniła w zależności od dostawcy, z usług którego korzystamy. W wielu nowoczesnych hostingach SSL jest włączony domyślnie lub polega na kliknięciu przełącznika.

Po tej zmianie adres powinien działać i być automatycznie przekierowany lub jest kolejny przycisk do włączenia tego przekierowania. Niektóre mniej przyjazne panele wymagają instalacji i wklejania jakichś dziwnych kodów z jednego okienka do drugiego. Tutaj już muszę odesłać do wsparcia lub tutoriali tych dostawców.
Niekiedy wykorzystywana jest procedura weryfikacji z wykorzystaniem adresu e-mail. Uruchomienie SSLa w ramach domeny polega wtedy na prostej weryfikacji, która od naszej strony wymaga jedynie założenia skrzynki e-mail (jeżeli jeszcze nie istnieje) z adresem admin@domena.pl. Na tę skrzynkę zostanie wysłana wiadomość z linkiem umożliwiającym uruchomienie certyfikatu SSL. Po instalacji w panelu klienta, w której w w przypadku wystąpienie problemów, powinno pomóc nam wsparcie techniczne, certyfikat powinien już działać.
Instalacja certyfikatu SSL (Let’s Encrypt) na serwerze dedykowanym (lub VPS)
W przypadku serwera VPS i dedykowanych można samodzielnie zainstalować certyfikat – jest to kwestia kilku minut (ściągnięcia paczki i rejestracji domeny za pomocą kreatora). Dla przykładu, pokażę jak zainstalować certyfikat SSL na serwerze Apache w środowisku Linux Ubuntu 20.04.
Logujemy się za pomocą SSH. Na początek usuwamy cerbota jeżeli jest już zainstalowany na naszej maszynie i instalujemy certbota:
sudo snap install --classic certbot
Za pomocą jednej komendy możemy pobrać i zainstalować certyfikat:
sudo certbot --apache
Automatyczne odnowienie w CRON:
echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew" | sudo tee -a /etc/crontab > /dev/null
Jeżeli konsola o coś zapyta to „wszystko na tak”, podać e-mail a jeżeli poprosi o nazwę to podać nazwę domeny. W tym momencie może już wybrać, czy chcemy autoamtycznie przekierowywać na adres z HTTPS.
Testowanie SSL
Jednoznacznym i wstępnym potwierdzeniem, że z instalacją SSL jest wszystko w porządku może być wejście na stronę posługując się protokołem HTTPS:

Próbujemy wejść na naszą stronę, jednak tym razem z dumnym i zielonym przedrostkiem https:// przed jej adresem.
Przekierowania czas zacząć
Wszystko fajnie, jeżeli nie mamy wygodnego panelu, nie instalowaliśmy certyfikatu za pomocą certbota, musimy ręcznie przekierować cały ruch na protokół https. Nie powinien nikogo zdziwić fakt, że do zrealizowania tego celu skorzystamy z pliku .htacces i funkcji rewrite. Ponieważ jakieś tam SEO dla witryny zostało wcześniej poczynione, .htaccess przepisywał adresy jak to niektórzy specjaliści mówią z „bez www” na „www”. Wyglądało to następująco:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^www.nazwa-domeny.pl [NC] RewriteRule ^(.*)$ //www.nazwa-domeny.pl%{REQUEST_URI} [R=301,L]
Tak zupełnie przy okazji, przepisywanie w ten sposób adresów – czyli na subdomenę www lub na samą domenę – to kluczowy ruch w optymalizacji SEO. Wiadomo, że w tym momencie nam to nie wystarczy, ponieważ chodzi nam o przekierowywanie następujące:
- //domena na https://www.domena
- //www.domena na https://www.domena
- https://domena na https://www.domena
- https://www – zostawiamy w spokoju
Jak sobie z tym poradzić? Dodajmy następujące linie:
RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://www.nazwa-domeny.pl/$1 [R=301,L]
Jeżeli działa, a na pewno tak jest jeżeli potrafimy używać techniki kopiuj-wklej i podmienić ciąg „nazwa-domeny” na ten właściwy bez dodatkowych modyfikacji, przechodzimy do następnych kroków.
HTTP Strict Transport Security
To nie wszystko, aby wszystko było idealnie wykonane i uzyskać maksymalny wynik w SSL Server Test należy jeszcze włączyć tryb HTTP Strict Transport Security. To zablokuje możliwość wejścia no stronę po HTTP nawet jeśli użytkownik wyrazi na to taką chęć:
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
Ta instrukcja musi się znaleźć na samej górze.
Kompletny przykład przekierowania 301 na https://www w .htaccess
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS RewriteEngine On RewriteCond %{HTTP_HOST} !^www.nazwa-domeny.pl [NC] RewriteRule ^(.*)$ https://www.nazwa-domeny.pl%{REQUEST_URI} [R=301,L] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://www.nazwa-domeny.pl/$1 [R=301,L]
Kompletny przykład przekierowania 301 na https:// (bez www) w .htaccess
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS RewriteEngine On RewriteCond %{HTTP_HOST} ^www.nazwa-domeny.pl(.*) [NC] RewriteRule ^(.*)$ https://nazwa-domeny.pl/$1 [R=301,L] RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Przekierowanie HTTP na HTTPS zgodnie z SEO
Aby to całe przejście na tryb SSL było naprawdę udane pod kątem doświadczeń użytkownika i optymalizacji dla wyszukiwarek, należy jeszcze sprawdzić czy nie pominęliśmy przypadkiem wymienionych niżej czynności. Są one niezbędne do tego aby zminimalizować ilość przepisywań adresów po stronie serwera i nie powodować jakichkolwiek problemów z indeksacją:
Linki do zewnętrznych wtyczek muszą także być poprzedzone protokołem https. Moja rada – linkujmy za pomocą wyrażenia //adres, czyli przykładowo <a href=”//inna-domena”>
Linkowanie wewnętrzne, jeżeli odbywa się za pomocą adresów bezpośrednich także musi zostać uaktualnione do postaci https://nazwa-domeny.pl/… lub //nazwa-domeny.pl/… Czytaj więcej o linkowaniu wewnętrznym.
W systemie WordPress punk ten można zautomatyzować za pomocą wtyczki Better Search Replace. Podmienić ciąg: „http://domena” na „https://domena”. Jezeli posiadamy innego CMSa można dokonać ręcznej edycji bazy (zrobić zrzut np. mysqldump podmienic edytorem tekstowym ścieżki i załadowac na serwer SQL).
Mapa strony (sitemap) też powinna być jak najszybciej uaktualniona do nowej postaci adresów.
Narzędzia dla webmasterów – tutaj łączymy konto z naszą stroną tak jakbyśmy zakładali całkiem osobny serwis, czyli weryfikacja, przesłanie mapy i cierpliwe czekanie na wprowadzenie zmian w indeksie. Uwaga, nie usuwamy starego indeksu.
Robots.txt – aktualizacja, jeżeli oczywiście zawiera jakieś instrukcje dla crawlerów.
Aktualizacja innych przekierowań 301 – jeżeli na waszej stronie są dokonywane przekierowania inne niż opisane wyżej unikajmy łańcuchu przekierowań.
Aktualizacja linków przychodzących to chyba najtrudniejsza i najbardziej czasochłonna rzecz. Wszelkie adresy w profilach społecznościowych, przeróżnych katalogach i wszędzie tam gdzie mamy taką możliwość, powinny zostać zaktualizowane do nowej postaci z przedrostkiem https://. Bez obaw, linki z http też będą miały znaczenie – używamy przecież przekierowania 301.
Uwaga: pod żadnym pozorem nie używajmy do naszego celu „narzędzia zmiany adresu”. Tak samo jak nie powinno się używać go do zmiany nazwy subdomeny ani ścieżki. Czytaj więcej w sekcji komentarzy.
Poprawna konfiguracja nagłówków – należy np. za pomocą .htaccess lub bezpośrednio w ustawieniach serwera Apache ustawić tryb HTTP Strict Transport Security
Aktualizacja adresu w back-endzie – w ustawieniach CMSa albo w plikach config należy zmienić http na https aby uniknąć ciągłego przekierowywania.
Przykład z ustawień ogólnych w WordPress:

Przykład z preferencji ogólnych w PrestaShop:

HSTS Preload – Dodaj swoją stronę do listy HSTS Preload. Jeżeli chcesz przekierować na HTTPS wszystkie sub-domeny zmień nagłówek na:
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
Dzięki „includeSubDomains” i „preload” spełnimy wymagania aby nasza domena była na stałe dopisana do wewnętrznej listy „Chrome’s HTTP Strict Transport Security (HSTS) preload list” co jeszcze bardziej zwiększy bezpieczeństwo i wiarygodność strony www. Potem wejdź na https://hstspreload.org/ i wpisz swoją domenę:

Dzięki temu, najbliższe aktualizacje przeglądarek takich jak Chrome, Firefox, Safari i Microsoft Edge będą miały „na sztywno” zapisaną naszą domenę i będą od razu bez pytania przełączać się na protokół HTTPS. Na tej samej stronie możesz sprawdzić status zgłoszenia.
Dla pewności przetestuj: sprawdź czy wszystko zostało wykonane jak należy za pomocą takiego lub podobnego narzędzia online: SSL Server Test

Efekt końcowy
Potem pozostaje nam monitorować ruch. Jak wyglądała zmiana z punktu widzenia wyników wyszukiwania?

Wykres wyszukiwanych haseł witryny z HTTP. Zaznaczono moment rozpoczęcia przekierowywania 301 na adres z https.

Wykres wyszukiwanych haseł witryny z HTTPS. Zaznaczono moment rozpoczęcia przekierowywania 301 na adres z https. Zwróć uwagę, że drugi wykres ma inną skalę – widać wyraźnie pozytywny wpływ certyfiaktu SSL na ilość wyświetleń.
Jak widać, bez problemu poradziliśmy sobie z przekierowaniem całego ruchu na protokół HTTPS i zadbaniem o poprawną indeksację witryny z nowym adresem. Jak widzisz aktualizacja indeksu wyszukiwarki z nowym adresem zajęła parę dni. Co więcej, widać zwiększoną ilość wyświetleń w wynikach co może być częściowo powiązane z małym „wsparciem” algorytmu wyszukiwarki wobec idei rozpowszechniania szyfrowania SSL.
Chcesz wiedzieć więcej o SSL?
Przejdź do wpisu, w którym krótko wyjaśniam na czym polega bezpieczeństwo HTTPS i jak działa certyfikat SSL.
Podsumowanie
W ostatnim czasie można zaobserwować przechodzenie niektórych witryn na pełne SSL. Czy opłaca się taki ruch? W moim odczuciu: tak. Po instalacji certyfikatu zauważyliśmy z klientem wyraźny wzrost ilości wyświetleń strony w wynikach wyszukiwania, co miało także pozytywny efekt w postaci zwiększonej ilości konwersji. Pokazałem jak poprawnie wykonać przekierowanie oraz jakie dodatkowe czynności należy wykonać, aby całe przedsięwzięcie było bardziej efektywne.
Źródła
- https://support.google.com/webmasters/answer/6073543?hl=pl&ref_topic=9460495,
- https://certbot.eff.org/lets-encrypt/debianjessie-apache.html
Odpowiedz lub skomentuj