Saltar para o conteúdo
🛠 Como adicionar a extensão .html aos URLs do WordPress

🛠 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 .html em 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 .html sem 404s, um redirecionamento no .htaccess

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 .html no 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 */
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});

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 */
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);

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 .html do campo "Estrutura personalizada" em Definições → Permalinks e guarde.
  • Elimine o código do functions.php se o tiver adicionado.
  • Adicione um redirecionamento ao .htaccess (na raiz do site, antes do bloco # BEGIN WordPress):
1RewriteEngine On
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteRule ^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 .html em 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, .php parece 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.html por defeito. Ao importar para o WordPress através da ferramenta nativa, a estrutura quebra para /2024/06/post-title/. Adicionar .html nas 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.