WordPress redirecionando para outro site: causas e como corrigir
Seu WordPress redireciona para cassino, farmácia ou golpe? Veja por que acontece, por que só no celular ou vindo do Google, e como achar e corrigir.
Se o seu site WordPress está redirecionando para outro site (cassino, farmácia, "você ganhou um prêmio", falso antivírus), ele foi invadido. Não é bug, não é plugin com defeito e não é problema da hospedagem. Alguém colocou código no seu site que manda parte dos visitantes para um destino pago pelo invasor. O conserto é achar esse código, que costuma ficar em um destes cinco lugares: .htaccess, wp-config.php ou arquivos do núcleo, opções siteurl/home no banco, scripts injetados em posts e widgets, ou um plugin/tema adulterado. E depois fechar a porta por onde ele entrou.
Antes de começar a caçar, faça o básico de contenção: backup completo (mesmo infectado), troca de senhas e, se o redirecionamento atinge todo mundo, modo de manutenção. Isso está detalhado em site WordPress invadido: o que fazer nas primeiras horas.
Por que o redirecionamento "só acontece às vezes"
Esse é o detalhe que mais confunde. Você abre o site no computador, está tudo normal; um cliente reclama que caiu num site de apostas. Isso é proposital. O código malicioso costuma ser condicional:
- Só no celular. O script lê o user agent do navegador e só redireciona se for Android ou iPhone.
- Só vindo do Google. Ele verifica o cabeçalho referer: quem digitou o endereço direto vê o site normal, quem clicou num resultado de busca é desviado.
- Só para quem não está logado. Se existe o cookie de login do WordPress, o código fica quieto. Ou seja: o administrador nunca vê.
- Só uma vez por visitante ou por IP. Depois do primeiro redirecionamento, ele grava um cookie e não repete, para dificultar a reprodução.
- Só em alguns horários ou países.
Tudo isso existe para a invasão durar mais. Então, para testar, você precisa se passar pela vítima.
Como reproduzir o problema
Use uma janela anônima (sem login), de preferência no celular e na rede móvel, e entre no site a partir de uma busca no Google. No computador, dá para simular com curl:
# Simula um celular vindo do Google e mostra os cabeçalhos de resposta
curl -sI "https://seusite.com.br/" \
-A "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36 Chrome/130.0 Mobile Safari/537.36" \
-e "https://www.google.com/"
Se a resposta vier com 301 ou 302 e um Location: apontando para um domínio estranho, o redirecionamento acontece no servidor (.htaccess ou PHP). Se a resposta for 200 normal, o redirecionamento provavelmente é feito por JavaScript no navegador, e você precisa olhar o HTML:
curl -s "https://seusite.com.br/" -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" \
-e "https://www.google.com/" | grep -iE "<script[^>]+src=|window\.location|eval\(|atob\(|fromCharCode"
Essa distinção já corta a busca pela metade.
Onde o código malicioso costuma ficar
1. Arquivo .htaccess
Em servidores Apache e LiteSpeed (a maioria das hospedagens compartilhadas no Brasil), o .htaccess é o lugar favorito para redirecionamento condicional. Procure regras como estas:
RewriteCond %{HTTP_REFERER} (google|bing|yahoo|facebook) [NC]
RewriteCond %{HTTP_USER_AGENT} (android|iphone|mobile) [NC]
RewriteRule ^(.*)$ https://dominio-estranho.xyz/ [R=302,L]
O .htaccess padrão do WordPress é curto: o bloco entre # BEGIN WordPress e # END WordPress, mais o que plugins de cache ou segurança acrescentam. Qualquer RewriteRule apontando para fora do seu domínio é suspeita. E não olhe só a raiz: invasores espalham .htaccess em wp-content, wp-includes e uploads. Para listar todos:
find /caminho/do/site -name ".htaccess" -exec ls -la {} \;
Arquivos começados por ponto ficam ocultos no gerenciador de arquivos e no FTP por padrão. Ative "mostrar arquivos ocultos".
2. wp-config.php, index.php e arquivos do núcleo
Outro truque é colar uma linha no começo do wp-config.php, do index.php ou de um arquivo de wp-includes, quase sempre ofuscada: eval(base64_decode(...)), @include de um arquivo com nome aleatório, ou uma sequência de \x e chr(). Para os arquivos do núcleo, o WP-CLI compara tudo com as somas de verificação oficiais:
wp core verify-checksums
wp plugin verify-checksums --all
O primeiro comando aponta arquivos do núcleo alterados e arquivos que não deveriam existir. O segundo faz o mesmo para plugins do diretório oficial (plugins pagos não são verificados). O wp-config.php não entra nessa checagem, então abra e leia ele inteiro.
3. Banco de dados: siteurl, home e outras opções
Se o site inteiro, inclusive o painel, joga você para outro domínio, olhe primeiro as opções siteurl e home:
wp option get siteurl
wp option get home
Sem WP-CLI, no phpMyAdmin (troque wp_ pelo seu prefixo):
SELECT option_name, option_value FROM wp_options
WHERE option_name IN ('siteurl', 'home');
Se estiverem erradas, corrija com wp option update siteurl "https://seusite.com.br" (e o mesmo para home). Mas desconfie: se o invasor mexeu ali, mexeu em outras coisas também. Vale procurar scripts em qualquer opção:
SELECT option_name, LEFT(option_value, 200) FROM wp_options
WHERE option_value LIKE '%<script%' OR option_value LIKE '%eval(%';
4. Scripts injetados em posts, páginas e widgets
Ataques automatizados a plugins vulneráveis muitas vezes injetam um <script src="https://..."> no fim de todos os posts, ou em widgets de HTML personalizado. O WP-CLI busca no banco inteiro:
wp db search "<script" --all-tables --stats
wp db search "eval(" --all-tables
Depois, revise os resultados em wp_posts (campo post_content), wp_postmeta e wp_options. Cuidado: códigos legítimos (Google Analytics, pixel do Meta, chat) também são scripts. O que você procura é domínio que você não reconhece ou código ofuscado.
Atenção: não faça
search-replaceem massa sem backup e sem saber exatamente o que vai substituir. Um padrão mal escrito pode corromper dados serializados e quebrar o site.
5. Plugins e temas adulterados
Se um plugin desatualizado foi a porta de entrada, o próprio arquivo dele pode ter sido modificado. E plugins ou temas piratas muitas vezes já vêm com o código de redirecionamento ou com um backdoor (falamos disso em plugins e temas nulled: os riscos reais). Liste o que está instalado e compare:
wp plugin list --fields=name,status,version,update
wp theme list
Plugins que você não instalou, com nomes genéricos ("wp-security-helper", "core-stats") ou sem autor, são candidatos fortes. Também existem os chamados must-use plugins, em wp-content/mu-plugins, que rodam sempre e não aparecem na lista comum de plugins. Confira essa pasta.
Resumo: sintoma x onde procurar
| Sintoma | Onde procurar primeiro |
|---|---|
| Redireciona todo mundo, inclusive o painel | siteurl e home no wp_options, .htaccess |
| Só no celular ou só vindo do Google, com resposta 301/302 | .htaccess (todas as pastas), index.php, wp-config.php |
| Resposta 200, mas o navegador muda de página | Scripts no wp_posts, wp_options, widgets, arquivos JS do tema |
| Volta depois de limpar | Backdoor em uploads, mu-plugins, admin escondido, cron malicioso |
| Só em algumas páginas | Conteúdo desses posts, wp_postmeta, campos de construtores de página |
Como corrigir de verdade (e não só por uma semana)
Achar e apagar o redirecionamento é a parte fácil. O motivo pelo qual tanta gente vê o problema voltar é que o invasor quase sempre deixa backdoors: arquivos PHP escondidos que permitem reinstalar o redirecionamento quando quiser. A correção completa é:
Backup do estado infectado, guardado fora do servidor e identificado como tal.
Reinstalar o núcleo a partir da fonte oficial (
wp core download --force --skip-content), sem tocar emwp-content.Reinstalar todos os plugins e temas de fontes oficiais, na versão mais recente. Remover o que não usa.
Caçar PHP onde não deveria haver PHP, principalmente em
wp-content/uploads:find wp-content/uploads -type f -name "*.php"Limpar o banco: opções, posts, widgets e usuários administradores desconhecidos.
Revisar tarefas agendadas do WordPress (
wp cron event list) e o cron da hospedagem.Trocar todas as senhas e regenerar os salts (
wp config shuffle-salts).Corrigir a porta de entrada: plugin vulnerável, tema pirata, senha fraca ou vazada.
Limpar caches (plugin de cache, CDN, Cloudflare) e testar de novo como visitante de celular vindo do Google.
O passo a passo detalhado da limpeza está em como remover malware e backdoors do WordPress.
E o Google?
Redirecionamento para golpe é exatamente o tipo de coisa que faz o Google exibir o aviso vermelho de "site enganoso" ou "site perigoso". Mesmo sem aviso, o Google pode ter indexado páginas de spam criadas pelo invasor. Depois de limpar:
- confira o relatório Problemas de segurança no Google Search Console;
- procure páginas estranhas com
site:seusite.com.brna busca; - se houver aviso, peça revisão só depois de terminar a limpeza.
Se o aviso já está no ar, siga como remover o aviso de site perigoso do Google.
Checklist rápido
- Backup completo feito antes de mexer
- Redirecionamento reproduzido (celular, anônimo, vindo do Google)
- Todos os
.htaccessrevisados, não só o da raiz -
wp core verify-checksumssem alertas -
siteurlehomecorretos - Banco sem scripts desconhecidos
- Nenhum
.phpemuploads - Plugins e temas reinstalados de fonte oficial
- Senhas trocadas, salts regenerados, admins revisados
- Porta de entrada identificada e corrigida
- Caches limpos e teste final feito
Se preferir que alguém resolva
Com acesso SSH, WP-CLI e paciência, dá para seguir este guia sozinho. Redirecionamento condicional é chato justamente porque se esconde, e o que mais dá trabalho não é apagar a regra no .htaccess, é achar o backdoor que a recoloca.
Se quiser delegar, a Mobgeek faz a limpeza de site WordPress invadido a partir de R$ 790, com início em até 24h e 30 dias de garantia contra reinfecção, incluindo relatório do que foi encontrado e pedido de revisão ao Google quando necessário. Se fizer sentido, conte o seu caso no orçamento.
Perguntas frequentes
Por que meu site só redireciona no celular?
Porque o código malicioso verifica o navegador (user agent) e só age em celulares, onde o dono do site costuma testar menos. É uma técnica para a invasão passar despercebida por mais tempo.
Limpar o cache resolve o redirecionamento?
Não. O cache pode até esconder ou mostrar o problema de forma intermitente, mas o código malicioso continua no .htaccess, nos arquivos PHP ou no banco. Depois de limpar a infecção, aí sim limpe todos os caches.
Trocar o tema ou desativar todos os plugins resolve?
Ajuda a isolar a origem, mas não resolve sozinho. Muitos redirecionamentos estão no .htaccess, no wp-config.php, em arquivos do núcleo ou no banco de dados, que continuam ativos com qualquer tema e sem plugin nenhum.
O Google vai marcar meu site como perigoso?
Pode marcar, principalmente se o destino do redirecionamento for golpe ou malware. Quanto mais rápido você limpar, menor a chance. Se o aviso já apareceu, ele só sai depois da limpeza e de um pedido de revisão no Search Console.
Leia também
Site WordPress invadido: o que fazer nas primeiras horas
Seu site WordPress foi invadido? Veja o passo a passo priorizado das primeiras horas: backup, senhas, contenção, o que não fazer, clientes e LGPD.
SegurançaComo remover malware e backdoors do WordPress (guia técnico)
Guia técnico para remover malware e backdoors do WordPress: backup, reinstalação do core e plugins, caça a eval/base64, uploads, mu-plugins e banco de dados.
SegurançaComo saber se seu site foi hackeado: 12 sinais e como checar
Como saber se seu site WordPress foi hackeado: 12 sinais (redirecionamento no celular, spam em japonês, aviso do Google) e ferramentas gratuitas para checar.