HSTS: HTTP Strict Transport Security dla SEO

Co faktycznie robi HSTS, składnia nagłówka Strict-Transport-Security (max-age, includeSubDomains, preload), wewnętrzne przekierowanie tylko w przeglądarce, którego crawlerzy nigdy nie widzą, dlaczego nie zastępuje Twoich przekierowań 301s i jak preload może Cię zablokować — od Patricka Stoxa.

Opublikowano po raz pierwszy: 3 lip 2026 · Ostatnia aktualizacja: 3 sie 2026 · Zaawansowane
1 sygnał dowodowy na tej stronie

HSTS (HTTP Strict Transport Security) to nagłówek odpowiedzi Strict-Transport-Security — honorowany tylko wtedy, gdy dotrze przez bezpieczne połączenie — który mówi przeglądarce, aby zawsze używała HTTPS dla Twojej domeny w przyszłości, zamykając niebezpieczną lukę, przez którą pierwsze żądanie nowego odwiedzającego nadal przechodzi przez HTTP, zanim zadziała Twoje 301. To polityka na poziomie przeglądarki, per-klient, nałożona na Twoje przekierowania po stronie serwera, a nie ich zamiennik: RFC 6797 nakazuje przeglądarce przepisanie URI na HTTPS wewnętrznie, zanim jakiekolwiek żądanie zostanie wysłane (często pokazywane jako wewnętrzne przekierowanie w stylu 307, chociaż RFC nie narzuca konkretnego kodu statusu), więc serwer nigdy nie widzi formy HTTP, a crawlerzy nadal potrzebują Twojego prawdziwego 301, aby zrozumieć przeniesienie i przekazać moc linków. Nagłówek ma trzy dyrektywy — max-age (wymagane), includeSubDomains i preload. Preload wbudowuje Twoją domenę w samą przeglądarkę za pośrednictwem hstspreload.org (wymagając max-age co najmniej roku, includeSubDomains i flagi preload) i jest prawie nieodwracalny — usunięcie to osobne zgłoszenie, które dociera do użytkowników po miesiącach. HSTS jest również celowo bezlitosny: przeglądarka, która zna Cię jako hosta HSTS, twardo zakończy się błędem bez możliwości kliknięcia, jeśli Twój certyfikat kiedykolwiek się zepsuje. Więc włącz go tylko wtedy, gdy HTTPS jest naprawdę solidny na każdej subdomenie, i traktuj preload jako drzwi w jedną stronę.

TL;DR — HSTS to nagłówek odpowiedzi Strict-Transport-Security, honorowany tylko wtedy, gdy przeglądarka otrzyma go przez bezpieczne połączenie, i przechowywany per-klient jako przyszła polityka dla tego hosta. Zamyka on „problem pierwszego żądania”, który sam 301 pozostawia otwarty: początkowe żądanie HTTP od nowego odwiedzającego jest niebezpieczne, dopóki przekierowanie nie zadziała, a to jest okno, którego chce atakujący przeprowadzający SSL-stripping. Trzy dyrektywy: max-age (wymagana, sekundy), includeSubDomains, preload. Gdy przeglądarka egzekwuje HSTS, przepisuje URI na HTTPS wewnętrznie, zanim jakiekolwiek żądanie dotrze do serwera — RFC 6797 nie nakazuje konkretnego kodu statusu dla tego przepisania, chociaż narzędzia często pokazują go jako 307 — więc Twoje 301 po stronie serwera są nadal obowiązkowe dla wyszukiwarek i przekazywania link equity; HSTS jest na nich, nie zamiast nich. Preload wbudowuje Twoją domenę w przeglądarkę przez hstspreload.org (wymaga max-age ≥ 31536000, includeSubDomains i preload) i jest prawie nieodwracalny — usunięcie to osobne zgłoszenie, które dociera do użytkowników po miesiącach. A HSTS jest zaprojektowany tak, aby twardo kończyć się błędem przy każdym problemie z certyfikatem, więc włączaj go tylko wtedy, gdy HTTPS jest solidne na każdym subdomenie.

