HSTS: HTTP Strict Transport Security per la SEO
Cosa fa realmente HSTS, la sintassi dell'header Strict-Transport-Security (max-age, includeSubDomains, preload), il redirect interno solo browser che i crawler non vedono mai, perché non sostituisce i redirect permanenti e come il preload può bloccarti — da Patrick Stox.
Lingue
1 segnale di evidenza in questa pagina
- Strumento live correlatoHTTP Header Checker
HSTS (HTTP Strict Transport Security) è un header di risposta Strict-Transport-Security — onorato solo quando arriva su una connessione sicura — che dice al browser di usare sempre HTTPS per il tuo dominio d'ora in poi, chiudendo il gap insicuro che la prima richiesta di un nuovo visitatore fa ancora su HTTP prima che il tuo 301 scatti. È una policy a livello di browser, per singolo client, sopra i tuoi redirect lato server, non un sostituto: RFC 6797 fa riscrivere al browser l'URI in HTTPS internamente prima che qualsiasi richiesta parta (spesso mostrato come un redirect interno stile 307, anche se la RFC non impone un codice di stato specifico), quindi nessun server vede mai la forma HTTP e i crawler hanno ancora bisogno del tuo vero 301 per capire il trasferimento e trasferire l'equity dei link. L'header ha tre direttive — max-age (obbligatoria), includeSubDomains e preload. Il preload incorpora il tuo dominio nel browser stesso tramite hstspreload.org (richiedendo max-age di almeno un anno, includeSubDomains e il flag preload) ed è quasi irreversibile — la rimozione è una richiesta separata che richiede mesi per raggiungere gli utenti. HSTS è anche deliberatamente inflessibile: un browser che ti conosce come host HSTS fallirà duramente senza possibilità di clic se il tuo certificato si rompe. Quindi abilitalo solo quando HTTPS è davvero solido su ogni sottodominio, e tratta il preload come una porta a senso unico.
TL;DR — HSTS è una breve istruzione inviata dal server ai browser che dice: “usa sempre HTTPS per il mio sito — mai HTTP semplice.” Colma un piccolo buco di sicurezza che un normale reindirizzamento HTTP→HTTPS lascia aperto, e non danneggia la SEO. Ma è severo di proposito: una volta attivato, un certificato rotto blocca il tuo sito senza che i visitatori possano cliccare oltre l’avviso. Attivalo solo quando la tua configurazione HTTPS è davvero solida.
Cos’è HSTS
Sai già che dovresti essere su HTTPS — la versione crittografata,
con lucchetto, del tuo sito. Il modo normale per imporlo è un reindirizzamento: quando
qualcuno digita http://yoursite.com, il tuo server gli invia un reindirizzamento 301 a
https://yoursite.com. Funziona, ma lascia una piccola finestra scoperta. Quella primissima
richiesta — quella prima che il reindirizzamento scatti — esce ancora su HTTP non sicuro.
Un attaccante sulla stessa rete Wi-Fi può sfruttare quella finestra.
HSTS — HTTP Strict Transport Security — chiude quella finestra. È una breve istruzione
(un “header”) che il tuo server aggiunge alle sue risposte — ma solo a quelle servite su una
connessione davvero sicura; lo stesso header inviato su HTTP semplice viene ignorato, poiché
un attaccante potrebbe altrimenti iniettarlo o rimuoverlo — che dice al browser: per
il periodo specificato, non provare nemmeno HTTP per questo sito — passa direttamente a
HTTPS. È una politica che ogni browser apprende e memorizza per sé, non qualcosa che
cambia il tuo server. Una volta che un browser l’ha vista, aggiorna i link http:// a
https:// da solo, prima che qualsiasi cosa lasci il dispositivo. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header
HSTS aiuta o danneggia la SEO?
Né l’uno né l’altro, direttamente. HSTS è una funzionalità di sicurezza e fiducia, non una leva di ranking.
Non ti farà salire nei risultati — ma se fatto bene non ti danneggerà nemmeno. L’unica
cosa da capire è che HSTS non sostituisce i tuoi reindirizzamenti. Hai
ancora bisogno dei tuoi veri reindirizzamenti 301 lato server da HTTP a HTTPS, perché è
quello che Google e Bing vedono e usano davvero. HSTS funziona dentro il browser per i veri
visitatori umani; i crawler non ci fanno affidamento. Tieni entrambi.
L’unico grande avvertimento
HSTS è deliberatamente inflessibile. Una volta che un browser ha “imparato” che il tuo sito è solo HTTPS, rifiuterà di caricare del tutto il sito se il tuo certificato scade o viene configurato male — senza alcun pulsante “procedi comunque”. Questo è il punto (impedisce gli attaccanti di ingannare le persone facendole finire su una versione HTTP falsa), ma significa che un certificato scaduto passa da “avviso fastidioso” a “sito giù per chiunque abbia visitato prima.”
C’è anche una versione potenziata chiamata preload che incorpora il tuo dominio nel browser stesso. È fantastica, ma uscire dalla lista di preload in seguito è lento e faticoso — pensa a mesi. Quindi il preload è una porta a senso unico: attraversala solo quando sei sicuro. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission
Vuoi la sintassi dell’header, il reindirizzamento interno solo browser che i crawler non vedono mai, i requisiti di preload e i veri scenari di blocco? Passa alla scheda Avanzate.
TL;DR — HSTS è l’header di risposta
Strict-Transport-Security, onorato solo quando un browser lo riceve su una connessione sicura, e memorizzato da ciascun client come policy futura per quell’host. Chiude il “problema della prima richiesta” che un 301 da solo lascia aperto: la richiesta HTTP iniziale di un nuovo visitatore è insicura finché il redirect non scatta, ed è quella la finestra che un attaccante SSL-stripping vuole. Tre direttive:max-age(obbligatoria, secondi),includeSubDomains,preload. Quando un browser applica HSTS riscrive l’URI in HTTPS internamente, prima che qualsiasi richiesta raggiunga un server — RFC 6797 non impone un codice di stato specifico per quella riscrittura, anche se gli strumenti spesso la mostrano come un 307 — quindi i tuoi 301 lato server sono ancora obbligatori per i motori di ricerca e il trasferimento dell’autorevolezza dei link; HSTS si aggiunge a essi, non li sostituisce. Preload incorpora il tuo dominio nel browser tramite hstspreload.org (richiedemax-age≥ 31536000,includeSubDomainsepreload) ed è quasi irreversibile — la rimozione è una richiesta separata che impiega mesi per raggiungere gli utenti. E HSTS è progettato per fallire duramente su qualsiasi errore di certificato, quindi abilitalo solo quando HTTPS è robusto su ogni sottodominio.
L’hub HTTPS introduce HSTS come protezione a livello di browser che si aggiunge ai tuoi 301. Questa pagina è l’approfondimento: la sintassi esatta dell’header, il redirect interno che inganna gli SEO, la quasi-irreversibilità della lista preload e i modi reali in cui HSTS blocca le persone.
Il problema che HSTS risolve davvero: la prima richiesta
Immagina un sito migrato correttamente. Ogni URL http:// fa un 301 redirect alla sua controparte https://,
il certificato è valido, i canonical puntano a HTTPS. Sembra a prova di bomba. Non lo è,
proprio.
Quando un visitatore nuovo di zecca digita yoursite.com (senza schema) o clicca un vecchio
link http://yoursite.com, la prima richiesta del browser parte su HTTP semplice.
Il tuo server risponde con il 301, e ogni richiesta successiva è sicura. Ma quello
singolo round-trip iniziale è avvenuto in chiaro — ed è esattamente la finestra che un
attaccante SSL-stripping sulla stessa rete vuole. Intercettano la richiesta HTTP,
mantengono la vittima su HTTP mentre fanno da proxy HTTPS verso il tuo server, e leggono o riscrivono
tutto.
HSTS elimina quella finestra per chiunque abbia già visitato il sito. web.dev è diretto
sul meccanismo:
“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.”
(traduzione) «Usa Strict Transport Security per dire ai client che dovrebbero sempre connettersi al tuo
server usando HTTPS, anche quando seguono un riferimento http://. Questo sconfigge attacchi
come SSL Stripping ed evita il costo del round-trip del redirect 301.»
(web.dev).
Anche quell’ultima clausola conta per le prestazioni: un browser di ritorno salta del tutto il round-trip HTTP→HTTPS. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header
Due condizioni al contorno su cui essere precisi. Primo, HSTS è una policy memorizzata, per-client — vive nello stato di quel singolo browser per quell’host, appresa da un header consegnato su una connessione sicura; lo stesso header inviato su una risposta HTTP viene ignorato del tutto (un attaccante che può iniettare o rimuovere header su HTTP semplice potrebbe altrimenti neutralizzarlo), e un client che non lo ha mai ricevuto — una nuova installazione, un browser diverso, un crawler — non ha alcuna policy da applicare. Secondo, la riscrittura è consapevole di schema e porta: una richiesta implicita sulla porta 80 diventa una richiesta implicita sulla porta 443, ma se l’URI originale nominava una porta esplicita non predefinita, il browser mantiene quello stesso numero di porta e semplicemente la contatta su HTTPS invece.
La sintassi dell’header
HSTS è un header di risposta con fino a tre direttive. Secondo MDN, le forme sono:
Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preloadmax-age=<seconds>— obbligatorio. “The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (traduzione) «Il tempo, in secondi, per cui il browser dovrebbe ricordare che un host è accessibile solo tramite HTTPS» (MDN).31536000è un anno;63072000sono due. L’orologio si azzera a ogni risposta che trasporta l’header, quindi un sito attivo rinnova continuamente la sua policy. Questo è uno stato relativo, per client: semplicemente rimuovere l’header non lo cancella immediatamente — un browser che ha già appreso la policy continua a farla rispettare fino a quando il suomax-agememorizzato non scade. Per disattivare HSTS per i client che l’hanno già appresa, devi servire attivamentemax-age=0su una risposta sicura; il browser poi dimentica la policy alla sua prossima visita sicura. (max-age=0cancella solo una policy appresa — non rimuove un dominio dalla lista separata di preload.)includeSubDomains— opzionale. “If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (traduzione) «Se questa direttiva è specificata, la policy HSTS si applica anche a tutti i sottodomini del dominio dell’host» (MDN). Potente e pericoloso in egual misura — vedi gli scenari di blocco qui sotto.preload— opzionale. Un flag che segnala la tua intenzione di essere nella lista di preload del browser. Non fa nulla da solo; è un prerequisito per l’invio a hstspreload.org. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission
Il comportamento, sempre da MDN:
“Before loading an http URL, the browser checks the domain name against its HSTS
hosts list. If the domain name is a case insensitive match for an HSTS host or is a
subdomain of one that specified includeSubDomains, then the browser replaces the
URL scheme with https.”
(traduzione) «Quando sta per caricare un URL http, il browser verifica il dominio rispetto
alla propria lista di host HSTS. Se trova una corrispondenza senza distinzione tra maiuscole e
minuscole, oppure un sottodominio coperto da includeSubDomains, sostituisce lo schema
dell’URL con https.»
L’upgrade interno che i crawler non vedono mai (questo è il nodo SEO)
Ecco la cosa più fraintesa di HSTS, e il motivo per cui non può sostituire i tuoi redirect.
Quando un browser aggiorna una richiesta http:// sotto HSTS, riscrive l’URI in
HTTPS internamente, prima che venga fatta qualsiasi richiesta di rete — RFC 6797 richiede
la sostituzione dello schema stesso ma non impone un codice di stato specifico per essa
(RFC 6797 §8.3), quindi un
dato browser o strumento di crawling può rappresentare quel passaggio interno come preferisce —
molti lo mostrano come un 307 interno, ma è specifico del client/strumento, non una garanzia
di protocollo. Ciò che conta per la SEO è più semplice e vale indipendentemente dall’etichetta: nessun
server viene contattato per la versione HTTP, quindi nessun crawler la vede mai. Googlebot e
Bingbot non portano con sé una policy HSTS appresa come fa il browser di un visitatore abituale:
contattano il server senza stato pregresso e devono trovarvi un vero
301 lato server. Evidence for this claim 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. Scope: 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. Confidence: high · Verified: RFC 6797 §8.3 — URI Loading and Port Mapping
Quindi la regola è netta: HSTS non sostituisce i tuoi 301 lato server. Il 301 è ciò che i motori di ricerca usano per capire il passaggio di protocollo e per consolidare i segnali (“301 and other permanent redirects don’t cause a loss in PageRank” (traduzione) «i redirect 301 e gli altri redirect permanenti non causano perdite di PageRank»; Google). L’upgrade interno solo browser è un livello esperienza utente e sicurezza sopra. Ti servono entrambi, con funzioni diverse:
- 301 (lato server): per crawler, indicizzazione ed equità dei link.
- Upgrade interno stile 307 (lato browser, da HSTS): per gli umani che ritornano e la protezione contro lo stripping SSL — la rappresentazione esatta dello stato varia in base a client/strumento.
Qualsiasi guida che ti dica che HSTS “gestisce il redirect così puoi eliminare il tuo 301” è sbagliata in un modo che ti costerà silenziosamente.
HSTS preload: la versione quasi permanente
max-age protegge i visitatori di ritorno, ma ha un problema di bootstrap: un visitatore per la prima volta che non ha mai ricevuto il tuo header è ancora esposto su quella richiesta iniziale. Preload lo risolve codificando il tuo dominio nel sorgente del browser stesso, così il browser sa che sei solo HTTPS prima ancora di essersi mai connesso.
Puoi aderire su hstspreload.org. I requisiti sono esatti:
- “Serve a valid certificate.” (traduzione) «Il sito deve presentare un certificato TLS valido e verificabile.»
- “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (traduzione) «Se il server ascolta sulla porta 80, deve reindirizzare le richieste HTTP verso HTTPS mantenendo lo stesso nome di dominio.»
- “Serve all subdomains over HTTPS” (traduzione) «Ogni sottodominio deve essere disponibile tramite una connessione HTTPS valida» — incluso in particolare il sottodominio
wwwse esiste un record DNS. - Sulla risposta HTTPS del dominio di base, un header HSTS dove “the
max-agemust be at least31536000seconds (1 year),” (traduzione) «il valore max-age deve essere almeno 31536000 secondi (1 anno)»; “theincludeSubDomainsdirective must be specified,” (traduzione) «la direttiva includeSubDomains deve essere specificata»; e “thepreloaddirective must be specified.” (traduzione) «la direttiva preload deve essere specificata». (hstspreload.org)
Ecco perché l’esempio di due anni sopra (max-age=63072000; includeSubDomains; preload)
è la forma che le persone inviano — nota che questi sono i requisiti di invio esatti come
pubblicati da hstspreload.org; trattali come i requisiti attuali, non come una costante
permanente, e ricontrolla la pagina live prima di inviare.
Aiuta a tenere distinti quattro stati, poiché le persone li confondono costantemente:
| Stato | Cosa è vero in realtà |
|---|---|
| Token presente | Il tuo header include preload. Questo è solo un flag — non fa nulla da solo e non ti mette in nessuna lista. |
| Idoneo | Il tuo sito soddisfa tutti e quattro i requisiti hstspreload.org sopra (certificato, reindirizzamento, sottodomini, forma dell’header). Ancora non nella lista. |
| Inviato / in attesa | Hai inviato su hstspreload.org ed è in coda per l’inclusione in una prossima versione del browser. Non ancora applicato per gli utenti reali. |
| Effettivamente elencato | Il dominio è integrato nella build distribuita di un dato browser. L’applicazione esiste solo per gli utenti su quella build — il rollout non è istantaneo o universale tra i browser. |
La rimozione percorre gli stessi quattro stati in ordine inverso, e altrettanto lentamente: rimuovere
la direttiva preload dal tuo header ti rende idoneo per il modulo di rimozione, poi
l’invio è in attesa, e il dominio rimane applicato per qualsiasi utente su una build del browser
che lo include ancora — finché quella build non viene sostituita.
Ora la parte che trasforma preload in una porta a senso unico. Dal sito di invio stesso: “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.” (traduzione) «Tieni presente che l’inclusione nella lista di preload non si annulla facilmente. I domini possono essere rimossi, ma servono mesi perché la modifica raggiunga gli utenti tramite un aggiornamento di Chrome e non è possibile offrire garanzie per gli altri browser.» (hstspreload.org). E il suo stesso consiglio: “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.” (traduzione) «Non richiedere l’inclusione se non sei certo di poter supportare HTTPS a lungo termine per l’intero sito e tutti i suoi sottodomini.»
Traduzione pratica: preload è una postura di sicurezza genuinamente eccellente, ma se mai dovessi servire qualcosa — un sottodominio legacy, un marchio acquisito, uno strumento interno — di nuovo su HTTP semplice, sei bloccato ad aspettare i cicli di rilascio del browser per raggiungere tutti gli utenti. La guida di Kinsta mette chiaramente la realtà operativa: può essere un processo difficile e dispendioso in termini di tempo far rimuovere il tuo dominio. Tratta preload come permanente.
Perché HSTS è progettato per far male quando le cose si rompono
La severità di HSTS non è un bug — è l’intera garanzia di sicurezza. web.dev spiega il compromesso: “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.” (traduzione) «È probabile che i client che hanno registrato il sito come host HSTS noto vadano incontro a un errore non aggirabile se la configurazione TLS presenta un problema, per esempio un certificato scaduto. HSTS è progettato esplicitamente così, per impedire agli aggressori di rete di indurre i client ad accedere al sito senza HTTPS.» (web.dev).
La conclusione che Google trae è la frase che tatuerei su chiunque stia per attivare questa funzione: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (traduzione) «Non attivare HSTS finché non sei certo che il funzionamento del tuo sito sia abbastanza robusto da evitare di distribuire HTTPS con errori di validazione del certificato.» (web.dev).
“Hard-fail” significa esattamente questo: nessun link «procedi comunque» e nessuna possibilità di ignorare l’avviso. Su una pagina HTTPS normale, un certificato scaduto mostra un avviso intimidatorio che un utente determinato può aggirare. Su un host HSTS, il browser rifiuta categoricamente. Quindi la modalità di errore di una scadenza trascurata del certificato cambia categoria — da “il traffico cala perché le persone sono spaventate” a “il sito è irraggiungibile per ogni visitatore di ritorno.”
Scenari reali di blocco
I modi in cui HSTS morde nella pratica quasi sempre riconducono a includeSubDomains o
preload che superano la tua copertura HTTPS effettiva:
- Il sottodominio dimenticato. Imposti
includeSubDomainssuexample.com, malegacy.example.com(una vecchia app, una pagina di stato, uno strumento del fornitore) parla solo HTTP o ha un certificato che non lo copre. Ogni browser che ha visto l’header ora rifiuta di caricare quel sottodominio. Nulla è cambiato su quel server — la policy è arrivata e lo ha rotto. - Il limite di profondità del certificato wildcard. Un wildcard
*.example.comcoprefoo.example.comma nonfoo.bar.example.com(copre un solo livello DNS). Se un sottodominio più profondo si affida a HTTP o a un certificato non corrispondente,includeSubDomainslo blocca. - Il certificato scaduto su un host HSTS. L’automazione del rinnovo fallisce, il certificato scade, e invece di un avviso aggirabile ottieni un sito che è giù per tutti coloro il cui browser ricorda la tua policy — finché non ripristini un certificato valido e loro si riconnettono e ricevono una nuova risposta sicura. Non esiste una scorciatoia più veloce.
- Il ripensamento dopo il preload. Hai attivato il preload, poi un’esigenza aziendale impone un
servizio solo HTTP sotto il dominio. Annullarlo è due lavori separati e non istantanei, non
uno: servire
max-age=0su HTTPS cancella solo la policy appresa per i client che si riconnettono prima che il loro vecchio max-age sarebbe comunque scaduto, mentre rimuovere il dominio dalla lista preload richiede una domanda distinta e comunque cicli di rilascio del browser — mesi — per raggiungere gli utenti, indipendentemente da qualsiasi cosa tu cambi sul tuo server. - Collisioni di sviluppo locale / staging. Il preload di
example.comconincludeSubDomainspuò far sì chedev.example.como un host interno stilelocalhostsotto lo stesso apex rifiuti HTTP, rompendo i flussi di lavoro locali in modi sorprendenti.
Nessuno di questi è un motivo per evitare HSTS. Sono motivi per introdurlo per fasi: prima un
max-age breve, aggiungi includeSubDomains solo dopo aver verificato ogni sottodominio, e
riserva preload per quando sei certo.
HSTS non è una strategia di ranking (e non tocca la canonicalizzazione)
Per essere chiari sul quadro SEO: HSTS non è un segnale di ranking. HTTPS stesso è
un segnale deliberatamente minuscolo — Google lo ha definito un “segnale molto leggero”
che influisce su meno dell’1% delle query — e HSTS è un livello sopra HTTPS, non
un input di ranking separato. Inoltre non controlla direttamente la canonicalizzazione o
l’indicizzazione. La documentazione di Google è però più precisa di un generico «non importa»: Google preferisce HTTPS come canonico rispetto a una pagina HTTP equivalente tranne
quando c’è un certificato non valido, dipendenze di pagina non sicure, una pagina HTTPS che
reindirizza a HTTP, o un tag rel="canonical" HTTP
(Google: consolidare URL duplicati).
HSTS non può risolvere o sovrascrivere nulla di tutto ciò. È una policy lato browser senza
influenza sulla logica di canonicalizzazione di Google — un certificato difettoso o una catena di reindirizzamenti rotta
possono comunque spingere Google verso un canonico HTTP indipendentemente da ciò che dice il tuo header HSTS.
La canonicalizzazione è guidata dai tuoi 301, dal tuo certificato, dal tuo
rel="canonical" e dai tuoi link interni — HSTS serve per sicurezza,
fiducia degli utenti e chiusura della finestra di SSL-stripping — adottalo per questi motivi, mantieni i tuoi
301 e il certificato davvero solidi, e non vedrai mai HSTS stesso su un report di ranking in ogni caso.
Se stai eseguendo la migrazione più ampia da HTTP a HTTPS, HSTS è l’ultima cosa da attivare, non la prima — va dopo che la migrazione si è stabilizzata, come parte della più ampia disciplina della migrazione del sito.
Riepilogo AI
Una sintesi della versione Advanced:
- HSTS = l’header di risposta
Strict-Transport-Security. Dice ai browser di usare sempre HTTPS per il tuo dominio, chiudendo il “problema della prima richiesta” che un 301 da solo lascia aperto — la richiesta HTTP iniziale da un nuovo visitatore è insicura finché il reindirizzamento non scatta, che è la finestra di SSL-stripping. - Tre direttive:
max-age(obbligatoria, in secondi; si azzera a ogni risposta; rimuovere l’header non cancella una policy appresa — devi serviremax-age=0su HTTPS invece),includeSubDomains(si applica a tutti i sottodomini) epreload(un flag per aderire alla lista di preload del browser — token presente, idoneo, inviato e effettivamente elencato sono quattro stati separati). - Il punto cruciale dell’upgrade interno: quando un browser applica HSTS riscrive l’URI in HTTPS internamente prima che qualsiasi richiesta raggiunga un server — RFC 6797 non impone un codice di stato specifico per quella riscrittura, anche se gli strumenti spesso la mostrano come un 307 — quindi nessun server la vede e i crawler non la vedono mai. I tuoi 301 lato server sono ancora obbligatori per i motori di ricerca e l’equity dei link. HSTS è sopra i tuoi 301, mai al posto loro.
- Preload codifica il tuo dominio nel browser tramite
hstspreload.org (richiede
max-age≥ 31536000,includeSubDomainsepreload). È quasi irreversibile — la rimozione è una richiesta separata che impiega mesi a raggiungere gli utenti, browser per browser. - Progettato per fallire duramente: un host HSTS con un certificato rotto/scaduto rifiuta di caricarsi, senza possibilità di cliccare oltre. Google: “Non abilitare HSTS finché non sei certo che il tuo sito sia abbastanza robusto da evitare di distribuire HTTPS con errori di validazione del certificato.”
- Gli scenari di blocco si concentrano su
includeSubDomainse preload che superano la tua copertura HTTPS: sottodomini HTTP dimenticati, lacune di profondità del certificato wildcard, certificati scaduti, rimpianti di preload e collisioni di staging. - Non è un segnale di ranking — e non può sovrascrivere la canonicalizzazione. Google preferisce HTTPS come canonico tranne quando un certificato è non valido, le dipendenze sono insicure, una pagina HTTPS reindirizza a HTTP, o il tag canonico punta a HTTP — e HSTS non ha il potere di risolvere o sovrascrivere nulla di tutto ciò. Mantieni i tuoi 301, certificato e tag canonici a fare il lavoro SEO.
Documentazione ufficiale
Documentazione di fonte primaria dai team di browser e standard.
Google / web.dev
- Abilita HTTPS sui tuoi server (web.dev) — la sezione HSTS: l’header, lo SSL-stripping, l’avviso di errore non aggirabile e «non abilitare HSTS finché non sei certo».
- Spostamenti del sito con modifiche agli URL — perché il 301 lato server è ancora obbligatorio (i redirect non fanno perdere PageRank).
- Comprendere l’esperienza della pagina — dove HTTPS (e di conseguenza HSTS) si colloca nel quadro di Google.
Riferimenti a standard e browser
- MDN —
Strict-Transport-Security— sintassi completa dell’header, le tre direttive e come il browser aggiorna lo schema. - RFC 6797 — HTTP Strict Transport Security (HSTS) — la specifica originale.
- Invio alla lista di preload HSTS (hstspreload.org) — i requisiti esatti di preload e le avvertenze sulla rimozione, mantenuti dal progetto Chromium.
Citazioni dalla fonte
Dichiarazioni pubbliche di Google/web.dev e del servizio di preload Chromium. Ogni link salta a (o punta a) il passaggio citato nella pagina di origine.
web.dev (Google) — cosa fa HSTS e gli avvisi
- “Use HTTP Strict Transport Security (HSTS) to avoid the cost of the 301 redirect.” (traduzione) «Usa HTTP Strict Transport Security (HSTS) per evitare il costo del redirect 301.» Vai alla citazione
- “First, 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.” (traduzione) «Innanzitutto, usa Strict Transport Security per dire ai client che dovrebbero sempre connettersi al tuo server usando HTTPS, anche quando seguono un riferimento http://. Questo sconfigge attacchi come lo SSL Stripping ed evita il costo di round-trip del redirect 301.» Vai alla citazione - “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.” (traduzione) «I client che hanno elencato il tuo sito come host HSTS noto probabilmente andranno in hard-fail se il tuo sito ha mai un errore nella configurazione TLS (come un certificato scaduto). HSTS è progettato esplicitamente in questo modo per garantire che gli attaccanti di rete non possano ingannare i client facendogli accedere al sito senza HTTPS.» Vai alla citazione
- “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (traduzione) «Non abilitare HSTS finché non sei certo che il funzionamento del tuo sito sia abbastanza robusto da evitare di distribuire HTTPS con errori di validazione del certificato.» Vai alla citazione
Servizio di preload Chromium — hstspreload.org
- “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.” (traduzione) «Tieni presente che l’inclusione nella lista di preload non può essere facilmente annullata. I domini possono essere rimossi, ma ci vogliono mesi perché una modifica raggiunga gli utenti con un aggiornamento di Chrome e non possiamo garantire nulla sugli altri browser.» Fonte
- “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.” (traduzione) «Non richiedere l’inclusione a meno che tu non sia sicuro di poter supportare HTTPS per l’intero sito e tutti i suoi sottodomini a lungo termine.» Fonte
MDN — il comportamento dell’header
- “Before loading an
httpURL, the browser checks the domain name against its HSTS hosts list. If the domain name is a case insensitive match for an HSTS host or is a subdomain of one that specifiedincludeSubDomains, then the browser replaces the URL scheme withhttps.” (traduzione) «Prima di caricare un URL http, il browser controlla il nome di dominio nella sua lista di host HSTS. Se il nome di dominio corrisponde in modo case-insensitive a un host HSTS o è un sottodominio di uno che ha specificato includeSubDomains, il browser sostituisce lo schema dell’URL con https.» Fonte
Dovrei abilitare HSTS — e fino a che punto?
Percorrilo dall’alto verso il basso. Ogni «no» impone di fermarsi. Prima di iniziare, tieni distinta una cosa: i valori esatti di max-age qui sotto (pochi minuti per il test canary, un anno per la configurazione stabile) sono raccomandazioni operative di Patrick per il rilascio graduale, non requisiti di protocollo. L’unico requisito numerico rigido è il minimo previsto da hstspreload.org (max-age ≥ 31536000), indicato esplicitamente nel relativo passaggio. Adatta le durate dei test alla tolleranza al rischio e alla cadenza di distribuzione.
1. Il tuo intero sito è già su HTTPS con un certificato valido e la migrazione si è stabilizzata?
- No → Non toccare HSTS per ora. Completa prima la migrazione HTTPS: 301 su ogni URL, correggi i contenuti misti, verifica in Search Console. HSTS è l’ultimo interruttore, non il primo.
- Sì → continua.
2. Il rinnovo del certificato è automatizzato e monitorato (così una scadenza non può coglierti di sorpresa)?
- No → Risolvi prima quello. Su un host HSTS un certificato scaduto è un’interruzione grave, non un avviso. Metti in atto rinnovo automatico + avvisi di scadenza, poi continua.
- Sì → continua. Abilita un
max-agebreve (es. da pochi minuti a un giorno) senzaincludeSubDomainsper ora, e conferma che nulla si rompa.
3. Hai controllato ogni sottodominio — incluso www, app legacy, pagine di stato e host di fornitori — e confermato che ciascuno serve HTTPS valido?
- No → Tieni
includeSubDomainsdisattivato. Aggiungerlo ora raggiungerebbe e romperebbe qualsiasi sottodominio solo HTTP o con certificato non corrispondente. - Sì → Alza
max-ageverso un anno e aggiungiincludeSubDomains. Questo è uno stato di riposo sicuro e robusto per la maggior parte dei siti.
4. Vuoi chiudere anche il divario della prima visita in assoluto e sei certo che non dovrai mai più servire nulla sotto questo dominio su HTTP semplice?
- No / non sicuro → Fermati qui.
max-age=31536000; includeSubDomains(senza preload) è un’ottima postura. Il guadagno marginale del preload non vale la sua irreversibilità se non sei sicuro. - Sì, certo → Aggiungi il flag
preloade invia su hstspreload.org. Trattalo come permanente — la rimozione richiede mesi per raggiungere gli utenti.
Ramo separato, sempre vero: abilitare HSTS significa che posso eliminare i miei 301?
- Mai. I crawler non vedono l’upgrade interno solo-browser di HSTS. Mantieni i tuoi 301 lato server indipendentemente da quanto in profondità vai in questo albero.
Checklist di rollout HSTS
Lavora dall’alto verso il basso — ogni fase è il gate per la successiva. Le durate di staging qui sono raccomandazioni operative, non requisiti di protocollo — l’unico numero rigido è il minimo di max-age ≥ 31536000 del preload nella Fase 3.
Prima di abilitare qualsiasi cosa
- L’intero sito (apex +
www+ tutti i sottodomini) serve HTTPS con un certificato valido. - I redirect 301 HTTP→HTTPS sono in atto lato server, uno-a-uno.
- Il rinnovo automatico del certificato è configurato e esiste il monitoraggio/avviso di scadenza.
- La migrazione HTTP→HTTPS si è stabilizzata (Search Console pulita, nessun crollo di ranking).
Fase 1 — dimostra che è sicuro
- Aggiungi
Strict-Transport-Securitycon unmax-agebreve (da minuti a un giorno). - Niente
includeSubDomainsper ora. Nientepreloadper ora. - Conferma che il sito si carichi normalmente nei browser e che nulla si sia rotto.
Fase 2 — impegno
- Alza
max-agead almeno31536000(un anno). - Controlla ogni sottodominio (incl.
www, legacy, stato, fornitori) per HTTPS valido. - Solo dopo che quel controllo passa, aggiungi
includeSubDomains. - Ritesta che ogni sottodominio si carichi su HTTPS.
Fase 3 — preload (opzionale, quasi permanente)
- Sei certo che non ti servirà mai più HTTP sotto questo dominio.
- L’header è
max-age=31536000(o più); includeSubDomains; preload. - HTTP sulla porta 80 reindirizza a HTTPS sullo stesso host.
- Invia e conferma lo stato su hstspreload.org.
Sempre vero — non saltare
- I 301 lato server restano in posizione (i crawler non vedono mai l’upgrade interno solo browser).
- Hai un piano di rollback documentato:
max-age=0servito su HTTPS cancella una policy appresa (non preload) per i client che si riconnettono prima che sarebbe comunque scaduta. I domini preload richiedono invece il processo separato e più lento di rimozione dal modulo.
I modelli mentali
1. HSTS è un livello, non un sostituto. 301 lato server = per i crawler e l’autorevolezza dei link. Upgrade interno lato browser (da HSTS, spesso mostrato come 307 anche se l’RFC non richiede quel codice esatto) = per i visitatori abituali e la protezione contro lo stripping SSL. Destinatari diversi, funzioni diverse. Servono sempre entrambi; HSTS non elimina mai un 301.
2. HSTS chiude un vuoto che il 301 non può. Un 301 protegge dalla seconda richiesta in poi. La prima richiesta — prima che il redirect scatti — è ancora HTTP. HSTS (per i visitatori che ritornano) e il preload (per i visitatori alla prima visita) sono le uniche cose che chiudono quella finestra specifica.
3. Aumenta gradualmente, mai a salti.
max-age da breve a lungo. Header semplice → includeSubDomains (dopo un audit dei sottodomini) → preload (solo se sei certo). Ogni gradino è reversibile tranne l’ultimo. Non saltare gradini per risparmiare tempo.
4. La rigidità è la caratteristica, e funziona in entrambe le direzioni. Lo stesso hard-fail che ferma un attaccante ferma anche te quando un certificato si rompe. Quindi il prerequisito non è “vuoi la sicurezza?” — tutti la vogliono — ma “la tua gestione dei certificati è abbastanza robusta da non fallire mai?”
5. Il preload è una porta a senso unico.
Una policy HSTS senza preload può essere revocata per ciascun client alla successiva richiesta sicura che riceve max-age=0 — non più velocemente, e soltanto per chi si riconnette. Il preload va oltre: la rimozione richiede una domanda separata e mesi per raggiungere gli utenti, versione del browser dopo versione. Classificalo tra le decisioni difficili da annullare e trattalo di conseguenza.
6. HSTS è ortogonale al ranking — ma non può nemmeno salvare un segnale canonico sbagliato. Non è un segnale di ranking e non controlla direttamente la canonicalizzazione o l’indicizzazione. Giudicalo su sicurezza e fiducia, non su vantaggi SEO — non ce ne sono. Ma non è nemmeno una rete di sicurezza: la preferenza canonica HTTPS di Google si ritira comunque per un certificato difettoso, dipendenze insicure, un redirect HTTPS→HTTP o un tag canonico HTTP, e HSTS non ha il potere di sovrascriverlo.
HSTS — cheat sheet
Le direttive dell’header
| Direttiva | Obbligatoria? | Cosa fa |
|---|---|---|
max-age=<seconds> | Sì | Per quanto tempo il browser impone solo HTTPS. Si resetta a ogni risposta su HTTPS; rimuovere l’header non lo cancella — devi servire max-age=0 su HTTPS per disabilitarlo per i client che si riconnettono. |
includeSubDomains | No | Applica la policy anche a ogni sottodominio. Controlla prima tutti i sottodomini. |
preload | No | Flag per aderire alla lista di preload del browser (richiede gli altri due + hstspreload.org). Token presente, idoneo, inviato e effettivamente elencato sono quattro stati separati. Quasi irreversibile una volta elencato. |
Valori comuni dell’header (le cifre di staging sotto sono suggerimenti operativi, non requisiti di protocollo — il minimo rigido è la riga preload)
| Valore | Significato |
|---|---|
max-age=300 | 5 minuti — un primo test sicuro. |
max-age=31536000 | 1 anno — stato di riposo standard. |
max-age=31536000; includeSubDomains | 1 anno, tutti i sottodomini — forte, non preload. |
max-age=63072000; includeSubDomains; preload | 2 anni + preload — la forma che invii (il minimo richiesto di hstspreload.org è max-age ≥ 31536000). |
max-age=0 (servito su HTTPS) | Cancella una policy appresa per i client che si riconnettono. Non rimuove una lista preload. |
Redirect: quale, chi lo vede
| Redirect | Origine | Chi lo vede | Funzione |
|---|---|---|---|
| 301 | Il tuo server | Crawler e persone | SEO: comprendere lo spostamento e trasferire l’autorevolezza dei link |
| Aggiornamento interno (spesso mostrato come 307; RFC 6797 non impone il codice esatto) | Il browser (HSTS) | Soltanto visitatori abituali — i crawler non lo vedono mai | Sicurezza/UX: saltare il primo passaggio insicuro |
Fatti rapidi
- Il preload richiede
max-age≥ 31536000 +includeSubDomains+preload— verificato rispetto ai requisiti attuali pubblicati su hstspreload.org. - La rimozione del preload è una richiesta separata che richiede mesi per raggiungere gli utenti, browser per browser — trattala come permanente.
- Su un host HSTS, un certificato non valido = errore non aggirabile.
- HSTS non è un segnale di ranking e non sostituisce i tuoi 301.
Imposta l’header HSTS
Aggiungi l’header solo nel blocco server HTTPS e inizia con un max-age breve
finché non hai confermato che nulla si rompe. Aggiungi ; preload solo se intendi
inviare la richiesta a hstspreload.org — è quasi irreversibile.
Apache (.htaccess)
<IfModule mod_headers.c>
# Start short (300s) to prove it's safe; raise to 31536000 once confident.
Header always set Strict-Transport-Security "max-age=300"
# Full posture once every subdomain is verified HTTPS:
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Only add ; preload when submitting to hstspreload.org:
# Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>Nginx
# On the HTTPS (listen 443) server block:
add_header Strict-Transport-Security "max-age=300" always;
# Full posture once subdomains are verified:
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Preload shape (near-irreversible):
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;Verifica se HSTS è impostato (e leggilo)
macOS / Linux
# Print only the Strict-Transport-Security response header
curl -sI https://example.com/ | grep -i strict-transport-security
# → strict-transport-security: max-age=31536000; includeSubDomainsWindows (PowerShell)
# Same check in PowerShell
(Invoke-WebRequest -Uri "https://example.com/" -Method Head).Headers["Strict-Transport-Security"]Ispeziona e cancella una voce HSTS in Chrome (DevTools / net-internals)
Se stai testando e un browser ha “imparato” una policy HSTS che devi cancellare:
1. Open a new tab and visit: chrome://net-internals/#hsts
2. Under "Query HSTS/PKP domain", enter your host to see the stored policy.
3. Under "Delete domain security policies", enter the host and Delete.
(This clears the *learned* policy — it does NOT remove a *preloaded* domain,
which lives in the browser binary and can't be cleared this way.)Usalo per confermare che il tuo header venga effettivamente memorizzato e per resettare un host di test —
non come soluzione per la produzione, dove la risposta è servire attivamente max-age=0 su
HTTPS (semplicemente rimuovere l’header non cancella una policy che un client ha già imparato;
ha effetto solo quando quel client si riconnette e riceve la risposta max-age=0).
Errori HSTS che mordono
1. Rimuovere i redirect permanenti perché “HSTS se ne occupa.” Il classico. Il redirect di HSTS è un aggiornamento interno solo per browser che i crawler non vedono mai. Rimuovi i redirect permanenti lato server e i motori di ricerca perdono il segnale che consolida il tuo spostamento. Tieni entrambi, sempre.
2. Abilitare includeSubDomains prima di fare un audit dei sottodomini.
Il modo più comune per portare offline un sottodominio. Se qualsiasi sottodominio — un’app
legacy, una pagina di stato, un host di un fornitore, www stesso — non è su HTTPS valido, la policy
si estende e lo rompe per ogni browser che ha visto l’header.
3. Passare direttamente a un max-age di un anno (o preload) dal primo giorno.
Nessuna rete di sicurezza. Inizia breve (max-age=300), conferma che nulla si rompe, poi aumenta.
Un max-age lungo impostato su un sito mal configurato è un’interruzione auto-inflitta che persiste
nei browser per un anno.
4. Attivare il preload prima che HTTPS sia davvero inattaccabile. Il preload è quasi irreversibile: la rimozione richiede mesi. La posizione di Google: non abilitare HSTS finché non sei certo che la tua operatività di sito sia abbastanza solida. Il preload moltiplica questa posta in gioco.
5. Trattare un certificato scaduto come un problema minore. Su un sito non-HSTS un certificato scaduto è un avviso aggirabile. Su un host HSTS è un’interruzione grave senza possibilità di cliccare oltre. Se abiliti HSTS, l’automazione del rinnovo dei certificati e gli avvisi di scadenza smettono di essere facoltativi.
6. Impostare l’header sulla risposta HTTP. I browser ignorano HSTS consegnato su HTTP (per design: un attaccante potrebbe iniettarlo o rimuoverlo). Deve essere inviato sulla risposta HTTPS per contare.
7. Dimenticare il limite di profondità del certificato wildcard.
Un wildcard *.example.com non copre foo.bar.example.com. Attiva
includeSubDomains e qualsiasi sottodominio più profondo che dipende da quel certificato viene bloccato.
Playbook per incidenti: un host HSTS è bloccato
- Conferma il guasto da una rete pulita e da più di un browser. Registra i nomi host interessati e l’errore esatto del certificato. Una policy HSTS memorizzata può rendere il sintomo diverso tra visitatori di ritorno e nuovi visitatori.
- Ripristina prima HTTPS valido. Se il certificato è scaduto, non corrispondente o privo di un certificato intermedio, rinnovalo o sostituiscilo e distribuisci la catena completa. Un browser HSTS non offrirà un bypass HTTP sicuro.
- Mappa l’ambito della policy. Ispeziona l’header
Strict-Transport-Securitylive e determina seincludeSubDomainso il preload estendono l’interruzione oltre il nome host che lo ha inviato. - Fai l’inventario di ogni sottodominio interessato. Per un host HTTP dimenticato, metti un certificato valido e un endpoint HTTPS davanti ad esso prima di decidere se mantenere, migrare o reindirizzare il servizio.
- Correggi la policy solo dopo aver ripristinato l’accesso. Se l’ambito non è sicuro, riduci o rimuovi l’header sulle risposte HTTPS. Questo non cancella immediatamente una policy già memorizzata nella cache dei browser, e la rimozione del preload è un processo separato e lento.
- Verifica il ripristino. Testa l’apex,
wwwe ogni sottodominio interessato per una catena valida, un nome host corretto, un reindirizzamento HTTP→HTTPS a un solo salto e l’header HSTS previsto. Mantieni il monitoraggio della scadenza dei certificati sullo stesso inventario.
Non smantellare il reindirizzamento HTTP né dire agli utenti di aggirare l’avviso. La soluzione durevole è un endpoint HTTPS valido ovunque raggiunga la policy HSTS attiva.
Verificare una policy HSTS live
Act as a security-minded technical SEO. Review this Strict-Transport-Security
header, the HTTP redirect response, and the supplied subdomain inventory.
For the header, parse max-age, includeSubDomains, and preload. Explain the effective
scope, identify subdomains whose HTTPS or certificate coverage is unproven, and
separate browser-side HSTS behavior from the server-side 301 search engines need. Use
GET requests (HEAD can behave differently on some servers/clients), and record which
client or tool produced each observation and its version, since internal-redirect
representation is client/tool-specific rather than a fixed protocol value.
Recommend the next rollout stage: keep a short max-age canary, lengthen max-age,
add includeSubDomains, or consider preload. Do not recommend preload unless the
evidence shows a valid certificate, same-host HTTP→HTTPS redirects, HTTPS on every
subdomain, max-age of at least 31536000, includeSubDomains, and the preload token.
Return: observed configuration, risks, blocking evidence, next action, rollback
constraint, and exact validation checks.Fare triage di un blocco HSTS
Given the affected hostnames, browser error, certificate details, DNS/CDN layout,
and live response headers, identify whether this is an expired certificate, hostname
mismatch, incomplete chain, includeSubDomains spillover, or preload issue. Prioritize
restoring valid HTTPS. Explain why removing a header does not immediately erase a
cached browser policy, then provide recovery and verification steps. Kit di strumenti per l’ispezione HSTS
- HTTP Header Checker — ispeziona l’header
Strict-Transport-Securitylive e conferma che appaia sulle risposte HTTPS. curl -I— confronta il reindirizzamento HTTP con l’header HTTPS senza fare affidamento sullo stato HSTS memorizzato dal browser.- Browser DevTools — conferma gli header di risposta finali e l’errore del certificato visto da un client reale.
- Stato preload HSTS — controlla i requisiti di invio e se il dominio è già rappresentato nel processo di preload.
Usa almeno due viste: l’output della riga di comando mostra la risposta del server, mentre un browser espone anche l’applicazione lato client e i guasti gravi del certificato. Preferisci GET su HEAD quando confronti gli strumenti — alcuni server e client rappresentano i due in modo diverso — e annota il client/strumento/versione esatto dietro ogni lettura.
Test di rollout HSTS a fasi
Test 0: la matrice degli stati (eseguilo prima di mettere in scena le modifiche)
Lo stato HSTS non è un singolo fatto — sono diversi stati indipendenti che possono discordare. Tienili tracciati separatamente, per nome host:
| Dimensione | Cosa controllare | Note |
|---|---|---|
| Header HTTPS live, per classe di risposta | Il valore Strict-Transport-Security nelle risposte HTTPS reali (home page, pagine profonde, risposte API/asset possono differire) | Usa GET, non HEAD — alcuni server/CDN variano l’emissione dell’header in base al metodo |
| Redirect sulla porta 80 | Esiste un reindirizzamento lato server genuino sulla porta 80, non solo l’affidamento a una policy appresa dal client | Questo è ciò su cui fanno affidamento i client alla prima visita e quelli senza HSTS |
| Copertura del certificato | Catena valida per l’apex, www e ogni sottodominio in scope | I certificati wildcard non coprono un secondo livello DNS profondo |
| Sottodomini genitore vs. punto di ingresso | Se un sottodominio visitato direttamente ha effettivamente ricevuto la propria risposta HSTS, poiché potrebbe non ereditare la policy appresa del genitore come includeSubDomains implica sulla carta | Testa ogni punto di ingresso direttamente, non solo l’apex |
| Stato appreso, client nuovo vs. di ritorno | Comportamento su un client che non ha mai visto il tuo header rispetto a uno che lo ha visto | Cancella lo stato HSTS del browser (o usa un profilo pulito) per simulare “nuovo” |
| Stato effettivo di preload | Se il dominio è elencato nella build distribuita di un determinato browser, non solo inviato | Verifica tramite la pagina di stato/flag del browser stesso, non solo il modulo di invio |
Registra client, strumento e versione per ogni osservazione — la rappresentazione dei reindirizzamenti interni e i dettagli di applicazione di HSTS variano tra browser, crawler e strumenti a riga di comando, e una lettura obsoleta da un client può sembrare una contraddizione che in realtà non esiste.
Test 1: canary con max-age breve
- Scopo: Dimostrare che l’header viene emesso solo da risposte HTTPS sane prima di impegnare i client a una policy lunga.
- Metodo: Ispeziona template e host rappresentativi con HTTP Header Checker
e
curl -I; confronta il valore distribuito con la configurazione canary approvata. - Risultato atteso: Le risposte HTTPS trasportano il
max-agebreve previsto; HTTP restituisce ancora un reindirizzamento permanente lato server verso HTTPS. - Trigger di errore: Header mancanti o duplicati, una durata lunga inaspettata, errori di certificato o qualsiasi loop di reindirizzamento.
- Azione successiva: Correggi l’header o l’endpoint HTTPS e mantieni il rollout in fase canary.
Test 2: prontezza di includeSubDomains
- Scopo: Prevenire che una policy genitore blocchi un hostname dimenticato.
- Metodo: Testa ogni hostname DNS nell’inventario dei sottodomini mantenuto per una risposta HTTPS valida, nome del certificato corretto e catena completa.
- Risultato atteso: Ogni sottodominio in scope funziona su HTTPS, inclusi host legacy, di vendor, di sviluppo e di livello più profondo.
- Trigger di errore: Qualsiasi servizio solo HTTP, certificato scaduto o non corrispondente, o hostname mancante dall’inventario.
- Azione successiva: Correggi o sposta l’host prima di aggiungere
includeSubDomains.
Test 3: prontezza per il preload
- Scopo: Verificare che la policy quasi permanente soddisfi i requisiti di invio documentati.
- Metodo: Conferma un certificato valido, reindirizzamenti HTTP→HTTPS sullo stesso host, HTTPS su
tutti i sottodomini e un header apex con
max-agedi almeno31536000,includeSubDomainsepreload. - Risultato atteso: Ogni requisito è soddisfatto e l’organizzazione accetta il percorso di rimozione lento.
- Trigger di errore: Qualsiasi requisito tecnico non soddisfatto o una necessità irrisolta di un sottodominio solo HTTP.
- Azione successiva: Non inviare; rimani sulla policy a fasi reversibile.
Risorse che meritano il tuo tempo
Il mio intervento
- Con HTTPS, meglio prevenire che curare — SMX East 2016 (SlideShare) — il mio approfondimento su TLS, gli errori comuni di implementazione di HTTPS e le insidie della migrazione che HSTS può sia chiudere sia amplificare. (Vale la consueta precisazione: questa è la mia interpretazione dei sistemi e le statistiche sull’adozione risalgono al 2016.)
I miei articoli correlati
- Guida introduttiva alla SEO tecnica — dove HTTPS e HSTS si collocano nel quadro più ampio.
Dal settore
- Abilita HTTPS sui tuoi server (web.dev) — la guida HSTS di Google: l’header, lo SSL-stripping e l’avviso di errore non aggirabile.
- MDN —
Strict-Transport-Security— il riferimento autorevole per l’header: sintassi, direttive e comportamento di scheme-upgrade. - Invio alla lista di preload HSTS (hstspreload.org) — i requisiti di preload del progetto Chromium e le avvertenze sulla quasi irreversibilità.
- RFC 6797 — HTTP Strict Transport Security — la specifica originale, per quando ti serve la formulazione esatta di una direttiva.
- HSTS: cos’è e come usarlo (Kinsta) — una guida pratica all’implementazione che copre il redirect interno a livello di browser, la lista di preload e i rischi di dipendenza difficile da sciogliere.
- SSL Labs Server Test (Qualys) — valuta la tua configurazione TLS e conferma che HSTS venga servito correttamente.
Statistiche e fatti concreti da citare
- Il preload richiede
max-age≥ 31536000 (1 anno),includeSubDomainsepreload. Il requisito esatto e non negoziabile per l’inclusione nella lista integrata nel browser. Fonte - La rimozione dal preload richiede mesi per raggiungere gli utenti. Dal servizio di invio: “inclusion in the preload list cannot easily be undone… it takes months for a change to reach users with a Chrome update.” (traduzione) «L’inclusione nella preload list non può essere facilmente annullata… servono mesi perché una modifica raggiunga gli utenti con un aggiornamento di Chrome.» Questo è il dato che rende il preload una porta a senso unico. Fonte
- Gli host HSTS vanno in hard-fail su qualsiasi errore TLS. web.dev: i client che conoscono il tuo sito come host HSTS “are likely to hard-fail if your site ever has an error in its TLS configuration.” (traduzione) «probabilmente andranno in hard-fail se il tuo sito ha mai un errore nella sua configurazione TLS.» Nessun click-through: un certificato scaduto diventa un’interruzione del servizio. Fonte
- HTTPS stesso è “a very lightweight signal—affecting fewer than 1% of global queries.” (traduzione) «un segnale molto leggero, che incide su meno dell’1% delle query globali.» La stessa definizione di Google — e HSTS è un livello sopra HTTPS, non un fattore di ranking separato, quindi il suo peso SEO è di fatto pari a zero. Ridimensiona le aspettative di conseguenza. Fonte
Mettiti alla prova: HSTS
Cinque domande rapide su HSTS. Scegli una risposta per ciascuna, poi controlla.
Cronologia modifiche
Aggiornato il 22 ago 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 17 lug 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.