Cloaking em SEO significa mostrar uma versão da página aos mecanismos de busca e outra às pessoas. O rastreador recebe uma página limpa e rica em palavras-chave, que ranqueia; o visitante que clica recebe outra coisa, muitas vezes um redirecionamento, uma oferta diferente ou spam puro e simples. O Google inclui o cloaking nas suas políticas contra spam, e um site flagrado fazendo isso pode perder posições em páginas específicas ou no domínio inteiro.
A maioria das equipes se depara com o cloaking pelo lado defensivo: um site invadido que ranqueia para termos de farmácia ou cassino que o dono nunca viu, ou um concorrente cuja página ranqueada não corresponde ao que o snippet prometia. Em qualquer caso, encontrá-lo é um problema de monitoramento de SEO: você precisa ver a página como cada tipo de visitante a vê e comparar.
O que conta como cloaking
A definição do Google gira em torno da intenção: apresentar conteúdos diferentes a usuários e mecanismos de busca para manipular rankings e enganar os usuários. Os próprios exemplos do Google incluem servir ao rastreador uma página sobre destinos de viagem enquanto os visitantes recebem uma página sobre remédios com desconto, e inserir texto ou palavras-chave apenas quando quem faz a requisição é um mecanismo de busca.
O mecanismo é sempre o mesmo. O servidor, ou um script na página, decide o que enviar com base em quem parece estar pedindo. Os sinais usados são:
- User agent. A versão grosseira: qualquer coisa que diga “Googlebot” recebe a página limpa.
- Endereço IP. A versão cuidadosa: requisições vindas das faixas publicadas dos rastreadores do Google, verificadas por DNS reverso, recebem a página limpa, de modo que falsificar apenas o user agent não a libera.
- Referrer. Visitantes que chegam de uma página de resultados do Google recebem o redirecionamento; quem digita a URL, inclusive o dono do site, vê um site normal.
- Local e rede. Visitantes do país-alvo em conexões domésticas recebem o conteúdo malicioso; faixas de escritório, nuvem e datacenter recebem a versão limpa, porque é de lá que vêm revisores e scanners de segurança.
- Dispositivo. Alguns esquemas redirecionam apenas visitantes em dispositivos móveis, porque é ali que monetizam.
A maioria dos casos reais combina dois ou três desses sinais, e é por isso que uma única verificação feita da sua mesa geralmente não mostra nada.
O que não é cloaking
Muitas configurações legítimas servem respostas diferentes a visitantes diferentes. O Google diz que elas são aceitáveis desde que o rastreador veja o que um usuário comparável veria:
- Personalização por região e idioma. Mostrar preços em euros a visitantes na Alemanha não é cloaking. Tratar o Googlebot de forma diferente de um usuário no mesmo lugar seria. Nosso guia sobre resultados localizados do Google explica como o local muda o que as pessoas veem.
- Paywalls e conteúdo restrito. O Google documenta dados estruturados para conteúdo com paywall justamente para que os publishers possam deixar o rastreador ver o artigo completo sem que isso conte como cloaking.
- Layouts específicos por dispositivo. Marcação diferente para mobile e desktop é aceitável quando o conteúdo principal é equivalente.
- Renderização para bots. Servir HTML pré-renderizado aos rastreadores já foi recomendado como alternativa para JavaScript pesado. Hoje o Google chama isso de solução paliativa, não de solução de longo prazo, mas não é cloaking quando o conteúdo é o mesmo.
O teste para cada caso é a mesma pergunta: um usuário real na posição do rastreador receberia o mesmo conteúdo?
Por que não dá para verificar a partir de um único lugar
Uma página com cloaking é construída para parecer limpa justamente para quem tem mais chance de verificá-la. Isso cria três pontos cegos:
- Você é o público excluído. Se você verifica o próprio site logado, do escritório ou digitando a URL, uma invasão baseada em referrer nunca vai aparecer. Donos de sites muitas vezes descobrem o problema pelo Search Console ou por clientes.
- Você não pode ser o Googlebot. Enviar um user agent do Googlebot só detecta cloaking grosseiro. Qualquer esquema que verifique o IP do rastreador vai tratar você como usuário.
- Você está no mercado ou na rede errados. Um esquema que só dispara para visitantes mobile de um país em conexões domésticas é invisível a partir de um servidor na nuvem em outro país.
Por isso, a detecção é uma comparação, feita a partir de pontos de observação suficientes para cobrir as condições que o esquema de cloaking filtra.
Um fluxo de detecção
Passo 1: obtenha primeiro a visão do Google. No Search Console, o teste ao vivo da ferramenta URL Inspection busca a página como Googlebot a partir da infraestrutura do próprio Google e mostra o HTML renderizado e uma captura de tela. O Rich Results Test faz o mesmo para páginas que não são suas. Essa é a única forma confiável de ver a versão do rastreador, porque ela vem de um IP real do Googlebot.
Passo 2: colete as visões de usuário. Busque a mesma URL como visitantes comuns, variando uma condição por vez:
| Variante | User agent | Referrer | Rede |
|---|---|---|---|
| Base | Navegador desktop | nenhum | seu escritório |
| Vindo da busca | Navegador desktop | página de resultados do google.com | seu escritório |
| Mobile vindo da busca | Navegador mobile | página de resultados do google.com | IP doméstico no país-alvo |
| Desktop vindo da busca, mercado | Navegador desktop | página de resultados do google.com | IP doméstico no país-alvo |
| Verificação grosseira de bot | String do Googlebot | nenhum | seu escritório |
As linhas com IP doméstico são onde entra um proxy residencial: uma conexão doméstica no país que você está testando, para que a requisição se pareça com os visitantes que o esquema está esperando. Mantenha locale, fuso horário e idioma coerentes com o país de saída, como descrito no nosso guia sobre como alinhar geolocalização, fuso horário e locale do proxy, ou um esquema bem construído vai tratar você como um ponto fora da curva.
Passo 3: compare o que importa. O HTML bruto difere entre quaisquer duas requisições por causa de tokens e timestamps. Compare as partes que mudam os rankings ou a experiência do visitante:
- a URL final após os redirecionamentos, e cada salto da cadeia;
- o title, a meta description, a canonical e as diretivas de robots;
- o texto principal, normalizado e com hash;
- os links de saída, especialmente para domínios desconhecidos.
Passo 4: repita. Invasões e esquemas de concorrentes muitas vezes disparam só para uma parte das visitas, ou só em certos horários. Um único resultado limpo é uma evidência fraca. Rode a matriz várias vezes, com saídas diferentes e em horários diferentes do dia, antes de concluir que uma página está limpa.
Aqui está um script mínimo de comparação. Defina PROXY_URL como um gateway residencial com segmentação por país e adicione mais variantes para cada mercado que interessa a você:
import hashlib, os, re
import requests
URL = "https://example.com/some-page"
DESKTOP = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36"
MOBILE = "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1"
GOOGLEBOT = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
SERP = "https://www.google.com/"
RESI = {"http": os.environ["PROXY_URL"], "https": os.environ["PROXY_URL"]}
VARIANTS = {
"baseline": dict(ua=DESKTOP, ref=None, proxies=None),
"from_search": dict(ua=DESKTOP, ref=SERP, proxies=None),
"mobile_market": dict(ua=MOBILE, ref=SERP, proxies=RESI),
"desktop_market": dict(ua=DESKTOP, ref=SERP, proxies=RESI),
"googlebot_ua": dict(ua=GOOGLEBOT, ref=None, proxies=None),
}
def tag(html, pattern):
m = re.search(pattern, html, re.I | re.S)
return m.group(1).strip() if m else ""
def fingerprint(ua, ref, proxies):
headers = {"User-Agent": ua, "Accept-Language": "en-US,en;q=0.9"}
if ref:
headers["Referer"] = ref
r = requests.get(URL, headers=headers, proxies=proxies, timeout=30)
html = r.text
text = re.sub(r"<script.*?</script>|<style.*?</style>|<[^>]+>", " ", html, flags=re.S)
text = re.sub(r"\s+", " ", text).strip().lower()
return {
"final_url": r.url,
"hops": [h.headers.get("Location", "") for h in r.history],
"title": tag(html, r"<title[^>]*>(.*?)</title>"),
"canonical": tag(html, r'<link[^>]+rel=["\']canonical["\'][^>]+href=["\']([^"\']+)'),
"robots": tag(html, r'<meta[^>]+name=["\']robots["\'][^>]+content=["\']([^"\']+)'),
"text_hash": hashlib.sha256(text.encode()).hexdigest()[:12],
}
results = {name: fingerprint(**v) for name, v in VARIANTS.items()}
base = results["baseline"]
for name, res in results.items():
diffs = [k for k in res if res[k] != base[k]]
print(f"{name:15} {'SAME' if not diffs else 'DIFFERS: ' + ', '.join(diffs)}")
Uma diferença apenas em text_hash pode ser personalização inofensiva. Uma final_url diferente, um novo salto de redirecionamento ou um title que só aparece para visitantes vindos da busca é o padrão a investigar. Depois, compare as visões de usuário com o HTML do teste ao vivo da URL Inspection.
O que fazer quando encontrar
No seu próprio site, trate primeiro como um incidente de segurança. Cloaking baseado em referrer e IP num site que você não construiu quase sempre indica um comprometimento: regras de servidor injetadas, um plugin ou tema modificado, ou um script adicionado ao template. Remova o código, feche a brecha que permitiu a entrada e, se o Google tiver aplicado uma ação manual, solicite uma revisão no Search Console. Depois, rode a matriz de comparação de novo, a partir dos mesmos mercados, para confirmar que o problema sumiu.
No site de um concorrente, documente antes de denunciar. Capture a versão do rastreador pelo Rich Results Test, as versões de usuário com timestamp, país de saída e dispositivo, e a cadeia completa de redirecionamentos. O Google aceita denúncias de spam pelo seu formulário de relatório de qualidade da busca. Para a versão do mesmo comportamento na busca paga, nosso guia sobre como flagrar anúncios com cloaking e segmentação geográfica cobre o lado dos anúncios.
Continue monitorando. Invasões voltam quando o ponto de entrada não é corrigido, e costumam reaparecer nas páginas que ranqueiam melhor. Uma execução semanal da matriz nas suas principais landing pages, a partir dos países que trazem seu tráfego orgânico, é um alerta precoce barato.
Perguntas frequentes
Cloaking em SEO é ilegal?
Geralmente não é uma questão legal; é uma violação das políticas de um mecanismo de busca. O Google o inclui nas suas políticas contra spam e pode rebaixar ou remover páginas que o utilizam. Quando o cloaking esconde golpes ou malware, outras leis podem se aplicar ao próprio conteúdo.
Mostrar conteúdo diferente por país é cloaking?
Por si só, não. Localizar preços, idioma ou ofertas por país é normal. Passa a ser cloaking quando o rastreador é tratado de forma diferente de um usuário na mesma situação.
Posso verificar cloaking mudando meu user agent para Googlebot?
Só no caso de cloaking grosseiro. Esquemas cuidadosos verificam o IP do rastreador, então um user agent falsificado é tratado como um visitante comum. Use o teste ao vivo da URL Inspection do Search Console ou o Rich Results Test para ver a visão real do Google.
Por que preciso de IPs residenciais para detectar cloaking?
Muitos esquemas mostram o conteúdo malicioso apenas a visitantes comuns de um mercado-alvo e exibem uma página limpa para endereços de escritório, nuvem e datacenter. Verificar a partir de conexões domésticas nesse mercado é a forma de ver o que esses visitantes recebem.
Conclusão
O cloaking se esconde de quem tem mais chance de verificar, então uma única olhada da sua mesa prova pouco. Obtenha a visão do Google pelas ferramentas dele, colete visões de usuário com diferentes referrers, dispositivos e conexões domésticas nos mercados que importam, compare URLs finais, titles e conteúdo principal, e repita antes de declarar uma página limpa. Se o site for seu, trate qualquer achado como um comprometimento e corrija o ponto de entrada. Para acompanhar como suas páginas aparecem em muitos locais ao longo do tempo, veja nosso guia de rank tracking em geo-grid.