Reindirizzamento Meta Refresh
Cos'è un reindirizzamento meta refresh, perché si colloca tra i reindirizzamenti lato server e quelli JavaScript nell'ordine di preferenza di Google, i refresh istantanei rispetto a quelli ritardati, e perché è sconsigliato.
Lingue
Un reindirizzamento meta refresh è un tag HTML <meta http-equiv="refresh"> (o l'equivalente header HTTP Refresh) — non un codice di stato HTTP. Il server restituisce un normale 200 e il browser agisce sul reindirizzamento solo quando la pagina è considerata caricata, secondo lo standard HTML, ed è esattamente per questo che è più debole di un reindirizzamento lato server. Uno istantaneo (content="0") viene letto da Google come permanente, simile a un 301; uno ritardato (content maggiore di 0) come temporaneo, e il ritardo è la caratteristica associata al vecchio spam di doorway page. John Mueller dice che 'dovrebbe semplicemente funzionare' ma non è raccomandato per due motivi: mantiene la pagina nella cronologia del browser 'afaik' (parole sue), e Google deve caricare e analizzare la pagina prima di poter vedere il reindirizzamento. Usalo solo come ultima risorsa quando non hai davvero accesso al server, preferisci la versione a 0 secondi, e sostituiscilo con un vero 301 appena puoi.
TL;DR — Un redirect meta refresh è una riga di HTML — un tag
Evidence for this claim Google supports instant and delayed meta refresh redirects but recommends server-side permanent redirects when possible. Scope: Google redirect processing and implementation preference. Confidence: high · Verified: Google Search Central: Redirects Evidence for this claim Timed redirects can create accessibility problems, particularly when users cannot control the time limit. Scope: WCAG timing guidance; not a search-ranking claim. Confidence: high · Verified: W3C WCAG: Timing Adjustable<meta http-equiv="refresh">— che dice al browser di saltare a un altro URL dopo il caricamento della pagina. Non è un codice di stato HTTP come un 301. Il tuo server restituisce prima una pagina normale, poi il browser esegue il redirect. Funziona, ma è più lento e goffo di un vero redirect lato server, quindi usalo solo quando non hai altre opzioni.
Cos’è un redirect meta refresh
La maggior parte dei redirect avviene sul server. Richiedi un URL e, prima di ricevere qualsiasi
pagina, il server risponde “quella si è spostata — vai qui invece” (questo è un 301 o un
302). Un meta refresh funziona in modo completamente diverso. Il server invia una
pagina normale e funzionante (un 200 OK), e all’interno dell’HTML di quella pagina c’è un’istruzione
che dice al browser di andare altrove:
<meta http-equiv="refresh" content="0;url=https://example.com/newlocation">Questo tag si trova nel <head> della pagina. Il numero prima del punto e virgola indica quanti
secondi attendere; la parte url= indica dove inviare il visitatore. Poiché è il
browser — non il server — ad agire su di esso, questo è chiamato redirect lato client.
Istantaneo vs. ritardato
Ci sono davvero due varianti, e la differenza è solo quel numero:
- Istantaneo —
content="0;url=...". Il browser salta appena la pagina finisce di caricarsi. Questa è la versione che vuoi se devi usare il meta refresh in ogni caso. Google lo tratta come un redirect permanente (simile a un 301). - Ritardato —
content="5;url=..."(qualsiasi numero maggiore di 0). Il browser mostra la pagina per alcuni secondi, poi salta. Google lo tratta come un redirect temporaneo, e il ritardo è la cosa che storicamente ha dato al meta refresh una cattiva reputazione da spam.
Perché si dice di evitarlo
Un meta refresh funziona — ma è più debole di un redirect del server perché il browser agisce sull’istruzione di redirect solo quando la pagina è considerata finita di caricarsi — la condizione di attivazione dello standard HTML — non prima. Un redirect lato server avviene istantaneamente, prima che qualsiasi pagina si carichi. Le linee guida di Google classificano i redirect lato server al primo posto, il meta refresh in mezzo e i redirect JavaScript per ultimi.
Quindi la regola semplice: usa un vero 301 se puoi. Ricorri al meta refresh
solo quando sei su un host dove davvero non puoi impostare un redirect del server
(alcune configurazioni di hosting statico) — e anche in quel caso, usa la versione istantanea (0) e
passa a un vero 301 appena puoi.
Vuoi il quadro completo — le parole esatte di Google, l’aspetto dell’accessibilità e come detectare questi sul tuo sito? Passa alla scheda Avanzate.
TL;DR — Un meta refresh è un tag HTML
Evidence for this claim Google supports instant and delayed meta refresh redirects but recommends server-side permanent redirects when possible. Scope: Google redirect processing and implementation preference. Confidence: high · Verified: Google Search Central: Redirects Evidence for this claim Timed redirects can create accessibility problems, particularly when users cannot control the time limit. Scope: WCAG timing guidance; not a search-ranking claim. Confidence: high · Verified: W3C WCAG: Timing Adjustable<meta http-equiv="refresh">(o l’headerRefreshiniettato dal server), non un codice di stato3xx— il server restituisce200e il browser naviga solo dopo che la pagina è completamente caricata. Istantaneo (content="0") viene letto come permanente da Google, come un 301/308; ritardato (> 0) viene letto come temporaneo. Si trova tra i redirect lato server e quelli JavaScript nell’ordine di affidabilità di Google a causa di quella dipendenza dal caricamento completo della pagina. Mueller: “should just work,” (traduzione) «dovrebbe semplicemente funzionare», ma non è raccomandato (storico del pulsante indietro + costo di parse-time). Usalo solo quando non hai davvero accesso al server, preferisci0, abbinalo arel=canonicale a un link di fallback visibile, e sostituiscilo con un vero 301 appena puoi.
Non è un codice di stato
Questa è l’unica cosa da capire bene. Un meta refresh non è una risposta HTTP 3xx.
Il server restituisce un normale 200 OK con un corpo di pagina completo; nel
<head> di quella pagina c’è una direttiva HTML che il browser esegue dopo il
caricamento della pagina:
<!-- Instant: treated by Google as permanent -->
<meta http-equiv="refresh" content="0;url=https://example.com/newlocation">Esiste un equivalente lato server — l’header HTTP Refresh — che fa la stessa cosa
ma viene iniettato dal codice del server invece di trovarsi nel markup:
HTTP/1.1 200 OK
Refresh: 0; url=https://www.example.com/newlocationNota che anche la versione header restituisce 200, non un 3xx. In ogni caso, questo è un
redirect lato client: è il browser a eseguire la navigazione, non il server.
Istantaneo vs. ritardato — la distinzione di Google
Google traccia la linea sul numero di secondi. Nella sua
documentazione su Redirect e Ricerca Google
dice che “differentiates between two kinds of meta refresh redirects” (traduzione) «distingue tra due tipi di redirect meta refresh»:
- Istantaneo (
content="0") — “Triggers as soon as the page is loaded… Google Search interprets instantmeta refreshredirects as permanent redirects.” (traduzione) «Si attiva non appena la pagina viene caricata… Google Search interpreta i redirect meta refresh istantanei come redirect permanenti.» Quindi per la canonicalizzazione è nella stessa categoria di un 301/308: Google lo segue e lo usa come segnale che il target dovrebbe essere canonico. - Ritardato (
contentmaggiore di 0) — “Triggers only after an arbitrary number of seconds… Google Search interprets delayedmeta refreshredirects as temporary redirects.” (traduzione) «Si attiva solo dopo un numero arbitrario di secondi… Google Search interpreta i redirect meta refresh ritardati come redirect temporanei.» Come un 302/303/307, il target potrebbe essere ancora indicizzato tramite altri segnali, ma il redirect stesso non viene considerato un segnale di spostamento permanente.
Il mio stesso ordine di redirect nella guida Ahrefs sugli 11 tipi di redirect riflette questo: per gli spostamenti permanenti li classifico come 308 / 301 → meta refresh 0 → JavaScript → crypto, e il meta refresh ritardato scende al livello temporaneo insieme a 302/303/307.
Dove si colloca nell’ordine di preferenza di Google
La documentazione sui redirect di Google pubblica letteralmente una tabella di preferenza, “ordinata in base alla probabilità che Google sia in grado di interpretare correttamente [il redirect].” Per i
redirect permanenti l’ordine è: HTTP 301 → HTTP 308 → meta refresh (0 seconds) →
JavaScript location → crypto. Il meta refresh è il gradino intermedio — sotto
il lato server, sopra JavaScript.
Google è esplicito su entrambi i confini. Sul confine superiore: “Se i redirect lato server
non sono implementabili sulla tua piattaforma, i redirect meta refresh
possono essere un’alternativa valida.” Sul confine inferiore: “Usa i redirect JavaScript
solo se non puoi fare redirect lato server o meta refresh.” Questa è
l’intera scala in due frasi — e corrisponde alla struttura già presente
nell’hub dei redirect, che nota che JS
e i meta refresh ritardati sono più deboli perché dipendono dal rendering.
Due “ordini” diversi — non confonderli
Ecco una sottigliezza che mette in difficoltà gli sviluppatori. MDN pubblica un
ordinamento diverso
per i redirect — ma riguarda l’ordine di esecuzione del browser quando più meccanismi di redirect
sono impilati su una pagina, non l’affidabilità SEO. L’ordine di MDN è: redirect HTTP
prima, poi JavaScript, e infine meta refresh — perché “il redirect <meta>
avviene dopo che la pagina è completamente caricata, cioè dopo che tutti gli script
sono stati eseguiti.”
Quindi JavaScript “batte” il meta refresh nell’ordine temporale di MDN, ma il meta refresh “batte” JavaScript nell’ordine di affidabilità di Google. Entrambi sono corretti — rispondono a domande diverse. MDN chiede “cosa si attiva per primo nel browser?” (il JS sincrono viene eseguito durante il caricamento, prima del timer post-caricamento del meta refresh). Google chiede “cosa sono più propenso a interpretare correttamente per la ricerca?” (un meta refresh viene letto direttamente dall’HTML analizzato; un redirect JS richiede che il passaggio di rendering separato di Google abbia successo). Tieni separati questi assi e l’apparente contraddizione scompare.
Perché dipende dal caricamento della pagina — e perché questo lo rende più debole
Un meta refresh non può scattare finché la pagina non è completamente caricata. Secondo il riferimento di MDN
<meta http-equiv>,
“the timer starts when the page is completely loaded, which is after
the load and pageshow events have both fired.” (traduzione) «Il timer parte quando la pagina è completamente caricata, cioè dopo che gli eventi load e pageshow sono entrambi stati attivati.» Questo vale anche per content="0" — “istantaneo” significa zero ritardo aggiuntivo dopo il caricamento, non zero tempo trascorso. Una pagina lenta ritarda anche un refresh di 0 secondi in un modo che un 3xx lato server non potrebbe mai fare, perché il server invia il redirect prima che qualsiasi pagina venga caricata.
Vale la pena essere precisi: un meta refresh non viene elaborato nella fase di rendering (esecuzione JS) di Google come un redirect window.location — viene letto direttamente dall’HTML <head> analizzato. La sua debolezza non è la pipeline di rendering; è la dipendenza dal caricamento completo della pagina (completamento della rete, risorse che bloccano il rendering) più, per le varianti ritardate, un’attesa arbitraria.
Cosa specifica effettivamente lo standard HTML
L’algoritmo di refresh dichiarativo dello standard HTML è più preciso di “aspetta che la pagina si carichi”, e alcuni dei suoi dettagli contano per l’audit e la risoluzione dei problemi:
- Tempo di scadenza. Il refresh diventa dovuto dopo il tempo di caricamento completo del documento e, per un elemento
<meta>specificamente, il suo tempo di inserimento — a seconda di quale sia successivo — aggiustato per le preferenze dell’utente. Questa è la versione a livello di specifica di “dopo che la pagina si carica”; esattamente quali eventi di rete/rendering contano come “caricati” in un dato browser è un dettaglio di implementazione, non qualcosa che lo standard elenca come una sequenza universale di fetch e paint. - URL relativi. La destinazione del refresh viene analizzata in relazione all’URL del documento stesso, quindi quando ne fai un audit, risolvi la destinazione assoluta piuttosto che fidarti della stringa letterale
url=— un percorso relativo può puntare da qualche parte diversa da come sembra a prima vista. - Il primo vince. Una volta che un documento è già marcato per un refresh dichiarativo, l’algoritmo ignora qualsiasi successiva istruzione di refresh su quella pagina. Due tag
<meta refresh>in conflitto (o un tag più un headerRefresh) non sono un piano di fallback — è un difetto di authoring, e solo il primo ha effetto. - Le destinazioni
javascript:vengono rifiutate. Se la destinazione analizzata usa lo schemajavascript:, l’algoritmo ritorna senza navigare. - Non è garantito che scatti. Lo standard consente esplicitamente che la navigazione venga cancellata, aggiustata dalle preferenze dell’utente o dell’user agent, bloccata dalla restrizione delle funzionalità automatiche di un documento sandboxed, esposta attraverso l’interfaccia del browser stesso, o semplicemente non eseguita. Non trattare “reindirizzerà” come un assoluto.
- Gestione della cronologia. Lo standard specifica la gestione della cronologia replace per la navigazione di refresh — il che significa che il testo della specifica fa sì che il browser sostituisca la voce di cronologia corrente piuttosto che aggiungerne una nuova. Vale la pena segnalarlo rispetto alla cornice “mantiene la vecchia pagina nella cronologia del browser” qui sotto: è ciò che un portavoce nominato di Google ha riportato sul comportamento reale nel 2018, e potrebbe ancora valere in pratica, ma non è ciò che il testo attuale della specifica descrive. Tratta “meta refresh always leaves the source page in history” (traduzione) «il meta refresh lascia sempre la pagina sorgente nella cronologia» come folklore non confermato piuttosto che comportamento consolidato — verificarlo richiederebbe test specifici per browser/versione, che è al di fuori di ciò che queste fonti stabiliscono.
John Mueller ha sintetizzato in modo conciso il caso del “perché non raccomandato” (riportato da Search Engine Roundtable, 2018): un meta refresh “should just work,” (traduzione) «dovrebbe semplicemente funzionare», ma Google non lo raccomanda per due motivi — UX (“it keeps the page in browser history, afaik” (traduzione) «mantiene la pagina nella cronologia del browser, per quanto ne so» — la sua stessa riserva) e tempo di elaborazione (Google deve analizzare la pagina per persino vedere il redirect). “Once processed, it’s just like a redirect.” (traduzione) «Una volta elaborato, è proprio come un redirect.» Questa è una spiegazione più utile del solito “è vecchio e spam,” perché nomina costi concreti e non spam — anche se la parte sulla cronologia è un’osservazione riportata piuttosto che una garanzia documentata dalle specifiche (vedi sopra).
Perché è sconsigliato — il bagaglio storico
A parte le ragioni di UX/tempo di analisi di Mueller, il meta refresh si porta dietro una reputazione. Nell’era dello spam web degli anni 2000 era un veicolo comune per le doorway page: una pagina si posiziona per una query, poi quasi istantaneamente reindirizza il visitatore tramite meta refresh a una destinazione diversa e meno rilevante — mostrando a motori di ricerca e utenti risultati effettivamente diversi. Questa è l’origine dell’etichetta “spammy”. Vale la pena essere precisi qui: nessuna pagina attuale delle policy anti-spam di Google nomina esplicitamente “meta refresh”; le policy definiscono “redirect ingannevoli” e abuso “doorway” come categorie generali di cui il meta refresh storicamente è stato un meccanismo. Tratta questo come contesto storico/di settore, non come una citazione esplicita di una policy attuale.
C’è anche una modalità di errore concreta e non spam che Mueller ha segnalato in una hangout del 2018 (via Search Engine Journal): un sito che reindirizzava tramite meta refresh le pagine di elenco a una pagina di pagamento condivisa. “So if you do this across your pages there’s a big chance we’ll follow this redirect and think ‘Oh, this payment page is actually what you want to have indexed and not the actual content.’” (traduzione) «Se fai questo sulle tue pagine, c’è una grande probabilità che seguiamo questo redirect e pensiamo: “Oh, questa pagina di pagamento è in realtà ciò che vuoi far indicizzare e non il contenuto reale”.» Reindirizzare in massa molte pagine sorgente a una destinazione generica può far indicizzare la destinazione invece del tuo contenuto.
Niente di tutto ciò rende un meta refresh isolato e legittimo un rischio di penalizzazione. La documentazione attuale di Google lo chiama “a viable alternative” (traduzione) «un’alternativa valida» quando i redirect lato server non sono possibili. Il rischio è il pattern e l’intento, non il meccanismo.
Evidence for this claim Google says meta refresh can be a viable alternative when server-side redirects are not possible, while permanent server-side redirects are recommended whenever possible for a URL move. Scope: meta refresh and HTTP Refresh interpretation Confidence: high · Verified: Redirects and Google SearchAccessibilità: la stessa divisione tra immediato e ritardato
L’inquadramento SEO ha un gemello quasi identico nelle linee guida sull’accessibilità — con una
precisazione che vale la pena dichiarare subito: le tecniche WAI del W3C
sono, secondo le loro stesse parole, esempi di modi per soddisfare i criteri di successo WCAG, non
regole di conformità obbligatorie. Soddisfare o mancare una tecnica specifica non è di per sé
un passaggio o un fallimento automatico; il requisito effettivo è il criterio di successo (qui,
2.2.1 Timing Adjustable). Detto questo, la preferenza del W3C coincide con le indicazioni SEO
sopra: raccomanda prima di tutto un redirect lato server, e dove un redirect lato client è
effettivamente necessario, le sue tecniche sufficienti (H76,
G110) richiedono nessun ritardo (content="0") e una pagina sorgente il cui contenuto sia
limitato a informazioni relative al redirect più un link visibile alla destinazione.
Questo è uno standard più restrittivo di “qualsiasi refresh a 0 secondi passa automaticamente” — è
“zero ritardo, contenuto solo di redirect e un link di fallback” come pattern sufficiente documentato.
Un meta refresh ritardato senza modo di mettere in pausa, estendere o
disabilitarlo rischia di fallire il criterio 2.2.1, perché può navigare via prima che un
utente di screen reader o qualcuno con bassa visione abbia finito di leggere — ma se un
refresh ritardato specifico fallisca effettivamente il criterio è una valutazione WCAG caso per caso,
non qualcosa che un numero di tecnica da solo risolve. La
nota sull’accessibilità di MDN
descrive lo stesso rischio di fondo: intervalli di refresh troppo brevi significano che le persone che usano
tecnologie assistive “may be unable to read through and understand the page’s content
before being automatically redirected.” (traduzione) «potrebbero non essere in grado di leggere e comprendere il contenuto della pagina
prima di essere reindirizzati automaticamente.»
Quindi sia un motore di ricerca che un organismo di standardizzazione arrivano alla stessa regola: istantaneo è
ok, ritardato è rischioso. È un bel rinforzo — e un motivo in più
per preferire content="0" se usi il meta refresh.
Quando è un’ultima risorsa legittima
Usa il meta refresh solo quando non puoi davvero fare un redirect lato server. Casi reali in cui succede:
- Host statici senza configurazione server — es. GitHub Pages, dove non puoi aggiungere
regole
.htaccess/nginx. - Generatori di siti statici la cui funzione “aliases” produce meta refresh, non 301.
Hugo è un esempio noto — il suo front-matter
aliases:genera piccoli file HTML con meta refresh, non veri redirect server. (Maggiori dettagli in Hugo SEO.) - Esportazioni no-code / website-builder e alcuni generatori di documentazione che ti permettono solo di emettere HTML statico.
Se devi usarlo, fallo bene:
- Preferisci l’istantaneo (
content="0") a qualsiasi ritardo — segnale permanente, e supera la soglia di accessibilità. - Abbinalo a
rel="canonical"che punta alla destinazione, così l’intento di canonicalizzazione è esplicito anche prima che Google elabori il refresh. - Includi un link di fallback visibile e cliccabile nel corpo per il raro browser o impostazione di tecnologia assistiva in cui l’auto-refresh è disabilitato.
- Non impilarlo in una catena di redirect — se l’URL della pagina con meta refresh in seguito riceve anche un redirect lato server sovrapposto, hai creato una catena (vedi catene di redirect).
- Sostituiscilo con un vero 301 appena hai accesso al server. Il meta refresh è un ponte, non una destinazione.
Rilevare il meta refresh sul tuo sito
I crawler lo segnalano, di solito come un flag di gravità da bassa a media piuttosto che un
errore critico — Screaming Frog, Sitebulb, Ahrefs Site Audit e Semrush lo
segnalano tutti. Per un pugno isolato di URL è un elemento “sistemalo quando comodo”, non
un’emergenza; l’uso a livello di sito su pagine importanti è dove diventa degno di
priorità. Per controllare un singolo URL a mano, visualizza il sorgente o fai curl alla pagina e
cerca http-equiv="refresh" nel <head> (ci sono snippet pronti nella
lente Scripts).
Fai attenzione alle affermazioni in entrambe le direzioni sull’equity dei link. La riga del centro assistenza di Ahrefs secondo cui il meta refresh “does not pass much or any link juice” (traduzione) «non trasmette molto link juice, o non ne trasmette affatto» è degna di essere messa in discussione — la tabella dei redirect di Google classifica un meta refresh istantaneo nello stesso bucket di interpretazione del redirect permanente di un 301, il che è un segnale su come Google legge e canonicalizza il redirect, non una promessa dichiarata su un identico PageRank, equity dei link o trasferimento di ranking. Né la documentazione sui redirect di Google né lo standard HTML fanno un’affermazione esplicita sulla parità di equity tra un meta refresh e un 301 — quindi tratta “passa lo stesso valore di un 301” e “passa poco o niente” come ugualmente non verificati oltre a ciò che è effettivamente documentato: Google lo classifica come permanente e lo elabora dopo aver caricato la pagina.
Una pagina sorgente con meta refresh ha comunque la propria risposta HTTP e il proprio documento HTML — l’audit di una non dovrebbe fermarsi alla lettura del tag di refresh. Controlla, in ordine: lo stato HTTP e le intestazioni di risposta dell’URL sorgente (incluso un possibile header Refresh); l’HTML grezzo rispetto a ciò che un browser effettivamente analizza; quale direttiva di refresh è la prima (e quindi efficace) e il suo target assoluto risolto; come la tabella dei redirect di Google la classificherebbe (istantaneo/permanente vs. ritardato/temporaneo); il tag canonical della pagina sorgente, le direttive robots e l’indicizzabilità; la risposta della destinazione finale; se il redirect è annullabile, controllabile o saltato dalle preferenze utente/browser; il comportamento di cache e cronologia nel browser e nella versione specifici che stai testando (non come affermazione universale); i link interni che puntano ancora alla sorgente; e, infine, il tuo piano per sostituirlo con un redirect lato server. Le lenti Checklists e Scripts in questa pagina suddividono questi passaggi in comandi e azioni concrete.
Riepilogo AI
Una sintesi della versione Advanced:
- Non è un codice di stato. Un meta refresh è un tag HTML
<meta http-equiv="refresh">(o l’header HTTPRefresh). Il server restituisce200; il browser naviga dopo che la pagina è completamente caricata. È un redirect lato client. - Immediato vs. ritardato.
content="0"= Google lo tratta come permanente (come un 301/308).content > 0= temporaneo (come un 302/303/307), e il ritardo è la caratteristica legata allo spam delle vecchie doorway page. - Nel mezzo dell’ordine di Google. Lato server → meta refresh → JavaScript → crypto. Google: “If server-side redirects aren’t possible… meta refresh… may be a viable alternative,” (traduzione) «Se i redirect lato server non sono possibili… il meta refresh… può essere un’alternativa valida», e “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (traduzione) «Usa i redirect JavaScript solo se non puoi fare redirect lato server o meta refresh.»
- Due “ordini” diversi. L’ordine di esecuzione di MDN mette JS prima del meta refresh (il meta refresh scatta dopo il caricamento, dopo gli script). L’ordine di affidabilità di Google mette il meta refresh sopra JS. Entrambi corretti — domande diverse.
- Perché più debole: l’algoritmo del due-time dell’HTML Standard lo tiene fino al caricamento della
pagina — vero anche per
0— e la navigazione può essere annullata o saltata da preferenze utente/browser; non è una garanzia al 100%. Mueller: “should just work” (traduzione) «dovrebbe semplicemente funzionare» ma non è raccomandato (cronologia browser “afaik” + costo a parse-time) — il punto sulla cronologia è la sua osservazione riportata, non qualcosa che il testo della specifica attuale stesso afferma (lo Standard specifica la gestione della cronologia replace). - Link equity: non verificato in entrambe le direzioni. La tabella di Google raggruppa il meta refresh immediato con i 301 per interpretazione, non una promessa documentata di PageRank/equity-parity — non sovra-affermare in nessuna direzione.
- Accessibilità rispecchia la SEO, con una avvertenza: il W3C preferisce anche i redirect lato server; le sue tecniche sufficienti (H76/G110) richiedono zero ritardo + contenuto solo-redirect + un link di fallback — ma queste sono tecniche di esempio, non regole di conformità obbligatorie. Un refresh ritardato senza controllo utente rischia di fallire 2.2.1 Timing Adjustable; se effettivamente lo fa è una valutazione caso per caso.
- Usa solo come ultima risorsa (GitHub Pages, Hugo
aliases, host statici/no-code). Preferisci0, aggiungirel=canonical+ un link di fallback visibile, evita catene, e sostituisci con un vero 301 appena possibile.
Documentazione ufficiale
Documentazione di fonte primaria sul meta refresh e dove si colloca.
- Redirects and Google Search — la tabella delle preferenze di redirect, la definizione immediato-vs-ritardato, e la cornice “viable alternative”.
- Spam policies for Google web search — definisce “sneaky redirects” e l’abuso “doorway” come categorie generali (nota: non nomina esplicitamente il meta refresh).
MDN
<meta http-equiv>— la meccanica lato client: il timer “starts when the page is completely loaded.” (traduzione) «inizia quando la pagina è completamente caricata.»RefreshHTTP header — l’equivalente iniettato dal server.- Redirections in HTTP — l’ordine di precedenza di esecuzione del browser (distinto dall’ordine SEO di Google).
W3C / WCAG
- H76: Using meta refresh to create an instant client-side redirect — preferito lato server; dove non possibile, il pattern a 0 secondi con contenuto solo-redirect come tecnica sufficiente (non una regola obbligatoria).
- G110: Using an instant client-side redirect — la versione generale (non specifica HTML) della stessa tecnica.
- F41: Failure due to using meta refresh with a time-out — come un refresh ritardato non controllato può fallire 2.2.1 Timing Adjustable; una pagina di tecnica/fallimento, non essa stessa il requisito di conformità.
Citazioni dalla fonte
Dichiarazioni ufficiali. Ogni link è un deep link che salta al passaggio citato.
Google — Documentazione su redirect e Ricerca Google
- “The following table explains the various ways you can use to set up permanent and temporary redirects, ordered by how likely Google is able to interpret correctly (for example, a server side redirect has the highest chance of being interpreted correctly by Google).” (traduzione) «La tabella seguente spiega i vari modi che puoi utilizzare per impostare redirect permanenti e temporanei, ordinati in base alla probabilità che Google sia in grado di interpretarli correttamente (ad esempio, un redirect lato server ha la massima probabilità di essere interpretato correttamente da Google).» Vai alla citazione
- “If server-side redirects aren’t possible to implement on your platform, meta refresh redirects may be a viable alternative.” (traduzione) «Se i redirect lato server non sono implementabili sulla tua piattaforma, i redirect meta refresh possono essere un’alternativa valida.» Vai alla citazione
- “Google differentiates between two kinds of meta refresh redirects: Instant meta refresh redirect: Triggers as soon as the page is loaded in a browser. Google Search interprets instant meta refresh redirects as permanent redirects. Delayed meta refresh redirect: Triggers only after an arbitrary number of seconds set by the site owner. Google Search interprets delayed meta refresh redirects as temporary redirects.” (traduzione) «Google distingue due tipi di redirect meta refresh: Redirect meta refresh istantaneo: si attiva non appena la pagina viene caricata in un browser. Google Search interpreta i redirect meta refresh istantanei come redirect permanenti. Redirect meta refresh ritardato: si attiva solo dopo un numero arbitrario di secondi impostato dal proprietario del sito. Google Search interpreta i redirect meta refresh ritardati come redirect temporanei.» Vai alla citazione
- “Place the meta refresh redirect either in the <head> element in the HTML or in the HTTP header with server-side code.” (traduzione) «Posiziona il redirect meta refresh nell’elemento <head> dell’HTML o nell’intestazione HTTP con codice lato server.» Vai alla citazione
- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (traduzione) «Usa i redirect JavaScript solo se non puoi fare redirect lato server o meta refresh.» Vai alla citazione
- “While Google attempts to render every URL Googlebot crawled, rendering may fail for various reasons. This means that if you set a JavaScript redirect, Google might never see it if rendering of the content failed.” (traduzione) «Sebbene Google tenti di eseguire il rendering di ogni URL che Googlebot ha scansionato, il rendering può fallire per vari motivi. Ciò significa che se imposti un redirect JavaScript, Google potrebbe non vederlo mai se il rendering del contenuto fallisce.» Vai alla citazione
John Mueller, Google (tweet rilanciati tramite Search Engine Roundtable, 2 marzo 2018)
- “A meta refresh type redirect should just work. We don’t recommend it for 2 reasons: UX (it keeps the page in browser history, afaik) & processing time (we need to parse the page to see it). Once processed, it’s just like a redirect.” (traduzione) «Un redirect di tipo meta refresh dovrebbe semplicemente funzionare. Non lo consigliamo per 2 motivi: UX (mantiene la pagina nella cronologia del browser, per quanto ne so) e tempo di elaborazione (dobbiamo analizzare la pagina per vederlo). Una volta elaborato, è proprio come un redirect.» Vai alla citazione
John Mueller, Google (hangout di Webmaster Central, luglio 2018, rilanciato tramite Search Engine Journal)
- “So if you do this across your pages there’s a big chance we’ll follow this redirect and think ‘Oh, this payment page is actually what you want to have indexed and not the actual content,’ and in that case we won’t have the content indexed.” (traduzione) «Se fai questo su tutte le tue pagine, c’è una grande probabilità che seguiamo questo redirect e pensiamo: “Oh, questa pagina di pagamento è in realtà ciò che vuoi indicizzare e non il contenuto effettivo”, e in quel caso non avremo il contenuto indicizzato.» Vai alla citazione
MDN
- “The timer starts when the page is completely loaded, which is after the load and pageshow events have both fired.” (traduzione) «Il timer parte quando la pagina è completamente caricata, cioè dopo che entrambi gli eventi load e pageshow sono stati attivati.» Leggi il documento
- “When possible, use HTTP redirects and don’t add <meta> element redirects.” (traduzione) «Quando possibile, usa i redirect HTTP e non aggiungere redirect con l’elemento <meta>.» Leggi il documento
Quale redirect dovrei usare?
Il meta refresh è un ripiego, non una prima scelta. Scendi dall’opzione più forte che puoi effettivamente implementare.
Choosing a redirect when meta refresh is on the table
Miti ed errori sul meta refresh
Idee sbagliate comuni e cosa è vero in realtà.
“Il meta refresh è un redirect HTTP / un codice di stato 3xx.”
No. È un tag HTML (o l’header HTTP Refresh) su cui il browser agisce dopo
una normale risposta 200 e un caricamento completo della pagina — non un codice di stato che il server invia
prima di qualsiasi contenuto.
“Un meta refresh a 0 secondi scatta istantaneamente, prima ancora che la pagina si carichi.”
No. Secondo MDN, il timer “starts when the page is completely loaded.” (traduzione) «il timer parte quando la pagina è completamente caricata». content="0"
significa zero ulteriore ritardo dopo il caricamento, non zero tempo trascorso. È esattamente il motivo per cui
Mueller cita “processing time (we need to parse the page to see it)” (traduzione) «tempo di elaborazione (dobbiamo analizzare la pagina per vederlo)» anche per la
variante istantanea.
“Il meta refresh è praticamente la stessa cosa di un redirect JavaScript.” Non proprio. Entrambi sono lato client, ma un meta refresh è dichiarato in HTML e letto direttamente dal documento analizzato, mentre un redirect JS richiede l’esecuzione di script. Google classifica il meta refresh sopra JS per affidabilità; l’ordine di esecuzione del browser di MDN classifica il JS sincrono prima del meta refresh. Entrambe le cose sono vere — rispondono a domande diverse.
“Il meta refresh non trasmette alcun link equity / PageRank.” Non supportato come affermato — ma lo è anche l’affermazione opposta. La tabella dei redirect di Google mette un meta refresh istantaneo nello stesso bucket di interpretazione di redirect permanente di un 301/308, che riguarda come Google classifica e canonicalizza il segnale. Né la documentazione di Google né lo standard HTML fanno una dichiarazione esplicita su PageRank, link equity o parità di ranking tra i due meccanismi — quindi non affermare equivalenza in entrambi i casi oltre la classificazione documentata.
“Il meta refresh è sempre spam e farà penalizzare il mio sito.” Falso come affermazione generale. Ha un’associazione storica con lo spam da doorway, ma un singolo uso legittimo — ad esempio su un host statico senza accesso al server — non è un segnale di spam. I documenti attuali di Google lo chiamano “a viable alternative.” (traduzione) «un’alternativa valida». Il rischio è il pattern e l’intento (cloaking, reindirizzamento di massa a contenuti non correlati), non il meccanismo.
“Un ritardo di qualche secondo è una cortesia UX piacevole, non un problema reale.” Misto. Qualsiasi ritardo maggiore di 0 lo declassa al trattamento temporaneo di Google, e le tecniche di accessibilità del W3C trattano un ritardo incontrollabile come il pattern da evitare — ma una tecnica mancata non è automaticamente una violazione WCAG da sola; dipende sempre dal fatto che il criterio di successo effettivo (2.2.1, Timing Adjustable) sia soddisfatto. “Qualche secondo per far leggere un messaggio all’utente” senza modo di mettere in pausa, estendere o saltare è esattamente il pattern che rischia di fallirlo.
“Il mio crawler ha segnalato ‘meta refresh tag’ — è un problema critico da risolvere subito.” Esagerato per casi isolati. Strumenti come Screaming Frog lo classificano come avviso a bassa gravità. Vale la pena sostituirlo con un vero 301 quando hai accesso al server, ma non è allo stesso livello di urgenza di redirect rotti, loop o segnali di indicizzazione mancanti — a meno che non sia a livello di sito o su pagine di alto valore.
Se devi usare un meta refresh — lista di controllo
Usa questo solo dopo aver confermato che un reindirizzamento lato server non è realmente disponibile:
- Confermato che non c’è un’opzione di reindirizzamento lato server (controllate
impostazioni di hosting, accesso
.htaccess/nginx, regole CDN, configurazione del framework). - Usata la forma istantanea —
content="0"— non una ritardata. - Il tag è nel
<head>, e il valoreurl=è la destinazione finale (non un altro redirect — evita di creare una catena). - Aggiunto un
rel="canonical"che punta all’URL di destinazione. - Incluso un link di fallback visibile e cliccabile nel corpo per chiunque abbia un’impostazione del browser/tecnologia assistiva che disabilita l’aggiornamento automatico.
- La destinazione restituisce un
200pulito (non è essa stessa un 404, redirect o errore). - Registrato un follow-up per sostituirlo con un vero 301 una volta che l’accesso al server è disponibile.
Audit dei meta refresh su un sito
- Eseguita una scansione (Screaming Frog / Sitebulb / Ahrefs Site Audit / Semrush) e esportati tutti gli URL segnalati come reindirizzamenti meta-refresh.
- Per ogni URL segnalato, controllato lo stato HTTP e le intestazioni di risposta
(incluso un possibile header
Refresh) — non solo l’HTML. - Identificata la prima direttiva di refresh (effettiva) se più di una è
presente, e risolto il suo target
url=in un URL assoluto. - Classificato come istantaneo vs. ritardato per prevedere il trattamento permanente/temporaneo di Google, e controllato separatamente il tag canonico della pagina sorgente, le direttive robots e l’indicizzabilità.
- Controllato se è isolato (bassa priorità) o a livello di sito / su pagine di alto valore (priorità).
- Cercato il pattern della pagina di pagamento — molte pagine sorgente che reindirizzano a una destinazione generica che potrebbe essere indicizzata invece del tuo contenuto.
- Segnalati eventuali refresh ritardati come problema sia SEO che di accessibilità.
Meta refresh — cheat sheet
Le due varianti
| Variante | Sintassi | Google lo tratta come | Accessibilità |
|---|---|---|---|
| Istantaneo | content="0;url=..." | Permanente (come 301/308) | Tecnica sufficiente (H76/G110) |
| Ritardato | content="5;url=..." (qualsiasi > 0) | Temporaneo (come 302/303/307) | Rischia di fallire 2.2.1 (pattern F41) |
Preferenza di reindirizzamento di Google (permanente), dal più forte al più debole
| Rango | Metodo | Note |
|---|---|---|
| 1 | 301 / 308 (lato server) | Migliore — si attiva prima che qualsiasi pagina venga caricata |
| 2 | Meta refresh 0 | Letto come permanente, ma goffo/lento (richiede caricamento completo) |
| 3 | JavaScript location | Richiede rendering; potrebbe non essere visto se il rendering fallisce |
| 4 | Redirect crittografico | Ultima risorsa; non tutti i bot lo supportano |
Due ordinamenti, non confonderli
| Domanda | Ordine |
|---|---|
| Google — affidabilità SEO | lato server → meta refresh → JavaScript → crittografico |
| MDN — tempi di esecuzione del browser | HTTP → JavaScript → meta refresh |
Fatti rapidi
- Non è un codice di stato — il server restituisce
200, il browser naviga dopo il caricamento completo. - L’header HTTP
Refresh:è l’equivalente iniettato dal server (sempre200). - “Istantaneo” = zero ritardo dopo il caricamento, non zero tempo trascorso.
- I due motivi “non raccomandati” di Mueller: cronologia del browser (il suo “afaik” riportato)
- costo di parse-time. Lo Standard stesso specifica la gestione della cronologia replace.
- Parità di link equity/PageRank con un 301: non documentato in entrambi i casi — non affermarlo.
- I crawler lo segnalano con gravità da bassa a media, non critica.
- Usalo solo senza accesso al server (GitHub Pages, Hugo
aliases, statico/no-code).
Rilevare e leggere i tag meta refresh
Controlla un URL dalla riga di comando
# Fetch the page and look for the meta refresh tag in the HTML
curl -s https://example.com/old-page/ | grep -i 'http-equiv=["'"'"']*refresh'
# Also check for the server-side Refresh header (case-insensitive)
curl -sI https://example.com/old-page/ | grep -i '^refresh:'Una pagina con meta-refresh restituisce 200 (non un 3xx), quindi un semplice curl -I che controlla solo i codici di stato non lo rileverà: devi ispezionare il corpo e l’header Refresh specificamente.
Estrai la destinazione con un’espressione regolare
L’attributo content combina il ritardo e l’URL come N;url=.... Questo estrae entrambi:
curl -s https://example.com/old-page/ \
| grep -io 'content=["'"'"']*[0-9]\+; *url=[^"'"'"'>]*'
# → content="0;url=https://example.com/newlocation"Se il numero iniziale è 0, è istantaneo (permanente per Google); qualsiasi valore maggiore di 0 è ritardato (temporaneo).
XPath (per un DOM renderizzato o un parser XML/HTML)
//meta[translate(@http-equiv,'REFSH','refsh')='refresh']/@contentLa funzione translate() normalizza l’attributo in minuscolo in modo che corrisponda a Refresh, REFRESH o refresh.
Console di Chrome DevTools — ispeziona la pagina corrente
// Is there a meta refresh on this page, and where does it point?
const m = document.querySelector('meta[http-equiv="refresh" i]');
console.log(m ? m.getAttribute('content') : 'no meta refresh');Bookmarklet — segnala il meta refresh su qualsiasi pagina che stai visualizzando
javascript:(()=>{const m=document.querySelector('meta[http-equiv="refresh" i]');alert(m?('Meta refresh: '+m.getAttribute('content')):'No meta refresh tag on this page');})();Salvalo come segnalibro; cliccandolo su qualsiasi pagina ti dice se è presente un meta refresh e il suo valore content — utile per un controllo rapido di un URL prima che il refresh ti porti via.
Due ordini, due domande diverse
Il meta refresh appare in due ordini di reindirizzamento che sembrano contraddittori finché non si nomina l’asse che viene misurato.
| Ordine | Domanda | Sequenza | Cosa significa |
|---|---|---|---|
| Esecuzione del browser | Quale meccanismo scatta per primo quando ne esistono diversi? | Reindirizzamento HTTP → JavaScript → meta refresh | Il meta refresh attende il caricamento della pagina; JavaScript sincrono può essere eseguito prima |
| Affidabilità di Google | Quale meccanismo è più probabile che Google interpreti correttamente? | 301/308 lato server → meta refresh istantaneo → JavaScript | L’HTML analizzato è più affidabile di un reindirizzamento che richiede un rendering JavaScript riuscito |
Usa il framework in tre passaggi:
- Identifica la domanda. Il debug di ciò che ha fatto il browser è un problema di ordine di esecuzione. La scelta di un meccanismo di migrazione SEO è un problema di ordine di affidabilità.
- Non convertire i tempi in approvazione. Il fatto che JavaScript venga eseguito prima del meta refresh non lo rende il metodo di reindirizzamento preferito da Google.
- Scegli il livello più forte disponibile. Un vero reindirizzamento permanente lato server rimane l’impostazione predefinita. Se l’accesso al server non è realmente disponibile, usa un meta refresh istantaneo (
0secondi) con un canonical e un link di fallback visibile, quindi sostituiscilo quando il controllo del server diventa disponibile.
La stessa separazione spiega perché un meta refresh “istantaneo” non è istantaneo a livello di rete: aggiunge zero ritardo solo dopo il caricamento del documento, mentre un reindirizzamento del server arriva prima del corpo del documento.
Mettiti alla prova: reindirizzamenti con meta refresh
Cinque domande rapide su come funziona il meta refresh e dove si colloca. Scegli una risposta per ciascuna, poi controlla.
Risorse che meritano il tuo tempo
I miei articoli correlati
- 11 Types Of Redirects & Their SEO Impact (Ahrefs, con Joshua Hardwick) — la mia scala completa dei reindirizzamenti, incluso dove si colloca il meta refresh 0 tra lato server e JavaScript.
- JavaScript SEO Issues & Best Practices (Ahrefs) — il lato rendering, e perché i reindirizzamenti JS si collocano sotto il meta refresh in termini di affidabilità.
- What is ‘meta refresh redirect’ and why is it considered a critical issue? (Ahrefs Help Center) — la prospettiva di Site Audit per il pubblico che riceve i flag di crawl (nota: la sua affermazione “doesn’t pass link juice” non è supportata dalla documentazione di Google in entrambe le direzioni — vedi la lente Advanced per capire perché evitare l’affermazione in entrambe le direzioni).
I miei interventi
- How Search Works (SlideShare) — la mia spiegazione di crawling, rendering, indicizzazione e ranking, la pipeline che un reindirizzamento lato client deve superare. (Disclaimer permanente: “This is my understanding of systems… not going to be 100% complete or accurate.” (traduzione) «Questa è la mia comprensione dei sistemi… non sarà completa o accurata al 100%.»)
Dal settore
- Redirect e Ricerca Google (Google Search Central) — la fonte primaria per la distinzione tra istantaneo e ritardato e per l’ordine di preferenza.
- Google Says Meta Refresh Redirects Work Fine But Not Recommended (Search Engine Roundtable) — Barry Schwartz riporta il tweet di Mueller “should just work” (traduzione) «dovrebbe semplicemente funzionare» e le sue due ragioni contrarie.
- Google Warns Using Meta Refresh May Lead to Wrong Content Getting Indexed (Search Engine Journal) — la modalità di errore “payment page gets indexed instead of your content” (traduzione) «la pagina di pagamento viene indicizzata al posto dei tuoi contenuti».
- Redirections in HTTP (MDN) — l’ordine di esecuzione delle precedenze nel browser (distinto dall’ordine SEO di Google).
- Redirects using a Meta refresh (Sitebulb) — il flusso di lavoro dello strumento di audit per trovarli e classificarli.
- Internal Redirection (Meta Refresh) (Screaming Frog) — come il crawler lo segnala e con quale gravità.
- Redirect a GitHub Pages site with this HTTP hack (Opensource.com) — un esempio reale di meta-refresh “no server access” su un host statico.
Cronologia modifiche
Aggiornato il 20 ago 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 18 lug 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.