Salta al contenuto principale
Sistemi Attivi
WP Planet — WordPress Cloud & Managed Services
Torna al MagazineSicurezza

Certificato SSL WordPress: HTTPS, HSTS e perché non è più un'opzione ma una necessità tecnica

24 Ott 2026 — 09:30 8 min di lettura
Certificato SSL WordPress: HTTPS, HSTS e perché non è più un'opzione ma una necessità tecnica

HTTPS non è più una scelta: Google lo penalizza nei risultati, i browser marcano il sito come non sicuro, e HSTS protegge dal downgrade. Come configurare SSL, redirect 301, HSTS preload e header di sicurezza senza rompere i redirect legacy o bloccare gli utenti fuori dal loro stesso sito.

Fino a qualche anno fa, HTTPS era una scelta: lo attivavi se avevi un e-commerce o se gestivi dati sensibili, altrimenti restavi su HTTP. Oggi non è più così. Chrome marca ogni sito HTTP come "non sicuro" nella barra degli indirizzi — un cartello rosso che allontana i visitatori prima ancora che leggano il contenuto. Google penalizza i siti HTTP nei risultati di ricerca. E i nuovi protocolli web (HTTP/2, HTTP/3) funzionano solo su HTTPS. Non è un'opzione: è un requisito tecnico.

Ma installare un certificato SSL non basta. Il passaggio da HTTP a HTTPS, se fatto male, è uno dei modi più efficaci di perdere traffico SEO, rompere i redirect legacy, o bloccare gli utenti fuori dal loro stesso sito. Lo vediamo regolarmente: un cliente attiva SSL, fa il redirect da HTTP a HTTPS, e il giorno dopo il traffico crolla del 40% perché Google non riconosce la nuova versione HTTPS come la stessa pagina. Oppure: attiva HSTS preload senza capire cosa fa, e sei mesi dopo non riesce più a tornare indietro.

Il redirect 301: la base che quasi tutti sbagliano

Il primo passo dopo l'attivazione del certificato SSL è il redirect da HTTP a HTTPS. Ma non un redirect qualsiasi: un redirect 301 (permanente), non 302 (temporaneo). Il 301 dice a Google "questa pagina si è trasferita definitivamente"; il 302 dice "è temporaneo, non aggiornare l'indice". Usare 302 è l'errore più comune e il più costoso: Google mantiene la versione HTTP nell'indice, e il traffico si divide tra le due versioni.

Su Apache, il redirect corretto va nel file .htaccess:

.htaccess
# Redirect permanente da HTTP a HTTPS (Apache .htaccess)
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

# Su Nginx (nel blocco server HTTP, porta 80):
# server {
#     listen 80;
#     server_name example.com www.example.com;
#     return 301 https://$host$request_uri;
# }
Nota: Verifica che il redirect sia 301 (non 302) con cURL: curl -I http://example.com deve restituire HTTP/1.1 301 Moved Permanently. Un 302 è un errore che costa traffico SEO.

Aggiornare gli URL in WordPress (prima del redirect)

Il redirect da HTTP a HTTPS non basta se il contenuto del sito punta ancora a URL HTTP. Le immagini negli articoli, i link interni, le URL nei menu — se puntano a HTTP, il browser mostra avvisi di "contenuto misto" e la connessione non è completamente sicura. WordPress ha due tabelle che contengono gli URL: wp_options (siteurl e home) e wp_posts (i contenuti).

Il modo corretto è aggiornare prima le opzioni in wp-config.php o nel database, poi eseguire una ricerca e sostituzione su tutti i contenuti:

Terminale
# WP-CLI: aggiorna siteurl e home a HTTPS
wp search-replace 'http://example.com' 'https://example.com' \
  --skip-columns=guid

# Aggiorna anche il www (se usi www)
wp search-replace 'http://www.example.com' 'https://www.example.com' \
  --skip-columns=guid

# Verifica che non restino URL HTTP nel database
wp search-replace 'http://example.com' 'https://example.com' --dry-run

# Importante: --skip-columns=guid evita di cambiare i GUID
# dei post, che devono restare stabili per RSS e integrazioni.
Nota: La ricerca e sostituzione su tutto il database è un'operazione delicata: fai sempre un backup completo prima. Il flag --dry-run mostra cosa verrebbe modificato senza eseguire. Su un sito gestito, questo passaggio è incluso nella migrazione HTTPS.