Centrum HTTPS przedstawia HSTS jako ochronę na poziomie przeglądarki, która leży na Twoich 301. Ta strona to szczegółowe omówienie: dokładna składnia nagłówka, wewnętrzne przekierowanie, które myli specjalistów SEO, prawie nieodwracalność listy preload, oraz rzeczywiste sposoby, w jakie HSTS blokuje użytkownikom dostęp.

Problem, który HSTS faktycznie rozwiązuje: pierwsze żądanie

Wyobraź sobie poprawnie zmigrowaną witrynę. Każdy adres URL http:// przekierowuje 301 na swój odpowiednik https://, certyfikat jest ważny, kanoniki wskazują na HTTPS. Wygląda na szczelne. Nie jest, całkiem.

Gdy zupełnie nowy odwiedzający wpisze yoursite.com (bez schematu) lub kliknie stary link http://yoursite.com, pierwsze żądanie przeglądarki wychodzi przez zwykły HTTP. Twój serwer odpowiada 301, a każde kolejne żądanie jest już bezpieczne. Ale ta jedna początkowa wymiana danych odbyła się jawnie — i to jest dokładnie okno, którego chce atakujący SSL-stripping w tej samej sieci. Przechwytuje żądanie HTTP, utrzymuje ofiarę na HTTP, podczas gdy sam pośredniczy w HTTPS do Twojego serwera, i czyta lub przepisuje wszystko.

HSTS eliminuje to okno dla każdego, kto odwiedził witrynę wcześniej. web.dev mówi wprost o mechanizmie: “use Strict Transport Security to tell clients they should always connect to your server using HTTPS, even when following an http:// reference. This defeats attacks like SSL Stripping, and avoids the round-trip cost of the 301 redirect.” (tłumaczenie) „użyj Strict Transport Security, aby poinformować klientów, że powinni zawsze łączyć się z serwerem przez HTTPS, nawet gdy korzystają z odnośnika http://. Udaremnia to ataki SSL Stripping i pozwala uniknąć dodatkowego przebiegu przekierowania 301”. (tłumaczenie) „użyj Strict Transport Security, aby powiedzieć klientom, że powinni zawsze łączyć się z Twoim serwerem przez HTTPS, nawet gdy podążają za odwołaniem http://. To pokonuje ataki takie jak SSL Stripping i unika kosztu dodatkowej podróży w obie strony związanego z przekierowaniem 301.” (web.dev). To ostatnie zdanie ma znaczenie również dla wydajności: powracająca przeglądarka pomija całkowicie podróż HTTP→HTTPS w obie strony. Dowód potwierdzający to twierdzenie After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Zakres: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Poziom ufności: wysoki · Zweryfikowano: MDN: Strict-Transport-Security header

Warto precyzyjnie określić dwa warunki brzegowe. Po pierwsze, HSTS to przechowywana, per-klient polityka — żyje w stanie tej jednej przeglądarki dla tego hosta, poznana z nagłówka dostarczonego przez bezpieczne połączenie; ten sam nagłówek wysłany w odpowiedzi HTTP jest całkowicie ignorowany (atakujący, który mógłby wstrzykiwać lub usuwać nagłówki na zwykłym HTTP, mógłby w przeciwnym razie go zneutralizować), a klient, który nigdy go nie otrzymał — świeża instalacja, inna przeglądarka, robot indeksujący — nie ma polityki do egzekwowania. Po drugie, przepisanie jest świadome schematu i portu: niejawne żądanie na porcie 80 staje się niejawnym żądaniem na porcie 443, ale jeśli oryginalny URI wskazywał jawny port inny niż domyślny, przeglądarka zachowuje ten sam numer portu i po prostu kontaktuje się z nim przez HTTPS.

Składnia nagłówka

