Come risolvere gli errori Mixed Content in WordPress dopo l’attivazione di SSL
Hai attivato il certificato SSL sul tuo sito WordPress, ma il browser mostra un avviso di sicurezza o il lucchetto nella barra degli indirizzi non è verde? Il problema è quasi certamente il mixed content: la pagina viene caricata via HTTPS ma alcune risorse (immagini, script, fogli di stile) vengono ancora richiamate via HTTP. In questa guida ti spiego come individuare e correggere tutti gli errori mixed content.
Cos’è il mixed content e perché è un problema
Quando una pagina HTTPS carica risorse via HTTP, il browser considera la pagina non completamente sicura. Esistono due tipi di mixed content:
- Mixed content passivo: riguarda risorse come immagini, video e audio. Il browser le carica ma mostra un avviso nella console. Il lucchetto potrebbe non apparire o apparire con un triangolo di avvertimento.
- Mixed content attivo: riguarda script JavaScript, fogli di stile CSS, iframe e font. Il browser blocca queste risorse perché possono essere manipolate da un attaccante. Questo può rompere funzionalità del sito.
Oltre ai problemi di sicurezza, il mixed content influisce negativamente sul posizionamento SEO: Google preferisce siti completamente HTTPS e penalizza quelli con contenuti misti.
Individuare gli errori mixed content
Per trovare tutte le risorse HTTP sulla tua pagina:
Metodo 1: Console del browser. Apri gli Strumenti per sviluppatori (F12) e vai nella scheda Console. Gli errori mixed content appaiono come avvisi gialli o errori rossi con il testo “Mixed Content”. Ogni avviso indica l’URL della risorsa problematica.
Metodo 2: Why No Padlock. Visita il sito whynopadlock.com e inserisci l’URL del tuo sito. Il servizio analizza la pagina e elenca tutte le risorse caricate via HTTP.
Metodo 3: Scansione completa del sito. Per controllare tutte le pagine e non solo la homepage, usa un plugin come SSL Insecure Content Fixer o lo strumento da riga di comando ssl-check. Questi strumenti scansionano ogni pagina del sito e identificano tutti gli URL HTTP.
Aggiornare gli URL nel database
La causa più comune di mixed content è che gli URL nel database di WordPress puntano ancora a http://. Quando hai installato WordPress senza SSL, tutti i link interni, le immagini nei contenuti e le impostazioni sono stati salvati con HTTP. Devi aggiornarli tutti a HTTPS.
Il metodo più sicuro è usare WP-CLI:
wp search-replace 'http://tuodominio.com' 'https://tuodominio.com' --all-tables --dry-run
Il parametro –dry-run mostra quante sostituzioni verranno fatte senza modificare nulla. Se i numeri ti sembrano ragionevoli, esegui di nuovo senza –dry-run:
wp search-replace 'http://tuodominio.com' 'https://tuodominio.com' --all-tables
Se non hai accesso SSH, puoi usare il plugin Better Search Replace: cerca http://tuodominio.com e sostituisci con https://tuodominio.com. Seleziona tutte le tabelle e fai prima un test (dry run).
Risorse esterne caricate via HTTP
Dopo aver aggiornato il database, potresti avere ancora mixed content causato da risorse esterne:
- Font da CDN: se carichi font da un CDN con URL http://, cambia il protocollo a https:// o usa URL protocol-relative (//cdn.esempio.com/font.woff).
- Script di terze parti: widget, codici di tracciamento o embed che usano HTTP. Verifica che il servizio esterno supporti HTTPS e aggiorna gli URL.
- Immagini esterne: se i tuoi articoli contengono immagini ospitate su altri siti via HTTP, dovrai scaricarle e caricarle nella tua libreria media, oppure verificare che il sito esterno supporti HTTPS.
Per le risorse nel tema o nei plugin, controlla i file PHP e JavaScript cercando URL che iniziano con http://.
Usare un plugin per correggere automaticamente
Se hai molte risorse mixed content e vuoi una soluzione rapida, il plugin SSL Insecure Content Fixer può correggere automaticamente gli URL al volo:
- Installa e attiva il plugin.
- Vai in Impostazioni → SSL Insecure Content.
- Scegli il livello di correzione: Simple corregge gli URL nel contenuto degli articoli e nei widget. Content è più aggressivo e corregge anche script e stili.
Questo plugin è utile come soluzione temporanea, ma la correzione definitiva è aggiornare gli URL nel database e nei file del tema. Il plugin aggiunge un overhead a ogni caricamento di pagina perché deve elaborare tutti i contenuti.
Forzare HTTPS per tutte le risorse
Come misura aggiuntiva, aggiungi questo header CSP nel tuo file .htaccess o nella configurazione Nginx:
Content-Security-Policy: upgrade-insecure-requests
Questa direttiva dice al browser di caricare automaticamente via HTTPS tutte le risorse richieste via HTTP. Non è una soluzione definitiva — è meglio correggere gli URL alla fonte — ma è un’ottima rete di sicurezza durante la transizione.
Controllare tema e plugin per URL hardcoded
Alcuni temi e plugin contengono URL http:// scritti direttamente nel codice PHP, JavaScript o CSS. Queste risorse non vengono corrette aggiornando il database. Per trovarle:
grep -r "http://" wp-content/themes/tuo-tema/ --include="*.php" --include="*.js" --include="*.css" grep -r "http://" wp-content/plugins/ --include="*.php" --include="*.js" --include="*.css"
Se trovi URL hardcoded nei plugin, non modificarli direttamente: le modifiche verrebbero perse al prossimo aggiornamento. Segnala il problema allo sviluppatore del plugin. Per il tuo tema, specialmente se è un tema child, puoi correggere gli URL direttamente nei file.
Per le risorse caricate correttamente in WordPress tramite wp_enqueue_style() e wp_enqueue_script(), il protocollo viene impostato automaticamente in base alla configurazione del sito. Se hai aggiornato gli URL nelle impostazioni di WordPress a HTTPS, queste risorse useranno automaticamente il protocollo corretto.
Serve assistenza?
Se il tuo sito WordPress mostra errori mixed content dopo l’attivazione di SSL e non riesci a risolverli, il team di SoccorsoWP può correggere tutti gli URL e configurare SSL correttamente. Apri un ticket e ottieni il lucchetto verde.