HSTS: HTTP Strict Transport Security pour le SEO

Ce que HSTS en réalité fait, le Strict-Transport-Security header syntax (max-age, includeSubDomains, preload), le navigateur-seulement internal redirection robots d’exploration jamais voir, pourquoi il ne fait pas remplacer votre 301s, et comment preload peut lock vous dans — depuis Patrick Stox.

Première publication : 3 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé
1 indice probant sur cette page

HSTS (HTTP Strict Transport Security) est a Strict-Transport-Security réponse header — honored seulement quand il arrives over a secure connection — que indique a navigateur à toujours utiliser HTTPS pour votre domain going forward, closing le insecure gap que a nouveau visitor's premier requête encore rend over HTTP avant votre 301 fires. c’est a navigateur-layer, per-client policy on top de votre serveur-side redirections, pas a replacement: RFC 6797 a le navigateur rewrite le URI à HTTPS internally avant quelconque requête goes out (souvent affiché as an internal 307-style redirection, though le RFC ne fait pas mandate a spécifique code d’état), donc aucun serveur ever voit le HTTP formulaire et robots d’exploration encore besoin votre réel 301 à comprendre le déplacer et carry popularité des liens. Le header a three directives — max-age (requis), includeSubDomains, et preload. Preload bakes votre domain dans le navigateur itself via hstspreload.org (requiring max-age de au moins a année, includeSubDomains, et le preload flag) et est fermer à irreversible — removal est a séparé submission que takes months à reach utilisateurs. HSTS est aussi deliberately unforgiving: a navigateur que knows vous as an HSTS host va difficile-fail avec aucun click-via si votre certificate ever breaks. Donc enable il seulement une fois HTTPS est genuinely solid à travers chaque subdomain, et treat preload as a un-way door.

TL;DR — HSTS est le Strict-Transport-Security réponse header, honored seulement quand a navigateur receives il over a secure connection, et stored per-client as future policy pour que host. Il closes le “first request problem” a 301 alone laisse ouvrir: le initial HTTP requête depuis a nouveau visitor est insecure jusqu’à le redirection fires, et c’est le window an SSL-stripping attacker veut. Three directives: max-age (requis, seconds), includeSubDomains, preload. Quand a navigateur enforces HSTS il rewrites le URI à HTTPS internally, avant quelconque requête reaches a serveur — RFC 6797 ne fait pas mandate a spécifique code d’état pour que rewrite, though outils souvent surface il as a 307 — donc votre serveur-side 301s sont encore mandatory pour moteur de recherches et popularité des liens; HSTS est on top de les, pas à la place. Preload bakes votre domain dans le navigateur via hstspreload.org (exige max-age ≥ 31536000, includeSubDomains, et preload) et est fermer à irreversible — removal est a séparé submission que takes months à reach utilisateurs. Et HSTS est designed à difficile-fail on quelconque cert erreur, donc enable il seulement quand HTTPS est robust à travers chaque subdomain.

Le HTTPS hub introduces HSTS as a navigateur-layer protection que sits on top de votre 301s. Ce page est le deep dive: le exact header syntax, le internal redirection que trips SEOs up, le preload liste’s near-irreversibility, et le real-world façons HSTS locks personnes out.

The problem HSTS en réalité solves: the premier requête

Picture a correctement migrated site. Every http:// URL 301-redirections to its https:// twin, the certificate is valid, canonicals point to HTTPS. Semble airtight. It isn’t, quite.

Quand a brand-new visitor types yoursite.com (aucun scheme) or clicks an old http://yoursite.com lien, le navigateur’s premier requête goes out over plain HTTP. Votre serveur réponses avec le 301, et chaque requête après que est secure. Mais que un initial round-trip happened dans le clair — et c’est exactly le window an SSL-stripping attacker on le même network veut. Ils intercept le HTTP requête, garder le victim on HTTP pendant que ils proxy HTTPS à votre serveur, et lire or rewrite tout.