HSTS to jeden nagłówek odpowiedzi z maksymalnie trzema dyrektywami. Według MDN, formy są następujące:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — wymagane. “Czas, w sekundach, przez który przeglądarka powinna pamiętać, że host może być dostępny tylko przez HTTPS” (MDN). 31536000 to jeden rok; 63072000 to dwa. Zegar resetuje się przy każdej odpowiedzi zawierającej nagłówek, więc aktywna witryna stale odnawia swoją politykę. Jest to stan względny, per-klient: samo usunięcie nagłówka nie powoduje natychmiastowego wyczyszczenia — przeglądarka, która już poznała politykę, nadal ją egzekwuje, dopóki jej zapisany max-age nie wygaśnie. Aby wyłączyć HSTS dla klientów, którzy już ją poznali, musisz aktywnie serwować max-age=0 w bezpiecznej odpowiedzi; przeglądarka wtedy zapomina politykę przy następnej bezpiecznej wizycie. (max-age=0 czyści nauczoną politykę tylko — nie usuwa domeny z osobnej listy preload.)
  • includeSubDomains — opcjonalne. “Jeśli ta dyrektywa jest określona, polityka HSTS stosuje się również do wszystkich subdomen domeny hosta” (MDN). Potężne i niebezpieczne w równym stopniu — patrz scenariusze blokady poniżej.
  • preload — opcjonalne. Flaga sygnalizująca Twoją intencję umieszczenia na liście preload przeglądarki. Sama w sobie nic nie robi; jest warunkiem wstępnym do zgłoszenia na hstspreload.org. Dowód potwierdzający to twierdzenie HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Zakres: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Poziom ufności: wysoki · Zweryfikowano: Chromium: HSTS Preload List Submission

Zachowanie, ponownie z MDN: “Przed załadowaniem adresu URL http przeglądarka sprawdza nazwę domeny na swojej liście hostów HSTS. Jeśli nazwa domeny jest dopasowaniem bez rozróżniania wielkości liter do hosta HSTS lub jest subdomeną takiego, który określił includeSubDomains, przeglądarka zastępuje schemat URL na https.”

Wewnętrzne ulepszenie, którego crawlerzy nigdy nie widzą (to jest sedno SEO)

Oto najczęściej źle rozumiana rzecz dotycząca HSTS i powód, dla którego nie może ona zastąpić Twoich przekierowań.

Gdy przeglądarka ulepsza żądanie http:// w ramach HSTS, przepisuje URI na HTTPS wewnętrznie, przed wykonaniem jakiegokolwiek żądania sieciowego — RFC 6797 wymaga samej substytucji schematu, ale nie nakazuje konkretnego kodu statusu dla niej (RFC 6797 §8.3), więc dana przeglądarka lub narzędzie do crawlowania może reprezentować ten wewnętrzny krok, jak chce — wiele wyświetla go jako wewnętrzne 307, ale to specyficzne dla klienta/narzędzia, a nie gwarancja protokołu. To, co ma znaczenie dla SEO, jest prostsze i obowiązuje niezależnie od etykiety: żaden serwer nie jest kontaktowany dla wersji HTTP, więc żaden crawler nigdy jej nie widzi. Googlebot i Bingbot nie noszą nauczonej polityki HSTS tak, jak robi to wracający człowiek w Chrome — uderzają na Twój serwer na świeżo, a to, co muszą tam zobaczyć, to prawdziwe, serwerowe 301. Dowód potwierdzający to twierdzenie RFC 6797 requires the user agent to rewrite a known-HSTS-host HTTP URI to HTTPS internally, but does not mandate any specific redirect status code for that internal rewrite; how a given browser or crawling tool represents that step (e.g., as an internal 307) is a client/tool implementation detail, not a protocol requirement. Zakres: RFC 6797 Section 8.3 ("URI Loading and Port Mapping") specifies the UA MUST replace the URI scheme with https; it does not prescribe an HTTP status code for that internal substitution, since no HTTP exchange occurs for it. Section 7.2's suggestion of status code 301 addresses ordinary server-side redirect behavior, not this internal client-side rewrite. Poziom ufności: wysoki · Zweryfikowano: RFC 6797 §8.3 — URI Loading and Port Mapping

