Como Remover “wordpress” da URL do Seu Site (Guia Técnico Completo)
Quando o WordPress é instalado num subdiretório chamado /wordpress, cada URL pública carrega esse segmento de caminho — yourdomain.com/wordpress/about, yourdomain.com/wordpress/shop — o que prejudica a credibilidade da marca e dilui o valor de SEO. A solução é uma migração controlada de ficheiros combinada com atualizações de URL na base de dados: move todos os ficheiros principais do WordPress do subdiretório para a raiz do documento do servidor (public_html), atualiza as definições de Endereço do WordPress e Endereço do Site, regenera as regras de reescrita e emite redirecionamentos 301 para quaisquer URLs legados indexados. Não é necessária reinstalação.
Este guia abrange todas as camadas técnicas desse processo — operações do sistema de ficheiros, substituição de strings na base de dados, lógica de reescrita .htaccess, estratégia de redirecionamento e validação pós-migração — incluindo casos extremos que causam falhas silenciosas na maioria dos tutoriais.
Por Que o WordPress Acaba num Subdiretório
Compreender a causa raiz evita que o mesmo problema se repita. Os cenários mais comuns são:
- Predefinições do instalador: Muitos instaladores de um clique (Softaculous, Installatron) utilizam por predefinição um caminho de subdiretório se o utilizador não definir explicitamente o caminho de instalação para
/. - Promoção de staging para produção: Um programador instala o WordPress em
/wordpresspara testes e o site fica ativo sem uma correção do caminho. - Planeamento de multi-site que nunca se concretizou: Alguém antecipou a execução de vários CMSes num domínio e limitou o WordPress à sua própria pasta.
- Peculiaridades do instalador automático do cPanel: Em ambientes VPS com cPanel, o instalador por vezes acrescenta o nome da aplicação como subdiretório, a menos que seja substituído.
Independentemente da origem, o procedimento de migração é idêntico.
Lista de Verificação Pré-Migração
Antes de tocar num único ficheiro, complete todos os itens desta lista. Ignorar qualquer um deles é a principal causa de tempo de inatividade durante esta operação.
- Cópia de segurança completa do site: Arquive tanto o sistema de ficheiros como a base de dados MySQL. Plugins como UpdraftPlus ou Duplicator funcionam bem; o mesmo se aplica a um snapshot ao nível do servidor se o seu fornecedor de VPS Hosting o suportar.
- Credenciais da base de dados disponíveis: Vai precisar delas se for necessária uma edição manual do
wp-config.php. - Modo de manutenção ativo: Utilize um plugin ou adicione
define('WP_MAINTENANCE_MODE', true);temporariamente para evitar escritas durante a janela de migração. - Registo de erros PHP ativado: Defina
WP_DEBUG_LOGparatrueemwp-config.phppara que quaisquer erros pós-migração sejam escritos em/wp-content/debug.logem vez de aparecerem no ecrã. - TTL do DNS anotado: Se também estiver envolvida uma alteração de DNS, reduza o TTL para 300 segundos pelo menos uma hora antes de começar.
Passo 1: Mover os Ficheiros do WordPress para a Raiz do Documento
O objetivo é copiar tudo dentro de /public_html/wordpress/ diretamente para /public_html/ — não a pasta em si, mas o seu conteúdo.
Usando um Cliente FTP (FileZilla)
- Ligue-se ao seu servidor via SFTP (porta 22) em vez de FTP simples para evitar a interceção de credenciais.
- Navegue até
public_html/wordpress/. - Selecione todos os ficheiros e pastas incluindo ficheiros ocultos. No FileZilla, ative Ver > Mostrar Ficheiros Ocultos para expor
.htaccesse quaisquer ficheiros.env. - Arraste a seleção um nível de diretório acima para
public_html/. - Quando solicitado sobre a substituição de
index.php(se existir um marcador de posição na raiz), confirme a substituição.
Usando a Linha de Comandos (Recomendado para VPS)
Se tiver acesso SSH — o que deve ter em qualquer ambiente VPS Hosting ou Servidor Dedicado corretamente configurado — a abordagem por linha de comandos é mais rápida e evita problemas de timeout de FTP em instalações grandes:
# Navigate to the document root
cd /var/www/html/public_html
# Copy all contents (including hidden files) from the subdirectory to the root
cp -a wordpress/. .
# Verify the copy succeeded before deleting anything
ls -la | head -30Não elimine ainda o diretório /wordpress. Deixe-o intacto até que a migração seja totalmente validada. Pode removê-lo na etapa final de limpeza.
Caso Extremo Crítico: Symlinks e Caminhos Absolutos em Plugins
Alguns plugins (particularmente plugins de cópia de segurança e segurança) armazenam caminhos de ficheiros absolutos na base de dados — por exemplo, /var/www/html/public_html/wordpress/wp-content/uploads/2024/01/image.jpg. Estes irão falhar silenciosamente após a mudança. A pesquisa e substituição na base de dados no Passo 5 trata disto, mas deve incluir a tabela wp_options e quaisquer tabelas de plugins personalizados no âmbito da substituição.
Passo 2: Atualizar o Endereço do WordPress e o Endereço do Site
O WordPress armazena dois valores de URL críticos na tabela wp_options: siteurl (o Endereço do WordPress, apontando para onde os ficheiros principais do WordPress residem) e home (o Endereço do Site, o URL que os visitantes usam para aceder ao site). Ambos devem ser atualizados.
Método A: Painel de Controlo do WordPress
- Inicie sessão em
yourdomain.com/wordpress/wp-admin— isto ainda funciona porque os ficheiros ainda estão em ambos os locais neste momento. - Vá a Definições > Geral.
- Atualize ambos os campos:
- Endereço do WordPress (URL):
https://yourdomain.com - Endereço do Site (URL):
https://yourdomain.com
- Clique em Guardar Alterações.
Método B: Edição Direta da Base de Dados (Quando o Painel de Controlo Está Inacessível)
Se o painel de controlo já estiver inacessível, use WP-CLI ou phpMyAdmin:
# Using WP-CLI from the document root
wp option update siteurl 'https://yourdomain.com'
wp option update home 'https://yourdomain.com'Ou no phpMyAdmin, execute:
UPDATE wp_options SET option_value = 'https://yourdomain.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://yourdomain.com' WHERE option_name = 'home';Substitua wp_ pelo seu prefixo de tabela real se foi alterado durante a instalação.
Método C: Substituição Temporária no wp-config.php
Se tanto o painel de controlo como a base de dados estiverem temporariamente inacessíveis, adicione estas duas linhas ao wp-config.php como uma substituição de arranque:
define('WP_HOME', 'https://yourdomain.com');
define('WP_SITEURL', 'https://yourdomain.com');Isto substitui o que estiver armazenado na base de dados. Remova estas linhas após confirmar que o painel de controlo está acessível e que os valores da base de dados foram atualizados permanentemente.
Passo 3: Verificar e Atualizar o Ficheiro .htaccess
O ficheiro .htaccess na raiz do documento controla a reescrita de URL do Apache para o WordPress. Após mover os ficheiros, este ficheiro já deve estar em public_html/ — mas a sua diretiva RewriteBase deve refletir a nova instalação ao nível da raiz.
Abra public_html/.htaccess e certifique-se de que contém exatamente o seguinte bloco de reescrita do WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressA alteração principal em relação a uma instalação em subdiretório é RewriteBase / em vez de RewriteBase /wordpress/. Se esta linha estiver errada, todos os permalinks formatados retornam erros 404 enquanto a página inicial carrega corretamente — uma assinatura de diagnóstico clássica de um RewriteBase mal configurado.
Utilizadores de Nginx: O WordPress não usa .htaccess. Atualize a diretiva try_files do seu bloco de servidor:
location / {
try_files $uri $uri/ /index.php?$args;
}Passo 4: Limpar a Estrutura de Permalinks
O WordPress armazena em cache as regras de reescrita na base de dados. Após alterar o URL do site, essas regras em cache referenciam a estrutura de caminho antiga e devem ser regeneradas.
- Vá a Definições > Permalinks no painel de controlo do WordPress.
- Sem modificar a estrutura de permalink selecionada, clique em Guardar Alterações.
Isto força o WordPress a reconstruir e armazenar em cache as regras de reescrita em relação ao novo caminho ao nível da raiz. Em alternativa, use WP-CLI:
wp rewrite flush --hardO sinalizador --hard regenera o ficheiro .htaccess além de limpar o cache da base de dados — útil se não tiver a certeza se o .htaccess está correto.
Passo 5: Substituição de URL em Toda a Base de Dados
Mover ficheiros e atualizar siteurl/home não é suficiente. O WordPress armazena strings de URL serializadas em toda a base de dados — no conteúdo de publicações, postmeta, definições de widgets, opções de temas e tabelas de configuração de plugins. Quaisquer referências de caminho /wordpress restantes produzirão imagens quebradas, tags canónicas incorretas e funcionalidades de plugins com mau funcionamento.
Usando o Plugin Better Search Replace
- Instale e ative o plugin Better Search Replace.
- Vá a Ferramentas > Better Search Replace.
- Configure a substituição:
- Pesquisar por:
https://yourdomain.com/wordpress - Substituir por:
https://yourdomain.com
- Selecione todas as tabelas da base de dados.
- Desmarque Executar como simulação? apenas após confirmar que a simulação mostra o número esperado de substituições.
- Clique em Executar Pesquisa/Substituição.
Execute também uma segunda passagem para o caminho absoluto do servidor:
- Pesquisar por:
/public_html/wordpress - Substituir por:
/public_html
Usando WP-CLI (Preferido para Produção)
O comando search-replace do WP-CLI trata corretamente os dados serializados, o que a função SQL REPLACE() simples não faz:
wp search-replace 'https://yourdomain.com/wordpress' 'https://yourdomain.com' --all-tables --precise --report-changed-onlyExecute uma segunda passagem para caminhos absolutos do sistema de ficheiros:
wp search-replace '/public_html/wordpress' '/public_html' --all-tables --precise --report-changed-onlyO sinalizador --precise usa a substituição com reconhecimento de serialização do PHP em vez de regex, o que evita a corrupção de arrays serializados armazenados na base de dados.
Passo 6: Implementar Redirecionamentos 301 para Continuidade de SEO
Se o site esteve publicamente acessível em URLs /wordpress — e especialmente se esses URLs foram indexados pelo Google ou referenciados a partir de fontes externas — os redirecionamentos permanentes são obrigatórios, não opcionais. Sem eles, cada URL indexado torna-se um 404, e todo o valor de link acumulado é perdido.
Adicione a seguinte regra de redirecionamento ao public_html/.htaccess, acima do bloco de reescrita do WordPress:
# Redirect legacy /wordpress/ URLs to root
RewriteEngine On
RewriteRule ^wordpress/(.*)$ /$1 [R=301,L]Esta regra captura qualquer pedido que comece com wordpress/ e redireciona-o para o caminho equivalente ao nível da raiz. Por exemplo:
yourdomain.com/wordpress/about/→yourdomain.com/about/yourdomain.com/wordpress/wp-admin/→yourdomain.com/wp-admin/
Nota importante sobre posicionamento: Este bloco de redirecionamento deve aparecer antes do comentário # BEGIN WordPress. As próprias regras de reescrita do WordPress irão intercetar o pedido primeiro se o redirecionamento for colocado depois delas.
Para Nginx, adicione isto ao bloco de servidor:
rewrite ^/wordpress/(.*)$ /$1 permanent;Passo 7: Validação Pós-Migração
Os testes sistemáticos evitam que falhas silenciosas passem despercebidas em produção.
Verificações Funcionais
| Verificação | Resultado Esperado | Ferramenta |
|---|---|---|
| Página inicial carrega | 200 OK em https://yourdomain.com | Browser / curl |
/wp-admin acessível | Página de início de sessão renderiza corretamente | Browser |
| URL de publicação individual | 200 OK, sem /wordpress no URL | Browser |
| Renderização de imagens | Todas as imagens carregam, sem ícones quebrados | Browser DevTools |
| Redirecionamento de URL antigo | yourdomain.com/wordpress/ retorna 301 | curl / Verificador de Redirecionamentos |
| Tags canónicas | Apontam para URLs ao nível da raiz | Ver Código Fonte da Página |
| Sitemap XML | Todos os URLs usam caminhos ao nível da raiz | yourdomain.com/sitemap.xml |
Validação por Linha de Comandos
# Verify the homepage returns 200
curl -I https://yourdomain.com
# Verify the legacy URL issues a 301
curl -I https://yourdomain.com/wordpress/
# Check that wp-admin is reachable
curl -I https://yourdomain.com/wp-admin/Google Search Console
Submeta o sitemap atualizado no Google Search Console imediatamente após a validação. Use a ferramenta de Inspeção de URL para solicitar a reindexação da página inicial. Monitorize o relatório de Cobertura nas 48–72 horas seguintes para qualquer aumento de erros 404, o que indicaria substituições de URL em falta.
Passo 8: Limpeza e Proteção Final
Assim que o site estiver a funcionar de forma estável no URL raiz durante 24–48 horas:
- Elimine o subdiretório
/wordpressdo servidor. Deixá-lo no lugar cria um risco de conteúdo duplicado e expõe um ponto de entrada secundário para a instalação do WordPress.
rm -rf /var/www/html/public_html/wordpress- Remova a constante
WP_MAINTENANCE_MODEdowp-config.phpse a adicionou. - Remova as definições temporárias
WP_HOME/WP_SITEURLdowp-config.phpse usou o Método C no Passo 2. - Verifique a cobertura SSL: Se o seu Certificado SSL foi emitido para
yourdomain.com/wordpresscomo âmbito baseado em caminho (incomum mas possível em algumas configurações), confirme que o certificado cobre corretamente o domínio apex. - Atualize quaisquer configurações externas de DNS ou CDN que possam ter armazenado em cache a estrutura de caminho antiga.
- Limpe todas as camadas de cache: Limpe o cache de página do lado do servidor, o cache de objetos (Redis/Memcached) e o cache de CDN. As entradas de cache obsoletas para URLs
/wordpressirão servir conteúdo incorreto mesmo após a conclusão da migração.
Comparação: Métodos de Migração em Resumo
| Método | Melhor Para | Trata Dados Serializados | Nível de Risco | Velocidade |
|---|---|---|---|---|
| FTP + Painel de Controlo | Alojamento partilhado, sem SSH | Não (edição manual da BD necessária) | Médio | Lento |
| SSH + WP-CLI | VPS / Servidores Dedicados | Sim (sinalizador --precise) | Baixo | Rápido |
| SQL phpMyAdmin | Utilizadores intermédios, sem CLI | Não (correção manual de serialização) | Médio-Alto | Médio |
| Plugin Better Search Replace | Utilizadores não técnicos | Sim (o plugin trata disso) | Baixo | Médio |
| Duplicator / plugin de migração | Movimentações completas do site | Sim | Baixo | Médio |
Para qualquer ambiente com acesso SSH — incluindo Servidores Dedicados e instâncias VPS não geridas — a abordagem WP-CLI é a opção mais fiável e menos propensa a erros.
Matriz de Decisão Técnica
Use esta matriz para determinar quais os passos obrigatórios versus situacionais para o seu cenário específico:
| Cenário | Passos Necessários |
|---|---|
| Instalação nova, sem links externos, sem indexação pelo Google | Apenas Passos 1–5; ignorar redirecionamentos 301 |
| Site ativo indexado pelo Google há menos de 3 meses | Passos 1–6; submeter sitemap atualizado |
| Site estabelecido com perfil de backlinks significativo | Todos os passos 1–8; monitorizar GSC durante 4 semanas |
| Servidor Nginx em vez de Apache | Passos 1–2, 4–5, Passo 3 modificado (bloco de servidor), Passo 6 (reescrita Nginx) |
| Rede WordPress Multisite | Requer constantes de caminho wp-config.php adicionais; consulte a documentação do WordPress Multisite |
Conclusões Principais
- A operação principal é: copiar ficheiros para a raiz do documento, atualizar
siteurlehomena base de dados, corrigir.htaccessRewriteBase, executar pesquisa e substituição com reconhecimento de serialização, adicionar redirecionamentos 301. - Nunca use um SQL
REPLACE()simples em tabelas do WordPress sem tratamento de serialização — irá corromper valores de opções e quebrar plugins silenciosamente. - A diretiva
.htaccessRewriteBase /é o elemento mais frequentemente mal configurado nesta migração; um valor errado produz erros 404 em todos os URLs baseados em permalinks enquanto a página inicial continua a carregar. - Os redirecionamentos 301 não são cosméticos — transferem o valor de link e evitam a fragmentação do índice. São obrigatórios para qualquer site com visibilidade de pesquisa existente.
- Elimine o diretório
/wordpressoriginal apenas após uma janela de observação estável de 24 horas. - Se estiver a executar o WordPress num VPS com cPanel, use a opção Mostrar Ficheiros Ocultos do Gestor de Ficheiros para garantir que
.htaccessestá incluído na operação de cópia.
Perguntas Frequentes
A remoção de /wordpress do URL irá afetar as minhas classificações de SEO?
A curto prazo, espere pequenas flutuações de classificação enquanto o Googlebot re-rastreia os novos URLs. Se os redirecionamentos 301 forem corretamente implementados, o valor de link transfere-se totalmente e as classificações tipicamente estabilizam dentro de duas a quatro semanas. Ignorar os redirecionamentos 301 causa perda permanente de classificação para todas as páginas anteriormente indexadas.
E se o meu painel de controlo do WordPress estiver inacessível após mover os ficheiros?
A causa mais comum é uma incompatibilidade entre o valor siteurl na base de dados e a localização real dos ficheiros. Use WP-CLI (wp option update siteurl) ou adicione define('WP_SITEURL', 'https://yourdomain.com'); ao wp-config.php como uma substituição temporária para restaurar o acesso.
Preciso de atualizar wp-config.php após mover o WordPress para a raiz?
Na maioria dos casos, não. O ficheiro wp-config.php usa caminhos relativos para a ligação à base de dados e não codifica o caminho de instalação. A exceção é se ABSPATH foi definido manualmente como um caminho absoluto apontando para o antigo diretório /wordpress — nesse caso, atualize ou remova essa linha.
Por que as imagens ainda estão quebradas após executar o Better Search Replace?
Isto geralmente significa que o plugin foi executado num subconjunto de tabelas e perdeu tabelas de plugins personalizados ou a tabela wp_postmeta. Execute novamente a substituição com todas as tabelas selecionadas, e verifique também os caminhos absolutos do sistema de ficheiros (por exemplo, /public_html/wordpress/wp-content/uploads/) além das strings baseadas em URL.
Como trato disto numa instalação WordPress Multisite?
O Multisite requer constantes adicionais no wp-config.php (DOMAIN_CURRENT_SITE, PATH_CURRENT_SITE) e os URLs do site da rede devem ser atualizados tanto nas tabelas wp_site como wp_blogs. O procedimento padrão de site único é insuficiente — trate isto como uma migração completa da rede e teste primeiro num clone de staging.