«HSTS eliminates that window for anyone who has visited before. web.dev is direct about the mechanism: “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.” (web.dev). That last clause matters for performance too: a returning browser skips the HTTP→HTTPS round-trip entirely. Preuve à l’appui de cette affirmation After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Portée : MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Niveau de confiance : élevé · Vérifié : MDN: Strict-Transport-Security header » (Traduction) (Résumé en français de la section vingt, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Deux boundary conditions worth étant precise à propos de. Premier, HSTS est stored, per-client policy — il lives dans que un navigateur’s propre state pour que host, learned depuis a header delivered over a secure connection; le même header sent on an HTTP réponse est ignored outright (an attacker qui peut inject or strip headers on plain HTTP pourrait sinon neutralize il), et a client que a jamais reçu il — a fresh install, a différent navigateur, a robot d’exploration — a aucun policy à enforce. Deuxième, le rewrite est scheme-et-port aware: an implicit port 80 requête becomes an implicit port 443 requête, mais si le original URI named an explicit non-default port, le navigateur garde que même port number et simplement contacts il over HTTPS à la place.

The header syntax

HSTS est un réponse header avec up à three directives. Per MDN, le formulaires sont:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — requis. “Le temps, dans seconds, que le navigateur devrait remember que a host est seulement à être accessed en utilisant HTTPS” (MDN). 31536000 est un année; 63072000 est deux. Le clock resets on chaque réponse que carries le header, donc an active site continually renews son policy. Ce est relative, per-client state: simplement removing le header ne fait pas immédiatement clair il — a navigateur que déjà learned le policy garde enforcing il jusqu’à son stored max-age exécute out. À turn HSTS off pour clients que déjà learned il, vous ont à actively servir max-age=0 over a secure réponse; le navigateur alors forgets le policy on son suivant secure visit. (max-age=0 clears a learned policy seulement — il ne fait pas supprimer a domain depuis le séparé preload liste.)
  • includeSubDomains — optional. “Si ce directive est specified, le HSTS policy s’applique à tout subdomains de le host’s domain as bien” (MDN). Powerful et dangerous dans equal mesurer — voir le lockout scenarios ci-dessous.
  • preload — optional. A flag que signaux votre intent à être on le navigateur preload liste. Il ne fait pashing on son propre; c’est a prerequisite pour submitting à hstspreload.org. Preuve à l’appui de cette affirmation HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Portée : The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Niveau de confiance : élevé · Vérifié : Chromium: HSTS Preload List Submission

Le behavior, à nouveau depuis MDN: “Avant chargement an http URL, le navigateur vérifications le domain nom contre son HSTS hosts liste. Si le domain nom est a cas insensitive match pour an HSTS host or est a subdomain de un que specified includeSubDomains, alors le navigateur remplace le URL scheme avec https.”

The internal upgrade robots d’exploration jamais voir (ce is the SEO crux)

Ici’s le unique la plupart misunderstood chose à propos de HSTS, et le raison il ne peut pas remplacer votre redirections.

Quand a navigateur upgrades an http:// requête sous HSTS, il rewrites le URI à HTTPS internally, avant quelconque network requête est fait — RFC 6797 exige le scheme substitution itself mais ne fait pas mandate a particulier code d’état pour il (RFC 6797 §8,3), donc a donné navigateur or exploration outil peut represent que internal étape cependant il likes — nombreux afficher il as an internal 307, mais c’est client/outil-spécifique, pas a protocol guarantee. Ce que matters pour le SEO est simpler et holds regardless de le étiquette: aucun serveur est contacted pour le HTTP version, donc aucun robot d’exploration ever voit il. Googlebot et Bingbot ne pas carry a learned HSTS policy autour le façon a returning human’s Chrome fait — ils hit votre serveur fresh, et ce que ils besoin à voir là est a réel, serveur-side 301. Preuve à l’appui de cette affirmation 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. Portée : 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. Niveau de confiance : élevé · Vérifié : RFC 6797 §8.3 — URI Loading and Port Mapping

«So the rule is blunt: HSTS does not replace your server-side 301s. The 301 is what search engines use to understand the protocol move and to consolidate signals (301 and other permanent redirects don’t cause a loss in PageRank, per Google). The browser-only internal upgrade is a user-experience and security layer on top. You need both, doing different jobs: » (Traduction) (Résumé en français de la section trente et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

  • 301 (serveur-side): pour robots d’exploration, indexation, et popularité des liens.
  • Internal 307-style upgrade (navigateur-side, depuis HSTS): pour returning humans et SSL-stripping protection — le exact status representation varies par client/outil.

«Any guide that tells you HSTS “handles the redirect so you can drop your 301” is wrong in a way that will quietly cost you. » (Traduction) (Résumé en français de la section trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

HSTS preload: le near-permanent version

max-age protège returning visitors, mais il a a bootstrap problème: a premier-time visitor qui a jamais reçu votre header est encore exposed on que initial requête. Preload solves il par hardcoding votre domain dans le navigateur’s source itself, donc le navigateur knows vous êtes HTTPS-seulement avant il a ever connected.

Vous opt dans à hstspreload.org. Le requirements sont exact:

  1. “Serve a valid certificate.”
  2. “Redirect depuis HTTP à HTTPS on le même host, si vous sont listening on port 80.”
  3. “Servir tous subdomains over HTTPS” — notamment dans particulier le www subdomain si a DNS record exists.
  4. On le base domain’s HTTPS réponse, an HSTS header où “le max-age doit être au moins 31536000 seconds (1 année),” “le includeSubDomains directive doit être specified,” et “le preload directive doit être specified.” (hstspreload.org)

c’est pourquoi le deux-year exemple ci-dessus (max-age=63072000; includeSubDomains; preload) est le shape personnes submit — remarque ces sont le exact submission requirements as publié par hstspreload.org; treat les as le actuel bar, pas a permanent constant, et re-vérifier le actif page avant vous submit.

It helps to garder four distinct states straight, since personnes conflate les constantly:

Statequ’est-ce que en réalité vrai
Token présentVotre header inclut preload. Ce est a flag seulement — il ne fait pashing par itself et ne fait pas put vous on quelconque liste.
EligibleVotre site meets tout four hstspreload.org requirements ci-dessus (cert, redirection, subdomains, header shape). Encore pas on le liste.
Submitted / pendingvous avez submitted à hstspreload.org et c’est queued pour inclusion dans an upcoming navigateur release. Pas yet enforced pour réel utilisateurs.
En réalité listedLe domain est baked dans a donné navigateur’s shipped construire. Enforcement seulement exists pour utilisateurs on que construire — rollout n’est pas instant or universal à travers navigateurs.

Removal exécute le même four states dans reverse, et simplement as slowly: removing le preload directive depuis votre header rend vous eligible pour le removal formulaire, alors submission est pending, et le domain stays enforced pour quelconque utilisateur on a navigateur construire que encore ships il — jusqu’à que construire cycles out.

Maintenant le partie que turns preload dans a un-way door. Depuis le submission site itself: “Être aware que inclusion dans le preload liste ne peut pas easily être undone. Domains peut être supprimé, mais il takes months pour a modifier à reach utilisateurs avec a Chrome mettre à jour et nous ne peut pas faire guarantees à propos de autre navigateurs.” (hstspreload.org). Et son propre advice: “ne pas requête inclusion unless vous êtes certain que vous pouvez prise en charge HTTPS pour votre entier site et tout son subdomains dans le long terme.”

Practical traduction: preload est a genuinely great security posture, mais si vous ever besoin à servir n’importe quoi — a legacy subdomain, an acquired brand, an internal outil — over plain HTTP à nouveau, vous êtes stuck waiting on navigateur release cycles à reach chaque utilisateur. Kinsta’s guide puts le operational reality plainly: il peut être a difficult et time-consuming traiter à obtenir votre domain supprimé. Treat preload as permanent.

Pourquoi HSTS is designed to hurt quand choses break

«HSTS’s strictness is not a bug — it’s the entire security guarantee. web.dev spells out the tradeoff: “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.” (web.dev). » (Traduction) (Résumé en français de la section quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«The conclusion Google draws is the sentence I’d tattoo on anyone about to flip this on: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (web.dev). » (Traduction) (Résumé en français de la section quarante-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«“Hard-fail” means exactly that: no “proceed anyway” link, no click-through. On a normal HTTPS page, an expired cert throws a scary interstitial that a determined user can bypass. On an HSTS host, the browser refuses outright. So the failure mode of a missed certificate renewal changes category — from “traffic dips because people are scared off” to “the site is unreachable for every returning visitor.” » (Traduction) (Résumé en français de la section quarante-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## Real-world lockout scenarios » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«The ways HSTS bites in practice almost always trace back to includeSubDomains or preload getting ahead of your actual HTTPS coverage: » (Traduction) (Résumé en français de la section quarante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

  • Le forgotten subdomain. Vous définir includeSubDomains on example.com, mais legacy.example.com (an old app, a status page, a vendor outil) seulement speaks HTTP or a a cert que ne fait pas cover il. Chaque navigateur que saw le header maintenant refuses à charger que subdomain. Rien modifié on que serveur — le policy reached bas et broke il.
  • Le wildcard-cert gap. A *.example.com wildcard covers foo.example.com mais pas foo.bar.example.com (a wildcard est un DNS étiquette deep). Si a deeper subdomain relies on HTTP or a mismatched cert, includeSubDomains locks il out.
  • Le expired cert on an HSTS host. Renewal automation fails, le cert lapses, et au lieu de a bypassable warning vous obtenir a site c’est bas pour everyone whose navigateur remembers votre policy — jusqu’à vous obtenir a valide cert back et ils reconnect et recevoir a fresh secure réponse. Là est aucun faster override.
  • Preload regret. Vous preloaded, alors a entreprise besoin forces an HTTP-seulement service sous le domain. Rolling que back est deux séparé, non-instant jobs, pas un: diffusion max-age=0 over HTTPS seulement clears le learned policy pour clients que reconnect avant leur old max-age devrait’ve expired anyway, pendant que getting le domain out de le preload liste est a distinct submission que encore takes navigateur release cycles — months — à reach utilisateurs, independent de n’importe quoi vous modifier on votre serveur.
  • Local dev / staging collisions. Preloading example.com avec includeSubDomains peut faire dev.example.com or a localhost-style internal host sous le même apex refuse HTTP, breaking local workflows dans surprising façons.

None de ces sont raisons à éviter HSTS. ils sont raisons à stage il: court max-age premier, ajouter includeSubDomains seulement après auditing chaque subdomain, et reserve preload pour quand vous êtes certain.

HSTS n’est pas a classement play (et ne fait pas touch canonicalization)

«To be clear on the SEO framing: HSTS is not a ranking signal. HTTPS itself is a deliberately tiny one — Google called it a “very lightweight signal” affecting fewer than 1% of queries — and HSTS is a layer on top of HTTPS, not a separate ranking input. It also doesn’t directly control canonicalization or indexing. Google’s own documentation is more specific than a flat “doesn’t matter,” though: Google prefers HTTPS as canonical over an equivalent HTTP page except when there’s an invalid certificate, insecure page dependencies, an HTTPS page that redirects to HTTP, or an HTTP rel="canonical" tag (Google: consolidating duplicate URLs). HSTS cannot fix or override any of that. It’s a browser-side policy with no influence on Google’s canonicalization logic — a bad certificate or a broken redirect chain can still push Google toward an HTTP canonical regardless of what your HSTS header says. Canonicalization is driven by your 301s, your certificate, your rel="canonical", and your internal links — HSTS earns its place for security, user trust, and closing the SSL-stripping gap — do it for those reasons, keep your 301s and certificate genuinely solid, and you’ll never see HSTS itself on a rankings report either way. » (Traduction) (Résumé en français de la section cinquante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Si vous êtes running le broader HTTP→HTTPS déplacer, HSTS est le dernier chose vous switch on, pas le premier — il belongs après le migration a settled, as partie de le wider migration de site discipline.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.