Więc zasada jest prosta: HSTS nie zastępuje Twoich serwerowych 301. 301 jest tym, czego wyszukiwarki używają do zrozumienia zmiany protokołu i do konsolidacji sygnałów (“301 and other permanent redirects don’t cause a loss in PageRank.” (tłumaczenie) „301 i inne trwałe przekierowania nie powodują utraty PageRank”, według Google). Wewnętrzne ulepszenie tylko w przeglądarce to warstwa doświadczenia użytkownika i bezpieczeństwa na wierzchu. Potrzebujesz obu, wykonujących różne zadania:

  • 301 (serwerowe): dla crawlerów, indeksowania i kapitału linków.
  • Wewnętrzne ulepszenie w stylu 307 (po stronie przeglądarki, z HSTS): dla wracających ludzi i ochrony przed SSL-stripping — dokładna reprezentacja statusu różni się w zależności od klienta/narzędzia.

Każdy przewodnik, który mówi, że HSTS “obsługuje przekierowanie, więc możesz porzucić swoje 301”, jest błędny w sposób, który będzie Cię po cichu kosztować.

HSTS preload: wersja prawie permanentna

max-age chroni powracających odwiedzających, ale ma problem z uruchamianiem: pierwszy odwiedzający, który nigdy nie otrzymał Twojego nagłówka, jest nadal narażony na to początkowe żądanie. Preload rozwiązuje to, wpisując Twoją domenę bezpośrednio do źródła przeglądarki, dzięki czemu przeglądarka wie, że jesteś HTTPS-only, zanim jeszcze się połączy.

Zgłaszasz się na hstspreload.org. Wymagania są dokładne:

  1. “Serve a valid certificate.” (tłumaczenie) „Udostępniaj prawidłowy certyfikat”.
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (tłumaczenie) „Przekierowuj połączenia nieszyfrowane do szyfrowanych w tej samej domenie, jeśli nasłuchujesz na porcie 80”.
  3. “Serve all subdomains over HTTPS.” (tłumaczenie) „Obsługuj wszystkie subdomeny przez szyfrowane połączenie” — w tym w szczególności subdomenę www, jeśli istnieje rekord DNS.
  4. W odpowiedzi HTTPS domeny głównej nagłówek HSTS, gdzie “the max-age must be at least 31536000 seconds (1 year),” (tłumaczenie) „wartość max-age musi wynosić co najmniej 31536000 sekund (1 rok)”, “the includeSubDomains directive must be specified,” (tłumaczenie) „dyrektywa includeSubDomains musi być określona” oraz “the preload directive must be specified.” (tłumaczenie) „dyrektywa preload musi być określona”. (hstspreload.org)

Dlatego powyższy dwuletni przykład (max-age=63072000; includeSubDomains; preload) ma kształt, który ludzie zgłaszają — zauważ, że są to dokładne wymagania zgłoszeniowe opublikowane przez hstspreload.org; traktuj je jako aktualny próg, a nie stałą stałą, i sprawdź ponownie stronę na żywo przed zgłoszeniem.

Pomaga rozróżnić cztery różne stany, ponieważ ludzie ciągle je mylą:

StanCo jest naprawdę prawdą
Token obecnyTwój nagłówek zawiera preload. To tylko flaga — sama w sobie nic nie robi i nie umieszcza Cię na żadnej liście.
Kwalifikujący sięTwoja witryna spełnia wszystkie cztery wymagania hstspreload.org powyżej (certyfikat, przekierowanie, subdomeny, kształt nagłówka). Nadal nie ma Cię na liście.
Zgłoszony / oczekującyZgłosiłeś na hstspreload.org i jest w kolejce do uwzględnienia w nadchodzącej wersji przeglądarki. Nie jest jeszcze egzekwowany dla prawdziwych użytkowników.
Faktycznie na liścieDomena jest wbudowana w wydaną kompilację danej przeglądarki. Egzekwowanie istnieje tylko dla użytkowników tej kompilacji — wdrożenie nie jest natychmiastowe ani uniwersalne w przeglądarkach.

Usunięcie przebiega przez te same cztery stany w odwrotnej kolejności i równie wolno: usunięcie dyrektywy preload z nagłówka czyni Cię kwalifikującym się do formularza usunięcia, następnie zgłoszenie jest oczekujące, a domena pozostaje egzekwowana dla każdego użytkownika na kompilacji przeglądarki, która nadal ją zawiera — dopóki ta kompilacja nie wygaśnie.

