L’errore 500 Internal Server Error è uno dei problemi più temuti da chi gestisce un sito web. Compare all’improvviso, non fornisce dettagli sulla causa e può mandare in panico anche gli utenti più esperti. Che tu stia gestendo un blog WordPress, un e-commerce o un’applicazione web personalizzata, capire cosa significa questo errore e come risolverlo è fondamentale per mantenere il tuo sito online e funzionante.
In questa guida completa analizzeremo nel dettaglio cos’è l’errore 500, quali sono le cause più frequenti, come diagnosticarlo e soprattutto come risolverlo passo dopo passo. Troverai istruzioni specifiche sia per WordPress che per server Apache e Linux, oltre a una tabella comparativa con gli altri errori HTTP della famiglia 5xx.
Cos’è l’errore 500 Internal Server Error
L’errore 500 Internal Server Error è un codice di stato HTTP che indica un problema generico lato server. A differenza degli errori 4xx (come il 404 Not Found, che segnala un problema lato client), il codice 500 comunica che il server ha incontrato una condizione imprevista che gli ha impedito di soddisfare la richiesta dell’utente.
In parole semplici, quando vedi un 500 internal server error, significa che qualcosa è andato storto sul server che ospita il sito, ma il server stesso non è in grado di spiegare esattamente cosa. È un po’ come quando un’applicazione sul tuo computer si blocca mostrando un generico “si è verificato un errore”: sai che c’è un problema, ma non sai quale.
Il messaggio può apparire in diverse forme a seconda del browser e del server web utilizzato:
- 500 Internal Server Error
- HTTP 500
- Internal Server Error
- Errore interno del server
- HTTP Error 500
- Una pagina bianca vuota (il cosiddetto “white screen of death” su WordPress)
Questo errore può colpire qualsiasi pagina del sito, non necessariamente la homepage. Potrebbe manifestarsi solo su determinate pagine, durante operazioni specifiche (come l’invio di un modulo) o in modo intermittente, rendendo la diagnosi ancora più complessa.
È importante sottolineare che l’errore 500 non dipende dal visitatore del sito: non c’è nulla che l’utente finale possa fare per risolverlo. La responsabilità ricade interamente sull’amministratore del sito o sul provider di hosting.
Cause più comuni dell’errore 500
Le cause dell’errore 500 internal server error sono molteplici e spesso interconnesse. Identificare quella corretta è il primo passo per risolvere il problema. Ecco le sei cause più frequenti che incontriamo quotidianamente nel nostro lavoro di assistenza WordPress.
File .htaccess corrotto
Il file .htaccess è un file di configurazione utilizzato dai server Apache per gestire reindirizzamenti, regole di sicurezza, permalink e molto altro. È uno dei responsabili più frequenti dell’errore 500, soprattutto sui siti WordPress.
Un file .htaccess può corrompersi per diversi motivi: un aggiornamento di plugin che ha scritto regole errate, una modifica manuale con errori di sintassi, oppure un’installazione incompleta. Anche un semplice carattere fuori posto può causare il blocco completo del sito. Questo file è particolarmente sensibile perché Apache lo legge ad ogni singola richiesta HTTP, quindi un errore al suo interno ha effetto immediato su tutto il sito.
Limite di memoria PHP superato
Ogni installazione PHP ha un limite di memoria (memory_limit) che definisce la quantità massima di RAM che uno script può utilizzare. Quando uno script PHP supera questo limite, il server termina l’esecuzione e restituisce un errore interno del server.
Questo problema è molto comune sui piani di hosting condiviso, dove il limite di memoria è spesso impostato a 64 MB o 128 MB. Siti WordPress con molti plugin attivi, temi complessi o grandi quantità di dati possono facilmente raggiungere e superare questo limite, soprattutto durante operazioni intensive come l’importazione di contenuti, la generazione di report o il caricamento di immagini pesanti.
Plugin o tema WordPress incompatibili
Un plugin mal programmato, non aggiornato o incompatibile con la versione corrente di WordPress o di PHP può generare un errore 500. Questo succede tipicamente dopo un aggiornamento: aggiorni WordPress, un plugin o il tema, e il sito smette di funzionare.
I conflitti tra plugin sono altrettanto frequenti. Due plugin che tentano di modificare la stessa funzionalità possono entrare in conflitto, generando errori fatali. Anche i temi possono essere la causa, specialmente quelli con funzionalità integrate molto complesse. Il rischio aumenta quando si utilizzano plugin scaricati da fonti non ufficiali (nulled), che spesso contengono codice malevolo o incompatibile. Per scegliere i plugin giusti, consulta la nostra guida sui migliori plugin per WooCommerce come esempio di selezione accurata.
Permessi file errati
Sui server Linux, ogni file e cartella ha dei permessi che determinano chi può leggerlo, scriverlo o eseguirlo. Se i permessi sono configurati in modo errato, il server web (Apache o Nginx) potrebbe non riuscire ad accedere ai file necessari, generando un 500 internal server error.
I permessi corretti per WordPress sono:
- Cartelle: 755 (il proprietario può leggere, scrivere ed eseguire; gli altri possono leggere ed eseguire)
- File: 644 (il proprietario può leggere e scrivere; gli altri possono solo leggere)
- wp-config.php: 600 o 640 (solo il proprietario può leggere e scrivere)
Permessi troppo restrittivi (come 000 o 600 su file pubblici) impediscono al server di servire le pagine. Permessi troppo permissivi (come 777) possono invece causare problemi di sicurezza e, su alcuni hosting, il server rifiuta di eseguire file con permessi eccessivi come misura di protezione.
Errori nello script PHP
Un errore di sintassi nel codice PHP, una funzione deprecata, una classe non trovata o una dipendenza mancante possono tutti causare un errore 500. Questo accade frequentemente quando si modifica manualmente il file functions.php del tema, il file wp-config.php o qualsiasi altro file PHP del sito.
Anche un aggiornamento della versione di PHP sul server può causare problemi: funzioni che funzionavano perfettamente in PHP 7.4 potrebbero essere state rimosse in PHP 8.x, generando errori fatali. È per questo che ogni aggiornamento di PHP dovrebbe essere testato in un ambiente di staging prima di applicarlo in produzione.
Timeout del server
Quando uno script impiega troppo tempo per completare l’esecuzione, il server lo interrompe con un timeout. Questo può manifestarsi come un errore 500 o come un errore 504 Gateway Timeout, a seconda della configurazione del server.
I timeout sono comuni durante operazioni pesanti come: importazione di grandi quantità di prodotti WooCommerce, esecuzione di query complesse sul database, chiamate API esterne che non rispondono, generazione di sitemap su siti con migliaia di pagine, o backup automatici. La soluzione spesso richiede l’ottimizzazione dello script o l’aumento del tempo massimo di esecuzione (max_execution_time) nella configurazione PHP.
Come diagnosticare l’errore 500
Prima di tentare qualsiasi soluzione, è fondamentale capire la causa esatta del problema. L’errore 500 è per definizione generico, quindi la fase di diagnosi è cruciale. Ecco i tre metodi principali per identificare l’origine del problema.
Controllare il file error_log
Il file error_log è la risorsa più preziosa per diagnosticare un errore 500. Ogni volta che si verifica un errore PHP, il server lo registra in questo file con data, ora, tipo di errore e file coinvolto.
Su un server Apache standard, il file si trova generalmente in:
/var/log/apache2/error.log(Debian/Ubuntu)/var/log/httpd/error_log(CentOS/RHEL)~/logs/error.log(hosting condiviso, accessibile via cPanel/Plesk)error_lognella root del sito (WordPress a volte lo crea qui)
Per visualizzare le ultime righe del log in tempo reale, puoi usare il comando:
tail -f /var/log/apache2/error.log
Cerca messaggi come “Fatal error”, “Parse error”, “Allowed memory size exhausted” o “Permission denied”. Questi messaggi ti indicheranno esattamente quale file e quale riga di codice sta causando il problema. Se non hai accesso SSH al server, la maggior parte dei pannelli di controllo (cPanel, Plesk, DirectAdmin) offre una sezione dedicata ai log degli errori.
Attivare il debug di WordPress (WP_DEBUG)
Se il tuo sito è basato su WordPress, puoi attivare la modalità debug per ottenere informazioni dettagliate sugli errori. Apri il file wp-config.php nella root del sito e modifica (o aggiungi) le seguenti righe:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Con questa configurazione, WordPress salverà tutti gli errori nel file wp-content/debug.log senza mostrarli ai visitatori del sito. Questo è importante: non attivare mai WP_DEBUG_DISPLAY su un sito in produzione, perché mostrerebbe informazioni sensibili (percorsi dei file, nomi di database, ecc.) a chiunque visiti il sito.
Dopo aver attivato il debug, ricarica la pagina che genera l’errore 500 e controlla il contenuto del file debug.log. Troverai messaggi di errore specifici che ti guideranno verso la soluzione.
Verificare il file .htaccess
Un test rapido per escludere il file .htaccess come causa del problema è rinominarlo temporaneamente. Collegati al server via FTP o SSH e rinomina il file:
mv .htaccess .htaccess.backup
Se il sito torna a funzionare dopo questa operazione, hai trovato il colpevole. A quel punto, accedi alla bacheca di WordPress, vai in Impostazioni > Permalink e clicca su “Salva modifiche” senza cambiare nulla: WordPress rigenererà automaticamente un file .htaccess pulito con le regole predefinite.
Se il sito continua a non funzionare, il problema è altrove. In questo caso, rinomina nuovamente il file al suo nome originale e prosegui con gli altri metodi di diagnosi.
Come risolvere l’errore 500 su WordPress
WordPress è il CMS più diffuso al mondo e, proprio per la sua architettura basata su plugin e temi di terze parti, è particolarmente soggetto all’errore 500. Ecco le soluzioni più efficaci, in ordine di probabilità di successo. Se preferisci affidarti a professionisti, il nostro servizio di SoccorsoWP può intervenire in tempi rapidi.
Disattivare tutti i plugin
Se non riesci ad accedere alla bacheca di WordPress, puoi disattivare tutti i plugin via FTP o SSH. Collegati al server e rinomina la cartella dei plugin:
mv wp-content/plugins wp-content/plugins_backup
Questo disattiva immediatamente tutti i plugin. Se il sito torna a funzionare, il problema è causato da uno dei plugin. A questo punto:
- Crea una nuova cartella
pluginsvuota:mkdir wp-content/plugins - Sposta un plugin alla volta dalla cartella di backup a quella nuova
- Ricarica il sito dopo ogni spostamento per identificare il plugin problematico
- Una volta trovato, rimuovilo o cerca un’alternativa compatibile
Questo metodo è il più affidabile per isolare un plugin problematico. Tieni presente che i dati dei plugin (impostazioni, contenuti) sono salvati nel database e non verranno persi con questa operazione.
Passare al tema predefinito
Se disattivare i plugin non risolve il problema, il tema potrebbe essere la causa. Puoi passare a un tema predefinito di WordPress (come Twenty Twenty-Five) via database. Accedi a phpMyAdmin o al client MySQL e esegui:
UPDATE wp_options SET option_value = 'twentytwentyfive' WHERE option_name = 'template';
UPDATE wp_options SET option_value = 'twentytwentyfive' WHERE option_name = 'stylesheet';
Sostituisci wp_ con il prefisso delle tabelle del tuo sito, se diverso. Se il sito funziona con il tema predefinito, il problema è nel tuo tema: contatta lo sviluppatore del tema o valuta la scelta di un tema WordPress diverso e meglio supportato.
Aumentare il limite di memoria PHP
Se il log degli errori mostra messaggi come “Allowed memory size exhausted”, devi aumentare il limite di memoria PHP. Ci sono diversi modi per farlo:
Tramite wp-config.php (metodo WordPress):
define('WP_MEMORY_LIMIT', '256M');
Tramite php.ini (se hai accesso al file di configurazione PHP):
memory_limit = 256M
Tramite .htaccess (su server Apache):
php_value memory_limit 256M
Se sei su un hosting WordPress condiviso, potresti non avere la possibilità di aumentare il limite oltre un certo valore. In questo caso, valuta il passaggio a un piano superiore o a un server VPS dove hai il pieno controllo delle risorse. Un limite di 256 MB è generalmente sufficiente per la maggior parte dei siti WordPress, mentre siti WooCommerce con molti prodotti o siti con page builder complessi potrebbero necessitare di 512 MB o più.
Rigenerare il file .htaccess
Come accennato nella sezione diagnostica, rigenerare il file .htaccess è spesso la soluzione più rapida. Se riesci ad accedere alla bacheca di WordPress, vai semplicemente in Impostazioni > Permalink e clicca su “Salva modifiche”.
Se non hai accesso alla bacheca, elimina o rinomina il file .htaccess esistente e creane uno nuovo con il contenuto predefinito di WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Assicurati che il file abbia i permessi corretti (644) e sia di proprietà dell’utente corretto del server web.
Verificare i permessi dei file
Per verificare e correggere i permessi di un’installazione WordPress via SSH, utilizza questi comandi:
Per le cartelle:
find /percorso/del/sito/ -type d -exec chmod 755 {} ;
Per i file:
find /percorso/del/sito/ -type f -exec chmod 644 {} ;
Per wp-config.php (più restrittivo per sicurezza):
chmod 600 wp-config.php
Verifica anche la proprietà dei file con ls -la. Il proprietario dovrebbe essere l’utente del server web (www-data su Debian/Ubuntu, apache su CentOS, o l’utente del dominio su Plesk). Una proprietà errata (ad esempio, file di proprietà di root) è una causa frequente di errore 500 che spesso viene trascurata.
Come risolvere l’errore 500 su Apache/Linux
Se il tuo sito non utilizza WordPress o se le soluzioni precedenti non hanno funzionato, il problema potrebbe risiedere nella configurazione del server. Ecco come intervenire a livello di sistema.
Controllare i log di Apache
Apache mantiene log dettagliati che sono la chiave per risolvere qualsiasi errore interno del server. I comandi più utili sono:
Visualizzare gli ultimi errori:
tail -50 /var/log/apache2/error.log
Filtrare gli errori più recenti:
grep "$(date +%Y-%m-%d)" /var/log/apache2/error.log
Monitorare in tempo reale:
tail -f /var/log/apache2/error.log
Cerca pattern specifici come: “AH01630: client denied by server configuration” (problema di permessi Apache), “ModSecurity: Access denied” (regola del firewall applicativo), “Premature end of script headers” (errore CGI/PHP), oppure “Segmentation fault” (crash del processo PHP). Ogni messaggio di errore racconta una storia precisa, e leggere i log con attenzione ti porterà rapidamente alla soluzione.
Verificare la configurazione PHP-FPM
Se il server utilizza PHP-FPM (la configurazione più comune sui server moderni), un’errata configurazione o un crash del processo PHP-FPM può causare un errore 500.
Verifica lo stato di PHP-FPM:
systemctl status php8.2-fpm
Controlla i log di PHP-FPM:
tail -50 /var/log/php8.2-fpm.log
Riavvia PHP-FPM (se il servizio è bloccato):
systemctl restart php8.2-fpm
Problemi comuni di PHP-FPM includono: pool esauriti (troppi processi child attivi), socket Unix non raggiungibile, errori di configurazione nel file del pool (es. /etc/php/8.2/fpm/pool.d/www.conf), oppure incompatibilità tra la versione di PHP configurata nel virtual host e quella effettivamente installata. Su server con pannelli come Plesk o cPanel, assicurati che il gestore PHP (PHP Handler) sia correttamente configurato per il dominio in questione.
Controllare mod_security
ModSecurity è un Web Application Firewall (WAF) che protegge i siti da attacchi come SQL injection e cross-site scripting. Tuttavia, le sue regole possono essere troppo aggressive e bloccare richieste legittime, generando un errore 500.
Per verificare se ModSecurity è la causa del problema, controlla i suoi log:
tail -50 /var/log/apache2/modsec_audit.log
Se trovi regole che bloccano le tue richieste, hai diverse opzioni:
- Disabilitare temporaneamente ModSecurity per il sito specifico (aggiungendo
SecRuleEngine Offnella configurazione del virtual host) - Creare un’eccezione per la regola specifica che causa il blocco (usando
SecRuleRemoveById) - Aggiornare il set di regole a una versione più recente che potrebbe aver corretto il falso positivo
Attenzione: disabilitare completamente ModSecurity espone il sito a rischi di sicurezza. È sempre preferibile creare eccezioni mirate piuttosto che disattivare l’intero modulo. Per un approfondimento sulla sicurezza del tuo sito, ti consigliamo la nostra guida sulla protezione dagli attacchi informatici.
Errore 500 vs altri errori HTTP
L’errore 500 non è l’unico codice di errore della famiglia 5xx. Spesso viene confuso con altri errori server-side, ma ciascuno ha un significato diverso e richiede un intervento specifico. Ecco una tabella comparativa per aiutarti a distinguerli:
| Codice | Nome | Significato | Causa tipica | Soluzione |
|---|---|---|---|---|
| 500 | Internal Server Error | Errore generico lato server | File .htaccess corrotto, errore PHP, permessi errati | Controllare log, disabilitare plugin, verificare permessi |
| 502 | Bad Gateway | Il server proxy ha ricevuto una risposta non valida dal server upstream | PHP-FPM non risponde, server backend in crash | Riavviare PHP-FPM, verificare la connessione al backend |
| 503 | Service Unavailable | Il server non è temporaneamente disponibile | Manutenzione programmata, sovraccarico di traffico | Attendere, aumentare le risorse, controllare file .maintenance |
| 504 | Gateway Timeout | Il server proxy non ha ricevuto risposta in tempo dal server upstream | Script PHP troppo lento, query database pesanti | Aumentare timeout, ottimizzare query, verificare risorse server |
La differenza fondamentale è questa: il 500 indica un errore nell’esecuzione del codice, il 502 un problema di comunicazione tra server, il 503 una temporanea indisponibilità e il 504 un timeout nella comunicazione. Capire quale errore si sta verificando permette di concentrare l’analisi nella direzione giusta, risparmiando tempo prezioso nella risoluzione.
Un altro errore che può essere confuso con il 500 è il 403 Forbidden, che però indica un problema di autorizzazione (il server capisce la richiesta ma rifiuta di eseguirla) piuttosto che un errore interno.
Come prevenire l’errore 500
Prevenire è sempre meglio che curare, e questo vale anche per l’errore 500 Internal Server Error. Ecco le best practice che raccomandiamo ai nostri clienti per minimizzare il rischio di downtime:
- Esegui backup regolari: prima di ogni aggiornamento, assicurati di avere un backup completo del sito (file + database). Strumenti come UpdraftPlus possono automatizzare questo processo. In caso di problemi, potrai ripristinare il sito in pochi minuti.
- Aggiorna con criterio: non aggiornare mai WordPress, plugin e temi contemporaneamente. Aggiorna un elemento alla volta, verifica che tutto funzioni e poi procedi con il successivo. In questo modo, se qualcosa va storto, saprai esattamente quale aggiornamento ha causato il problema.
- Usa un ambiente di staging: testa ogni modifica significativa su una copia del sito prima di applicarla in produzione. Molti hosting di qualità offrono la funzione di staging integrata.
- Monitora le risorse del server: tieni sotto controllo l’utilizzo di CPU, RAM e spazio disco. Un server costantemente al limite delle risorse è un candidato ideale per errori 500. Se il tuo sito è cresciuto, valuta il passaggio a un server VPS con risorse dedicate.
- Scegli plugin affidabili: utilizza solo plugin dal repository ufficiale di WordPress o da sviluppatori verificati. Controlla le recensioni, la frequenza degli aggiornamenti e la compatibilità con la tua versione di WordPress e PHP.
- Mantieni il PHP aggiornato: le versioni più recenti di PHP sono più veloci e sicure. Tuttavia, pianifica l’aggiornamento con attenzione, verificando la compatibilità di tutti i plugin e del tema.
- Configura il monitoraggio uptime: utilizza servizi di monitoraggio server che ti avvisano immediatamente quando il sito va offline. Prima intervieni, meno visitatori perdi.
- Limita le modifiche manuali ai file: ogni volta che modifichi manualmente file PHP, .htaccess o wp-config.php, c’è il rischio di introdurre errori. Se devi farlo, fai sempre una copia di backup del file prima di modificarlo.
Un hosting WordPress di qualità può fare una grande differenza nella prevenzione degli errori 500. Server ben configurati, con risorse adeguate, versioni PHP aggiornate e supporto tecnico competente riducono drasticamente la probabilità di incontrare questo tipo di problemi.
FAQ sull’errore 500 Internal Server Error
L’errore 500 è un problema del mio computer o del sito?
L’errore 500 è sempre un problema lato server, non del tuo computer o della tua connessione internet. Se lo vedi come visitatore di un sito, non c’è nulla che tu possa fare oltre a riprovare più tardi. Se sei il proprietario del sito, devi intervenire sulla configurazione del server o del CMS seguendo le indicazioni descritte in questa guida.
L’errore 500 influisce sulla SEO del mio sito?
Sì, se l’errore 500 persiste per un periodo prolungato, Google potrebbe rimuovere temporaneamente le pagine interessate dall’indice di ricerca. Inoltre, un sito che restituisce frequentemente errori 500 perde credibilità agli occhi dei motori di ricerca e degli utenti. È fondamentale risolvere il problema il prima possibile: se l’errore dura solo pochi minuti, l’impatto SEO è generalmente trascurabile; se dura ore o giorni, le conseguenze possono essere significative. Per approfondire la gestione della visibilità del tuo sito, consulta la nostra guida su sitemap XML e indicizzazione su Google.
Posso risolvere l’errore 500 senza accesso SSH?
Sì, molte soluzioni possono essere applicate tramite FTP o tramite il file manager del pannello di controllo del tuo hosting (cPanel, Plesk, DirectAdmin). Puoi rinominare il file .htaccess, disattivare i plugin rinominando la cartella, modificare wp-config.php e verificare i permessi dei file. Tuttavia, per una diagnosi più approfondita (analisi dei log, verifica di PHP-FPM, controllo di ModSecurity), l’accesso SSH è estremamente utile.
Perché l’errore 500 appare solo su alcune pagine?
Se l’errore 500 si manifesta solo su determinate pagine, la causa è probabilmente legata al contenuto specifico di quelle pagine. Potrebbe essere un shortcode di un plugin difettoso, un widget incompatibile, un blocco Gutenberg che genera errori, o un template di pagina con codice PHP problematico. In questi casi, il file debug.log di WordPress ti mostrerà esattamente quale componente sta generando l’errore su quella specifica pagina.
Quanto tempo ci vuole per risolvere un errore 500?
Il tempo dipende dalla causa. Un file .htaccess corrotto si risolve in meno di 5 minuti. Un plugin incompatibile richiede in genere 15-30 minuti per essere identificato e disattivato. Problemi di configurazione del server o errori nel codice personalizzato possono richiedere da un’ora a diverse ore di lavoro. Se non riesci a risolvere il problema da solo entro un tempo ragionevole, è consigliabile rivolgersi a professionisti per evitare di peggiorare la situazione con tentativi errati.
Hai bisogno di aiuto con un errore 500? Il nostro team di SoccorsoWP è a disposizione per risolvere il problema in tempi rapidi. Che si tratti di un sito WordPress bloccato, di un server mal configurato o di un errore nel codice, interveniamo con competenza e professionalità per rimettere il tuo sito online nel minor tempo possibile.