
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.htmlCache 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.