Teraz część, która zamienia preload w drzwi jednokierunkowe. Ze strony zgłoszeniowej samej w sobie: “Be aware that inclusion in the preload list cannot easily be undone. Domains can be removed, but it takes months for a change to reach users with a Chrome update and we cannot make guarantees about other browsers.” (tłumaczenie) „Pamiętaj, że wpisu na liście preload nie można łatwo cofnąć. Domenę można usunąć, ale dotarcie zmiany do użytkowników wraz z aktualizacją Chrome trwa miesiące, a w przypadku innych przeglądarek nie możemy niczego zagwarantować”. (hstspreload.org). I jej własna rada: “Don’t request inclusion unless you’re sure that you can support HTTPS for your entire site and all its subdomains in the long term.” (tłumaczenie) „Nie proś o dodanie do listy, dopóki nie masz pewności, że możesz długoterminowo obsługiwać HTTPS w całej witrynie i we wszystkich jej subdomenach”.

Praktyczne tłumaczenie: preload to naprawdę świetna postawa bezpieczeństwa, ale jeśli kiedykolwiek będziesz musiał serwować cokolwiek — starszą subdomenę, przejętą markę, wewnętrzne narzędzie — ponownie przez zwykły HTTP, utkniesz czekając na cykle wydań przeglądarki, aby dotarły do każdego użytkownika. Przewodnik Kinsty przedstawia rzeczywistość operacyjną wprost: może to być trudny i czasochłonny proces usunięcia Twojej domeny. Traktuj preload jako trwały.

Dlaczego HSTS jest zaprojektowany tak, aby boleć, gdy coś się psuje

Surowość HSTS nie jest błędem — to cała gwarancja bezpieczeństwa. web.dev wyjaśnia ten kompromis: “Clients that have listed your site as a known HSTS Host are likely to hard-fail if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can’t trick clients into accessing the site without HTTPS.” (tłumaczenie) „Klienci, którzy zapisali Twoją witrynę jako znany host HSTS, prawdopodobnie zakończą połączenie twardym błędem, jeśli w konfiguracji TLS witryny kiedykolwiek pojawi się błąd, taki jak wygasły certyfikat. HSTS jest celowo zaprojektowany w ten sposób, aby atakujący w sieci nie mogli nakłonić klientów do wejścia na stronę bez HTTPS”. (web.dev).

Wniosek, do którego dochodzi Google, to zdanie, które wyryłbym każdemu, kto ma zamiar to włączyć: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (tłumaczenie) „Nie włączaj HSTS, dopóki nie masz pewności, że działanie Twojej witryny jest na tyle solidne, aby nigdy nie wdrożyć HTTPS z błędami walidacji certyfikatu.” (web.dev).

„Twarda awaria” oznacza dokładnie to: brak linku „kontynuuj mimo to”, brak możliwości przejścia dalej. Na zwykłej stronie HTTPS wygasły certyfikat wyświetla przerażający ekran pośredni, który zdeterminowany użytkownik może ominąć. Na hoście z HSTS przeglądarka po prostu odmawia. Tak więc sposób awarii w przypadku przeoczonego odnowienia certyfikatu zmienia kategorię — z „spadku ruchu, ponieważ ludzie są odstraszani” na „witryna jest niedostępna dla każdego powracającego odwiedzającego”.

Scenariusze blokady w realnym świecie

