Poradnik naprawy

Jak dodać nagłówek HSTS w WordPressie

8 lutego 2026 Zaktualizowano 19 kwi 2026

Nagłówek HSTS (HTTP Strict Transport Security) mówi przeglądarkom, by łączyły się z Twoją witryną WordPress tylko przez HTTPS. Bez tego nagłówka odwiedzający mogliby przypadkowo trafić na niebezpieczną wersję HTTP Twoich stron, co czyni ich podatnymi na ataki man-in-the-middle. Po ustawieniu przeglądarki pamiętają Twoje preferencje i automatycznie aktualizują każde żądanie do HTTPS przez określony przez Ciebie okres.

Co właściwie robi nagłówek HSTS?

Gdy przeglądarka otrzymuje nagłówek Strict-Transport-Security, zapisuje tę informację lokalnie. Dla każdej przyszłej wizyty w określonym oknie max-age przeglądarka odmówi łączenia się przez zwykły HTTP. Nawet nie próbuje najpierw nawiązać połączenia HTTP; idzie bezpośrednio do HTTPS. Eliminuje to krótkie okno, w którym atakujący mógłby przechwycić początkowe żądanie HTTP i przekierować użytkownika na złośliwą stronę.

Nagłówek ma trzy główne parametry:

  • max-age: jak długo (w sekundach) przeglądarka powinna pamiętać o wymuszaniu HTTPS. Wartość 31536000 odpowiada jednemu rokowi.
  • includeSubDomains: stosuje regułę również do każdej subdomeny (np. blog.example.com, shop.example.com).
  • preload: sygnalizuje, że chcesz umieścić swoją domenę na wbudowanej liście preload HSTS przeglądarki, by nawet pierwsza wizyta była chroniona.

Zanim zaczniesz: upewnij się, że HTTPS działa wszędzie

Ten krok jest niezbędny. Gdy HSTS jest aktywny, przeglądarki nie pozwolą odwiedzającym wrócić do HTTP. Jeśli Twój certyfikat SSL wygasł, jest źle skonfigurowany lub brakuje go na subdomenie, te strony staną się całkowicie niedostępne przez czas Twojego ustawienia max-age. Przed włączeniem zweryfikuj następujące:

  • Twój certyfikat SSL jest ważny i nie zbliża się do wygaśnięcia.
  • Wszystkie strony na Twojej witrynie ładują się poprawnie przez https://.
  • Nie ma ostrzeżeń mixed content w konsoli przeglądarki (zasoby HTTP załadowane na stronach HTTPS).
  • Jeśli zamierzasz używać includeSubDomains, każda subdomena musi mieć ważny certyfikat i serwować treści przez HTTPS.
  • Twój Site-URL WordPressa i Adres WordPressa (w Ustawienia > Ogólne) używają https://.

Dodawanie HSTS przez Apache .htaccess

Jeśli Twoja witryna WordPress działa na Apache (większość dostawców hostingu współdzielonego używa Apache), możesz dodać nagłówek bezpośrednio w pliku .htaccess w katalogu głównym WordPressa. Otwórz plik edytorem tekstu lub menedżerem plików dostawcy hostingu i dodaj następujący blok przed sekcją # BEGIN WordPress:

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Wrapper IfModule zapewnia, że Apache przetwarza tę dyrektywę tylko wtedy, gdy mod_headers jest włączony. Na większości hostów jest włączony domyślnie, ale wrapper zapobiega błędowi 500 na serwerach, gdzie nie jest dostępny.

Dodawanie HSTS przez Nginx

Dla hostingu opartego na Nginx (powszechne u zarządzanych hostów WordPress, takich jak Kinsta, Cloudways lub SpinupWP) dodaj nagłówek wewnątrz swojego bloku server. Plik konfiguracyjny znajduje się zwykle pod /etc/nginx/sites-available/twojadomena.pl lub w niestandardowym katalogu include Nginx oferowanym przez Twojego hosta:

server {
    listen 443 ssl;
    server_name example.com;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # ... rest of your server config
}

Słowo kluczowe always na końcu jest ważne. Bez niego Nginx wysyła nagłówek tylko przy udanych (2xx) odpowiedziach. Z always jest również dołączany przy stronach błędów (4xx, 5xx), co jest prawidłowym zachowaniem dla nagłówków bezpieczeństwa.

Po edycji konfiguracji przetestuj i przeładuj Nginx:

sudo nginx -t
sudo systemctl reload nginx

Dodawanie HSTS przez PHP w functions.php

Jeśli nie masz dostępu do plików konfiguracyjnych serwera (niektórzy zarządzani hostowie to ograniczają), możesz wysłać nagłówek z PHP. Dodaj poniższe do pliku functions.php aktywnego motywu lub, lepiej, do dedykowanej wtyczki specyficznej dla witryny, aby przetrwało aktualizacje motywu:

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

Pamiętaj, że nagłówki oparte na PHP dotyczą tylko stron przetwarzanych przez WordPress. Pliki statyczne (obrazy, CSS, JS) serwowane bezpośrednio przez Apache lub Nginx nie noszą tego nagłówka. Dla pełnego pokrycia podejście na poziomie serwera jest zawsze lepsze.

Używanie wtyczki WordPress do ustawienia HSTS

Jeśli wolisz podejście no-code, kilka wtyczek może obsłużyć HSTS za Ciebie:

  • Really Simple SSL (Pro): wersja Pro zawiera moduł nagłówków bezpieczeństwa, w którym możesz włączyć HSTS i skonfigurować max-age oraz includeSubDomains z dashboardu.
  • HTTP Headers: bezpłatna wtyczka oferująca UI do ustawiania różnych nagłówków bezpieczeństwa, w tym Strict-Transport-Security.
  • Headers Security Advanced & HSTS WP: specjalnie zbudowana dla nagłówków bezpieczeństwa z prostym przełącznikiem dla HSTS i preload.

