Endereço WordPress vs Endereço do Site: Diferenças Técnicas, Configuração e Armadilhas Comuns
WordPress Address (URL) e Site Address (URL) são dois parâmetros de configuração distintos que controlam, respetivamente, onde os ficheiros principais do WordPress residem no servidor e qual o URL que o público utiliza para aceder ao front end do seu site. Na maioria das instalações padrão, ambos os valores são idênticos, mas podem — e por vezes devem — divergir quando aloja os ficheiros do WordPress numa subdiretoria enquanto serve o site a partir do domínio raiz.
Ter estes dois valores incorretos, mesmo que por um único carácter, pode bloquear o acesso ao painel de administração, desencadear avisos de conteúdo misto, quebrar endpoints da REST API e corromper cadeias de redirecionamento. As secções abaixo explicam a lógica arquitetural por detrás de cada definição, todos os cenários legítimos para as alterar e os métodos exatos para o fazer em segurança.
A Lógica Arquitetural por Detrás dos Dois Parâmetros de URL
O WordPress armazena a sua configuração de URL em dois locais simultaneamente: a tabela de base de dados wp_options (linhas siteurl e home) e, opcionalmente, o ficheiro wp-config.php através de constantes PHP. Compreender qual a fonte que tem precedência é essencial antes de alterar qualquer coisa.
Ordem de prioridade (da mais alta para a mais baixa):
- Constantes definidas em
wp-config.php(WP_SITEURL,WP_HOME) - Valores armazenados na tabela
wp_options - Valores introduzidos em Definições > Geral no painel de controlo
Quando uma constante é definida em wp-config.php, o campo correspondente em Definições > Geral torna-se apenas de leitura e aparece a cinzento. Isto é intencional — impede substituições acidentais através da interface enquanto ainda permite controlo programático.
WordPress Address (URL) — WP_SITEURL
O WordPress Address corresponde à opção siteurl em wp_options e à constante WP_SITEURL em wp-config.php. Indica ao WordPress onde os seus ficheiros PHP principais, o diretório wp-admin e o diretório wp-includes residem fisicamente. O WordPress utiliza este valor para construir todas as referências internas de caminhos de ficheiros, incluindo o URL de início de sessão do administrador, endpoints AJAX (/wp-admin/admin-ajax.php) e a base da REST API (/wp-json/).
Exemplo: se a sua instalação do WordPress se encontra em https://example.com/wordpress, então WP_SITEURL deve ser https://example.com/wordpress. Navegar para https://example.com/wordpress/wp-admin irá aceder ao painel de controlo.
Site Address (URL) — WP_HOME
O Site Address corresponde à opção home em wp_options e à constante WP_HOME em wp-config.php. Define o URL público canónico — o endereço que os utilizadores escrevem nos seus navegadores e a base a partir da qual o WordPress gera todas as estruturas de permalink do front end.
Exemplo: mesmo que os ficheiros principais se encontrem em https://example.com/wordpress, pode definir WP_HOME como https://example.com para que a página inicial, publicações e páginas sejam servidas a partir do domínio raiz. Isto requer um ficheiro index.php adicional e uma regra .htaccess na raiz (abordado abaixo).
Comparação: WordPress Address vs Site Address
| Atributo | WordPress Address (`WP_SITEURL`) | Site Address (`WP_HOME`) |
|---|---|---|
| — | — | — |
| Linha `wp_options` | `siteurl` | `home` |
| Constante `wp-config.php` | `WP_SITEURL` | `WP_HOME` |
| Controla | Localização dos ficheiros principais, `wp-admin`, `wp-includes` | URL canónico público |
| Afeta o URL de início de sessão do administrador | Sim | Não |
| Afeta os permalinks do front end | Não | Sim |
| Afeta a base da REST API | Sim | Não |
| Afeta o sitemap e as tags canónicas | Indiretamente | Diretamente |
| Pode diferir do outro | Sim | Sim |
| Requer alteração de `.htaccess` quando diferente | Não | Sim |
Quando Estes Dois Valores Devem Diferir
A razão legítima mais comum para separar WP_SITEURL e WP_HOME é o padrão de instalação em subdiretoria: pretende que os ficheiros do WordPress estejam isolados numa subdiretoria organizada (por exemplo, /wordpress ou /cms) enquanto o site público é resolvido no domínio raiz. Esta é uma escolha arquitetural deliberada, não uma solução alternativa.
Outros cenários que requerem a atualização de um ou ambos os valores:
- Migração de domínio — mover de
http://old-domain.comparahttps://new-domain.comrequer a atualização de ambos os valores em simultâneo. - Atualização de HTTP para HTTPS — adicionar um certificado SSL significa alterar o prefixo de protocolo em ambas as definições de
http://parahttps://. Atualizar apenas um produz erros de conteúdo misto. - Promoção de staging para produção — um ambiente de staging normalmente funciona num subdomínio ou num domínio diferente; ambos os valores devem ser reescritos durante a implementação.
- Proxy reverso ou descarregamento CDN — quando um balanceador de carga ou CDN termina o SSL e encaminha o tráfego para um servidor de backend, as definições de URL do WordPress devem refletir o domínio público, não o endereço interno do servidor.
- Reconfiguração de rede Multisite — no WordPress Multisite,
WP_SITEURLeWP_HOMEinteragem com as constantesDOMAIN_CURRENT_SITEePATH_CURRENT_SITE, tornando a configuração correta ainda mais crítica.
Método 1: Atualizar através do Painel de Controlo do WordPress
Este é o método adequado quando ainda tem acesso de administrador e a alteração é simples (por exemplo, HTTP para HTTPS no mesmo domínio).
- Inicie sessão em
https://yourdomain.com/wp-admin. - Navegue para Definições > Geral.
- Localize os campos WordPress Address (URL) e Site Address (URL).
- Atualize ambos os valores conforme necessário.
- Clique em Guardar Alterações.
O WordPress irá redirecioná-lo imediatamente para o URL de administração atualizado. Se alterou o domínio, o seu navegador seguirá o redirecionamento para o novo endereço. Se o novo domínio ainda não estiver a resolver para o servidor, perderá o acesso ao painel de controlo — planeie a propagação DNS em conformidade.
Método 2: Definir Constantes em wp-config.php
Este método é preferido em servidores de produção porque impede alterações acidentais através da interface, funciona mesmo quando a base de dados está temporariamente indisponível e é facilmente controlado por versões. Num ambiente de VPS Hosting com acesso SSH root, esta é a abordagem mais fiável.
Abra wp-config.php no seu editor preferido:
nano /var/www/html/wp-config.phpAdicione as duas linhas seguintes acima do comentário /* That's all, stop editing! */:
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com' );Para o padrão de instalação em subdiretoria onde os ficheiros principais estão em /wordpress mas o site é servido a partir da raiz:
define( 'WP_HOME', 'https://example.com' );
define( 'WP_SITEURL', 'https://example.com/wordpress' );Guarde e feche o ficheiro. Os campos do painel de controlo serão agora apenas de leitura, o que é o comportamento esperado.
Instalação em Subdiretoria: Os Passos Necessários para .htaccess e index.php
Quando WP_HOME e WP_SITEURL diferem, o WordPress sozinho não consegue encaminhar pedidos do domínio raiz para os ficheiros principais na subdiretoria. Deve colocar um index.php modificado e um ficheiro .htaccess na raiz do documento.
Passo 1: Copie index.php da subdiretoria do WordPress para a raiz:
cp /var/www/html/wordpress/index.php /var/www/html/index.phpPasso 2: Edite o /var/www/html/index.php copiado para apontar para a subdiretoria:
<?php
// WordPress view bootstrapper
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wordpress/wp-blog-header.php';Passo 3: Certifique-se de que o seu .htaccess raiz contém o bloco de reescrita padrão 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 WordPressNão copie o .htaccess da subdiretoria — conterá RewriteBase /wordpress/ que irá quebrar o encaminhamento do domínio raiz.
Método 3: Atualização Direta da Base de Dados via WP-CLI
Quando o painel de controlo está inacessível e prefere não tocar permanentemente em wp-config.php, o WP-CLI fornece uma solução limpa e programável. Isto é particularmente útil em Servidores Dedicados que executam pipelines de implementação automatizados.
wp option update siteurl 'https://example.com' --path=/var/www/html
wp option update home 'https://example.com' --path=/var/www/htmlPara verificar se a alteração foi aplicada:
wp option get siteurl --path=/var/www/html
wp option get home --path=/var/www/htmlO WP-CLI respeita as constantes wp-config.php — se WP_SITEURL ou WP_HOME já estiverem definidas aí, o comando wp option update não as irá substituir. Deve atualizar as constantes diretamente no ficheiro.
Método 4: Atualização Direta MySQL (Último Recurso)
Utilize este método apenas quando o acesso SSH está disponível mas o WP-CLI não está instalado e o painel de controlo está bloqueado. Identifique primeiro o prefixo da sua tabela (verifique $table_prefix em wp-config.php, normalmente wp_).
mysql -u db_user -p db_nameUPDATE wp_options SET option_value = 'https://example.com' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'https://example.com' WHERE option_name = 'home';Confirme a atualização:
SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');Saia do MySQL e limpe qualquer cache de objetos (Redis, Memcached ou OPcache) antes de testar o site.
Configuração SSL e Atualizações de URL
A atualização de HTTP para HTTPS é a razão mais comum para atualizar ambos os parâmetros de URL simultaneamente. Após instalar um certificado SSL — seja através do Let’s Encrypt via Certbot ou um certificado comercial de um fornecedor como os disponíveis através de Certificados SSL — deve atualizar tanto WP_HOME como WP_SITEURL para utilizar o prefixo https://.
Não atualizar ambos, ou atualizar apenas um, produz avisos de conteúdo misto: o navegador recebe uma página HTTPS que referencia recursos HTTP (scripts, folhas de estilo, imagens). Os navegadores modernos bloqueiam completamente o conteúdo ativo misto, o que quebra a funcionalidade JavaScript e o painel de administração.
Após atualizar as constantes de URL, execute uma pesquisa e substituição na base de dados para atualizar todos os URLs serializados armazenados no conteúdo de publicações, postmeta e opções:
wp search-replace 'http://example.com' 'https://example.com' --all-tables --path=/var/www/htmlO sinalizador --all-tables garante que os dados serializados em tabelas personalizadas (WooCommerce, construtores de páginas) também são atualizados. Faça sempre uma cópia de segurança da base de dados antes de executar este comando.
Configurar URLs do WordPress com cPanel
Se gere o WordPress num VPS com cPanel, pode utilizar o Gestor de Ficheiros do cPanel para editar wp-config.php sem necessitar de acesso SSH:
- Inicie sessão no cPanel e abra o Gestor de Ficheiros.
- Navegue para a raiz do documento do seu WordPress (normalmente
public_htmlou uma subdiretoria). - Clique com o botão direito em
wp-config.phpe selecione Editar. - Adicione as constantes
WP_HOMEeWP_SITEURLconforme mostrado no Método 2. - Guarde o ficheiro.
Em alternativa, utilize a ferramenta phpMyAdmin no cPanel para executar as instruções SQL UPDATE do Método 4 diretamente na sua base de dados WordPress.
Armadilhas Críticas e Casos Especiais
Incompatibilidade de protocolo entre as duas definições. Definir WP_SITEURL como https://example.com e WP_HOME como http://example.com (ou vice-versa) cria um ciclo de redirecionamento. O navegador segue o redirecionamento HTTPS do servidor, mas o WordPress gera links de front end HTTP, que o servidor redireciona de volta para HTTPS. Este ciclo é invisível no painel de controlo, mas devastador para crawlers e utilizadores.
Inconsistência de barra final. O WordPress é sensível às barras finais nestas constantes. https://example.com e https://example.com/ são tratados como valores diferentes. Omita sempre a barra final em ambas as constantes para corresponder às expectativas internas do WordPress.
Envenenamento do cache de objetos após alteração de URL. Se o seu servidor executa um cache de objetos persistente (Redis ou Memcached), os valores antigos de URL podem estar em cache na memória mesmo após a atualização da base de dados. Limpe o cache de objetos imediatamente após qualquer alteração de URL:
wp cache flush --path=/var/www/htmlDados serializados na base de dados. O WordPress armazena muitos valores de opções e metadados de publicações como strings serializadas PHP. Uma substituição de string ingénua (por exemplo, utilizando sed num dump da base de dados) irá corromper os dados serializados ao invalidar os prefixos de contagem de bytes. Utilize sempre o comando search-replace do WP-CLI, que trata a serialização corretamente.
Considerações sobre redes Multisite. Numa instalação WordPress Multisite, WP_SITEURL aplica-se ao administrador da rede, não aos subsites individuais. Cada subsite tem as suas próprias entradas siteurl e home na respetiva tabela wp_X_options. Uma alteração de URL em toda a rede requer a atualização da tabela de opções de cada subsite, o que o WP-CLI trata com o sinalizador --network:
wp search-replace 'http://old-domain.com' 'https://new-domain.com' --all-tables --network --path=/var/www/htmlConfiança em cabeçalhos de proxy reverso. Em servidores atrás de um balanceador de carga ou proxy reverso Nginx, o WordPress pode detetar o protocolo errado se o proxy não encaminhar o cabeçalho X-Forwarded-Proto. Mesmo com constantes de URL corretas, os links internos podem reverter para HTTP. Adicione o seguinte a wp-config.php para forçar a deteção HTTPS:
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
$_SERVER['HTTPS'] = 'on';
}Verificar a Configuração Após as Alterações
Após atualizar qualquer parâmetro de URL, execute os seguintes passos de verificação antes de considerar a alteração concluída:
# Confirm wp_options values reflect the change
wp option get siteurl --path=/var/www/html
wp option get home --path=/var/www/html
# Check for mixed-content issues using curl
curl -sI https://example.com | grep -i location
# Verify the REST API is reachable at the correct base
curl -s https://example.com/wp-json/ | python3 -m json.tool | head -20
# Confirm no HTTP references remain in post content
wp search-replace --dry-run 'http://example.com' 'https://example.com' --all-tables --path=/var/www/htmlO sinalizador --dry-run no último comando reporta quantas substituições seriam feitas sem modificar realmente os dados. Se a contagem for zero, a migração está limpa.
Para equipas que gerem múltiplas instâncias WordPress em ambientes de Alojamento Web Partilhado ou VPS, automatizar este passo de verificação num script pós-implementação elimina o risco de lançar um site com referências de URL desatualizadas.
Matriz de Decisão: Qual Método Utilizar
| Situação | Método Recomendado |
|---|---|
| — | — |
| Painel acessível, alteração simples de domínio ou protocolo | Definições > Geral (Método 1) |
| Servidor de produção, alteração deve ser controlada por versões | Constantes `wp-config.php` (Método 2) |
| Painel bloqueado, SSH disponível, WP-CLI instalado | WP-CLI `option update` (Método 3) |
| Painel bloqueado, sem WP-CLI, SSH disponível | MySQL UPDATE direto (Método 4) |
| Ambiente cPanel, sem SSH | Gestor de Ficheiros cPanel + phpMyAdmin |
| Alteração de URL em toda a rede Multisite | WP-CLI `search-replace –network` |
| Limpeza pós-migração de URLs serializados | WP-CLI `search-replace –all-tables` |
Lista de Verificação de Pontos-Chave Técnicos
- Atualize sempre
WP_SITEURLeWP_HOMEem conjunto, a menos que necessite intencionalmente do padrão de subdiretoria. - Defina constantes em
wp-config.phpem servidores de produção para evitar substituições acidentais através da interface. - Após qualquer alteração de URL, limpe o cache de objetos e execute
wp search-replacecom--all-tablespara capturar dados serializados. - Para migrações de HTTP para HTTPS, atualize primeiro as constantes de URL, depois execute a pesquisa e substituição, depois verifique com
curlpara conteúdo misto. - Em instalações em subdiretoria, o
index.phpraiz deve referenciar o caminho da subdiretoria, e.htaccessdeve utilizarRewriteBase /. - Nunca utilize uma barra final nas constantes
WP_HOMEouWP_SITEURL. - Em configurações de proxy reverso, adicione a deteção
HTTP_X_FORWARDED_PROTOawp-config.phpou o WordPress irá gerar referências de protocolo incorretas independentemente das definições de URL. - No Multisite, a tabela
wp_X_optionsde cada subsite deve ser atualizada independentemente; utilize o sinalizador--networkcom o WP-CLI.
Perguntas Frequentes
O que acontece se o WordPress Address e o Site Address forem diferentes sem a configuração de subdiretoria?
O WordPress tentará carregar os ficheiros principais a partir do caminho especificado em WP_SITEURL. Se não existir nenhuma instalação do WordPress nesse caminho, todos os pedidos de administração retornarão erros 404 ou um ecrã branco. O front end pode ainda carregar se WP_HOME estiver correto e as regras de reescrita estiverem intactas, mas qualquer pedido AJAX, chamada à REST API ou ação de administração irá falhar.
Posso definir WP_HOME e WP_SITEURL com protocolos diferentes (um HTTP, outro HTTPS)?
Não. Misturar protocolos entre as duas constantes cria um ciclo de redirecionamento que nem os navegadores nem os crawlers conseguem resolver. Ambas as constantes devem utilizar o mesmo protocolo. Se estiver a impor HTTPS ao nível do servidor (via Nginx ou Apache), ambas as constantes devem utilizar https://.
Por que razão o campo WordPress Address está a cinzento em Definições > Geral?
O campo é apenas de leitura porque WP_SITEURL (ou WP_HOME) está definido como uma constante PHP em wp-config.php. As constantes definidas no código têm precedência sobre os valores da base de dados e não podem ser substituídas através da interface. Para tornar o campo editável novamente, remova ou comente a linha define() correspondente em wp-config.php.
A alteração do Site Address afeta o meu SEO e os backlinks existentes?
Sim. Alterar WP_HOME muda o URL base canónico para cada página do seu site. Sem redirecionamentos 301 adequados da estrutura de URL antiga para a nova, os motores de busca tratarão os URLs antigos e novos como páginas separadas, dividindo a equidade de links e potencialmente desencadeando penalizações por conteúdo duplicado. Configure sempre redirecionamentos 301 ao nível do servidor antes ou simultaneamente com a alteração de URL.
Como recupero se introduzi o URL errado e agora estou bloqueado fora do wp-admin?
Ligue-se ao seu servidor via SSH e defina as constantes corretas em wp-config.php utilizando o Método 2, ou utilize o WP-CLI para atualizar as opções siteurl e home diretamente via Método 3. Se nenhum estiver disponível, utilize o phpMyAdmin ou uma ligação MySQL direta para executar as instruções UPDATE do Método 4. Assim que o acesso for restaurado, remova quaisquer constantes temporárias se preferir que o painel de controlo gira os valores daqui em diante.
