{"id":25699,"date":"2026-04-01T10:00:00","date_gmt":"2026-04-01T08:00:00","guid":{"rendered":"https:\/\/soccorsowp.it\/blog\/?p=25699"},"modified":"2026-04-01T10:00:00","modified_gmt":"2026-04-01T08:00:00","slug":"errore-mixed-content-wordpress-https","status":"publish","type":"post","link":"https:\/\/soccorsowp.it\/blog\/errore-mixed-content-wordpress-https\/","title":{"rendered":"Come risolvere l&#8217;errore &#8220;Mixed Content&#8221; su WordPress HTTPS"},"content":{"rendered":"<h1>Come risolvere l&#8217;errore &#8220;Mixed Content&#8221; su WordPress HTTPS<\/h1>\n<p>Hai attivato il certificato SSL sul tuo sito <a href=\"https:\/\/soccorsowp.it\/blog\/blocco-di-contenuti-opt-in-per-wordpress\/\">WordPress<\/a> ma il browser mostra un avviso di <strong>contenuto misto (mixed content)<\/strong>? Il lucchetto nella barra degli indirizzi \u00e8 grigio o mostra un triangolo di avvertimento? Questo problema si verifica quando una pagina HTTPS carica risorse (immagini, script, fogli di stile) ancora tramite HTTP. In questa guida ti spiego come identificare e <strong>risolvere l&#8217;errore mixed content su WordPress<\/strong> in modo definitivo.<\/p>\n<h2>Cos&#8217;\u00e8 il mixed content e perch\u00e9 \u00e8 un problema<\/h2>\n<p>Quando il tuo sito usa HTTPS, il browser si aspetta che tutte le risorse della pagina vengano caricate tramite connessione sicura. Il <strong>mixed content<\/strong> si verifica quando alcune risorse \u2014 immagini, file JavaScript, CSS, font \u2014 vengono ancora richieste con il protocollo HTTP non crittografato. I browser moderni bloccano o segnalano queste risorse per proteggere i visitatori.<\/p>\n<p>Ci sono due tipi di mixed content:<\/p>\n<ul>\n<li><strong>Mixed content passivo:<\/strong> riguarda risorse come immagini, video e audio caricate via HTTP. I browser le caricano ma mostrano un avviso.<\/li>\n<li><strong>Mixed content attivo:<\/strong> riguarda script JavaScript, CSS e iframe caricati via HTTP. I browser li bloccano completamente perch\u00e9 possono modificare il comportamento della pagina.<\/li>\n<\/ul>\n<p>Oltre al problema di sicurezza, il mixed content ha un impatto negativo sulla <strong><a href=\"https:\/\/soccorsowp.it\/blog\/couponxl-coupon-wordpress\/\">SEO<\/a><\/strong>. Google penalizza i siti che non offrono una connessione completamente sicura, e il lucchetto mancante riduce la fiducia dei visitatori.<\/p>\n<h2>Come identificare le risorse mixed content<\/h2>\n<p>Il primo passo \u00e8 trovare esattamente quali risorse causano il problema. Ci sono diversi strumenti:<\/p>\n<h3>Console del browser<\/h3>\n<p>Apri il sito in Chrome, clicca con il tasto destro e seleziona <strong>&#8220;Ispeziona&#8221;<\/strong>, poi vai alla tab <strong>&#8220;Console&#8221;<\/strong>. Vedrai messaggi di errore in giallo o rosso che indicano le risorse caricate via HTTP:<\/p>\n<pre>Mixed Content: The page at 'https:\/\/tuosito.it\/pagina\/' was loaded over HTTPS,\nbut requested an insecure image 'http:\/\/tuosito.it\/wp-content\/uploads\/2024\/01\/foto.jpg'.<\/pre>\n<p>Ogni messaggio indica il tipo di risorsa e l&#8217;URL completo. Annota tutti gli URL che iniziano con <span style=\"font-family: monospace\">http:\/\/<\/span> invece di <span style=\"font-family: monospace\">https:\/\/<\/span>.<\/p>\n<h3>Strumenti online<\/h3>\n<p>Puoi usare strumenti come <strong>Why No Padlock<\/strong> o <strong>SSL Labs<\/strong> che analizzano automaticamente tutte le pagine del sito e generano un report con le risorse non sicure. Sono utili per siti con molte pagine dove controllare la console manualmente sarebbe troppo lungo.<\/p>\n<h2>Causa principale: URL hardcoded con http:\/\/<\/h2>\n<p>Nella maggior parte dei casi, il mixed content su WordPress \u00e8 causato da <strong>URL assoluti con http:\/\/<\/strong> salvati nel database. Quando hai installato WordPress o caricato le immagini, il sito usava HTTP. Dopo aver attivato SSL, gli URL nel database non si aggiornano automaticamente. Gli articoli, le pagine, i widget e le impostazioni del tema contengono ancora riferimenti come <span style=\"font-family: monospace\">http:\/\/tuosito.it\/wp-content\/uploads\/&#8230;<\/span><\/p>\n<h2>Soluzione 1: Search and Replace nel database<\/h2>\n<p>La soluzione pi\u00f9 efficace \u00e8 sostituire tutti gli URL <span style=\"font-family: monospace\">http:\/\/<\/span> con <span style=\"font-family: monospace\">https:\/\/<\/span> nel database. Puoi farlo con WP-CLI:<\/p>\n<pre>wp search-replace 'http:\/\/tuosito.it' 'https:\/\/tuosito.it' --path=\/var\/www\/html\/<\/pre>\n<p>Se non hai accesso SSH, puoi usare il plugin <strong>Better Search Replace<\/strong>. Installalo dalla dashboard, vai su <strong>Strumenti &gt; Better Search Replace<\/strong>, inserisci il vecchio URL con http e il nuovo con https, seleziona tutte le tabelle ed esegui la sostituzione. Usa prima l&#8217;opzione &#8220;Esecuzione di prova&#8221; per verificare quante sostituzioni verranno fatte senza modificare nulla.<\/p>\n<p><strong>Importante:<\/strong> fai sempre un backup del database prima di eseguire un search-replace. Un errore nell&#8217;URL di sostituzione potrebbe rendere il sito inaccessibile.<\/p>\n<h2>Soluzione 2: forzare HTTPS in wp-config.php<\/h2>\n<p>Aggiungi queste righe in <span style=\"font-family: monospace\">wp-config.php<\/span> per assicurarti che WordPress usi sempre HTTPS:<\/p>\n<pre>define('FORCE_SSL_ADMIN', true);\nif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &amp;&amp; $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {\n    $_SERVER['HTTPS'] = 'on';\n}<\/pre>\n<p>La prima riga forza HTTPS per il pannello admin. Il blocco successivo \u00e8 necessario se il sito \u00e8 dietro un load balancer o un proxy inverso (come <a href=\"https:\/\/soccorsowp.it\/blog\/5-consigli-per-velocizzare-il-tuo-sito-web-wordpress-da-subito\/\">Cloudflare<\/a>) che gestisce SSL al posto del server.<\/p>\n<h2>Soluzione 3: aggiungere un redirect .htaccess<\/h2>\n<p>Per assicurarti che tutte le richieste HTTP vengano reindirizzate a HTTPS, aggiungi queste regole all&#8217;inizio del file <span style=\"font-family: monospace\">.htaccess<\/span>:<\/p>\n<pre>RewriteEngine On\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<\/pre>\n<p>Questo redirect 301 permanente dice ai browser e ai motori di ricerca che la versione corretta del sito \u00e8 HTTPS. Tutte le richieste HTTP verranno automaticamente reindirizzate.<\/p>\n<h2>Soluzione 4: risorse esterne e CDN<\/h2>\n<p>Se il mixed content \u00e8 causato da risorse esterne (font Google, script di terze parti, immagini da altri siti), devi aggiornare i riferimenti manualmente. Controlla:<\/p>\n<ul>\n<li><strong>Widget personalizzati:<\/strong> verifica gli URL nei widget della sidebar e del footer.<\/li>\n<li><strong>Impostazioni del tema:<\/strong> logo, favicon e immagini di sfondo configurate nel Customizer.<\/li>\n<li><strong>Plugin:<\/strong> alcuni plugin salvano URL assoluti nelle proprie impostazioni.<\/li>\n<li><strong>CDN:<\/strong> se usi un CDN, assicurati che sia configurato per servire le risorse via HTTPS.<\/li>\n<\/ul>\n<p>Per le risorse esterne, la soluzione pi\u00f9 semplice \u00e8 cambiare <span style=\"font-family: monospace\">http:\/\/<\/span> in <span style=\"font-family: monospace\">https:\/\/<\/span> o usare URL relativi al protocollo (<span style=\"font-family: monospace\">\/\/esempio.com\/risorsa.js<\/span>).<\/p>\n<h2>Aggiungere l&#8217;header HSTS per la massima sicurezza<\/h2>\n<p>Dopo aver risolto il mixed content, puoi aggiungere l&#8217;header <strong>HTTP Strict Transport Security (HSTS)<\/strong> per istruire i browser a connettersi sempre via HTTPS. Aggiungi questa riga in <span style=\"font-family: monospace\">.htaccess<\/span>:<\/p>\n<pre>Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\"<\/pre>\n<p>Questo header dice al browser: &#8220;per i prossimi 12 mesi, connettiti a questo dominio solo via HTTPS, senza nemmeno tentare HTTP&#8221;. \u00c8 un livello di protezione aggiuntivo che previene anche attacchi di tipo downgrade. Attivalo solo dopo aver confermato che HTTPS funziona perfettamente su tutto il sito, perch\u00e9 revocarlo non \u00e8 immediato.<\/p>\n<h2>Prevenire il mixed content in futuro<\/h2>\n<p>Dopo aver risolto il problema, assicurati che non si ripresenti. Verifica che le impostazioni di WordPress (Impostazioni &gt; Generali) mostrino l&#8217;URL del sito con <span style=\"font-family: monospace\">https:\/\/<\/span>. Quando carichi nuove immagini o inserisci link, WordPress user\u00e0 automaticamente HTTPS. Se usi un plugin di sicurezza come Really Simple SSL, pu\u00f2 forzare automaticamente HTTPS su tutte le risorse del sito come soluzione rapida. Tuttavia, il search-replace nel database resta la soluzione preferibile perch\u00e9 risolve il problema alla radice anzich\u00e9 applicare un filtro a ogni caricamento di pagina.<\/p>\n<h2>Content Security Policy come rete di sicurezza<\/h2>\n<p>Un&#8217;altra tecnica avanzata \u00e8 usare l&#8217;header <strong>Content-Security-Policy<\/strong> con la direttiva <span style=\"font-family: monospace\">upgrade-insecure-requests<\/span>. Questo header dice al browser di convertire automaticamente tutte le richieste HTTP in HTTPS prima di inviarle:<\/p>\n<pre>Header always set Content-Security-Policy \"upgrade-insecure-requests\"<\/pre>\n<p>\u00c8 una soluzione elegante che funziona come rete di sicurezza: anche se nel database restano alcuni URL con http, il browser li converte automaticamente. Combinata con il search-replace nel database, garantisce una copertura completa contro il mixed content.<\/p>\n<h2>Il mixed content persiste?<\/h2>\n<p>Se dopo aver provato tutte le soluzioni il problema persiste, potrebbe esserci un conflitto con il tema o un plugin che genera URL in modo dinamico. Il team di <strong>SoccorsoWP<\/strong> pu\u00f2 analizzare il tuo sito, identificare tutte le fonti di mixed content e risolverle definitivamente. <a href=\"https:\/\/soccorsowp.it\/ticket\/\">Apri un ticket<\/a> e ottieni il lucchetto verde.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come risolvere l&#8217;errore &#8220;Mixed Content&#8221; su WordPress HTTPS Hai attivato il certificato SSL sul tuo sito WordPress ma il browser mostra un avviso di contenuto&#8230;<\/p>\n","protected":false},"author":1,"featured_media":25700,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Come risolvere l'errore Mixed Content su WordPress HTTPS","_seopress_titles_desc":"Guida per risolvere l'errore mixed content su WordPress dopo l'attivazione di SSL: search-replace, wp-config, .htaccess e HSTS.","_seopress_robots_index":"","footnotes":""},"categories":[1424],"tags":[],"class_list":{"0":"post-25699","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-bug-e-vulnerabilita"},"_links":{"self":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/comments?post=25699"}],"version-history":[{"count":1,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25699\/revisions"}],"predecessor-version":[{"id":26258,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/25699\/revisions\/26258"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media\/25700"}],"wp:attachment":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media?parent=25699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/categories?post=25699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/tags?post=25699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}