Wtyczki są wygodne, ale dodają zależność. Jeśli wtyczka zostanie dezaktywowana lub usunięta, Twoje nagłówki również znikną. Dla czegoś tak fundamentalnego jak HSTS, konfiguracja na poziomie serwera jest bardziej niezawodna.

Bezpieczna strategia wdrażania: zacznij od małego, potem zwiększaj

Bezpośrednie przejście na max-age jednego roku jest ryzykowne, jeśli nie wszystko przetestowałeś. Jeśli coś pójdzie nie tak, przeglądarki będą wymuszać HTTPS przez cały rok i nie ma sposobu, by "cofnąć" nagłówek po stronie serwera, gdy przeglądarka go zcache'owała. Zamiast tego stosuj to stopniowe podejście:

  1. 5 minut: ustaw max-age=300 i przeglądaj swoją witrynę. Sprawdź, czy każda strona ładuje się, formularze są poprawnie wysyłane i nie pojawiają się ostrzeżenia mixed content.
  2. 1 dzień: zwiększ do max-age=86400. Pozwól działać dzień lub dwa, monitorując witrynę.
  3. 1 tydzień: przejdź na max-age=604800. W tym momencie powinieneś móc ufać, że HTTPS działa wszędzie.
  4. 1 rok: ustaw ostateczną wartość max-age=31536000. To minimum wymagane do zgłoszenia na listę preload HSTS.
  5. Dodaj includeSubDomains: zrób to dopiero po potwierdzeniu, że wszystkie subdomeny działają na HTTPS.
  6. Dodaj preload: dodaj flagę preload i zgłoś swoją domenę na hstspreload.org.

Zgłaszanie witryny na listę preload HSTS

Lista preload HSTS to rejestr domen, z którymi przeglądarki są dostarczane z wbudowanym wymuszaniem HSTS. Oznacza to, że nawet pierwsza wizyta na Twojej stronie odbywa się przez HTTPS, zanim przeglądarka kiedykolwiek zobaczy Twój nagłówek. Aby się kwalifikować, Twoja strona musi spełniać te wymagania:

  • Dostarczać ważny certyfikat SSL.
  • Przekierowywać cały ruch HTTP na HTTPS na tym samym hoście.
  • Wysyłać nagłówek Strict-Transport-Security z max-age co najmniej 31536000 (jeden rok).
  • Zawierać dyrektywę includeSubDomains.
  • Zawierać dyrektywę preload.

Odwiedź hstspreload.org, wprowadź swoją domenę i zgłoś. Pamiętaj, że usunięcie z listy preload trwa miesiącami i wymaga cyklu aktualizacji przeglądarki, więc zgłaszaj tylko wtedy, gdy w pełni zobowiązujesz się do HTTPS.

Jak zweryfikować swój nagłówek HSTS w DevTools przeglądarki

Po dodaniu nagłówka możesz szybko potwierdzić, że działa:

  1. Otwórz swoją stronę w Chrome lub Firefox.
  2. Naciśnij F12, by otworzyć DevTools.
  3. Przejdź do zakładki Network i przeładuj stronę.
  4. Kliknij na żądanie głównego dokumentu (zwykle pierwsze).
  5. Przewiń w dół do Response Headers.
  6. Szukaj Strict-Transport-Security. Powinieneś zobaczyć skonfigurowaną wartość.

Możesz też sprawdzić z linii poleceń:

curl -sI https://example.com | grep -i strict-transport

Jeśli nagłówek się nie pojawia, sprawdź, czy odwiedzasz wersję HTTPS (nie HTTP) i czy zmiany konfiguracji serwera zostały zapisane i przeładowane.

Typowe błędy HSTS i jak ich unikać

  • Ustawianie HSTS na odpowiedziach HTTP: nagłówek jest ignorowany przez przeglądarki, gdy jest dostarczany przez zwykły HTTP. Ma efekt tylko na odpowiedziach HTTPS.
  • Zapominanie o plikach statycznych: jeśli ustawiasz HSTS przez PHP, pliki statyczne omijają WordPress i nie noszą nagłówka. Użyj konfiguracji na poziomie serwera dla pełnego pokrycia.
  • Używanie includeSubDomains bez sprawdzania subdomen: jeśli masz subdomenę, która nie wspiera HTTPS (np. stary serwer staging), stanie się niedostępna.
  • Zbyt szybkie skakanie na długie max-age: zawsze zaczynaj od krótkiego czasu trwania i powoli zwiększaj.
  • Zapominanie o odnowieniu certyfikatu SSL: z aktywnym HSTS i wygasłym certyfikatem Twoja strona jest całkowicie niedostępna. Skonfiguruj automatyczne odnawianie z Let's Encrypt lub dostawcą certyfikatów.

Zweryfikuj konfigurację HSTS z InspectWP

Po dodaniu nagłówka wykonaj nowy skan InspectWP na swojej stronie. Sekcja nagłówków bezpieczeństwa w Twoim raporcie pokazuje status nagłówka Strict-Transport-Security. Jeśli wszystko jest poprawnie skonfigurowane, pojawia się jako zielony (obecny). Jeśli ustawiłeś też inne nagłówki bezpieczeństwa, sprawdź je również, by uzyskać pełny obraz statusu bezpieczeństwa swojej strony.

Sprawdź teraz swoją stronę WordPress

InspectWP analizuje Twoją stronę WordPress pod kątem bezpieczeństwa, problemów SEO, zgodności z RODO i wydajności — za darmo.

Przeanalizuj stronę za darmo