JavaScript Redirections
Ce que a JavaScript redirection est, comment Google's rendre pipeline treats il differently depuis a serveur-side 301, quand c’est an acceptable dernier resort, et comment implement et detect un — plus où meta refresh et le History API fit.
1 indice probant sur cette page
- Outil en ligne associérobots.txt Tester
«A JavaScript redirect sends users and crawlers to a new URL with client-side code (window.location.replace() or .href). It's the least reliable redirect type because Google only sees it after rendering — which can be delayed, or fail entirely, with no fixed timeline either way. Google's official order of preference is server-side (301/302/307/308) → meta refresh → JavaScript, and its docs say plainly: only use JS redirects if you can't do the other two. Once Google successfully interprets one, the target becomes a canonicalization signal — but that's not a proven guarantee of identical PageRank or ranking outcomes to a 301, so treat it as a last resort rather than a like-for-like swap. Use them on constrained platforms with no server access, for SPA error pages that point to a real 404, and little else. If you must use one, use window.location.replace() in the <head>, drop the source URL from your sitemap, and point internal links at the final destination. Meta refresh is a separate HTML-level redirect, and history.pushState()/replaceState() aren't redirects at all.» _(Traduction)_ (Résumé en français du champ tldr : le texte source est conservé pour relecture francophone.)
TL;DR — A JavaScript redirection uses code in lune page to send vous to a différent URL après lune page loads. It fonctionne pour personnes, but moteur de recherches handle it moins reliably que a “real” server redirection (a 301). Si vous pouvez définir up a 301 à la place, do que. Enregistrer JavaScript redirections pour quand vous have aucun autre option.
Ce que a JavaScript redirection is
A JavaScript redirection changements navigation via script execution plutôt que an HTTP 3xx réponse. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: JavaScript redirects Google peut traiter JavaScript redirections but recommends server-side redirections quand possible. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: Redirects and Search
Là are two broad façons to send someone from un URL to un autre.
«The first is a server-side redirect. Before the page even loads, the server says “that page moved — go here instead” using a status code like 301 (permanent) or 302 (temporary). The browser and the search engine both get that message immediately. » (Traduction) (Résumé en français de la section sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le deuxième est a JavaScript redirection. Lune page charge normally, et alors a bit de code exécute dans le navigateur et sends vous somewhere sinon. Quelque chose comme:
<script>
window.location.replace("https://example.com/new-page/");
</script>Pour a person clicking autour, le deux feel presque le même. Pour a moteur de recherche, ils sont very différent — et que difference est le entier raison ce page exists.
Pourquoi moteur de recherches treat les differently
Google lit votre page dans stages. Premier il explore (downloads le raw HTML). Plus tard il renders lune page — en réalité running le JavaScript, le façon a navigateur voudrait. A serveur-side 301 est visible dans que premier étape. A JavaScript redirection n’est pas visible jusqu’à le rendu étape, qui peut come beaucoup plus tard — or, parfois, pas à tout.
«Google says it directly: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (Google Search Central) » (Traduction) (Résumé en français de la section treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
So a JavaScript redirection isn’t bad — it’s simplement moins reliable. Google va usually obtenir là eventually, but a réel 301 is faster and plus certain.
The simple rule
- Peut vous définir a 301 (or 302)? Faire que. c’est le gold standard.
- ne peut pas touch le serveur, mais peut edit le HTML
<head>? A 0-deuxième meta refresh est le suivant-meilleur option. - Aucun? Alors a JavaScript redirection est a fine dernier resort.
A couple of choses personnes obtenir incorrect:
- A meta refresh n’est pas a JavaScript redirection. c’est a
<meta>balise dans votre HTML, et Google handles il précédent et plus reliably que JS. history.pushState()n’est pas a redirection. Il simplement changements qu’est-ce que dans le adresse bar — il ne fait pas send anyone anywhere, et moteur de recherches ne pas suivre il.
Vouloir le rendre-pipeline timing, le implementation details, et comment trouver JS redirections dans a explorer? Switch à le Avancé tab.
TL;DR — A JavaScript redirection est a client-side redirection (
window.location.replace(),.href,.assign()) que Google seulement processes après rendu — phase three de explorer → rendre → indexer. A serveur-side 301 est vu à explorer temps; a JS redirection waits on le rendre queue, et Google donne aucun fixed timeline pour que wait — il peut être rapide or il peut prendre a long pendant que, et rendu peut échouer outright. Google’s documented preference order est serveur-side → meta refresh → JavaScript, et le docs dire à utiliser JS redirections seulement quand vous pouvez’t faire le autre deux. Une fois Google successfully interprets un, le cible becomes a permanent canonicalization signal — même Google utilisé les on leur propre blog quand rien sinon worked — mais c’est pas documented proof de identical PageRank or classement résultats à a 301, donc ils sont a dernier resort, pas a spam signal. Le legitimate utilise sont constrained platforms avec aucun serveur config et SPA erreur pages que point à a réel 404. Implement avecwindow.location.replace()dans le<head>, drop le source depuis votre sitemap, repoint lien internes, et confirmer Googlebot peut récupérer le JS. Meta refresh est HTML-level (0s = permanent, quelconque delay = temporary), ethistory.pushState()/replaceState()ne sont pas redirections à tout.
Ce que counts as a JavaScript redirection
Script navigation dépend on rendering and execution, so it n’est pas protocol-equivalent to an HTTP redirection. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: JavaScript redirects Processing is possible, pas an exact-timing or indexation guarantee. Preuve à l’appui de cette affirmation Primary standard or official documentation supporting the adjacent article claim. Portée : Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Niveau de confiance : élevé · Vérifié : Google: Redirects and Search
A JavaScript redirection navigates le navigateur à a nouveau URL avec client-side code. Le courant méthodes, et comment ils differ:
window.location.replace("url")— navigates et supprime le original URL depuis session history. Ce est le un à utiliser: le back button skips le redirection source au lieu de bouncing le utilisateur straight back.window.location.href = "url"— navigates mais garde le original dans history, donc le back button renvoie à le redirecting page (et peut créer a loop).document.location.hrefetwindow.location.assign("url")behave le même façon.history.pushState()/history.replaceState()— pas redirections. Ils rewrite le adresse bar sans quelconque navigation or HTTP signal, donc robots d’exploration ne pas treat les as redirections. SPAs utiliser les pour dans-app URL changements; ils besoin réel<a href>liens (or réel navigations) à être crawlable.
Le dividing line que matters: .replace(), .href, et .assign() tout trigger
a réel document navigation (le difference entre les est seulement ce que se produit à
session history), pendant que pushState()/replaceState() jamais navigate à tout —
ils touch history state et le adresse bar et rien sinon. None de le four est
an HTTP 301; “redirect” ici est shorthand pour client-side navigation, pas a status
code.
Meta refresh (<meta http-equiv="refresh" content="0;url=...">) is souvent
lumped in with JS redirections, but it’s an HTML directive parsed avant JavaScript
runs — a separate, plus reliable category, covered ci-dessous.
How Google processes a JavaScript redirection
Ce est le crux. Google’s pipeline exécute dans stages, et a JS redirection et a serveur-side redirection obtenir caught à différent ones:
«1. Crawl — Googlebot fetches the URL and reads the raw HTML. A server-side
301/302/307/308 is seen right here.
2. Render queue — pages that return 200 wait to be rendered. Google’s docs
note the page “may stay on this queue for a few seconds, but it can take longer
than that.” Google doesn’t publish a fixed service-level timeline beyond that,
so treat the wait as unpredictable — it can be quick, or it can drag — rather
than assuming any specific number of days or weeks.
3. Render + index — headless Chromium runs the JavaScript. This is the first
moment a JS redirect exists as far as Google is concerned.
» (Traduction) (Résumé en français de la section trente et un, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Le même idea Je faire on Exploration et dans JavaScript SEO s’applique ici: rendu est a séparé étape depuis fetching, et n’importe quoi que dépend on il inherits que delay et que risque.
«And the risk is 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.” (Google Search Central) During the window before the redirect is processed — and forever, if rendering fails — Google may keep the empty source page in its index. » (Traduction) (Résumé en français de la section trente-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Google’s official preference order » (Traduction) (Résumé en français de la section trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«The redirects documentation lays out a hierarchy from most to least reliable: » (Traduction) (Résumé en français de la section trente-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«1. Server-side redirects — 301/308 (permanent), 302/307 (temporary). Best for everything: seen at crawl time, unambiguous. 2. Meta refresh — HTML-level. A 0-second meta refresh is treated as a permanent redirect (like a 301); any delayed meta refresh is treated as temporary. 3. JavaScript redirects — last resort. » (Traduction) (Résumé en français de la section trente-six, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google’s words: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” Permanent redirects pass the canonical signal to the target; temporary ones keep the original in results. (How that interacts with canonical selection is over on Canonicalization.) » (Traduction) (Résumé en français de la section trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Fait popularité des liens réussir via?
«Google’s own redirects documentation lists JavaScript location navigation among its permanent redirection methods, and says the target becomes the canonicalization signal once Google has interpreted it — so the flat “JS redirects don’t pass PageRank” claim is false. What the documentation doesn’t establish is that the outcome is identical, immediate, or as reliable as a server-side 301 — it describes the canonical signal, not a guarantee of matching PageRank flow, ranking, or timing. The honest framing: a 301 passes the signal at crawl time with near-certainty; a JS redirect passes it only if and when rendering succeeds, and Google doesn’t promise the result will match a 301’s outcome one-for-one. That gap — not lost equity — is the real cost of choosing JavaScript. » (Traduction) (Résumé en français de la section trente-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Ce est aussi pourquoi JS redirections ne sont pas a penalty trigger on leur propre. Ils seulement become a spam problème quand ils sont utilisé pour cloaking — showing robots d’exploration un page et redirecting utilisateurs à quelque chose différent, or sending mobile utilisateurs à an unrelated domain. Google’s sneaky redirections policy est à propos de que intent, pas le technique.
Quand a JavaScript redirection is the correct outil
Là are legitimate cas:
«- Constrained platforms. Some shared hosting, CDN, or CMS setups give you no
access to server-side redirect rules. A JS redirect is a valid fallback — and
notably, Google used JS redirects on their own Webmaster blog because, as Gary
Illyes put it, “that was the only thing we could use for 1:1 redirects, and it
works on Google”
(OnCrawl).
» (Traduction) (Résumé en français de la section quarante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- SPA error handling. Google explicitly endorses this: “Use a JavaScript
redirect to a URL for which the server responds with a 404 HTTP status code.”
(Google Search Central)
A single-page app that resolves a bad route can redirect to a real 404 endpoint
so Google processes the error correctly instead of indexing a soft 404.
» (Traduction) (Résumé en français de la section quarante-trois, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Pour permanent URL migrations, ce est pas le outil — utiliser a 301. Je faire le même point dans migration de sites: JavaScript redirections sont a dernier resort, et Google peut jamais voir les.
Static site generators: le Hugo aliases trap
A courant surprise: Hugo’s aliases: frontmatter has historically generated
meta refresh HTML pages, pas server-side 301s — and autre static generators
have fait similaire choses by par défaut. Generator defaults modifier entre versions,
so vérifier votre current deployed version’s réel output plutôt que assuming; si
aliases: isn’t giving vous 301s, vous besoin platform-level redirection rules (Netlify
_redirects, Cloudflare Workers, Vercel vercel.json) plus (on Hugo)
disableAliases: true. I cover ce in detail in
Hugo SEO.
Implementation meilleur practices
Si a JavaScript redirection is genuinely votre seulement option:
- Utiliser
window.location.replace(), pas.href. As Moteur de recherche Journal puts il, JS redirections “typically utiliserwindow.location.replace()function plutôt quewindow.location.hrefà éviter UX boucle de redirectionss” (SEJ). - Put il dans le
<head>, pas le<body>. Navigateurs parse HTML sequentially et exécuter scripts as ils hit les, donc “position JavaScript redirections dans le<head>balise plutôt que<body>à minimize delay” (OnCrawl). - Redirection à le final destination dans un hop. A JS redirection à une page que itself 301s elsewhere rend a chain; chains waste budget d’exploration et peut surface dans GSC as a redirection erreur.
- Supprimer l’URL source depuis votre XML sitemap. Sitemaps devrait liste canonical, indexable URLs — pas redirecting ones.
- Repoint lien internes à le destination, donc ils ne pas route via le redirection à tout.
- Assurez-vous Googlebot peut récupérer le JS. Si le redirection lives dans an external
script bloqué par
robots.txt, Google ne peut pas rendre il et ne va pas voir le redirection.
How to detect JavaScript redirections
Ils don’t announce themselves comme a 301 in a header, so vous have to render:
- A robot d’exploration avec JS rendu on. OnCrawl recommends exploration avec
“JavaScript rendu enabled (5-deuxième timeout minimum)”; Screaming Frog et
Ahrefs Site Audit peut les deux rendre. Sans rendu, a JS-redirecting page simplement
semble comme a normal
200. - Chrome DevTools. Le Network tab (avec “Preserve log”) montre le client-side navigation; le Redirection Chemin extension flags il aussi.
- Dans Search Console, a successfully processed JS redirection montre up sous Page avec redirection — le même status as quelconque redirigé URL, qui est normal pour non-canonical sources. Que étiquette n’est pas guaranteed on quelconque donné vérifier, though: il reflects whatever Google récupéré, rendu, interpreted, et canonicalized à le sampled moment, donc une URL peut montrer a différent status (or aucun redirection status yet) entre vérifications sans que étant an erreur on votre fin.
Ce que I’d en réalité do
Serveur-side premier, chaque temps. Meta refresh (0-deuxième) quand vous pouvez edit HTML mais
pas serveur config. JavaScript seulement quand les deux sont off le tableau — et alors avec
window.location.replace() dans le <head>, a clean sitemap, et a vérifier que le
redirection en réalité renders pour Googlebot. Pour n’importe quoi permanent or élevé-valeur, le
supplémentaire reliability de a 301 est worth presque quelconque effort à obtain.
AI summary
A condensed prendre on the Avancé version:
«- A JavaScript redirect is client-side (window.location.replace(), .href,
.assign()). It’s only processed after rendering — phase three of crawl →
render → index — whereas a server-side 301 is seen at crawl time.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- The render queue is the risk: a page “may stay on this queue for a few
seconds, but it can take longer,” with no fixed service-level timeline, and
rendering can fail entirely, in which case Google may never see the redirect
and keeps the source page indexed.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google’s preference order: server-side (301/302/307/308) → meta refresh →
JavaScript. Docs: “Only use JavaScript redirects if you can’t do server-side or
meta refresh redirects.”
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- The target becomes a canonicalization signal once Google interprets a JS
redirect — so the “JS redirects don’t pass PageRank” myth is false — but Google
doesn’t document that the outcome matches a server-side redirect’s PageRank flow,
ranking, or timing exactly. JS redirects aren’t a penalty trigger unless used for
cloaking (sneaky redirects).
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Legitimate uses: constrained platforms (Google itself used them on their
blog), and SPA error pages that redirect to a real 404 (Google-endorsed).
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Meta refresh ≠ JS redirect: it’s HTML-level; 0s = permanent, any delay =
temporary. history.pushState()/replaceState() aren’t redirects — no
HTTP signal, crawlers don’t follow them.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Hugo aliases: are meta refresh, not 301s — a common trap on static
generators.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Implementation: window.location.replace() in the <head>, single hop to
the destination, remove source from sitemap, repoint internal links, ensure
Googlebot can fetch the JS.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Detection: crawl with JS rendering on, Chrome DevTools / Redirect Path,
“Page with redirect” in GSC.
» (Traduction) (Résumé en français de la section cinquante-neuf, sous-partie neuf : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Official documentation » (Traduction) (Résumé en français de la section soixante-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Primary-source guidance on redirects and JavaScript. » (Traduction) (Résumé en français de la section soixante-trois, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«Google » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Redirects and Google Search — the preference hierarchy (server-side → meta refresh → JavaScript), permanent vs. temporary handling, and the meta refresh delay rules. » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.) «- JavaScript SEO Basics — the render pipeline and the endorsed SPA-404 redirect use case. » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.) «- Fix search-related JavaScript problems — soft 404s, rendering, and debugging JS that Google can’t process. » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.) «- Sneaky redirects (spam policies) — when a redirect crosses into cloaking and becomes a policy violation. » (Traduction) (Résumé en français de la section soixante-quatre, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«Bing / Microsoft » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- Bing Webmaster Help — entry point for Bing’s current guidance. (At the time of writing, Bing had no dedicated redirects help page at a stable URL; Bingbot renders JavaScript less reliably than Googlebot, which makes JS-only redirects riskier for Bing indexation.) » (Traduction) (Résumé en français de la section soixante-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«## Quotes from the source » (Traduction) (Résumé en français de la section soixante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
On-le-record statements depuis Google et le personnes qui fonctionner on Recherche. Chaque Google-docs lien est a deep lien que jumps à le quoted passage.
Google — le preference order et le rendu risque
«- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section soixante-onze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- “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.” — Google Search Central docs. Jump to quote » (Traduction) (Résumé en français de la section soixante-onze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Google — the endorsed SPA utiliser cas
«- “Use a JavaScript redirect to a URL for which the server responds with a 404 HTTP status code (for example /not-found).”
— Google Search Central docs.
Jump to quote
» (Traduction) (Résumé en français de la section soixante-treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Gary Illyes, Google
«- On JS redirects generally: “Js redirects are probably not a good idea though.” (July 8, 2020) » (Traduction) (Résumé en français de la section soixante-quinze, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- On Google using them anyway when nothing else worked: “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.” Coverage » (Traduction) (Résumé en français de la section soixante-quinze, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
Moteur de recherche Journal — implementation and popularité des liens
- “JavaScript redirects typically utiliser
window.location.replace()function plutôt quewindow.location.hrefà avoid UX redirect loops.” Lire - “JavaScript redirects sont pas SEO-friendly et devrait être avoided quand alternatives exist… Seulement implement JavaScript redirects quand serveur-side alternatives sont genuinely indisponible.” Lire
Redirection types — cheat sheet
Quand Google sees it, and how it’s treated
| Méthode | Quand Google voit il | Treated as | Reliability |
|---|---|---|---|
Serveur-side 301 / 308 | Explorer temps | Permanent | Highest |
Serveur-side 302 / 307 | Explorer temps | Temporary | Highest |
Meta refresh, 0 seconds | HTML parse temps | Permanent | Élevé |
Meta refresh, delayed (>0s) | HTML parse temps | Temporary | Élevé |
| JavaScript redirection | Après rendu | Suit le navigation | Lowest |
history.pushState() / replaceState() | — | Pas a redirection | n/a |
JavaScript redirection méthodes
| Code | History behavior | Utiliser il? |
|---|---|---|
window.location.replace("url") | Supprime source depuis history | Oui — recommended |
window.location.href = "url" | Garde source (back-button loop) | Éviter pour redirections |
window.location.assign("url") | Même as .href | Éviter pour redirections |
document.location.href = "url" | Alias pour .href | Éviter pour redirections |
Rapide facts
- Google’s order: serveur-side → meta refresh → JavaScript. Utiliser JS seulement quand le premier deux sont impossible.
- Une fois interpreted, a JS redirect’s cible est a canonicalization signal — le “JS redirects don’t pass PageRank” myth est faux. Google ne fait pas document que résultat as identical à a 301’s, donc le réel risque est delay / rendre échec, pas a documented PageRank penalty.
- JS redirections sont pas a penalty unless utilisé pour cloaking.
- Hugo
aliases:= meta refresh, pas 301. - A processed JS redirection apparaît as “Page with redirect” dans GSC.
«## Should I use a JavaScript redirect? — decision checklist » (Traduction) (Résumé en français de la section quatre-vingt-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Walk ce top to bottom; arrêter at the premier “yes.”
- Peut I définir a server-side
301/302/307/308? → Do que. Arrêter ici. - Peut I edit the HTML
<head>but pas server config? → Utiliser a 0-second meta refresh pour permanent moves. Arrêter ici. - Neither is possible (locked-down platform), or it’s a SPA error page que devrait hit a réel 404? → A JavaScript redirection is acceptable. Continuer.
Si you’re en utilisant a JavaScript redirection
- Utiliser
window.location.replace()(pas.href/.assign()). - Placer le script dans le
<head>, as early as possible. - Redirection straight à le final destination — aucun chain via un autre redirection.
- Supprimer l’URL source depuis votre XML sitemap.
- Repoint lien internes à le destination.
- Confirmer le redirect’s JS est pas bloqué dans
robots.txtdonc Googlebot peut rendre il. - Vous sont pas showing robots d’exploration un page et redirecting utilisateurs elsewhere (cloaking).
- Vérifier par exploration avec JS rendu on et checking “Page with redirect” dans GSC.
The recommended JavaScript redirection
Put ce in the <head> so it executes as early as possible in parse order:
<head>
<script>
window.location.replace("https://example.com/new-page/");
</script>
</head> replace() est le clé choice — il drops le redirecting URL depuis session history,
donc le back button ne fait pas bounce le utilisateur straight back dans le redirection.
Le 0-deuxième meta refresh (suivant-meilleur quand vous pouvez’t faire serveur-side)
Pas JavaScript, mais le correct fallback quand vous pouvez edit HTML et pas serveur config. A 0-deuxième delay est treated par Google as a redirection permanente:
<head>
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
</head>Ce que PAS to utiliser as a redirection
history.pushState() rewrites the adresse bar but performs aucun navigation and
sends aucun HTTP signal — robots d’exploration won’t follow it:
// NOT a redirect — only changes the URL bar, no navigation happens
history.pushState({}, "", "/new-page/");Si vous besoin an SPA route modifier to be crawlable, give it a réel <a href> lien or
a genuine navigation, pas simplement a History API appel.
SPA error page → réel 404 (Google-endorsed pattern)
Quand a single-page app resolves an unknown route, send it to an endpoint que
renvoie an réel 404 so Google processes the error au lieu de a soft 404:
// On an unresolved route in your SPA:
window.location.href = "/not-found"; // /not-found must return HTTP 404 Outils pour finding and checking JavaScript redirections
«- Screaming Frog SEO Spider — enable JavaScript rendering (with a sufficient
rendering timeout) so JS-redirecting pages don’t just look like plain 200s.
» (Traduction) (Résumé en français de la section cent treize, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Ahrefs Site Audit — renders pages and surfaces redirects, chains, and
redirected internal links.
» (Traduction) (Résumé en français de la section cent treize, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Chrome DevTools — Network tab — turn on “Preserve log” and watch the
client-side navigation fire.
» (Traduction) (Résumé en français de la section cent treize, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Redirect Path (Chrome extension) — flags client-side redirects alongside
server-side ones in a quick popup.
» (Traduction) (Résumé en français de la section cent treize, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Google Search Console — URL Inspection — see how a single URL was crawled and
rendered, and whether Google landed on “Page with redirect.”
» (Traduction) (Résumé en français de la section cent treize, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- GSC — Page indexing report — “Page with redirect” lists redirected URLs;
“Redirect error” surfaces chains and loops.
» (Traduction) (Résumé en français de la section cent treize, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
Mistakes to éviter with JavaScript redirections
- En utilisant
window.location.href(or.assign()) au lieu de.replace()..hrefgarde le redirecting page dans session history, donc le back button bounces le utilisateur straight back dans le redirection — a loop. Faire à la place: utiliserwindow.location.replace(), qui drops le source depuis history. - Reaching pour a JS redirection on a permanent, élevé-valeur migration quand a 301 est disponible. JS redirections sont seulement processed après rendu, qui peut être delayed or échouer outright — le incorrect risque à prendre on une page que matters. Faire à la place: utiliser a serveur-side 301; enregistrer JavaScript pour constrained platforms et SPA erreur pages.
- Chaining le JS redirection dans un autre redirection au lieu de landing on le final destination dans un hop. Chains waste budget d’exploration et peut surface as a redirection erreur dans GSC. Faire à la place: point le JS redirection straight à le destination URL.
- Leaving l’URL source dans le XML sitemap. Sitemaps devrait liste canonical, indexable URLs, pas redirecting ones. Faire à la place: supprimer le source depuis le sitemap une fois le redirection est actif.
- Letting
robots.txtbloquer le script que fires le redirection. Si Googlebot ne peut pas récupérer le JS, il ne peut pas rendre le redirection, et le source page peut sit indexé indefinitely. Faire à la place: confirmer le script est crawlable — le robots.txt tester vérifications exactly ce. - Assuming Hugo’s
aliases:frontmatter donne vous a 301. Il a historically generated a meta refresh HTML page, pas a serveur-side redirection — vérifier votre deployed version’s réel sortie plutôt que assuming. Faire à la place: utiliser plateforme-level redirection règles (Netlify_redirects, Cloudflare Workers, Vercelvercel.json) plusdisableAliases: true, as covered dans Hugo SEO. - Treating
history.pushState()/replaceState()as a redirection. Ils seulement rewrite le adresse bar — aucun navigation, aucun HTTP signal, et robots d’exploration ne pas suivre les. Faire à la place: utiliser a réel<a href>lien or an réel navigation pour n’importe quoi que nécessite à être crawlable. - Showing robots d’exploration un page et sending utilisateurs somewhere sinon (cloaking). Ce est ce que turns a legitimate JS redirection dans a sneaky redirections policy violation — c’est à propos de intent, pas le technique. Faire à la place: send everyone, bots inclus, à le même destination.
Courant problèmes with JavaScript redirections
L’URL source stays indexé long après the redirection went live
- Probable causer: lune page est encore sitting dans Google’s rendre queue, or rendu failed outright.
- Corriger + vérifier: exécuter a Actif Tester dans la recherche Google Console’s URL
Inspection outil on l’URL source. Si il hasn’t rendu yet, wait — Google
donne aucun fixed timeline pour le rendre queue, donc recheck periodically plutôt
que assuming a spécifique window. Si rendu garde failing, confirmer le
redirection script n’est pas bloqué (voir le
robots.txtproblème ci-dessous).
The back button renvoie straight to the redirecting page
- Probable causer: le redirection utilise
window.location.hrefor.assign()au lieu de.replace(), donc l’URL source stays dans session history. - Corriger + vérifier: switch le script à
window.location.replace(). Confirmer par landing on le destination et pressing back — il devrait skip le redirection source entirely.
«### GSC shows “Crawled – currently not indexed” instead of “Page with redirect” » (Traduction) (Résumé en français de la section cent vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
- Probable causer: Google hasn’t rendu lune page yet, or rendu est failing pour que URL.
- Corriger + vérifier: explorer l’URL avec a JS-rendu robot d’exploration (Screaming Frog or
Ahrefs Site Audit, rendu enabled) à confirmer le redirection en réalité fires
client-side. Aussi vérifier que le redirection script n’est pas bloqué dans
robots.txt— le robots.txt tester confirms si Googlebot peut récupérer il.
An unresolved SPA route montre up as a soft 404 in GSC
- Probable causer: le route redirections somewhere, mais le destination ne fait pas
en réalité retourner an HTTP
404status. - Corriger + vérifier: point le redirection à an endpoint que genuinely responds
avec
404(Google’s endorsed modèle), alors re-exécuter Inspection d’URL à voir le status modifier depuis soft 404 à a clean 404.
A JS-redirecting page encore semble comme a plain 200 in a explorer report
- Probable causer: le robot d’exploration ran sans JavaScript rendu enabled, donc il seulement saw le initial HTML réponse, pas le client-side navigation.
- Corriger + vérifier: re-explorer avec JS rendu turned on (a 5-deuxième timeout minimum est a reasonable starting point) et confirmer le redirection maintenant montre up.
Proving the redirection en réalité took effect
«| Test to run | Expected result | Failure interpretation | Monitoring window | Rollback trigger |
| --- | --- | --- | --- | --- |
| robots.txt tester on the redirect script’s URL | Script is Allowed for Googlebot | Disallowed — Google can’t fetch the script, so it can never render the redirect | Immediate | Fix or remove the blocking robots.txt rule before relying on the redirect |
| Crawl the source URL with JS rendering enabled (Screaming Frog / Ahrefs Site Audit) | Crawler reports a client-side navigation to the intended destination | Page still reports a plain 200 with no navigation — rendering isn’t firing | Immediate (single crawl) | If it still doesn’t fire after fixing robots.txt, use a 0-second meta refresh or server-side redirect instead |
| GSC URL Inspection — Live Test on the source URL | Rendered result shows the redirect executing to the destination | Rendering fails, or the rendered HTML shows no navigation | Immediate for the live test itself | If Live Test repeatedly fails to render, treat this platform as unable to support a JS redirect — get server access or use meta refresh |
| GSC — Page indexing report for the source URL | Source URL is listed under “Page with redirect” | Still shows as indexed, “Crawled – currently not indexed,” or duplicate content | 2–4 weeks (indexing status updates on Google’s own schedule) | If still not classified as a redirect after 4+ weeks, revisit the render-blocking checks above |
| Manual back-button check in a browser after landing on the destination | Back button skips the source page entirely | Back button returns to the source page | Immediate | Switch the script from .href/.assign() to window.location.replace() |
» (Traduction) (Résumé en français de la section cent trente-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
Testez vos connaissances: JavaScript Redirections
Five rapide questions on how JavaScript redirections fonctionner and quand to utiliser les. Pick an réponse pour chaque, alors vérifier.
Ressources utiles
Mon connexe writing
- JavaScript SEO Problèmes & Meilleur Practices — le rendu side, qui est pourquoi JS redirections carry leur timing risque.
- Le Beginner’s Guide à SEO technique — où redirections et rendu fit dans le bigger picture.
«My speaking » (Traduction) (Résumé en français de la section cent quarante-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.) «- How Search Works (SlideShare) — my walkthrough of crawling, rendering, indexing, and ranking — the pipeline that makes a JS redirect a phase-three event. (My standing disclaimer applies: “This is my understanding of systems… not going to be 100% complete or accurate.”) » (Traduction) (Résumé en français de la section cent quarante-quatre, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«From around the industry
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Redirects and Google Search (Google Search Central) — the official preference hierarchy and permanent-vs-temporary handling.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie deux : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Sneaky redirects (Google Search Central) — the spam-policy line that separates a legitimate redirect from cloaking.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie trois : le texte source est conservé pour vérification lors de la relecture francophone.)
«- JavaScript Redirects & SEO: When & How To Use Them (Search Engine Journal) — practical implementation guidance and the replace() vs .href distinction.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie quatre : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Are JavaScript Redirects SEO-Friendly? (Search Engine Journal) — the “avoid when alternatives exist” summary.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie cinq : le texte source est conservé pour vérification lors de la relecture francophone.)
«- JavaScript Redirects and SEO: The Ultimate Guide (OnCrawl) — head-placement guidance, detection tooling, and the full Gary Illyes quote.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie six : le texte source est conservé pour vérification lors de la relecture francophone.)
«- Are JavaScript Redirects Bad for SEO? (Conductor) — a concise FAQ-style answer for the informational query.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie sept : le texte source est conservé pour vérification lors de la relecture francophone.)
«- A Guide to Redirect Types (Lumar) — broader redirect taxonomy with JS redirects in context.
» (Traduction) (Résumé en français de la section cent quarante-cinq, sous-partie huit : le texte source est conservé pour vérification lors de la relecture francophone.)
Journal des modifications
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.