Guida pratica all'.htaccess: redirect, cache e SEO tecnica

15 dicembre 2025SEO
Guida pratica all'.htaccess: redirect, cache e SEO tecnica

Se il tuo sito gira su Apache, il file .htaccess è la chiave per affinare SEO tecnica, performance e sicurezza senza toccare la configurazione globale del server.

Indice dei contenuti

Cos'è l'.htaccess e perché conta per la SEO

Se il tuo sito gira su Apache, il file .htaccess è la chiave per affinare SEO tecnica, performance e sicurezza senza toccare la configurazione globale del server. Con poche direttive puoi gestire redirect 301, canonicalizzazione, URL rewriting con mod_rewrite, cache browser e compressione gzip, impattando in modo diretto su crawl budget, Core Web Vitals e stabilità del sito. È uno strumento potente ma sensibile: un carattere fuori posto può portare a un errore 500, quindi conviene procedere con metodo e test mirati.

Dove si trova e come modificarlo senza rischi

Trovi l'.htaccess nella root del sito (spesso public_html o htdocs) e, su WordPress, nella stessa cartella del file wp-config.php. Se non lo vedi nel file manager o via FTP, attiva la visualizzazione dei file nascosti e verifica i permessi corretti. Prima di ogni modifica scarica una copia di backup, usa un editor di testo semplice e testa subito l'apertura di homepage e pagine interne per intercettare errori. Se compaiono errori 500 o redirect loop, ripristina il file precedente e reintroduci le modifiche a piccoli passi.

Redirect 301/302 e canonicalizzazione del dominio

I redirect 301 consolidano il valore SEO quando cambi URL, mentre i 302 sono temporanei e indicano transizioni brevi. Nella pratica quotidiana conviene impostare una sola versione canonica del dominio (con o senza www) e forzare https per eliminare duplicati tra protocolli e host. Se lavori a una migrazione, mappa URL vecchi e nuovi e preferisci redirect diretti (senza catene 301→301) per ridurre latenza e perdita di segnali.

# Abilita mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>

# Redirect 301 pagina → pagina
Redirect 301 /vecchia-pagina/ https://www.tuosito.it/nuova-pagina/

# Forza HTTPS su tutto il sito
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.tuosito.it/$1 [L,R=301]
</IfModule>

# Forza www
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.tuosito\.it [NC]
RewriteRule ^(.*)$ https://www.tuosito.it/$1 [L,R=301]
</IfModule>

Gestione degli errori: pagina 404 utile ed errori 500 da evitare

Una pagina 404 personalizzata aiuta l'utente a rientrare nel percorso giusto e riduce pogo sticking e rimbalzi. In ottica SEO conviene offrire ricerca interna, link alle categorie principali e magari i contenuti più letti, così da recuperare sessioni altrimenti perse. Gli errori 500, invece, sono sintomo di regole malformate o moduli mancanti: controlla i log del server e prova le modifiche in staging quando possibile.

# Pagine di errore personalizzate
ErrorDocument 404 /pagina-404.html
ErrorDocument 403 /errore-403.html
ErrorDocument 500 /errore-500.html

Cache browser: Expires e Cache-Control per asset statici

Impostare header di cache per immagini, CSS e JavaScript riduce richieste ripetute e migliora LCP e TTFB percepito. Se versioni gli asset (query string o filename hashing), puoi spingere su max-age elevati; in caso contrario scegli durate più caute per evitare problemi di aggiornamento. Una combinazione di Expires e Cache-Control è semplice da mantenere e ben supportata.

# Expires headers
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>

# Cache-Control
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|png|jpg|jpeg|gif|webp)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
</IfModule>

Hai bisogno di una consulenza SEO urgente?

Compressione gzip (e Brotli) per ridurre il peso delle risorse

La compressione gzip è un quick win che abbatte il peso di HTML, CSS e JS, migliorando tempi di download e punteggi PageSpeed Insights.

# Compressione gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json
</IfModule>

La compressione gzip è un quick win che abbatte il peso di HTML, CSS e JS, migliorando tempi di download e punteggi PageSpeed Insights. Se il tuo hosting supporta Brotli a livello di server, otterrai spesso ratio migliori, ma da .htaccess la strada più semplice resta mod_deflate. Dopo l'attivazione testa con uno strumento di verifica della compressione per confermare che gli header siano corretti.

URL rewriting con mod_rewrite: URL SEO friendly

Gli URL parlanti aiutano la scansione e migliorano il CTR mostrando percorsi chiari e parole chiave rilevanti. Con mod_rewrite puoi trasformare query string in path leggibili, mantenendo il backend invariato. Ricorda che su WordPress i pretty permalink sono gestiti dal core: limita le personalizzazioni per evitare conflitti con plugin e rewrite rule esistenti.

Sicurezza di base: directory listing e file sensibili

Disattivare il directory listing impedisce che vengano elencati file e cartelle quando manca un index, una misura semplice ma efficace. Per i file critici su Apache 2.4, usa la direttiva moderna Require all denied, così eviti vecchie sintassi deprecate e chiudi varchi banali. Integra queste regole con una WAF o limitazioni a livello di hosting quando gestisci pannelli di amministrazione.

Best practice e test senza sorprese

Procedi in modo incrementale: aggiungi una regola alla volta, testa la pagina interessata e controlla gli header di risposta con curl -I o gli strumenti di rete del browser. Per i redirect verifica i codici di stato e l'assenza di catene usando servizi come httpstatus.io; per cache e compressione guarda gli header Cache-Control, Expires e Content-Encoding. In caso di refactoring massivi o migrazioni SEO, lavora in staging, prepara una redirect map e pianifica un monitoraggio post go-live con Search Console e log analysis.

Esempio di .htaccess "tipo" per produzione

Questo esempio combina HTTPS forzato, canonicalizzazione, cache browser, compressione e una 404 personalizzata. Adattalo al tuo dominio e verifica la presenza dei moduli necessari (mod_rewrite, mod_expires, mod_headers, mod_deflate).

# Attiva mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>

# Canonical: forza HTTPS e www
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.tuosito\.it$ [NC]
RewriteRule ^(.*)$ https://www.tuosito.it/$1 [L,R=301]
</IfModule>

# Sicurezza base
Options -Indexes

# Errori personalizzati
ErrorDocument 404 /404.html

# Cache browser
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/html "access plus 1 hour"
</IfModule>

<IfModule mod_headers.c>
<FilesMatch "\.(js|css|png|jpg|jpeg|gif|webp|svg|ico)$">
Header set Cache-Control "public, max-age=31536000, immutable"
</FilesMatch>
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "public, max-age=3600, must-revalidate"
</FilesMatch>
</IfModule>

# Compressione gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>

Se stai ottimizzando siti con molto traffico o molte risorse statiche, abbina queste regole a versioning degli asset e a un CDN per benefici ulteriori su HTTP/2.