Vai al contenuto
🛠 Come aggiungere l'estensione .html agli URL di WordPress

🛠 Come aggiungere l'estensione .html agli URL di WordPress

Aggiungere .html agli URL di WordPress senza plugin: tre metodi più la rimozione sicura con redirect.

Hai spostato il tuo sito da Joomla o HTML statico a WordPress e i motori di ricerca hanno già indicizzato centinaia di pagine che finiscono con .html? Non vuoi perdere posizionamento, ma le impostazioni standard dei permalink non offrono quel formato.

In pratica, .html in un URL non è una questione estetica. È un'assicurazione contro gli errori 404 durante una migrazione, quando la vecchia struttura site.ru/page.html diventa site.ru/page/. Ogni link non funzionante nell'indice significa traffico perso. Per fortuna, WordPress permette di aggiungere l'estensione .html in modo nativo, senza trucchi o plugin.

Di seguito, tre metodi: tramite pannello di amministrazione (il più semplice), tramite codice in functions.php e per i custom post type. In più, la rimozione sicura di .html con un redirect se non hai più bisogno del formato.

💡 Panoramica rapida:

  • Aggiungi .html da Impostazioni → Permalink, 30 secondi, nessun codice
  • Se il metodo nativo non funziona, modifica functions.php (3 righe)
  • Per i custom post type, il filtro post_type_link
  • Rimuovi .html senza 404, un redirect in .htaccess

Ai tempi dei siti statici, ogni pagina era un file fisico .html sul server. Il browser richiedeva site.ru/about.html e riceveva un documento già pronto. WordPress funziona in modo diverso: tutti gli URL sono virtuali, gestiti da index.php tramite mod_rewrite.

Ma l'abitudine ai finali "da file" è dura a morire. Scenari tipici in cui .html è realmente necessario:

  • Restyling o migrazione da un sito statico. I vecchi URL sono già nell'indice di Google e Yandex. Cambiarli senza un redirect garantisce un calo di posizionamento per 2-4 mesi.
  • Migrazione da Joomla, Drupal, ModX. Molti CMS della vecchia scuola generavano .html alla fine dell'indirizzo come impostazione predefinita.
  • Richiesta del cliente. Il cliente "lo vuole come prima", punto e basta. Discutere richiede più tempo che farlo.

WordPress gestisce tutti e tre i casi senza un solo plugin.

Metodo uno: tramite il pannello di amministrazione

La strada più veloce. Vai su Impostazioni → Permalink e seleziona l'opzione "Struttura personalizzata".

Nel campo struttura, aggiungi .html alla fine del modello. Per esempio:

1/%category%/%postname%.html

Oppure, se non hai bisogno delle categorie:

1/%postname%.html

Clicca "Salva modifiche". Fatto. Tutti gli URL dei post, nuovi ed esistenti, avranno il finale .html. Questo metodo non influisce sulle pagine del sito (page); per quelle servirà il codice della prossima sezione.

Nota: se il sito ha già link indicizzati senza .html, WordPress NON reindirizza automaticamente dai vecchi URL a quelli nuovi. Avrai bisogno di un plugin di redirect dedicato o di regole in .htaccess.

Metodo due: tramite functions.php

A volte il pannello di amministrazione non basta: il tema o un altro plugin sovrascrive la struttura dei link. Allora si interviene sul codice.

Aggiungi questo al functions.php del tema child o tramite il plugin Code Snippets:

1/**
2 * Adds .html to the end of WordPress page URLs.
3 * After inserting the code, go to Settings → Permalinks
4 * and click "Save Changes" to flush the rewrite rules cache.
5 */
6add_action('init', function() {
7 global $wp_rewrite;
8 if (! strpos($wp_rewrite->get_page_permastruct(), '.html')) {
9 $wp_rewrite->page_structure .= '.html';
10 }
11});

Cosa succede qui: l'hook init viene eseguito a ogni caricamento di WordPress e aggiunge .html alla struttura URL delle pagine tramite la proprietà page_structure dell'oggetto globale $wp_rewrite. Il controllo strpos previene la doppia aggiunta se il codice viene inserito due volte.

Dopo aver aggiunto il codice, ricordati di andare su Impostazioni → Permalink e cliccare "Salva modifiche". Senza questo passaggio, WordPress non ricostruirà la cache delle regole di riscrittura e i nuovi URL non funzioneranno, otterrai un 404.

Se il metodo nativo e il codice non aiutano, puoi usare il plugin Permalink Manager Lite. Ha oltre 100.000 installazioni attive, una valutazione a 5 stelle e supporta regole di riscrittura per qualsiasi tipo di contenuto, incluse tassonomie e WooCommerce.

Come aggiungere.html ai custom post type (CPT)

Il tuo sito ha un portfolio, testimonianze, prodotti o un altro tipo di contenuto creato tramite register_post_type. La schermata standard "Permalink" non li riguarda. Si lavora tramite il filtro post_type_link:

1/**
2 * Adds .html extension to the URL of the custom post type "portfolio".
3 * Replace 'portfolio' with your CPT slug.
4 */
5function sdstudio_cpt_html_permalink($post_link, $post) {
6 if ($post->post_type === 'portfolio') {
7 return home_url('/portfolio/' . $post->post_name . '.html');
8 }
9 return $post_link;
10}
11add_filter('post_type_link', 'sdstudio_cpt_html_permalink', 10, 2);

Dopo aver inserito il codice, vai di nuovo su Impostazioni → Permalink → Salva modifiche. Il filtro post_type_link funziona al volo: WordPress costruisce l'URL, tu lo intercetti per il tipo di post desiderato e aggiungi .html.

Se il CPT è registrato con uno slug personalizzato ('rewrite' => array('slug' => 'works')), usa quello in home_url() invece del nome standard del tipo.

Come rimuovere.html senza rovinare l'indicizzazione

Hai deciso di tornare a URL puliti senza estensioni? Rimuovere semplicemente .html dalle impostazioni non basta. I vecchi link già presenti negli indici dei motori di ricerca diventeranno 404.

Passi da fare:

  • Rimuovi .html dal campo "Struttura personalizzata" in Impostazioni → Permalink e salva.
  • Elimina il codice da functions.php se lo avevi aggiunto.
  • Aggiungi un redirect a .htaccess (nella root del sito, prima del blocco # BEGIN WordPress):
1RewriteEngine On
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteRule ^portfolio/(.+)\.html$ /portfolio/$1 [R=301,L]

Per post e pagine normali, la regola è simile, basta sostituire /portfolio/ con il segmento necessario. R=301 comunica ai motori di ricerca che lo spostamento è permanente: il valore del link passa al nuovo URL.

Verifica il risultato: apri il vecchio indirizzo .html nel browser, dovrebbe reindirizzare alla versione senza estensione. Poi controlla Google Search Console dopo un paio di settimane e verifica che il numero di 404 indicizzati stia diminuendo.

Video: aggiungere.html in 2 minuti

Una breve dimostrazione di tutti e tre i metodi su un sito WordPress reale:

⁉️🤔 FAQ

Il metodo funziona con tassonomie, categorie e tag?

La schermata standard dei permalink non tocca le tassonomie. Categorie e tag avrebbero bisogno di regole di riscrittura proprie tramite add_rewrite_rule() o le funzionalità di Permalink Manager Pro. Ma in pratica, .html negli URL delle categorie è usato raramente: i motori di ricerca gestiscono /category/seo/ senza problemi anche senza estensione.

Cosa succede ai vecchi link senza.html dopo aver cambiato la struttura?

WordPress non crea un redirect automatico dai vecchi URL a quelli nuovi. Se il sito è già indicizzato, dopo il cambio di struttura i vecchi link inizieranno a restituire 404. Soluzione: un plugin di redirect (es. Redirection) con tracciamento automatico dei cambi di permalink. Ricorda il vecchio slug e applica un 301 in automatico.

Posso usare.php,.htm o un'altra estensione?

Tecnicamente sì, WordPress elabora qualsiasi stringa nel campo "Struttura personalizzata". Ma dal punto di vista dei motori di ricerca, .php sembra sospetto (di solito rivela la tecnologia del server), e .htm è un formato obsoleto dell'era Windows 3.1. L'estensione .html è neutrale, familiare e non solleva domande da parte di utenti o bot di ricerca.

Questo aiuterà quando si sposta un blog da Blogger a WordPress?

Sì, è uno scenario classico. Blogger serviva URL nel formato /2024/06/post-title.html come impostazione predefinita. Importando su WordPress tramite lo strumento nativo, la struttura si rompe in /2024/06/post-title/. Aggiungere .html nelle impostazioni dei permalink preserva la compatibilità, tutti i vecchi indirizzi continuano a funzionare senza redirect manuali.

Dovresti aggiungere.html: la conclusione

In breve: per un progetto WordPress nuovo di zecca, .html non serve. URL puliti come site.ru/post-name/ sono lo standard che utenti e motori di ricerca comprendono.

Ma ci sono due scenari in cui .html è pienamente giustificato: la migrazione da un sito statico o da un altro CMS, e la migrazione da Blogger. In entrambi i casi, preservi il posizionamento sui motori di ricerca e risparmi settimane di redirect manuali.

Il percorso più affidabile è l'impostazione nativa tramite il pannello di amministrazione. Se non funziona, functions.php. Per i CPT, il filtro post_type_link. Tutti e tre i metodi non richiedono plugin e non aggiungono carico al sito. E quando .html non serve più, .htaccess con un redirect 301 trasferisce in modo pulito il valore ai nuovi URL.