HSTS: la protezione che impedisce il downgrade

HSTS (HTTP Strict Transport Security) è un header che dice al browser: "questo sito va sempre servito su HTTPS, non accettare mai una versione HTTP". Senza HSTS, un attaccante può intercettare la prima richiesta HTTP e fare un man-in-the-middle prima che il redirect a HTTPS avvenga. Con HSTS, il browser sa che il sito è solo HTTPS e non tenta nemmeno la connessione HTTP dopo la prima visita.

L'header HSTS si aggiunge in .htaccess o nella configurazione del server:

.htaccess
# HSTS header in .htaccess
<IfModule mod_headers.c>
    Header always set Strict-Transport-Security \
        "max-age=31536000; includeSubDomains"
</IfModule>

# max-age=31536000 = 1 anno (il minimo consigliato)
# includeSubDomains = applica HSTS a tutti i sottodomini
#
# ATTENZIONE: non aggiungere "preload" finché non sei sicuro.
# Il preload list di HSTS è irreversibile: una volta iscritto,
# non puoi tornare indietro per mesi. Vedi sotto.
Nota: HSTS è irreversibile dal punto di vista del browser: una volta che il browser ha memorizzato l'header, lo applicherà per max-age secondi. Se hai sottodomini che devono restare su HTTP (raro ma possibile), non usare includeSubDomains.

HSTS preload: l'arma a doppio taglio

HSTS preload è la versione più aggressiva: iscrivi il tuo dominio alla lista di preload di Chrome (hstspreload.org), e tutti i browser Chrome, Firefox, Safari, Edge non tenteranno mai una connessione HTTP al tuo dominio — nemmeno la prima volta. È la protezione massima contro il downgrade. Ma è anche irreversibile per mesi: una volta iscritto, non puoi rimuovere il dominio dalla lista facilmente, e se in futuro hai bisogno di tornare a HTTP per qualche motivo (non dovrebbe succedere, ma succede), sei bloccato.

La regola operativa: attiva HSTS con max-age e includeSubDomains prima, lascialo attivo per qualche settimana, verifica che tutto funziona, e solo allora considera il preload. Non attivare mai il preload il primo giorno — se hai un sottodominio che usa HTTP per qualcosa (un'API legacy, un servizio interno), il preload lo rompe immediatamente.

Gli altri header di sicurezza (che completano il quadro)

SSL e HSTS sono la base, ma non bastano per un hardening completo. Gli header di sicurezza aggiuntivi che configuriamo sempre su un sito WordPress gestito:

.htaccess
# Header di sicurezza in .htaccess
<IfModule mod_headers.c>
    # HSTS (vedi sopra)
    Header always set Strict-Transport-Security \
        "max-age=31536000; includeSubDomains"

    # Prevenzione clickjacking
    Header always set X-Frame-Options "SAMEORIGIN"

    # Prevenzione MIME sniffing
    Header always set X-Content-Type-Options "nosniff"

    # CSP base (adatta alle tue esigenze)
    Header always set Content-Security-Policy \
        "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;"

    # Referrer policy
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
Nota: La CSP è la più delicata: una CSP troppo restrittiva rompe plugin e script di terze parti. Parti dalla versione base sopra, testa in staging, e stringi gradualmente. Una CSP ben fatta previene XSS, ma una CSP mal fatta rompe il sito.

HTTPS non è un'opzione, ma non è nemmeno un interruttore da accendere e dimenticare. La configurazione corretta — redirect 301, aggiornamento degli URL, HSTS, header di sicurezza — è ciò che separa un sito sicuro da un sito che sembra sicuro ma ha falle. E una volta fatto, si mantiene nel tempo: il certificato si rinnova automaticamente, gli header restano attivi, e il redirect continua a funzionare. Il costo è una volta sola; il beneficio è permanente.

Audit di sicurezza

Verifica la sicurezza del tuo WordPress prima che diventi un'emergenza.

Un audit di sicurezza individua le falle, i plugin vulnerabili e le configurazioni deboli prima che qualcuno le sfrutti.

Audit di sicurezza
Condividi