Guida tecnica

.htaccess: Spostare una Directory con un Redirect 301

Quando sposti una pagina o un'intera cartella del tuo sito, il redirect 301 è ciò che ti evita di perdere posizionamento e visite. Ecco come si fa in .htaccess, con esempi pronti.

Se cambi l'indirizzo di una pagina senza dirlo a Google e ai browser, perdi tutto: posizionamento, backlink e i visitatori finiscono su un 404. Il redirect 301 risolve il problema alla radice: dice "questo contenuto si è spostato qui, in modo permanente", e trasferisce alla nuova URL quasi tutta l'autorità della vecchia. Sul filone storico di questo dominio — WordPress e sviluppo web — è una delle prime cose da saper fare bene.

301 o 302: qual è la differenza

Un 301 è uno spostamento permanente: i motori di ricerca aggiornano l'indice sulla nuova URL e le trasferiscono il valore SEO accumulato. Un 302 è temporaneo: dice a Google di tenere in indice la vecchia URL perché tornerà. Se stai spostando un contenuto per davvero, usa sempre il 301. Usare un 302 per uno spostamento definitivo è l'errore che fa perdere posizioni.

Redirect di una singola pagina

Il modo più semplice, con il modulo mod_alias (attivo di default su quasi tutti gli hosting):

# Da una vecchia pagina alla nuova (stesso sito) Redirect 301 /vecchia-pagina.html /nuova-pagina

La prima parte è il percorso (relativo alla radice del sito), la seconda è la destinazione (percorso o URL completa). Per una destinazione su un altro dominio:

Redirect 301 /vecchia-pagina.html https://www.altro-sito.it/nuova-pagina

Spostare un'intera directory

Qui sta il cuore della domanda. Se sposti /vecchia-dir/ in /nuova-dir/ e vuoi preservare la struttura interna (tutte le sotto-pagine), non elencare le URL una per una: usa una regola con "backreference".

Metodo 1 — con RedirectMatch (mod_alias)

RedirectMatch 301 ^/vecchia-dir/(.*)$ /nuova-dir/$1

Il pezzo (.*) cattura tutto ciò che segue e lo $1 lo rimette dopo la nuova directory. Così /vecchia-dir/articolo/foto.jpg finisce su /nuova-dir/articolo/foto.jpg.

Metodo 2 — con mod_rewrite

Se usi già mod_rewrite (come fa WordPress), tienilo coerente:

RewriteEngine On RewriteRule ^vecchia-dir/(.*)$ /nuova-dir/$1 [R=301,L]

Nota: con RewriteRule il percorso non inizia con lo slash iniziale (in un file .htaccess). [R=301,L] significa "redirect permanente" e "ultima regola" (stop qui).

Tutta la directory verso una sola pagina

Se invece la vecchia cartella non esiste più e vuoi mandare tutto a una singola pagina (o alla home):

# Tutto /vecchia-dir/... verso la home RedirectMatch 301 ^/vecchia-dir/.*$ /
Dove va messo? Il codice va nel file .htaccess nella radice del sito. In WordPress, mettilo fuori dal blocco # BEGIN WordPress ... # END WordPress (quel blocco viene riscritto automaticamente), preferibilmente sopra di esso.

Gli errori da evitare

Dimenticare RewriteEngine On: senza, le regole mod_rewrite vengono ignorate.
Loop di redirect: se la destinazione ricade nella stessa regola, il browser va in "troppi reindirizzamenti". Escludi la destinazione o usa una condizione.
Ordine delle regole: le regole più specifiche vanno prima di quelle generiche; [L] ferma l'elaborazione.
Mischiare 301 e 302: per uno spostamento definitivo è sempre 301.
La barra finale: /dir e /dir/ possono comportarsi diversamente — sii coerente.

Come testare il redirect

Non fidarti del browser: il 301 viene messo in cache in modo aggressivo, quindi potresti vedere vecchi comportamenti. Testa da terminale, dove la cache non mente:

curl -I https://www.tuosito.it/vecchia-dir/pagina # Cerca nella risposta: # HTTP/1.1 301 Moved Permanently # Location: https://www.tuosito.it/nuova-dir/pagina

In alternativa, apri gli strumenti per sviluppatori del browser (scheda Rete) in una finestra in incognito, così eviti la cache. Verifica che il codice sia 301 e che la Location punti alla pagina giusta.

Stai costruendo o migrando un sito?

Se stai mettendo mano al tuo sito per guadagnare online, parti dalle basi giuste: hosting e WordPress.

Creare un blog per guadagnare Confronto hosting WordPress

Domande frequenti

Il redirect 301 fa perdere posizionamento SEO?

No, è il contrario: il 301 è il modo corretto per preservare il posizionamento quando sposti un contenuto. Trasferisce alla nuova URL la quasi totalità dell'autorità della vecchia. Perdere posizioni succede quando non si mette alcun redirect (404) o si usa un 302 per uno spostamento permanente.

Meglio Redirect, RedirectMatch o RewriteRule?

Redirect per una singola pagina, RedirectMatch per una directory intera con pattern, RewriteRule se usi già mod_rewrite (come WordPress) e vuoi tenere tutto in un unico sistema. I risultati sono equivalenti; conta la coerenza.

Perché vedo ancora la vecchia pagina dopo aver messo il 301?

Quasi sempre è la cache: i browser memorizzano i 301 a lungo. Prova in finestra anonima o testa con curl -I. Verifica anche di aver messo la regola fuori dal blocco WordPress e che RewriteEngine On sia presente.

Il 301 funziona anche verso un altro dominio?

Sì. Basta indicare l'URL completa di destinazione (con https://). È il metodo standard anche per migrare un intero sito da un dominio all'altro, regola per regola o con un pattern che preserva i percorsi.