
🚀 Como remover index.php e index.html do URL: redirecionamento 301 para a raiz do site
Abre o Google Search Console e vê a página inicial indexada duas vezes: como site.ru/ e como site.ru/index.php. Ou site.ru/index.html. Para um motor de busca, estes são dois URLs diferentes com conteúdo idêntico. O resultado: a autoridade da página é dividida a meio entre os duplicados, as classificações caem e o orçamento de rastreio é desperdiçado.
O problema é tão antigo como a web. A mecânica é simples: por predefinição, o servidor devolve index.html ou index.php ao pedir a raiz através da diretiva DirectoryIndex, mas não bloqueia o acesso direto a site.ru/index.php. Do ponto de vista do Apache, ambos os endereços são legítimos. Mas o motor de busca vê duas páginas diferentes com conteúdo idêntico e começa a adivinhar qual classificar.
Abaixo estão três formas de configurar um redirecionamento 301 de ficheiros de índice para a raiz: desde o universal .htaccess até à Cloudflare e ao Nginx. Mais um método de verificação que demora dois minutos.
💡 Visão geral rápida:
- Adicione regras
mod_rewriteao.htaccesspara intercetar pedidos aindex.htmleindex.php - Para WordPress e CMS, use um redirecionamento PHP no
index.phpde entrada (sobrevive a atualizações de permalinks) - Verifique o resultado via
curl -Iouredirectchecker.com(a resposta deve ser301 Moved Permanently) - Percorra os links internos do site e substitua
/index.phppor/em menus, logótipos e widgets
Porque é que os duplicados de ficheiros de índice prejudicam o seu site
Quando um visitante escreve site.ru na barra de endereços, o Apache substitui silenciosamente por index.html ou index.php de acordo com o DirectoryIndex. O navegador mostra a página, o endereço permanece limpo e o utilizador não se apercebe da substituição.
Mas se já existir algures um link para o caminho completo site.ru/index.php, o robô de pesquisa segue-o, vê o mesmo conteúdo que em site.ru/ e regista um duplicado. De onde vem esse link? Há muitas opções: um artigo antigo num site de terceiros, um parceiro que listou o URL errado, um plugin de partilha social que gerou uma partilha com index.php no final, ou até o programador que adicionou href="/index.html" na navegação durante a construção do layout.
O que obtemos na prática:
- Equidade de links dividida. Os backlinks são distribuídos entre
/e/index.phpem vez de se acumularem numa única página canónica. - Desperdício do orçamento de rastreio. O robô gasta tempo a rastrear duplicados em vez de secções úteis do site.
- Relevância diluída. O motor de busca não percebe qual das duas páginas mostrar nos resultados e pode alternar entre elas, as estatísticas de comportamento do utilizador ficam distorcidas e as classificações tornam-se instáveis.
A situação é totalmente controlável. Resolve-se configurando um redirecionamento 301 permanente de index.html e index.php para a raiz /. Vamos explorar os métodos disponíveis.
Método 1: Redirecionamento via.htaccess no Apache
O ficheiro .htaccess está localizado na raiz do site. Se não existir, crie um ficheiro de texto com um ponto no início do nome; qualquer cliente FTP ou gestor de ficheiros do alojamento consegue fazer isso.
Abra o .htaccess e encontre a linha RewriteEngine On. Se não estiver lá, adicione-a como a primeira linha após quaisquer comentários. Isto ativa o módulo mod_rewrite responsável por todos os redirecionamentos.
Abaixo de RewriteEngine On, adicione as regras. Aqui está um conjunto mínimo funcional:
1 RewriteEngine On 2 3 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 4 RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L] 5 6 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 7 RewriteRule ^index\.html$ https://%{HTTP_HOST}/ [R=301,L]
Como isto funciona linha a linha:
RewriteCond %{THE_REQUEST}verifica a string de pedido original enviada pelo navegador para o servidor. Esta contém explicitamente/index.phpou/index.html, que é exatamente o que estamos a intercetar.RewriteRuleredireciona o pedido para a raiz do domínio com um código301(redirecionamento permanente). A flagL(last) interrompe o processamento de regras subsequentes.%{HTTP_HOST}substitui automaticamente o domínio do site; não precisa de o escrever manualmente. O protocolo é explicitamente especificado comohttps://.
Nota crítica: não use a construção simplificada Redirect 301 /index.php /. A diretiva Redirect do mod_alias entra em loop em ficheiros de índice. Após redirecionar para /, o Apache substitui novamente por index.php via DirectoryIndex, a regra é acionada outra vez e o navegador lança um erro de loop infinito. A combinação RewriteCond + RewriteRule via mod_rewrite analisa especificamente o pedido original (%{THE_REQUEST}), não o reescrito por regras internas, pelo que não ocorre loop.
As alterações no .htaccess têm efeito imediato; o Apache relê o ficheiro a cada pedido e não é necessário reiniciar o servidor.
Método 2: Redirecionamento PHP para WordPress e CMS
Em sites que correm WordPress, Joomla, Drupal e outros CMS, editar o .htaccess é arriscado: o CMS reescreve-o ao atualizar permalinks, alterar a estrutura de URLs ou ativar plugins de SEO. As suas regras podem desaparecer na próxima gravação de definições.
Para o WordPress, há uma abordagem mais resiliente: um redirecionamento diretamente no ficheiro de entrada index.php. Este está localizado na raiz da instalação do CMS e é executado em cada pedido, antes de o núcleo carregar.
Abra o index.php do WordPress e adicione no início, logo após a tag de abertura <?php:
1 <?php 2 // 301 redirect from index.php to root 3 if ($_SERVER['REQUEST_URI'] === '/index.php') { 4 header('Location: /', true, 301); 5 exit(); 6 } 7 8 // Standard WordPress code follows 9 define('WP_USE_THEMES', true); 10 // ...
Para sites em PHP puro sem CMS, a lógica é a mesma: coloque o código no index.php de entrada na raiz do diretório público. Se o seu site usar ambos os ficheiros de índice (index.php e index.html), adicione uma verificação semelhante para index.html no início do mesmo script.
Porque é que este método é mais fiável do que editar o .htaccess para CMS:
- O código reside dentro de um ficheiro PHP que o CMS não toca ao atualizar as definições de permalinks.
- A verificação
$_SERVER['REQUEST_URI']interceta especificamente o URL pedido, não o reescrito pelas regras internas do WordPress. exit()garante que a execução para; nem uma única linha além dela será executada.
Em projetos de alto tráfego, o redirecionamento PHP é ligeiramente mais rápido do que a variante .htaccess: o mod_rewrite não é acionado para analisar expressões regulares, poupando milissegundos em cada pedido.
Método 3: Cloudflare, Nginx e outros servidores
Cloudflare. Se o seu site passa pela Cloudflare, pode configurar o redirecionamento ao nível da CDN sem tocar nos ficheiros do servidor. Vá a Rules → Redirect Rules e crie uma regra:
- Campo:
URI Path - Operador:
equals - Valor:
/index.php - URL de redirecionamento:
https://yourdomain.com/ - Código de estado:
301
Adicione uma regra semelhante para /index.html. A vantagem: o redirecionamento é acionado nos servidores de borda da Cloudflare e o pedido nunca chega ao seu alojamento. A desvantagem: o domínio tem de estar delegado aos NS da Cloudflare.
Nginx. Os sites em Nginx não usam .htaccess. As regras são adicionadas ao ficheiro de configuração do servidor, geralmente /etc/nginx/sites-available/yourdomain:
1 location = /index.php { 2 return 301 https://yourdomain.com/; 3 } 4 5 location = /index.html { 6 return 301 https://yourdomain.com/; 7 }
Após editar, verifique a sintaxe com nginx -t e aplique as alterações: systemctl reload nginx.
LiteSpeed / OpenLiteSpeed. O servidor suporta .htaccess com as mesmas regras mod_rewrite do Apache; o método 1 funciona sem alterações. Adicionalmente, pode usar o mecanismo de redirecionamento integrado no painel WebAdmin do LiteSpeed.
IIS (Windows Server). Para sites em IIS, o redirecionamento é configurado através do módulo URL Rewrite no web.config:
1 <rule name="Redirect index.php to root" stopProcessing="true"> 2 <match url="^index\.php$" /> 3 <action type="Redirect" url="/" redirectType="Permanent" /> 4 </rule>
Adicione uma regra semelhante para index.html.
Como verificar se o redirecionamento funciona
O método mais fiável é a linha de comandos. Execute:
1 curl -I https://yourdomain.com/index.php
A primeira linha da resposta deve ser HTTP/1.1 301 Moved Permanently, e o cabeçalho Location deve mostrar a raiz do site. Repita para index.html. A página inicial na raiz / deve responder com o código 200.
Ferramentas de verificação alternativas:
- Redirect Checker (redirectchecker.com) mostra a cadeia completa de redirecionamentos com códigos de resposta, conveniente para diagnósticos rápidos sem terminal.
- Google Search Console → Inspeção de URL (a ferramenta de inspecionar e testar): mostra como o Googlebot vê a página após o redirecionamento e se está disponível para indexação.
Após configurar o redirecionamento, é fundamental verificar os links internos do seu site. Certifique-se de que os menus, o logótipo (que normalmente aponta para a página inicial), breadcrumbs e blocos de artigos relacionados apontam para /, e não para /index.php. Um único link interno quebrado pode recriar o duplicado que acabou de remover. Faça uma pesquisa no código-fonte do site: abra qualquer página, prima Ctrl+U e procure por href="/index.php" ou href="/index.html". Substitua cada ocorrência por href="/".
Vídeo: uma breve explicação sobre redirecionamentos 301 da Google
Um vídeo de quatro minutos da Google Search Central, de visualização essencial se está a configurar redirecionamentos pela primeira vez. John Mueller explica como o motor de pesquisa processa redirecionamentos permanentes e se há um limite para o seu número:
⁉️🤔 Perguntas frequentes
O que acontece se eu não configurar um redirecionamento de index.php?
O motor de busca escolherá uma versão canónica por conta própria, mas não necessariamente a que precisa. Parte da equidade dos links irá para o duplicado, e ambos os URLs podem alternar nos resultados de pesquisa. Não há ameaça direta de penalizações, mas as classificações serão mais baixas do que poderiam ser com uma estrutura limpa. John Mueller, da Google, enfatizou repetidamente que a canonicalização via
rel="canonical"é uma sugestão para o motor de busca, não uma diretiva. A Google pode ignorar a canónica e escolher uma página diferente se a considerar mais relevante. Um redirecionamento 301 é uma diretiva: garante a transferência de peso e exclui o duplicado do índice.
Posso usar Redirect 301 /index.php / em vez do mod_rewrite?
Tecnicamente sim, mas para ficheiros de índice isto é perigoso. Após redirecionar para
/, o Apache substitui novamente porindex.phpviaDirectoryIndex, a regraRedirecté acionada outra vez, resultando num loop infinito, e o navegador interrompe-o com um erroERR_TOO_MANY_REDIRECTS. ORewriteCondcom a verificação%{THE_REQUEST}não tem este problema: analisa o pedido original do navegador, não o reescrito pelas regras internas do servidor.
Preciso de configurar um redirecionamento se o site só funcionar por HTTPS?
Sim. HTTPS e duplicados de índice são dois problemas independentes. Mesmo com um redirecionamento HTTP→HTTPS configurado e
rel="canonical"correto, um pedido direto ahttps://site.ru/index.phpdevolverá um código 200 sem redirecionamento. As regras do método 1 cobrem ambos os protocolos: oRewriteRuleespecifica explicitamentehttps://no URL de destino.
Como verifico se o redirecionamento não partiu o site?
Três pontos de controlo: 1) a página inicial abre na raiz
/sem redirecionamentos (curl -Ideve devolver 200); 2) os URLs comindex.phpeindex.htmldevolvem 301 e levam a/; 3) o admin do WordPress (/wp-admin/) funciona sem loops. O último ponto é crítico: uma regra mal escrita no.htaccesspode intercetar pedidos aindex.phpdentro do admin e quebrar o login. A construção do método 1 é segura: verifica uma correspondência exata do URI e não toca em/wp-admin/index.php.
E quanto a outros ficheiros de índice como index.aspx ou index.py?
A mecânica é a mesma: copie o bloco
RewriteCond+RewriteRule, substitua a extensão e adicione-o ao.htaccess. Para extensões não padrão, certifique-se de que o ficheiro existe fisicamente na raiz e está listado noDirectoryIndex; caso contrário, o servidor não conseguirá servi-lo como ficheiro de índice de qualquer forma, e não será necessário redirecionamento.
Lidar com duplicados de ficheiros de índice: checklist final
Configurar um redirecionamento 301 de index.html e index.php para a raiz é uma tarefa de "cinco minutos de trabalho, anos de proteção". A regra reside no .htaccess ou no index.php de forma transparente e não requer manutenção quando muda de design ou migra para um alojamento diferente.
Passos a seguir após fazer as alterações:
- Verifique o redirecionamento via
curl -Iouredirectchecker.com; a resposta deve ser 301. - Certifique-se de que a página inicial abre na raiz com um código 200.
- Procure por
href="/index.php"ehref="/index.html"no código-fonte da página; substitua cada ocorrência porhref="/". - No Google Search Console, execute uma inspeção da página inicial; o robô deve ver um 200 e o URL canónico sem
/index.php.
Após isto, os duplicados desaparecerão gradualmente do relatório "Cobertura" no Search Console, e a equidade dos backlinks concentrar-se-á numa única página canónica. O resultado não é instantâneo (o motor de busca precisa de tempo para rastrear novamente), mas é inevitável.



