
🚀 Come rimuovere index.php e index.html dall'URL: redirect 301 alla root del sito
Apri Google Search Console e vedi la homepage indicizzata due volte: come site.ru/ e come site.ru/index.php. Oppure site.ru/index.html. Per un motore di ricerca, si tratta di due URL diversi con contenuti identici. Il risultato: l'autorevolezza della pagina si divide a metà tra i duplicati, il posizionamento cala e il crawl budget viene sprecato.
Il problema è vecchio quanto il web. La meccanica è semplice: di default, il server restituisce index.html o index.php quando si richiede la root tramite la direttiva DirectoryIndex, ma non blocca l'accesso diretto a site.ru/index.php. Dal punto di vista di Apache, entrambi gli indirizzi sono legittimi. Ma il motore di ricerca vede due pagine diverse con contenuto identico e inizia a tirare a indovinare su quale posizionare.
Ecco tre modi per impostare un redirect 301 dai file index alla root: dal classico .htaccess a Cloudflare e Nginx. Più un metodo di verifica che richiede due minuti.
💡 Panoramica rapida:
- Aggiungi le regole
mod_rewritea.htaccessper intercettare le richieste aindex.htmleindex.php - Per WordPress e CMS, usa un redirect PHP nel file
index.phpdi ingresso (sopravvive agli aggiornamenti dei permalink) - Verifica il risultato con
curl -Ioredirectchecker.com(la risposta deve essere301 Moved Permanently) - Passa in rassegna i link interni del sito e sostituisci
/index.phpcon/in menu, logo e widget
Perché i duplicati dei file index danneggiano il sito
Quando un visitatore digita site.ru nella barra degli indirizzi, Apache sostituisce silenziosamente index.html o index.php in base a DirectoryIndex. Il browser mostra la pagina, l'indirizzo resta pulito e l'utente non si accorge della sostituzione.
Ma se da qualche parte esiste già un link al percorso completo site.ru/index.php, il crawler lo segue, vede lo stesso contenuto di site.ru/ e registra un duplicato. Da dove arriva un link del genere? Le opzioni sono tante: un vecchio post su un sito di terze parti, un partner che ha inserito l'URL sbagliato, un plugin di condivisione social che ha generato un link con index.php in coda, o persino lo sviluppatore che in fase di layout ha messo href="/index.html" nella navigazione.
Cosa otteniamo in pratica:
- Link equity frammentata. I backlink si distribuiscono tra
/e/index.phpinvece di accumularsi su un'unica pagina canonica. - Spreco del crawl budget. Il bot impiega tempo a scansionare duplicati invece delle sezioni utili del sito.
- Rilevanza diluita. Il motore di ricerca non capisce quale delle due pagine mostrare nei risultati e può alternarle, le statistiche di comportamento utente si distorcono e il posizionamento diventa instabile.
La situazione è del tutto gestibile. Si risolve impostando un redirect 301 permanente da index.html e index.php alla root /. Vediamo i metodi disponibili.
Metodo 1: Redirect via.htaccess su Apache
Il file .htaccess si trova nella root del sito. Se non esiste, crea un file di testo con un punto all'inizio del nome; qualsiasi client FTP o file manager dell'hosting può farlo.
Apri .htaccess e cerca la riga RewriteEngine On. Se non c'è, aggiungila come primissima riga dopo eventuali commenti. Abilita il modulo mod_rewrite responsabile di tutti i redirect.
Sotto RewriteEngine On, aggiungi le regole. Ecco un set minimo funzionante:
1 RewriteEngine On 2 3 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 4 RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L] 5 6 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 7 RewriteRule ^index\.html$ https://%{HTTP_HOST}/ [R=301,L]
Ecco come funziona riga per riga:
RewriteCond %{THE_REQUEST}controlla la stringa di richiesta originale inviata dal browser al server. Contiene esplicitamente/index.phpo/index.html, che è esattamente ciò che stiamo intercettando.RewriteRulereindirizza la richiesta alla root del dominio con un codice301(redirect permanente). Il flagL(last) interrompe l'elaborazione delle regole successive.%{HTTP_HOST}sostituisce automaticamente il dominio del sito; non serve digitarlo manualmente. Il protocollo è specificato esplicitamente comehttps://.
Nota critica: non usare il costrutto semplificato Redirect 301 /index.php /. La direttiva Redirect di mod_alias va in loop sui file index. Dopo il redirect a /, Apache sostituisce di nuovo index.php tramite DirectoryIndex, la regola scatta di nuovo e il browser restituisce un errore di loop infinito. La combinazione RewriteCond + RewriteRule via mod_rewrite analizza specificamente la richiesta originale (%{THE_REQUEST}), non quella riscritta dalle regole interne, quindi non si verificano loop.
Le modifiche in .htaccess hanno effetto immediato; Apache rilegge il file a ogni richiesta e non è necessario riavviare il server.
Metodo 2: Redirect PHP per WordPress e CMS
Sui siti che girano con WordPress, Joomla, Drupal e altri CMS, modificare .htaccess è rischioso: il CMS lo riscrive quando si aggiornano i permalink, si cambia la struttura degli URL o si attivano plugin SEO. Le tue regole potrebbero sparire al prossimo salvataggio delle impostazioni.
Per WordPress c'è un approccio più resiliente: un redirect direttamente nel file di ingresso index.php. Si trova nella root di installazione del CMS e viene eseguito a ogni richiesta, prima che il core venga caricato.
Apri il file index.php di WordPress e aggiungi all'inizio, subito dopo il tag di apertura <?php:
1 <?php 2 // 301 redirect from index.php to root 3 if ($_SERVER['REQUEST_URI'] === '/index.php') { 4 header('Location: /', true, 301); 5 exit(); 6 } 7 8 // Standard WordPress code follows 9 define('WP_USE_THEMES', true); 10 // ...
Per i siti in puro PHP senza CMS, la logica è la stessa: inserisci il codice nel file index.php di ingresso nella root della directory pubblica. Se il tuo sito usa entrambi i file index (index.php e index.html), aggiungi un controllo simile per index.html all'inizio dello stesso script.
Perché questo metodo è più affidabile della modifica di .htaccess per i CMS:
- Il codice risiede in un file PHP che il CMS non tocca quando si aggiornano le impostazioni dei permalink.
- Il controllo
$_SERVER['REQUEST_URI']intercetta specificamente l'URL richiesto, non quello riscritto dalle regole interne di WordPress. exit()garantisce l'interruzione dell'esecuzione; non verrà eseguita una sola riga oltre.
Sui progetti ad alto traffico, il redirect PHP è leggermente più veloce della variante .htaccess: mod_rewrite non si attiva per analizzare le espressioni regolari, risparmiando millisecondi a ogni richiesta.
Metodo 3: Cloudflare, Nginx e altri server
Cloudflare. Se il tuo sito passa attraverso Cloudflare, puoi impostare il redirect a livello di CDN senza toccare i file del server. Vai su Rules → Redirect Rules e crea una regola:
- Campo:
URI Path - Operatore:
equals - Valore:
/index.php - URL di reindirizzamento:
https://yourdomain.com/ - Codice di stato:
301
Aggiungi una regola simile per /index.html. Il vantaggio: il redirect scatta sui server edge di Cloudflare e la richiesta non raggiunge nemmeno il tuo hosting. Lo svantaggio: il dominio deve essere delegato ai NS di Cloudflare.
Nginx. I siti su Nginx non usano .htaccess. Le regole si aggiungono al file di configurazione del server, di solito /etc/nginx/sites-available/yourdomain:
1 location = /index.php { 2 return 301 https://yourdomain.com/; 3 } 4 5 location = /index.html { 6 return 301 https://yourdomain.com/; 7 }
Dopo la modifica, verifica la sintassi con nginx -t e applica le modifiche: systemctl reload nginx.
LiteSpeed / OpenLiteSpeed. Il server supporta .htaccess con le stesse regole mod_rewrite di Apache; il metodo 1 funziona senza modifiche. In alternativa, puoi usare il meccanismo di redirect integrato nel pannello LiteSpeed WebAdmin.
IIS (Windows Server). Per i siti su IIS, il redirect si configura tramite il modulo URL Rewrite in web.config:
1 <rule name="Redirect index.php to root" stopProcessing="true"> 2 <match url="^index\.php$" /> 3 <action type="Redirect" url="/" redirectType="Permanent" /> 4 </rule>
Aggiungi una regola simile per index.html.
Come verificare che il redirect funzioni
Il metodo più affidabile è la riga di comando. Esegui:
1 curl -I https://yourdomain.com/index.php
La prima riga della risposta deve essere HTTP/1.1 301 Moved Permanently e l'header Location deve mostrare la root del sito. Ripeti per index.html. La homepage alla root / deve rispondere con il codice 200.
Strumenti di verifica alternativi:
- Redirect Checker (redirectchecker.com) mostra l'intera catena di redirect con i codici di risposta, comodo per una diagnostica rapida senza terminale.
- Google Search Console → Ispezione URL (lo strumento di ispezione e test): mostra come Googlebot vede la pagina dopo il redirect e se è disponibile per l'indicizzazione.
Dopo aver impostato il redirect, è fondamentale controllare i link interni del sito. Assicurati che menu, logo (che di solito punta alla homepage), breadcrumb e blocchi di articoli correlati puntino a /, non a /index.php. Un singolo link interno sbagliato può ricreare il duplicato che hai appena rimosso. Fai una ricerca nel codice sorgente del sito: apri una pagina qualsiasi, premi Ctrl+U e cerca href="/index.php" o href="/index.html". Sostituisci ogni occorrenza con href="/".
Video: una breve spiegazione sui redirect 301 da Google
Un video di quattro minuti da Google Search Central, visione essenziale se imposti i redirect per la prima volta. John Mueller spiega come il motore di ricerca elabora i redirect permanenti e se esiste un limite al loro numero:
⁉️🤔 Domande frequenti
Cosa succede se non imposto affatto un redirect da index.php?
Il motore di ricerca sceglierà da solo una versione canonica, ma non necessariamente quella che vuoi tu. Parte della link equity andrà al duplicato ed entrambi gli URL potrebbero alternarsi nei risultati di ricerca. Non c'è una minaccia diretta di penalizzazioni, ma il posizionamento sarà inferiore a quello che potrebbe essere con una struttura pulita. John Mueller di Google ha più volte sottolineato che la canonicalizzazione tramite
rel="canonical"è un suggerimento al motore di ricerca, non una direttiva. Google può ignorare il canonical e scegliere una pagina diversa se la considera più pertinente. Un redirect 301 è una direttiva: garantisce il trasferimento del peso ed esclude il duplicato dall'indice.
Posso usare Redirect 301 /index.php / invece di mod_rewrite?
Tecnicamente sì, ma per i file index è pericoloso. Dopo il redirect a
/, Apache sostituisce di nuovoindex.phptramiteDirectoryIndex, la regolaRedirectscatta di nuovo, generando un loop infinito, e il browser lo interrompe con un erroreERR_TOO_MANY_REDIRECTS.RewriteCondcon il controllo%{THE_REQUEST}non ha questo problema: analizza la richiesta originale del browser, non quella riscritta dalle regole interne del server.
Devo impostare un redirect se il sito funziona solo su HTTPS?
Sì. HTTPS e duplicati degli index sono due problemi indipendenti. Anche con un redirect HTTP→HTTPS impostato e un
rel="canonical"corretto, una richiesta diretta ahttps://site.ru/index.phprestituirà un codice 200 senza redirect. Le regole del metodo 1 coprono entrambi i protocolli:RewriteRulespecifica esplicitamentehttps://nell'URL di destinazione.
Come verifico che il redirect non abbia rotto il sito?
Tre punti di controllo: 1) la homepage si apre alla root
/senza redirect (curl -Ideve restituire 200); 2) gli URL conindex.phpeindex.htmlrestituiscono 301 e portano a/; 3) l'amministrazione di WordPress (/wp-admin/) funziona senza loop. L'ultimo punto è critico: una regola scritta male in.htaccesspuò intercettare le richieste aindex.phpall'interno dell'admin e rompere il login. Il costrutto del metodo 1 è sicuro: verifica una corrispondenza esatta dell'URI e non tocca/wp-admin/index.php.
E per altri file index come index.aspx o index.py?
La meccanica è la stessa: copia il blocco
RewriteCond+RewriteRule, sostituisci l'estensione e aggiungilo a.htaccess. Per estensioni non standard, assicurati che il file esista fisicamente nella root e sia elencato inDirectoryIndex; altrimenti il server non sarà comunque in grado di servirlo come file index e non sarà necessario alcun redirect.
Gestire i duplicati dei file index: checklist finale
Impostare un redirect 301 da index.html e index.php alla root è un'attività da "cinque minuti di lavoro, anni di protezione". La regola vive in .htaccess o index.php in modo trasparente e non richiede manutenzione quando cambi design o passi a un hosting diverso.
Passi da fare dopo le modifiche:
- Verifica il redirect con
curl -Ioredirectchecker.com; la risposta deve essere 301. - Assicurati che la homepage si apra alla root con un codice 200.
- Cerca
href="/index.php"ehref="/index.html"nel codice sorgente della pagina; sostituisci ogni occorrenza conhref="/". - In Google Search Console, esegui un'ispezione della homepage; il bot deve vedere un 200 e l'URL canonico senza
/index.php.
Dopo questo, i duplicati spariranno gradualmente dal rapporto "Copertura" di Search Console e la link equity si concentrerà su un'unica pagina canonica. Il risultato non è immediato (il motore di ricerca ha bisogno di tempo per rieseguire la scansione), ma è inevitabile.