Sposoby, w jakie HSTS gryzie w praktyce, prawie zawsze sprowadzają się do includeSubDomains lub preloadu wyprzedzającego rzeczywiste pokrycie HTTPS:

  • Zapomniana subdomena. Ustawiasz includeSubDomains na example.com, ale legacy.example.com (stara aplikacja, strona statusu, narzędzie dostawcy) obsługuje tylko HTTP lub ma certyfikat, który jej nie obejmuje. Każda przeglądarka, która widziała nagłówek, teraz odmawia załadowania tej subdomeny. Nic się nie zmieniło na tym serwerze — polityka sięgnęła w dół i ją zepsuła.
  • Luka w certyfikacie wildcard. Wildcard *.example.com obejmuje foo.example.com, ale nie obejmuje foo.bar.example.com (wildcard jest głęboki na jeden poziom DNS). Jeśli głębsza subdomena polega na HTTP lub niepasującym certyfikacie, includeSubDomains ją blokuje.
  • Wygasły certyfikat na hoście z HSTS. Automatyzacja odnawiania zawodzi, certyfikat wygasa, i zamiast ostrzeżenia, które można ominąć, dostajesz witrynę, która jest niedostępna dla wszystkich, których przeglądarka pamięta Twoją politykę — dopóki nie przywrócisz ważnego certyfikatu i oni nie połączą się ponownie i nie otrzymają świeżej, bezpiecznej odpowiedzi. Nie ma szybszego obejścia.
  • Żal po preloadzie. Wykonałeś preload, a potem potrzeba biznesowa wymusza usługę tylko-HTTP w ramach domeny. Cofnięcie tego to dwa osobne, nie natychmiastowe zadania, nie jedno: serwowanie max-age=0 przez HTTPS czyści tylko wyuczoną politykę dla klientów, którzy połączą się ponownie, zanim ich stary max-age i tak by wygasł, podczas gdy usunięcie domeny z listy preload to osobne zgłoszenie, które i tak zajmuje cykle wydań przeglądarek — miesiące — zanim dotrze do użytkowników, niezależnie od tego, co zmienisz na swoim serwerze.
  • Kolizje lokalnego dev / staging. Preloadowanie example.com z includeSubDomains może sprawić, że dev.example.com lub host wewnętrzny w stylu localhost pod tym samym apexem odmówi HTTP, psując lokalne przepływy pracy w zaskakujący sposób.

Żaden z tych powodów nie jest powodem, aby unikać HSTS. To powody, aby go wdrożyć etapami: najpierw krótki max-age, dodaj includeSubDomains dopiero po audycie każdej subdomeny, a preload zarezerwuj na moment, gdy będziesz pewien.

HSTS to nie gra o pozycje (i nie wpływa na kanonikalizację)

Dla jasności w kwestii SEO: HSTS nie jest sygnałem rankingowym. Sam HTTPS jest celowo minimalnym sygnałem — Google nazwał go “bardzo lekkim sygnałem” wpływającym na mniej niż 1 % zapytań — a HSTS to warstwa na HTTPS, nie osobny czynnik rankingowy. Nie wpływa też bezpośrednio na kanonikalizację ani indeksowanie. Dokumentacja Google jest jednak bardziej szczegółowa niż płaskie “to nie ma znaczenia”: Google preferuje HTTPS jako kanon względem równoważnej strony HTTP z wyjątkiem sytuacji, gdy występuje nieprawidłowy certyfikat, niezabezpieczone zależności strony, strona HTTPS przekierowująca na HTTP lub tag rel="canonical" HTTP (Google: konsolidacja zduplikowanych adresów URL). HSTS nie może tego naprawić ani nadpisać. To polityka po stronie przeglądarki, która nie ma wpływu na logikę kanonikalizacji Google — zły certyfikat lub zerwany łańcuch przekierowań może nadal skłaniać Google ku kanonowi HTTP niezależnie od tego, co mówi Twój nagłówek HSTS. Kanonikalizacja jest sterowana przez Twoje przekierowania 301, certyfikat, tag rel="canonical" i linki wewnętrzne — HSTS zasługuje na swoje miejsce ze względu na bezpieczeństwo, zaufanie użytkowników i zamknięcie luki związanej ze strippingiem SSL — rób to z tych powodów, utrzymuj przekierowania 301 i certyfikat naprawdę solidne, a nigdy nie zobaczysz HSTS na raporcie rankingowym w żadną stronę.

Jeśli przeprowadzasz szerszą migrację HTTP→HTTPS, HSTS włączasz na końcu, nie na początku — powinno to nastąpić po ustabilizowaniu się migracji, w ramach szerszej dyscypliny migracji strony.

Dodaj notatkę eksperta

Przypnij cytat eksperta

Nowa osoba? Najpierw utwórz jej nieprzejęty profil na /admin/experts/ → Przypnij cytat eksperta .