Redirecionamentos JavaScript
O que é um redirecionamento JavaScript, como o pipeline de renderização do Google o trata de forma diferente de um 301 no servidor, quando é um último recurso aceitável e como implementar e detectar um — além de onde o meta refresh e a History API se encaixam.
Idiomas
1 sinal de evidência nesta página
- Ferramenta relacionada ativarobots.txt Tester
Um redirecionamento JavaScript envia usuários e rastreadores para uma nova URL com código no lado do cliente (window.location.replace() ou .href). É o tipo de redirecionamento menos confiável porque o Google só o vê após a renderização — que pode ser atrasada ou falhar completamente, sem um prazo fixo em ambos os casos. A ordem oficial de preferência do Google é no servidor (301/302/307/308) → meta refresh → JavaScript, e seus documentos dizem claramente: use redirecionamentos JS apenas se você não puder fazer os outros dois. Uma vez que o Google interpreta um com sucesso, o destino se torna um sinal de canonicalização — mas isso não é uma garantia comprovada de PageRank idêntico ou resultados de ranqueamento em comparação a um 301, então trate-o como último recurso, não como uma substituição equivalente. Use-os em plataformas restritas sem acesso ao servidor, para páginas de erro SPA que apontam para um 404 real, e pouco mais. Se você precisar usar um, use window.location.replace() no <head>, remova a URL de origem do seu sitemap e aponte links internos para o destino final. Meta refresh é um redirecionamento separado no nível de HTML, e history.pushState()/replaceState() não são redirecionamentos.
TL;DR — Um redirecionamento JavaScript usa código na página para enviar você a uma URL diferente após o carregamento da página. Funciona para pessoas, mas os mecanismos de busca lidam com isso de forma menos confiável do que um redirecionamento “real” do servidor (um 301). Se você puder configurar um 301, faça isso. Reserve os redirecionamentos JavaScript para quando não houver outra opção.
O que é um redirecionamento JavaScript
Um redirecionamento JavaScript altera a navegação por meio da execução de script, em vez de uma resposta HTTP 3xx. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript redirects O Google consegue processar redirecionamentos JavaScript, mas recomenda redirecionamentos no servidor quando possível. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Redirects and Search
Existem duas maneiras amplas de enviar alguém de uma URL para outra.
A primeira é um redirecionamento no servidor. Antes mesmo de a página carregar, o servidor diz “essa página mudou — vá para cá em vez disso” usando um código de status como 301 (permanente) ou 302 (temporário). O navegador e o mecanismo de busca recebem essa mensagem imediatamente.
A segunda é um redirecionamento JavaScript. A página carrega normalmente e, em seguida, um pouco de código é executado no navegador e envia você para outro lugar. Algo como:
<script>
window.location.replace("https://example.com/new-page/");
</script>Para uma pessoa navegando, os dois parecem quase iguais. Para um mecanismo de busca, são muito diferentes — e essa diferença é o motivo principal desta página existir.
Por que os mecanismos de busca os tratam de forma diferente
O Google lê sua página em etapas. Primeiro, ele rastreia (baixa o HTML bruto). Depois, ele renderiza a página — executando de fato o JavaScript, como um navegador faria. Um 301 no servidor é visível nessa primeira etapa. Um redirecionamento JavaScript não é visível até a etapa de renderização, que pode ocorrer muito depois — ou, às vezes, não ocorrer.
O Google diz isso diretamente: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (tradução) «Use redirecionamentos JavaScript apenas se você não puder fazer redirecionamentos no servidor ou por meta refresh.» (Google Search Central)
Então, um redirecionamento JavaScript não é ruim — é apenas menos confiável. O Google normalmente chega lá eventualmente, mas um 301 de verdade é mais rápido e mais certo.
A regra simples
- Consegue configurar um 301 (ou 302)? Faça isso. É o padrão ouro.
- Não pode mexer no servidor, mas pode editar o
<head>do HTML? Um meta refresh de 0 segundo é a próxima melhor opção. - Nenhum dos dois? Então um redirecionamento JavaScript é um último recurso aceitável.
Algumas coisas que as pessoas erram:
- Um meta refresh não é um redirecionamento JavaScript. É uma tag
<meta>no seu HTML, e o Google lida com ela antes e de forma mais confiável do que com JS. history.pushState()não é um redirecionamento. Ele apenas muda o que está na barra de endereço — não envia ninguém para lugar nenhum, e os mecanismos de busca não o seguem.
Quer saber o tempo do pipeline de renderização, os detalhes de implementação e como encontrar redirecionamentos JS em um rastreamento? Mude para a aba Avançado.
TL;DR — Um redirecionamento JavaScript é um redirecionamento no lado do cliente (
window.location.replace(),.href,.assign()) que o Google só processa após a renderização — fase três de rastreamento → renderização → indexação. Um 301 no lado do servidor é visto no momento do rastreamento; um redirecionamento JS espera na fila de renderização, e o Google não dá um prazo fixo para essa espera — ela pode ser rápida ou pode demorar bastante, e a renderização pode falhar completamente. A ordem de preferência documentada do Google é lado do servidor → meta refresh → JavaScript, e os documentos dizem para usar redirecionamentos JS apenas quando você não pode fazer os outros dois. Uma vez que o Google os interpreta com sucesso, o destino se torna um sinal permanente de canonicalização — até o Google os usou em seu próprio blog quando nada mais funcionou — mas isso não é prova documentada de resultados idênticos de PageRank ou ranqueamento em comparação com um 301, então eles são um último recurso, não um sinal de spam. Os usos legítimos são plataformas restritas sem configuração de servidor e páginas de erro SPA que apontam para um 404 real. Implemente comwindow.location.replace()no<head>, remova a origem do seu sitemap, aponte os links internos novamente e confirme que o Googlebot consegue buscar o JS. Meta refresh é no nível de HTML (0s = permanente, qualquer atraso = temporário), ehistory.pushState()/replaceState()não são redirecionamentos de forma alguma.
O que conta como um redirecionamento JavaScript
A navegação por script depende de renderização e execução, portanto não é equivalente em nível de protocolo a um redirecionamento HTTP. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: JavaScript redirects O processamento é possível, não uma garantia de tempo exato ou de indexação. Evidence for this claim Primary standard or official documentation supporting the adjacent article claim. Scope: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Confidence: high · Verified: Google: Redirects and Search
Um redirecionamento JavaScript navega o navegador para uma nova URL com código no lado do cliente. Os métodos comuns e como eles diferem:
window.location.replace("url")— navega e remove a URL original do histórico da sessão. Este é o que deve ser usado: o botão voltar pula a origem do redirecionamento em vez de levar o usuário direto de volta.window.location.href = "url"— navega, mas mantém a original no histórico, então o botão voltar retorna para a página que redireciona (e pode criar um loop).document.location.hrefewindow.location.assign("url")se comportam da mesma forma.history.pushState()/history.replaceState()— não são redirecionamentos. Eles reescrevem a barra de endereço sem qualquer navegação ou sinal HTTP, então os rastreadores não os tratam como redirecionamentos. SPAs os usam para mudanças de URL dentro do aplicativo; eles precisam de links<a href>reais (ou navegações reais) para serem rastreáveis.
A linha divisória que importa: .replace(), .href e .assign() todos disparam
uma navegação real de documento (a diferença entre eles é apenas o que acontece com o
histórico da sessão), enquanto pushState()/replaceState() nunca navegam —
eles mexem no estado do histórico e na barra de endereço e nada mais. Nenhum dos quatro é
um 301 HTTP; “redirecionamento” aqui é uma abreviação para navegação no lado do cliente, não um código de status.
Meta refresh (<meta http-equiv="refresh" content="0;url=...">) é frequentemente
agrupado com redirecionamentos JS, mas é uma diretiva HTML analisada antes de o JavaScript
ser executado — uma categoria separada e mais confiável, abordada abaixo.
Como o Google processa um redirecionamento JavaScript
Este é o ponto crucial. O pipeline do Google funciona em etapas, e um redirecionamento JS e um redirecionamento no lado do servidor são capturados em etapas diferentes:
- Rastreamento — O Googlebot busca a URL e lê o HTML bruto. Um 301/302/307/308 no lado do servidor é visto aqui mesmo.
- Fila de renderização — páginas que retornam
200esperam para serem renderizadas. Os documentos do Google observam que a página “may stay on this queue for a few seconds, but it can take longer than that.” (tradução) «pode permanecer nesta fila por alguns segundos, mas pode levar mais tempo do que isso.» O Google não publica um prazo fixo de nível de serviço além disso, então trate a espera como imprevisível — pode ser rápida, ou pode se arrastar — em vez de assumir qualquer número específico de dias ou semanas. - Renderização + indexação — O Chromium headless executa o JavaScript. Este é o primeiro momento em que um redirecionamento JS existe no que diz respeito ao Google.
A mesma ideia que apresento em Crawling e em JavaScript SEO se aplica aqui: a renderização é uma etapa separada da busca, e qualquer coisa que dependa dela herda esse atraso e esse risco.
E o risco é real. Google: “While Google attempts to render every URL Googlebot crawled, rendering may fail for various reasons. This means that if you set a JavaScript redirect, Google might never see it if rendering of the content failed.” (tradução) «Embora o Google tente renderizar cada URL que o Googlebot rastreou, a renderização pode falhar por vários motivos. Isso significa que, se você definir um redirecionamento JavaScript, o Google pode nunca vê-lo se a renderização do conteúdo falhar.» (Google Search Central) Durante a janela antes de o redirecionamento ser processado — e para sempre, se a renderização falhar — o Google pode manter a página de origem vazia em seu índice.
Ordem de preferência oficial do Google
A documentação de redirecionamentos estabelece uma hierarquia do mais confiável ao menos confiável:
- Redirecionamentos no servidor — 301/308 (permanentes), 302/307 (temporários). Melhores para tudo: vistos no momento do rastreamento, inequívocos.
- Meta refresh — nível de HTML. Um meta refresh de 0 segundo é tratado como um redirecionamento permanente (como um 301); qualquer meta refresh atrasado é tratado como temporário.
- Redirecionamentos JavaScript — último recurso.
As palavras do Google: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (tradução) «Use redirecionamentos JavaScript apenas se você não puder fazer redirecionamentos no servidor ou meta refresh.» Redirecionamentos permanentes passam o sinal canônico para o destino; os temporários mantêm o original nos resultados. (Como isso interage com a seleção canônica está em Canonicalização.)
A equidade de links é transmitida?
A própria documentação de redirecionamentos do Google lista a navegação por localização JavaScript entre seus métodos de redirecionamento permanente e diz que o destino se torna o sinal de canonicalização depois que o Google o interpreta — portanto, a afirmação simplista de que “redirecionamentos JS não transmitem PageRank” é falsa. O que a documentação não estabelece é que o resultado seja idêntico, imediato ou tão confiável quanto um 301 no servidor — ela descreve o sinal canônico, não uma garantia de fluxo de PageRank equivalente, ranqueamento ou tempo. O enquadramento honesto: um 301 transmite o sinal no momento do rastreamento com quase certeza; um redirecionamento JS o transmite apenas se e quando a renderização for bem-sucedida, e o Google não promete que o resultado corresponderá ao de um 301 um a um. Essa lacuna — não a equidade perdida — é o custo real de escolher JavaScript.
Isso também explica por que redirecionamentos JS não são um gatilho de penalidade por si só. Eles só se tornam um problema de spam quando usados para cloaking — mostrar uma página aos rastreadores e redirecionar os usuários para algo diferente, ou enviar usuários móveis para um domínio não relacionado. A política de redirecionamentos sorrateiros do Google trata dessa intenção, não da técnica.
Quando um redirecionamento JavaScript é a ferramenta certa
Há casos legítimos:
- Plataformas limitadas. Algumas configurações de hospedagem compartilhada, CDN ou CMS não dão acesso a regras de redirecionamento no servidor. Um redirecionamento JS é uma alternativa válida — e, notavelmente, o Google usou redirecionamentos JS em seu próprio blog do Webmaster porque, como Gary Illyes disse, “that was the only thing we could use for 1:1 redirects, and it works on Google” (tradução) «essa era a única coisa que podíamos usar para redirecionamentos 1:1, e funciona no Google» (OnCrawl).
- Tratamento de erros em SPA. O Google endossa explicitamente isso: “Use a JavaScript redirect to a URL for which the server responds with a
404HTTP status code.” (tradução) «Use um redirecionamento JavaScript para uma URL para a qual o servidor responda com um código de status HTTP404.» (Google Search Central) Um aplicativo de página única que resolve uma rota inválida pode redirecionar para um endpoint 404 real para que o Google processe o erro corretamente em vez de indexar um soft 404.
Para migrações permanentes de URL, esta não é a ferramenta — use um 301. Faço o mesmo ponto em migrações de site: redirecionamentos JavaScript são um último recurso, e o Google pode nunca vê-los.
Geradores de site estático: a armadilha dos aliases do Hugo
Uma surpresa comum: o frontmatter aliases: do Hugo historicamente gerou
páginas HTML de meta refresh, não redirecionamentos 301 no servidor — e outros
geradores estáticos fizeram coisas semelhantes por padrão. Os padrões dos
geradores mudam entre versões, então verifique a saída real da sua versão
implantada atual em vez de assumir; se aliases: não estiver fornecendo 301s,
você precisa de regras de redirecionamento no nível da plataforma (Netlify
_redirects, Cloudflare Workers, Vercel vercel.json) além de (no Hugo)
disableAliases: true. Eu abordo isso em detalhes em
Hugo SEO.
Melhores práticas de implementação
Se um redirecionamento JavaScript for genuinamente sua única opção:
- Use
window.location.replace(), não.href. Como o Search Engine Journal coloca, redirecionamentos JS “normalmente usam a funçãowindow.location.replace()em vez dewindow.location.hrefpara evitar loops de redirecionamento de UX” (SEJ). - Coloque-o no
<head>, não no<body>. Os navegadores analisam HTML sequencialmente e executam scripts conforme os encontram, então “posicione redirecionamentos JavaScript no<head>em vez de<body>para minimizar atrasos” (OnCrawl). - Redirecione para o destino final em um único salto. Um redirecionamento JS para uma página que em si faz 301 para outro lugar cria uma cadeia; cadeias desperdiçam orçamento de rastreamento e podem aparecer no GSC como um erro de redirecionamento.
- Remova a URL de origem do seu sitemap XML. Sitemaps devem listar URLs canônicas, indexáveis — não URLs que redirecionam.
- Aponte os links internos para o destino, para que não passem pelo redirecionamento.
- Certifique-se de que o Googlebot possa buscar o JS. Se o redirecionamento estiver em um
script externo bloqueado por
robots.txt, o Google não pode renderizá-lo e não verá o redirecionamento.
Como detectar redirecionamentos JavaScript
Eles não se anunciam como um 301 em um cabeçalho, então você precisa renderizar:
- Um rastreador com renderização JS ativada. O OnCrawl recomenda rastrear com
“renderização JavaScript habilitada (tempo limite mínimo de 5 segundos)”; Screaming Frog e
Ahrefs Site Audit podem ambos renderizar. Sem renderização, uma página com redirecionamento JS apenas
parece um
200normal. - Chrome DevTools. A aba Network (com “Preserve log”) mostra a navegação no lado do cliente; a extensão Redirect Path também sinaliza isso.
- No Search Console, um redirecionamento JS processado com sucesso aparece em Página com redirecionamento — o mesmo status de qualquer URL redirecionada, o que é normal para fontes não canônicas. Esse rótulo não é garantido em qualquer verificação, no entanto: ele reflete o que o Google buscou, renderizou, interpretou e canonicalizou no momento amostrado, então uma URL pode mostrar um status diferente (ou nenhum status de redirecionamento ainda) entre verificações sem que isso seja um erro de sua parte.
O que eu realmente faria
No servidor primeiro, sempre. Meta refresh (0 segundo) quando você pode editar HTML, mas
não a configuração do servidor. JavaScript apenas quando ambos estiverem fora de questão — e então com
window.location.replace() no <head>, um sitemap limpo e uma verificação de que o
redirecionamento realmente renderiza para o Googlebot. Para qualquer coisa permanente ou de alto valor, a
confiabilidade extra de um 301 vale quase qualquer esforço para obtê-lo.
Resumo de IA
Uma visão condensada da versão Avançada:
- Um redirecionamento JavaScript é do lado do cliente (
window.location.replace(),.href,.assign()). Ele só é processado após a renderização — fase três de rastreamento → renderização → indexação — enquanto um 301 no lado do servidor é visto no momento do rastreamento. - A fila de renderização é o risco: uma página “pode permanecer nesta fila por alguns segundos, mas pode levar mais tempo”, sem um cronograma de nível de serviço fixo, e a renderização pode falhar completamente, caso em que o Google pode nunca ver o redirecionamento e mantém a página de origem indexada.
- Ordem de preferência do Google: lado do servidor (301/302/307/308) → meta refresh → JavaScript. Documentação: “Use redirecionamentos JavaScript apenas se você não puder fazer redirecionamentos no lado do servidor ou meta refresh.”
- O destino se torna um sinal de canonicalização assim que o Google interpreta um redirecionamento JS — então o mito de que “redirecionamentos JS não passam PageRank” é falso — mas o Google não documenta que o resultado corresponde exatamente ao fluxo de PageRank, ranqueamento ou tempo de um redirecionamento no lado do servidor. Redirecionamentos JS não são um gatilho de penalidade, a menos que sejam usados para cloaking (redirecionamentos sorrateiros).
- Usos legítimos: plataformas restritas (o próprio Google os usou em seu blog) e páginas de erro SPA que redirecionam para um 404 real (endossado pelo Google).
- Meta refresh ≠ redirecionamento JS: é no nível de HTML; 0s = permanente, qualquer atraso =
temporário.
history.pushState()/replaceState()não são redirecionamentos — sem sinal HTTP, os rastreadores não os seguem. aliases:do Hugo são meta refresh, não 301s — uma armadilha comum em geradores estáticos.- Implementação:
window.location.replace()no<head>, um único salto para o destino, remova a origem do sitemap, aponte novamente os links internos, garanta que o Googlebot possa buscar o JS. - Detecção: rastreie com renderização JS ativada, Chrome DevTools / Redirect Path, “Page with redirect” no GSC.
Documentação oficial
Orientação de fontes primárias sobre redirecionamentos e JavaScript.
- Redirects and Google Search — a hierarquia de preferência (lado do servidor → meta refresh → JavaScript), tratamento de permanente vs. temporário e as regras de atraso do meta refresh.
- JavaScript SEO Basics — o pipeline de renderização e o caso de uso endossado de SPA-404.
- Fix search-related JavaScript problems — soft 404s, renderização e depuração de JS que o Google não consegue processar.
- Sneaky redirects (spam policies) — quando um redirecionamento cruza para cloaking e se torna uma violação de política.
Bing / Microsoft
- Bing Webmaster Help — ponto de entrada para as orientações atuais do Bing. (No momento da escrita, o Bing não tinha uma página de ajuda dedicada a redirecionamentos em uma URL estável; o Bingbot renderiza JavaScript de forma menos confiável que o Googlebot, o que torna redirecionamentos apenas com JS mais arriscados para a indexação do Bing.)
Citações da fonte
Declarações oficiais do Google e das pessoas que trabalham na Pesquisa. Cada link dos documentos do Google é um link profundo que salta para a passagem citada.
Google — a ordem de preferência e o risco de renderização
- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (tradução) «Use redirecionamentos JavaScript apenas se você não puder fazer redirecionamentos no lado do servidor ou meta refresh.» — Documentação do Google Search Central. Ir para a citação
- “While Google attempts to render every URL Googlebot crawled, rendering may fail for various reasons. This means that if you set a JavaScript redirect, Google might never see it if rendering of the content failed.” (tradução) «Embora o Google tente renderizar cada URL que o Googlebot rastreou, a renderização pode falhar por vários motivos. Isso significa que, se você definir um redirecionamento JavaScript, o Google pode nunca vê-lo se a renderização do conteúdo falhar.» — Documentação do Google Search Central. Ir para a citação
Google — o caso de uso endossado de SPA
- “Use a JavaScript redirect to a URL for which the server responds with a
404HTTP status code (for example/not-found).” (tradução) «Use um redirecionamento JavaScript para uma URL para a qual o servidor responda com um código de status HTTP404(por exemplo,/not-found).» — Documentação do Google Search Central. Ir para a citação
Gary Illyes, Google
- Sobre redirecionamentos JS em geral: “Js redirects are probably not a good idea though.” (tradução) «Redirecionamentos JS provavelmente não são uma boa ideia, no entanto.» (8 de julho de 2020)
- Sobre o Google usá-los mesmo assim quando nada mais funcionava: “We used JS redirects on webmasters.googleblog.com because that was the only thing we could use for 1:1 redirects, and it works on Google.” (tradução) «Usamos redirecionamentos JS em webmasters.googleblog.com porque era a única coisa que podíamos usar para redirecionamentos 1:1, e funciona no Google.» Cobertura
Search Engine Journal — implementação e equidade de links
- “JavaScript redirects typically use
window.location.replace()function rather thanwindow.location.hrefto avoid UX redirect loops.” (tradução) «Redirecionamentos JavaScript normalmente usam a funçãowindow.location.replace()em vez dewindow.location.hrefpara evitar loops de redirecionamento na experiência do usuário.» Leia - “JavaScript redirects are not SEO-friendly and should be avoided when alternatives exist… Only implement JavaScript redirects when server-side alternatives are genuinely unavailable.” (tradução) «Redirecionamentos JavaScript não são amigáveis para SEO e devem ser evitados quando existirem alternativas… Implemente redirecionamentos JavaScript apenas quando alternativas no servidor estiverem genuinamente indisponíveis.» Leia
Tipos de redirecionamento — folha de referência
Quando o Google o vê e como é tratado
| Método | Quando o Google o vê | Tratado como | Confiabilidade |
|---|---|---|---|
301 / 308 no servidor | No rastreamento | Permanente | Mais alta |
302 / 307 no servidor | No rastreamento | Temporário | Mais alta |
Meta refresh, 0 segundos | No tempo de análise do HTML | Permanente | Alta |
Meta refresh, atrasado (>0s) | No tempo de análise do HTML | Temporário | Alta |
| Redirecionamento JavaScript | Após a renderização | Segue a navegação | Mais baixa |
history.pushState() / replaceState() | — | Não é um redirecionamento | n/a |
Métodos de redirecionamento JavaScript
| Código | Comportamento no histórico | Usar? |
|---|---|---|
window.location.replace("url") | Remove a origem do histórico | Sim — recomendado |
window.location.href = "url" | Mantém a origem (loop do botão voltar) | Evite para redirecionamentos |
window.location.assign("url") | Igual a .href | Evite para redirecionamentos |
document.location.href = "url" | Alias para .href | Evite para redirecionamentos |
Fatos rápidos
- Ordem do Google: servidor → meta refresh → JavaScript. Use JS apenas quando os dois primeiros forem impossíveis.
- Uma vez interpretado, o destino de um redirecionamento JS é um sinal de canonicalização — o mito de que “redirecionamentos JS não passam PageRank” é falso. O Google não documenta esse resultado como idêntico ao de um 301, então o risco real é atraso / falha de renderização, não uma penalidade documentada de PageRank.
- Redirecionamentos JS não são uma penalidade, a menos que usados para cloaking.
aliases:do Hugo = meta refresh, não 301.- Um redirecionamento JS processado aparece como “Page with redirect” no GSC.
Devo usar um redirecionamento JavaScript? — lista de verificação de decisão
Percorra esta lista de cima para baixo; pare no primeiro “sim”.
- Posso definir um
301/302/307/308no servidor? → Faça isso. Pare aqui. - Posso editar o
<head>do HTML, mas não a configuração do servidor? → Use um meta refresh de 0 segundos para movimentos permanentes. Pare aqui. - Nenhum dos dois é possível (plataforma bloqueada), ou é uma página de erro de SPA que deve atingir um 404 real? → Um redirecionamento JavaScript é aceitável. Continue.
Se você está usando um redirecionamento JavaScript
- Use
window.location.replace()(not.href/.assign()). - Place the script in the
<head>, as early as possible. - Redirect straight to the final destination — no chain through another redirect.
- Remove the source URL from your XML sitemap.
- Repoint internal links to the destination.
- Confirm the redirect’s JS is not blocked in
robots.txtso Googlebot can render it. - You are not showing crawlers one page and redirecting users elsewhere (cloaking).
- Verify by crawling with JS rendering on and checking “Page with redirect” in GSC.
O redirecionamento JavaScript recomendado
Coloque isto no <head> para que seja executado o mais cedo possível na ordem de análise:
<head>
<script>
window.location.replace("https://example.com/new-page/");
</script>
</head>replace() é a escolha fundamental — ele remove a URL de redirecionamento do histórico da sessão, então o botão voltar não faz o usuário cair de volta no redirecionamento.
O meta refresh de 0 segundos (a segunda melhor opção quando você não pode fazer no servidor)
Não é JavaScript, mas é a alternativa certa quando você pode editar o HTML e não a configuração do servidor. Um atraso de 0 segundos é tratado pelo Google como um redirecionamento permanente:
<head>
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
</head>O que NÃO usar como redirecionamento
history.pushState() reescreve a barra de endereço, mas não realiza navegação e não envia nenhum sinal HTTP — os rastreadores não o seguirão:
// NOT a redirect — only changes the URL bar, no navigation happens
history.pushState({}, "", "/new-page/");Se você precisa que uma mudança de rota em um SPA seja rastreável, dê a ela um link real <a href> ou uma navegação genuína, não apenas uma chamada à API History.
Página de erro em SPA → 404 real (padrão endossado pelo Google)
Quando um aplicativo de página única resolve uma rota desconhecida, envie-o para um endpoint que retorne um 404 real para que o Google processe o erro em vez de um 404 suave:
// On an unresolved route in your SPA:
window.location.href = "/not-found"; // /not-found must return HTTP 404 Ferramentas para encontrar e verificar redirecionamentos JavaScript
- Screaming Frog SEO Spider — ative a renderização de JavaScript (com um tempo limite de renderização suficiente) para que páginas com redirecionamento JS não pareçam apenas
200s comuns. - Ahrefs Site Audit — renderiza páginas e mostra redirecionamentos, cadeias e links internos redirecionados.
- Chrome DevTools — guia Network — ative “Preserve log” e observe a navegação no lado do cliente disparar.
- Redirect Path (extensão do Chrome) — sinaliza redirecionamentos no lado do cliente junto com os do lado do servidor em um popup rápido.
- Google Search Console — Inspeção de URL — veja como uma única URL foi rastreada e renderizada, e se o Google chegou a “Página com redirecionamento”.
- GSC — Relatório de indexação de páginas — “Página com redirecionamento” lista URLs redirecionadas; “Erro de redirecionamento” mostra cadeias e loops.
Erros a evitar com redirecionamentos JavaScript
- Usar
window.location.href(ou.assign()) em vez de.replace()..hrefmantém a página de redirecionamento no histórico da sessão, então o botão voltar leva o usuário direto de volta ao redirecionamento — um loop. Em vez disso, use:window.location.replace(), que remove a origem do histórico. - Recorrer a um redirecionamento JS em uma migração permanente e de alto valor quando um 301 está disponível. Redirecionamentos JS só são processados após a renderização, o que pode ser atrasado ou falhar completamente — o risco errado para uma página que importa. Em vez disso, use um 301 no servidor; reserve JavaScript para plataformas limitadas e páginas de erro de SPA.
- Encadear o redirecionamento JS em outro redirecionamento em vez de cair no destino final em uma única etapa. Cadeias desperdiçam orçamento de rastreamento e podem aparecer como um erro de redirecionamento no GSC. Em vez disso, aponte o redirecionamento JS diretamente para a URL de destino.
- Deixar a URL de origem no sitemap XML. Sitemaps devem listar URLs canônicas e indexáveis, não URLs que redirecionam. Em vez disso, remova a origem do sitemap assim que o redirecionamento estiver ativo.
- Deixar
robots.txtbloquear o script que dispara o redirecionamento. Se o Googlebot não puder buscar o JS, ele não pode renderizar o redirecionamento, e a página de origem pode permanecer indexada indefinidamente. Em vez disso, confirme que o script é rastreável — o testador de robots.txt verifica exatamente isso. - Assumir que o frontmatter
aliases:do Hugo fornece um 301. Historicamente, ele gerava uma página HTML com meta refresh, não um redirecionamento no servidor — verifique a saída real da sua versão implantada em vez de assumir. Em vez disso, use regras de redirecionamento no nível da plataforma (Netlify_redirects, Cloudflare Workers, Vercelvercel.json) além dedisableAliases: true, como abordado em SEO para Hugo. - Tratar
history.pushState()/replaceState()como um redirecionamento. Eles apenas reescrevem a barra de endereço — sem navegação, sem sinal HTTP, e rastreadores não os seguem. Em vez disso, use um link<a href>real ou uma navegação de verdade para qualquer coisa que precise ser rastreável. - Mostrar aos rastreadores uma página e enviar usuários para outro lugar (cloaking). Isso é o que transforma um redirecionamento JS legítimo em uma violação da política de redirecionamentos sorrateiros — trata-se de intenção, não da técnica. Em vez disso, envie todos, incluindo bots, para o mesmo destino.
Problemas comuns com redirecionamentos JavaScript
A URL de origem permanece indexada muito depois do redirecionamento entrar no ar
- Causa provável: a página ainda está na fila de renderização do Google, ou a renderização falhou completamente.
- Correção + verificação: execute um Teste ao vivo na ferramenta Inspeção de
URL do Google Search Console na URL de origem. Se ainda não foi renderizada, aguarde — o Google
não fornece um prazo fixo para a fila de renderização, então verifique periodicamente em vez de
assumir um período específico. Se a renderização continuar falhando, confirme que o script de
redirecionamento não está bloqueado (veja o problema de
robots.txtabaixo).
O botão voltar retorna diretamente à página de redirecionamento
- Causa provável: o redirecionamento usa
window.location.hrefou.assign()em vez de.replace(), então a URL de origem permanece no histórico da sessão. - Correção + verificação: altere o script para
window.location.replace(). Confirme caindo no destino e pressionando voltar — ele deve pular a origem do redirecionamento completamente.
O GSC mostra “Rastreado – atualmente não indexado” em vez de “Página com redirecionamento”
- Causa provável: o Google ainda não renderizou a página, ou a renderização está falhando para essa URL.
- Correção + verificação: rastreie a URL com um crawler com renderização de JS (Screaming Frog ou
Ahrefs Site Audit, com renderização habilitada) para confirmar que o redirecionamento realmente dispara
no lado do cliente. Verifique também se o script de redirecionamento não está bloqueado no
robots.txt— o testador de robots.txt confirma se o Googlebot consegue buscá-lo.
Uma rota SPA não resolvida aparece como soft 404 no GSC
- Causa provável: a rota redireciona para algum lugar, mas o destino não
retorna realmente um status HTTP
404. - Correção + verificação: aponte o redirecionamento para um endpoint que realmente responda
com
404(o padrão recomendado pelo Google) e execute novamente a Inspeção de URL para ver a mudança de status de soft 404 para um 404 limpo.
Uma página com redirecionamento via JS ainda parece um 200 simples em um relatório de rastreamento
- Causa provável: o crawler foi executado sem renderização de JavaScript habilitada, então ele viu apenas a resposta HTML inicial, não a navegação no lado do cliente.
- Correção + verificação: rastreie novamente com a renderização de JS ativada (um tempo limite de 5 segundos no mínimo é um ponto de partida razoável) e confirme que o redirecionamento agora aparece.
Provando que o redirecionamento realmente teve efeito
| Teste a executar | Resultado esperado | Interpretação de falha | Janela de monitoramento | Gatilho de reversão |
|---|---|---|---|---|
| Testador de robots.txt na URL do script de redirecionamento | Script está Permitido para o Googlebot | Não permitido — o Google não consegue buscar o script, então nunca poderá renderizar o redirecionamento | Imediato | Corrija ou remova a regra de bloqueio no robots.txt antes de depender do redirecionamento |
| Rastreie a URL de origem com renderização de JS habilitada (Screaming Frog / Ahrefs Site Audit) | O crawler relata uma navegação no lado do cliente para o destino pretendido | A página ainda relata um 200 simples sem navegação — a renderização não está disparando | Imediato (rastreamento único) | Se ainda não disparar após corrigir o robots.txt, use um meta refresh de 0 segundos ou redirecionamento no servidor |
| Inspeção de URL do GSC — Teste ao vivo na URL de origem | O resultado renderizado mostra o redirecionamento executando para o destino | A renderização falha, ou o HTML renderizado não mostra navegação | Imediato para o próprio teste ao vivo | Se o Teste ao vivo falhar repetidamente ao renderizar, trate esta plataforma como incapaz de suportar um redirecionamento via JS — obtenha acesso ao servidor ou use meta refresh |
| GSC — Relatório de indexação de páginas para a URL de origem | A URL de origem está listada em “Página com redirecionamento” | Ainda aparece como indexada, “Rastreada – atualmente não indexada” ou conteúdo duplicado | 2–4 semanas (o status de indexação é atualizado no cronograma do próprio Google) | Se ainda não for classificada como redirecionamento após 4+ semanas, revise as verificações de bloqueio de renderização acima |
| Verificação manual do botão voltar no navegador após chegar ao destino | O botão voltar pula a página de origem completamente | O botão voltar retorna à página de origem | Imediato | Mude o script de .href/.assign() para window.location.replace() |
Teste-se: Redirecionamentos JavaScript
Cinco perguntas rápidas sobre como os redirecionamentos JavaScript funcionam e quando usá-los. Escolha uma resposta para cada uma e depois confira.
Recursos que valem seu tempo
Meus escritos relacionados
- Problemas e Melhores Práticas de SEO JavaScript — o lado da renderização, que é o motivo pelo qual os redirecionamentos JS carregam seu risco de tempo.
- O Guia do Iniciante para SEO Técnico — onde redirecionamentos e renderização se encaixam no panorama geral.
Minhas palestras
- Como o Search funciona (SlideShare) — minha explicação sobre rastreamento, renderização, indexação e ranqueamento — o pipeline que faz de um redirecionamento JS um evento de fase três. (Minha ressalva padrão se aplica: “Esta é minha compreensão dos sistemas… não será 100% completa ou precisa.”)
Do mundo do setor
- Redirects e Google Search (Google Search Central) — a hierarquia oficial de preferências e o tratamento de permanentes versus temporários.
- Redirects sorrateiros (Google Search Central) — a linha da política de spam que separa um redirect legítimo de cloaking.
- JavaScript Redirects & SEO: When & How To Use Them (Search Engine Journal) — orientação prática de implementação e a distinção entre
replace()e.href. - Are JavaScript Redirects SEO-Friendly? (Search Engine Journal) — o resumo “evite quando existirem alternativas”.
- JavaScript Redirects and SEO: The Ultimate Guide (OnCrawl) — orientação sobre posicionamento no cabeçalho, ferramentas de detecção e a citação completa de Gary Illyes.
- Are JavaScript Redirects Bad for SEO? (Conductor) — uma resposta concisa no formato FAQ para a consulta informacional.
- A Guide to Redirect Types (Lumar) — uma taxonomia mais ampla de redirects com os redirects JS em contexto.
Registro de alterações
Atualizado em 18 de jul. de 2026.
Resumo editorial e detalhes registrados da alteração.Detalhes da alteração
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
-
As notas detalhadas sobre as alterações estão disponíveis atualmente em inglês.
Não é possível fazer a comparação completa — nenhum instantâneo anterior foi arquivado para esta revisão.