
🛠 Como adicionar a extensão .html aos URLs do WordPress
Adicionar .html aos URLs do WordPress sem plugins: três métodos, mais remoção segura com redirecionamentos.
Migrou o seu site de Joomla ou HTML estático para WordPress e os motores de busca já indexaram centenas de páginas terminadas em .html? Não quer perder posições, mas as definições padrão de permalinks não oferecem esse formato.
Na prática, o .html num URL não é uma questão estética. É uma garantia contra erros 404 durante uma migração, quando a estrutura antiga site.ru/page.html muda para site.ru/page/. Cada link partido no índice significa tráfego perdido. Felizmente, o WordPress permite adicionar a extensão .html de forma nativa, sem hacks nem plugins.
A seguir, três métodos: através do painel de administração (o mais fácil), via código no functions.php e para tipos de conteúdo personalizados. Além disso, a remoção segura do .html com um redirecionamento se deixar de precisar do formato.
💡 Resumo rápido:
- Adicione
.htmlem Definições → Permalinks, 30 segundos, sem código - Se o método nativo não funcionar, edite o
functions.php(3 linhas) - Para tipos de conteúdo personalizados, o filtro
post_type_link - Remova o
.htmlsem 404s, um redirecionamento no.htaccess
Porque é que os links do WordPress precisam da extensão.html
No tempo dos sites estáticos, cada página era um ficheiro .html físico no servidor. O navegador pedia site.ru/about.html e recebia um documento pronto. O WordPress funciona de forma diferente: todos os URLs são virtuais, servidos pelo index.php via mod_rewrite.
Mas o hábito das terminações de "ficheiro" ainda persiste. Cenários típicos onde o .html é realmente necessário:
- Redesign ou migração de um site estático. Os URLs antigos já estão no índice do Google e do Yandex. Alterá-los sem um redirecionamento garante uma queda nas posições durante 2 a 4 meses.
- Migração de Joomla, Drupal, ModX. Muitos CMS da velha guarda geravam
.htmlno final do endereço por defeito. - Exigência do cliente. O cliente «quer como estava», ponto final. Discutir demora mais do que simplesmente fazer.
O WordPress resolve os três casos sem um único plugin.
Método um: através do painel de administração
O caminho mais rápido. Vá a Definições → Permalinks e selecione a opção "Estrutura personalizada".
No campo da estrutura, adicione .html ao final do modelo. Por exemplo:
1 /%category%/%postname%.html
Ou, se não precisar de categorias:
1 /%postname%.html
Clique em "Guardar alterações". Pronto. Todos os URLs de artigos, novos e existentes, receberão a terminação .html. Este método não afeta as páginas do site (page); essas precisarão do código da secção seguinte.
Nota: se o site já tiver links indexados sem .html, o WordPress NÃO redireciona automaticamente dos URLs antigos para os novos. Precisará de um plugin de redirecionamento separado ou de regras no .htaccess.
Método dois: via functions.php
Por vezes, o painel de administração não resolve: o tema ou outro plugin sobrepõe-se à estrutura de links. Nesse caso, vamos ao código.
Adicione isto ao functions.php do seu tema filho ou através do 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 */ 6 add_action('init', function() { 7 global $wp_rewrite; 8 if (! strpos($wp_rewrite->get_page_permastruct(), '.html')) { 9 $wp_rewrite->page_structure .= '.html'; 10 } 11 });
O que acontece aqui: o hook init é executado em cada carregamento do WordPress e adiciona .html à estrutura de URL das páginas através da propriedade page_structure do objeto global $wp_rewrite. A verificação strpos impede a duplicação se o código for inserido duas vezes.
Depois de adicionar o código, não se esqueça de ir a Definições → Permalinks e clicar em "Guardar alterações". Sem este passo, o WordPress não reconstrói a cache das regras de reescrita e os novos URLs não funcionarão, receberá um 404.
Se o método nativo e o código não ajudarem, pode usar o plugin Permalink Manager Lite. Tem mais de 100.000 instalações ativas, uma classificação de 5 estrelas e suporta regras de reescrita para qualquer tipo de conteúdo, incluindo taxonomias e WooCommerce.
Como adicionar.html a tipos de conteúdo personalizados (CPT)
O seu site tem um portefólio, testemunhos, produtos ou outro tipo de conteúdo criado via register_post_type. O ecrã padrão de "Permalinks" não os afeta. Trabalhamos através do 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 */ 5 function 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 } 11 add_filter('post_type_link', 'sdstudio_cpt_html_permalink', 10, 2);
Depois de inserir o código, vá novamente a Definições → Permalinks → Guardar alterações. O filtro post_type_link funciona em tempo real: o WordPress constrói o URL, você interceta-o para o tipo de conteúdo desejado e anexa .html.
Se o CPT estiver registado com um slug personalizado ('rewrite' => array('slug' => 'works')), use-o em home_url() em vez do nome padrão do tipo.
Como remover.html sem quebrar a indexação
Decidiu voltar aos URLs limpos, sem extensões? Simplesmente remover o .html das definições não é suficiente. Os links antigos que já estão nos índices dos motores de busca tornar-se-ão 404s.
Passos a seguir:
- Remova o
.htmldo campo "Estrutura personalizada" em Definições → Permalinks e guarde. - Elimine o código do
functions.phpse o tiver adicionado. - Adicione um redirecionamento ao
.htaccess(na raiz do site, antes do bloco# BEGIN WordPress):
1 RewriteEngine On 2 RewriteCond %{REQUEST_FILENAME} !-f 3 RewriteRule ^portfolio/(.+)\.html$ /portfolio/$1 [R=301,L]
Para artigos e páginas normais, a regra é semelhante, basta substituir /portfolio/ pelo segmento necessário. R=301 indica aos motores de busca que a mudança é permanente: a autoridade do link é transferida para o novo URL.
Verifique o resultado: abra o endereço .html antigo num navegador, deve redirecionar para a versão sem a extensão. Depois, verifique o Google Search Console dentro de algumas semanas e confirme que o número de 404s indexados está a diminuir.
Vídeo: adicionar.html em 2 minutos
Uma demonstração curta dos três métodos num site WordPress ao vivo:
⁉️🤔 Perguntas frequentes
O método funciona com taxonomias, categorias e etiquetas?
O ecrã padrão de permalinks não afeta as taxonomias. Categorias e etiquetas precisariam das suas próprias regras de reescrita via
add_rewrite_rule()ou da funcionalidade do Permalink Manager Pro. Mas, na prática, o.htmlem URLs de categorias raramente é usado: os motores de busca lidam bem com/category/seo/sem extensão.
O que acontece aos links antigos sem.html depois de alterar a estrutura?
O WordPress não cria um redirecionamento automático dos URLs antigos para os novos. Se o site já estiver indexado, após alterar a estrutura, os links antigos começarão a devolver 404s. Solução: um plugin de redirecionamento (por exemplo, Redirection) com monitorização automática de alterações de permalinks. Ele memoriza o slug antigo e aplica um 301 automaticamente.
Posso usar.php,.htm ou outra extensão?
Tecnicamente, sim, o WordPress processa qualquer string no campo "Estrutura personalizada". Mas, do ponto de vista dos motores de busca,
.phpparece suspeito (normalmente revela a tecnologia do servidor) e.htmé um formato obsoleto da era do Windows 3.1. A extensão.htmlé neutra, familiar e não levanta questões aos utilizadores nem aos robôs de busca.
Isto ajuda ao migrar um blog do Blogger para o WordPress?
Sim, este é um cenário clássico. O Blogger servia URLs no formato
/2024/06/post-title.htmlpor defeito. Ao importar para o WordPress através da ferramenta nativa, a estrutura quebra para/2024/06/post-title/. Adicionar.htmlnas definições de permalinks preserva a compatibilidade, todos os endereços antigos continuam a funcionar sem redirecionamentos manuais.
Deve adicionar.html: a conclusão
Resumindo: para um projeto WordPress totalmente novo, o .html não é necessário. URLs limpos como site.ru/post-name/ são o padrão que tanto os utilizadores como os motores de busca compreendem.
Mas há dois cenários onde o .html é totalmente justificado: migrar de um site estático ou de outro CMS e migrar do Blogger. Em ambos os casos, preserva as suas posições de pesquisa e poupa semanas de redirecionamentos manuais.
O caminho mais fiável é a definição nativa através do painel de administração. Se não funcionar, functions.php. Para CPTs, o filtro post_type_link. Todos os três métodos não requerem plugins e não acrescentam carga ao site. E quando o .html já não for necessário, o .htaccess com um redirecionamento 301 transfere de forma limpa a autoridade para os novos URLs.


