Panduan JavaScript Redirects
Apa sebuah JavaScript redirect adalah, bagaimana Google's render pipeline memperlakukan ini differently dari sebuah server-side 301, ketika ini adalah sebuah acceptable terakhir resort, dan cara implement dan detect satu — plus di mana meta refresh dan History API fit.
1 sinyal bukti di halaman ini
- Alat aktif terkaitrobots.txt Tester
sebuah JavaScript redirect mengirim pengguna dan crawler untuk sebuah baru URL dengan client-side code (window.location.replace() atau.href). ini adalah paling sedikit reliable redirect jenis karena Google hanya sees ini setelah rendering — yang dapat menjadi delayed, atau fail entirely, dengan Tidak fixed timeline either cara. Google's official order dari preference adalah server-side (301/302/307/308) → meta refresh → JavaScript, dan -nya docs say plainly: hanya gunakan JS redirects jika Anda dapat't melakukan lainnya dua. Setelah Google successfully interprets satu, target becomes sebuah canonicalization sinyal — tetapi itu's tidak sebuah proven jaminan dari identical PageRank atau peringkat outcomes untuk sebuah 301, so treat ini sebagai sebuah terakhir resort alih-alih sebuah like-untuk-like tukar. gunakan them pada constrained platforms dengan Tidak server access, untuk SPA halaman error itu poin untuk sebuah nyata 404, dan little else. jika Anda harus gunakan satu, gunakan window.location.replace() di <head>, drop sumber URL dari Anda sitemap, dan poin tautan internal di akhir destination. Meta refresh adalah sebuah terpisah HTML-tingkat redirect, dan history.pushState()/replaceState() tidak redirects di semua.
TL;DR — sebuah JavaScript redirect menggunakan code di halaman untuk kirim Anda untuk sebuah berbeda URL setelah halaman memuat. ini berfungsi untuk orang, tetapi mesin pencari tangani ini lebih sedikit reliably daripada sebuah “real” (terjemahan) “nyata” server redirect (sebuah 301). jika Anda dapat siapkan sebuah 301 alih-alih, melakukan itu. Save JavaScript redirects untuk ketika Anda memiliki Tidak lainnya option.
Apa sebuah JavaScript redirect adalah
sebuah JavaScript redirect perubahan navigation melalui script execution alih-alih sebuah HTTP 3xx respons. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: Google: JavaScript redirects Google dapat proses JavaScript redirects tetapi recommends server-side redirects ketika mungkin. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: Google: Redirects and Search
ada dua broad cara untuk kirim seseorang dari satu URL untuk lainnya.
pertama adalah sebuah server-side redirect. sebelum halaman bahkan memuat, server says “itu halaman moved — go di sini alih-alih” (terjemahan) “itu halaman moved — go di sini alih-alih” menggunakan sebuah kode status like 301 (permanent) atau 302 (temporary). browser dan mesin pencari keduanya mendapatkan itu message immediately.
kedua adalah sebuah JavaScript redirect. halaman memuat biasanya, dan lalu sebuah bit dari code berjalan di browser dan mengirim Anda di suatu tempat else. Sesuatu like:
<script>
window.location.replace("https://example.com/new-page/");
</script>untuk sebuah person clicking sekitar, dua feel hampir yang sama. untuk sebuah mesin pencari, mereka’re very berbeda — dan itu perbedaan adalah seluruh alasan ini halaman ada.
Mengapa mesin pencari treat them differently
Google membaca Anda halaman di stages. pertama ini melakukan crawl (downloads mentah HTML). Kemudian ini renders halaman — sebenarnya berjalan JavaScript, cara sebuah browser akan. sebuah server-side 301 adalah terlihat di itu pertama langkah. sebuah JavaScript redirect tidak terlihat until rendering langkah, yang dapat come banyak kemudian — atau, sometimes, tidak di semua.
«Google says it directly: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (Google Search Central) » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga belas, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
So sebuah JavaScript redirect tidak buruk — ini adalah hanya lebih sedikit reliable. Google akan biasanya mendapatkan di sana eventually, tetapi sebuah nyata 301 adalah lebih cepat dan lebih certain.
sederhana aturan
- dapat Anda set sebuah 301 (atau 302)? melakukan itu. ini adalah gold standard.
- dapat’t touch server, tetapi dapat edit HTML
<head>? sebuah 0-kedua meta refresh adalah berikutnya-best option. - Neither? lalu sebuah JavaScript redirect adalah sebuah fine terakhir resort.
sebuah couple dari hal orang mendapatkan wrong:
- sebuah meta refresh adalah tidak sebuah JavaScript redirect. ini adalah sebuah
<meta>tag di Anda HTML, dan Google menangani ini sebelumnya dan lebih reliably daripada JS. history.pushState()adalah tidak sebuah redirect. ini hanya perubahan apa di address bar — ini tidak kirim anyone anywhere, dan mesin pencari jangan ikuti ini.
ingin render-pipeline timing, implementation detail, dan cara temukan JS redirects di sebuah crawl? Switch untuk Advanced tab.
TL;DR — sebuah JavaScript redirect adalah sebuah client-side redirect (
window.location.replace(),.href,.assign()) itu Google hanya memproses setelah rendering — phase three dari crawl → render → indeks. sebuah server-side 301 adalah seen di crawl time; sebuah JS redirect menunggu pada render queue, dan Google memberikan Tidak fixed timeline untuk itu tunggu — ini dapat menjadi quick atau ini dapat take sebuah panjang sementara, dan rendering dapat fail outright. Google’s terdokumentasi preference order adalah server-side → meta refresh → JavaScript, dan docs say untuk gunakan JS redirects hanya ketika Anda dapat’t melakukan lainnya dua. Setelah Google successfully interprets satu, target becomes sebuah permanent canonicalization sinyal — bahkan Google digunakan them pada mereka own blog ketika tidak ada apa pun else worked — tetapi itu’s tidak terdokumentasi proof dari identical PageRank atau peringkat outcomes untuk sebuah 301, so mereka’re sebuah terakhir resort, tidak sebuah spam sinyal. legitimate menggunakan adalah constrained platforms dengan Tidak server config dan SPA halaman error itu poin di sebuah nyata 404. Implement denganwindow.location.replace()di<head>, drop sumber dari Anda sitemap, repoint tautan internal, dan konfirmasi Googlebot dapat fetch JS. Meta refresh adalah HTML-tingkat (0s = permanent, apa pun delay = temporary), danhistory.pushState()/replaceState()tidak redirects di semua.
Apa counts sebagai sebuah JavaScript redirect
Script navigation bergantung pada rendering dan execution, so ini adalah tidak protocol-equivalent untuk sebuah HTTP redirect. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: Google: JavaScript redirects Processing adalah mungkin, tidak sebuah tepat-timing atau pengindeksan jaminan. Bukti untuk klaim ini Primary standard or official documentation supporting the adjacent article claim. Cakupan: Protocol semantics and Search behavior are kept separate; no indexing, ranking, or migration-timing guarantee is inferred. Tingkat keyakinan: tinggi · Diverifikasi: Google: Redirects and Search
sebuah JavaScript redirect navigates browser untuk sebuah baru URL dengan client-side code. umum metode, dan bagaimana mereka differ:
window.location.replace("url")— navigates dan menghapus original URL dari session history. ini adalah satu untuk gunakan: back button skips redirect sumber alih-alih bouncing pengguna straight back.window.location.href = "url"— navigates tetapi mempertahankan original di history, so back button mengembalikan untuk mengalihkan halaman (dan dapat buat loop).document.location.hrefdanwindow.location.assign("url")behave sama cara.history.pushState()/history.replaceState()— tidak redirects. mereka rewrite address bar tanpa apa pun navigation atau HTTP sinyal, so crawler jangan treat them sebagai redirects. SPAs gunakan them untuk di-app URL perubahan; mereka perlu nyata<a href>tautan (atau sebenarnya navigations) untuk menjadi dapat di-crawl.
dividing line itu penting: .replace(), .href, dan .assign() semua trigger
sebuah nyata document navigation ( perbedaan antara them adalah hanya apa happens untuk
session history), sementara pushState()/replaceState() tidak pernah navigate di semua —
mereka touch history state dan address bar dan tidak ada apa pun else. None dari four adalah
sebuah HTTP 301; “redirect” (terjemahan) “redirect” di sini adalah shorthand untuk client-side navigation, tidak sebuah status
code.
Meta refresh (<meta http-equiv="refresh" content="0;url=...">) adalah sering
lumped di dengan JS redirects, tetapi ini adalah sebuah HTML directive parsed sebelum JavaScript
berjalan — sebuah terpisah, lebih reliable category, covered di bawah.
Bagaimana Google memproses sebuah JavaScript redirect
ini adalah crux. Google’s pipeline berjalan di stages, dan sebuah JS redirect dan sebuah server-side redirect mendapatkan caught di berbeda 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.
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh satu, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
yang sama idea I membuat pada crawling dan di JavaScript SEO applies di sini: rendering adalah sebuah terpisah langkah dari fetching, dan apa pun itu bergantung pada ini inherits itu delay dan itu risk.
«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. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh tiga, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Google’s official preference order
redirects documentation lays out sebuah hierarchy dari sebagian besar untuk least reliable:
- server-side redirects — 301/308 (permanent), 302/307 (temporary). Best untuk semuanya: seen di crawl time, unambiguous.
- Meta refresh — HTML-tingkat. sebuah 0-kedua meta refresh adalah treated sebagai sebuah permanent redirect (like sebuah 301); apa pun delayed meta refresh adalah treated sebagai temporary.
- JavaScript redirects — terakhir resort.
«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.) » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh tujuh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
melakukan tautan equity lulus melalui?
«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. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
ini adalah juga mengapa JS redirects tidak sebuah penalty trigger pada mereka own. mereka hanya become sebuah spam masalah ketika mereka’re digunakan untuk cloaking — menunjukkan crawler satu halaman dan mengalihkan pengguna untuk sesuatu berbeda, atau sending mobile pengguna untuk sebuah unrelated domain. Google’s sneaky redirects policy adalah tentang itu intent, tidak technique.
Ketika sebuah JavaScript redirect adalah right alat
ada legitimate cases:
«- 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).
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian empat puluh tiga, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- 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.
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian empat puluh tiga, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
untuk permanent URL migrations, ini adalah tidak alat — gunakan 301. I membuat yang sama poin di situs migrations: JavaScript redirects adalah sebuah terakhir resort, dan Google dapat tidak pernah see them.
Static situs generators: Hugo aliases trap
sebuah umum surprise: Hugo’s aliases: frontmatter memiliki secara historis generated
meta refresh HTML halaman, tidak server-side 301s — dan lainnya static generators
memiliki selesai similar hal oleh default. Generator defaults perubahan antara versi,
so periksa Anda saat ini deployed versi’s sebenarnya output alih-alih assuming; jika
aliases: tidak giving Anda 301s, Anda perlu platform-tingkat redirect aturan (Netlify
_redirects, Cloudflare Workers, Vercel vercel.json) plus (pada Hugo)
disableAliases: true. I cover ini di detail di
Hugo SEO.
Implementation best practices
jika sebuah JavaScript redirect adalah genuinely Anda hanya option:
- gunakan
window.location.replace(), tidak.href. sebagai mesin pencari Journal puts ini, JS redirects “typically gunakanwindow.location.replace()function rather daripadawindow.location.hrefuntuk avoid UX redirect loops” (terjemahan) “typically gunakan tidak terdefinisi function alih-alih tidak terdefinisi untuk hindari UX redirect loops” (SEJ). - Put ini di
<head>, tidak<body>. browser parse HTML sequentially dan jalankan scripts sebagai mereka hit them, so “position JavaScript redirects di itu<head>tag rather daripada<body>untuk minimize delay” (terjemahan) “position JavaScript redirects di tidak terdefinisi tag alih-alih tidak terdefinisi untuk minimize delay” (OnCrawl). - Redirect untuk akhir destination di satu hop. sebuah JS redirect untuk sebuah halaman itu itself 301s elsewhere membuat sebuah chain; chains waste anggaran crawling dan dapat surface di GSC sebagai sebuah redirect error.
- hapus sumber URL dari Anda sitemap XML. Sitemaps seharusnya list canonical, dapat diindeks URLs — tidak mengalihkan ones.
- Repoint tautan internal di destination, so mereka jangan route melalui redirect di semua.
- pastikan Googlebot dapat fetch JS. jika redirect lives di sebuah external
script blocked oleh
robots.txt, Google dapat’t render ini dan tidak akan see redirect.
cara detect JavaScript redirects
mereka jangan announce themselves like sebuah 301 di sebuah header, so Anda memiliki untuk render:
- sebuah crawler dengan JS rendering pada. OnCrawl recommends crawling dengan
“JavaScript rendering enabled (5-second timeout minimum)” (terjemahan) “JavaScript rendering enabled (5-kedua timeout minimum)”; Screaming Frog dan
Ahrefs situs Audit dapat keduanya render. Tanpa rendering, sebuah JS-mengalihkan halaman hanya
looks like sebuah wajar
200. - Chrome DevTools. Network tab (dengan “Preserve log” (terjemahan) “pertahankan log”) menampilkan client-side navigation; Redirect Path extension flags ini too.
- di Search Console, sebuah successfully processed JS redirect menampilkan up di bawah halaman dengan redirect — yang sama status sebagai apa pun redirected URL, yang adalah wajar untuk non-canonical sources. itu label tidak guaranteed pada apa pun diberikan periksa, though: ini reflects whatever Google fetched, dirender, interpreted, dan canonicalized di sampled moment, so sebuah URL dapat tampilkan sebuah berbeda status (atau Tidak redirect status namun) antara memeriksa tanpa itu menjadi sebuah error pada Anda end.
Apa I’d sebenarnya melakukan
server-side pertama, setiap time. Meta refresh (0-kedua) ketika Anda dapat edit HTML tetapi
tidak server config. JavaScript hanya ketika keduanya adalah off table — dan lalu dengan
window.location.replace() di <head>, sebuah bersih sitemap, dan sebuah periksa bahwa
redirect sebenarnya renders untuk Googlebot. untuk apa pun permanent atau tinggi-nilai,
extra reliability dari sebuah 301 adalah worth hampir apa pun effort untuk obtain.
AI summary
sebuah condensed take pada Advanced versi:
«- 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.
- 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.
- 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.”
- 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).
- Legitimate uses: constrained platforms (Google itself used them on their blog), and SPA error pages that redirect to a real 404 (Google-endorsed).
- 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. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian lima puluh sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- Hugoaliases:are meta refresh, not 301s — a common trap on static generators. - 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. - Detection: crawl with JS rendering on, Chrome DevTools / Redirect Path, “Page with redirect” in GSC. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian lima puluh sembilan, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Dokumentasi resmi
Utama-sumber guidance pada redirects dan JavaScript.
- Redirects dan Google Search — preference hierarchy (server-side → meta refresh → JavaScript), permanent vs. temporary menangani, dan meta refresh delay aturan.
- JavaScript SEO Basics — render pipeline dan endorsed SPA-404 redirect gunakan case.
- Perbaiki penelusuran-related JavaScript masalah — soft 404s, rendering, dan debugging JS itu Google dapat’t proses.
- Sneaky redirects (spam policies) — ketika sebuah redirect crosses ke cloaking dan becomes sebuah policy violation.
Bing / Microsoft
- Bing Webmaster Help — entry poin untuk Bing’s saat ini guidance. (di time dari writing, Bing memiliki Tidak dedicated redirects help halaman di sebuah stable URL; Bingbot renders JavaScript lebih sedikit reliably daripada Googlebot, yang membuat JS-hanya redirects riskier untuk Bing pengindeksan.)
Quotes dari sumber
pada—record statements dari Google dan orang siapa berfungsi pada Penelusuran. setiap Google-docs tautan adalah sebuah deep tautan itu jumps untuk quoted passage.
Google — preference order dan rendering risk
«- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” — Google Search Central docs. Jump to quote
- “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 » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tujuh puluh satu, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Google — endorsed SPA gunakan case
«- “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
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tujuh puluh tiga, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Gary Illyes, Google
- pada JS redirects umumnya: “Js redirects are probably not a good idea though.” (terjemahan) “Js redirects adalah probably tidak sebuah baik idea though.” (July 8, 2020)
- pada Google menggunakan them anyway ketika tidak ada apa pun 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.” (terjemahan) “kami digunakan JS redirects pada webmasters.googleblog.com karena itu adalah satu-satunya hal kami dapat gunakan untuk 1:1 redirects, dan ini berfungsi pada Google.” Coverage
mesin pencari Journal — implementation dan tautan equity
- “JavaScript redirects typically gunakan
window.location.replace()function rather daripadawindow.location.hrefuntuk avoid UX redirect loops.” (terjemahan) “JavaScript redirects typically gunakan tidak terdefinisi function alih-alih tidak terdefinisi untuk hindari UX redirect loops.” Baca - “JavaScript redirects adalah tidak SEO-friendly dan seharusnya menjadi avoided ketika alternatives exist… Hanya implement JavaScript redirects ketika server-side alternatives adalah genuinely tidak tersedia.” (terjemahan) “JavaScript redirects adalah tidak SEO-friendly dan seharusnya menjadi avoided ketika alternatives exist… hanya implement JavaScript redirects ketika server-side alternatives adalah genuinely tidak tersedia.” Baca
Redirect jenis — cheat sheet
Ketika Google sees ini, dan bagaimana ini adalah treated
| metode | Ketika Google sees ini | Treated sebagai | Reliability |
|---|---|---|---|
server-side 301 / 308 | crawl time | Permanent | Highest |
server-side 302 / 307 | crawl time | Temporary | Highest |
Meta refresh, 0 seconds | HTML parse time | Permanent | tinggi |
Meta refresh, delayed (>0s) | HTML parse time | Temporary | tinggi |
| JavaScript redirect | setelah rendering | mengikuti navigation | Lowest |
history.pushState() / replaceState() | — | Tidak sebuah redirect | n/sebuah |
JavaScript redirect metode
| Code | History perilaku | gunakan ini? |
|---|---|---|
window.location.replace("url") | menghapus sumber dari history | Ya — recommended |
window.location.href = "url" | mempertahankan sumber (back-button loop) | hindari untuk redirects |
window.location.assign("url") | sama sebagai .href | hindari untuk redirects |
document.location.href = "url" | Alias untuk .href | hindari untuk redirects |
Fast facts
- Google’s order: server-side → meta refresh → JavaScript. gunakan JS hanya ketika pertama dua adalah impossible.
- Setelah interpreted, sebuah JS redirect’s target adalah sebuah canonicalization sinyal — “JS redirects jangan lulus PageRank” (terjemahan) “JS redirects jangan lulus PageRank” myth adalah salah. Google tidak document itu outcome sebagai identical untuk sebuah 301’s, so nyata risk adalah delay / render failure, tidak sebuah terdokumentasi PageRank penalty.
- JS redirects adalah tidak sebuah penalty unless digunakan untuk cloaking.
- Hugo
aliases:= meta refresh, tidak 301. - sebuah processed JS redirect muncul sebagai “Page with redirect” (terjemahan) “halaman dengan redirect” di GSC.
«## Should I use a JavaScript redirect? — decision checklist » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«Walk this top to bottom; stop at the first “yes.” » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
- dapat I set sebuah server-side
301/302/307/308? → melakukan itu. Berhenti di sini. - dapat I edit HTML
<head>tetapi tidak server config? → gunakan 0-kedua meta refresh untuk permanent moves. Berhenti di sini. - Neither adalah mungkin (locked-down platform), atau ini adalah sebuah SPA halaman error itu seharusnya hit sebuah nyata 404? → sebuah JavaScript redirect adalah acceptable. Continue.
jika Anda’re menggunakan sebuah JavaScript redirect
- gunakan
window.location.replace()(tidak.href/.assign()). - Place script di
<head>, sebagai early sebagai mungkin. - Redirect straight untuk akhir destination — Tidak chain melalui lainnya redirect.
- hapus sumber URL dari Anda sitemap XML.
- Repoint tautan internal untuk destination.
- Konfirmasi redirect’s JS adalah tidak blocked di
robots.txtso Googlebot dapat render ini. - Anda adalah tidak menunjukkan crawler satu halaman dan mengalihkan pengguna elsewhere (cloaking).
- Verify oleh crawling dengan JS rendering pada dan memeriksa “Page with redirect” (terjemahan) “halaman dengan redirect” di GSC.
recommended JavaScript redirect
Put ini di <head> so ini executes sebagai early sebagai mungkin di parse order:
<head>
<script>
window.location.replace("https://example.com/new-page/");
</script>
</head>replace() adalah key pilihan — ini drops mengalihkan URL dari session history,
so back button tidak bounce pengguna straight back ke redirect.
0-kedua meta refresh (berikutnya-best ketika Anda dapat’t melakukan server-side)
Tidak JavaScript, tetapi right fallback ketika Anda dapat edit HTML dan tidak server config. sebuah 0-kedua delay adalah treated oleh Google sebagai sebuah permanent redirect:
<head>
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
</head>Apa Tidak untuk gunakan sebagai sebuah redirect
history.pushState() rewrites address bar tetapi performs Tidak navigation dan
mengirim Tidak HTTP sinyal — crawler tidak akan ikuti ini:
// NOT a redirect — only changes the URL bar, no navigation happens
history.pushState({}, "", "/new-page/");jika Anda perlu sebuah SPA route perubahan untuk menjadi dapat di-crawl, memberikan ini sebuah nyata <a href> tautan atau
sebuah genuine navigation, tidak hanya sebuah History API panggil.
SPA halaman error → nyata 404 (Google-endorsed pattern)
Ketika sebuah single-halaman app resolves sebuah unknown route, kirim ini untuk sebuah endpoint itu
mengembalikan sebuah sebenarnya 404 so Google memproses error alih-alih sebuah soft 404:
// On an unresolved route in your SPA:
window.location.href = "/not-found"; // /not-found must return HTTP 404 alat untuk finding dan memeriksa JavaScript redirects
- Screaming Frog SEO Spider — enable JavaScript rendering (dengan sebuah sufficient
rendering timeout) so JS-mengalihkan halaman jangan hanya look like plain
200s. - Ahrefs situs Audit — renders halaman dan surfaces redirects, chains, dan redirected tautan internal.
- Chrome DevTools — Network tab — turn pada “Preserve log” (terjemahan) “pertahankan log” dan watch client-side navigation fire.
- Redirect Path (Chrome extension) — flags client-side redirects alongside server-side ones di sebuah quick popup.
- Google Search Console — pemeriksaan URL — see bagaimana sebuah single URL adalah di-crawl dan dirender, dan apakah Google landed pada “Halaman dengan redirect.” (terjemahan) “halaman dengan redirect.”
- GSC — halaman pengindeksan report — “Page with redirect” (terjemahan) “halaman dengan redirect” lists redirected URLs; “Redirect error” (terjemahan) “Redirect error” surfaces chains dan loops.
Mistakes untuk hindari dengan JavaScript redirects
- menggunakan
window.location.href(atau.assign()) alih-alih.replace()..hrefmempertahankan mengalihkan halaman di session history, so back button bounces pengguna straight back ke redirect — sebuah loop. melakukan alih-alih: gunakanwindow.location.replace(), yang drops sumber dari history. - Reaching untuk sebuah JS redirect pada sebuah permanent, tinggi-nilai migration ketika sebuah 301 adalah tersedia. JS redirects adalah hanya processed setelah rendering, yang dapat menjadi delayed atau fail outright — wrong risk untuk take pada sebuah halaman itu penting. melakukan alih-alih: gunakan server-side 301; save JavaScript untuk constrained platforms dan SPA halaman error.
- Chaining JS redirect ke lainnya redirect alih-alih landing pada akhir destination di satu hop. Chains waste anggaran crawling dan dapat surface sebagai sebuah redirect error di GSC. melakukan alih-alih: poin JS redirect straight di destination URL.
- Leaving sumber URL di sitemap XML. Sitemaps seharusnya list canonical, dapat diindeks URLs, tidak mengalihkan ones. melakukan alih-alih: hapus sumber dari sitemap setelah redirect adalah langsung.
- Letting
robots.txtblock script itu fires redirect. jika Googlebot dapat’t fetch JS, ini dapat’t render redirect, dan sumber halaman dapat sit terindeks indefinitely. melakukan alih-alih: konfirmasi script adalah dapat di-crawl — robots.txt tester memeriksa persis ini. - Assuming Hugo’s
aliases:frontmatter memberikan Anda sebuah 301. ini memiliki secara historis generated sebuah meta refresh HTML halaman, tidak sebuah server-side redirect — verify Anda deployed versi’s sebenarnya output alih-alih assuming. melakukan alih-alih: gunakan platform-tingkat redirect aturan (Netlify_redirects, Cloudflare Workers, Vercelvercel.json) plusdisableAliases: true, sebagai covered di Hugo SEO. - Treating
history.pushState()/replaceState()sebagai sebuah redirect. mereka hanya rewrite address bar — Tidak navigation, Tidak HTTP sinyal, dan crawler jangan ikuti them. melakukan alih-alih: gunakan nyata<a href>tautan atau sebuah sebenarnya navigation untuk apa pun itu perlu untuk menjadi dapat di-crawl. - Menunjukkan crawler satu halaman dan sending pengguna di suatu tempat else (cloaking). ini adalah apa turns sebuah legitimate JS redirect ke sebuah sneaky redirects policy violation — ini adalah tentang intent, tidak technique. melakukan alih-alih: kirim everyone, bot disertakan, untuk yang sama destination.
umum issues dengan JavaScript redirects
sumber URL tetap terindeks panjang setelah redirect went langsung
- mungkin penyebab: halaman adalah masih sitting di Google’s render queue, atau rendering failed outright.
- Perbaiki + periksa: jalankan sebuah Pengujian langsung di Google Search Console’s URL
Inspection alat pada sumber URL. jika ini hasn’t dirender namun, tunggu — Google
memberikan Tidak fixed timeline untuk render queue, so recheck periodically rather
daripada assuming sebuah spesifik window. jika rendering mempertahankan failing, konfirmasi
redirect script tidak blocked (see
robots.txtissue di bawah).
back button mengembalikan straight untuk mengalihkan halaman
- mungkin penyebab: redirect menggunakan
window.location.hrefatau.assign()alih-alih.replace(), so sumber URL tetap di session history. - Perbaiki + periksa: switch script untuk
window.location.replace(). Konfirmasi oleh landing pada destination dan pressing back — ini seharusnya skip redirect sumber entirely.
GSC menampilkan “Crawled – currently not indexed” (terjemahan) “di-crawl – saat ini tidak terindeks” alih-alih “Page with redirect” (terjemahan) “halaman dengan redirect”
- mungkin penyebab: Google hasn’t dirender halaman namun, atau rendering adalah failing untuk itu URL.
- Perbaiki + periksa: crawl URL dengan sebuah JS-rendering crawler (Screaming Frog atau
Ahrefs situs Audit, rendering enabled) untuk konfirmasi redirect sebenarnya fires
client-side. juga periksa bahwa redirect script tidak blocked di
robots.txt— robots.txt tester mengonfirmasi apakah Googlebot dapat fetch ini.
sebuah unresolved SPA route menampilkan up sebagai sebuah soft 404 di GSC
- mungkin penyebab: route redirects di suatu tempat, tetapi destination tidak
sebenarnya kembalikan sebuah HTTP
404status. - Perbaiki + periksa: poin redirect di sebuah endpoint itu genuinely responds
dengan
404(Google’s endorsed pattern), lalu re-jalankan pemeriksaan URL untuk see status perubahan dari soft 404 untuk sebuah bersih 404.
sebuah JS-mengalihkan halaman masih looks like sebuah plain 200 di sebuah crawl report
- mungkin penyebab: crawler ran tanpa JavaScript rendering enabled, so ini hanya saw awal HTML respons, tidak client-side navigation.
- Perbaiki + periksa: re-crawl dengan JS rendering turned pada (sebuah 5-kedua timeout minimum adalah sebuah reasonable starting poin) dan konfirmasi redirect now menampilkan up.
Proving redirect sebenarnya took effect
| Test untuk jalankan | Yang diharapkan hasil | Failure interpretation | Monitoring window | Rollback trigger |
|---|---|---|---|---|
| robots.txt tester pada redirect script’s URL | Script adalah Diizinkan untuk Googlebot | Disallowed — Google dapat’t fetch script, so ini dapat tidak pernah render redirect | Immediate | Perbaiki atau hapus blocking robots.txt aturan sebelum relying pada redirect |
| crawl sumber URL dengan JS rendering enabled (Screaming Frog / Ahrefs situs Audit) | crawler reports sebuah client-side navigation untuk yang dimaksud destination | halaman masih reports sebuah plain 200 dengan Tidak navigation — rendering tidak firing | Immediate (single crawl) | jika ini masih tidak fire setelah memperbaiki robots.txt, gunakan 0-kedua meta refresh atau server-side redirect alih-alih |
| GSC pemeriksaan URL — Pengujian langsung pada sumber URL | Dirender hasil menampilkan redirect executing untuk destination | rendering fails, atau dirender HTML menampilkan Tidak navigation | Immediate untuk pengujian langsung itself | jika Pengujian langsung repeatedly fails untuk render, treat ini platform sebagai unable untuk mendukung sebuah JS redirect — mendapatkan server access atau gunakan meta refresh |
| GSC — halaman pengindeksan report untuk sumber URL | Sumber URL adalah listed di bawah “Page with redirect” (terjemahan) “halaman dengan redirect” | masih menampilkan sebagai terindeks, “Crawled – currently not indexed,” (terjemahan) “di-crawl – saat ini tidak terindeks,” atau duplicate konten | 2–4 weeks (pengindeksan status memperbarui pada Google’s own schedule) | jika masih tidak classified sebagai sebuah redirect setelah 4+ weeks, revisit render-blocking memeriksa di atas |
| Manual back-button periksa di sebuah browser setelah landing pada destination | Back button skips sumber halaman entirely | Back button mengembalikan untuk sumber halaman | Immediate | Switch script dari .href/.assign() untuk window.location.replace() |
Uji pemahaman Anda: JavaScript Redirects
Five quick pertanyaan pada bagaimana JavaScript redirects berfungsi dan ketika untuk gunakan them. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
- JavaScript SEO Issues & Best Practices — rendering side, yang adalah mengapa JS redirects carry mereka timing risk.
- Beginner’s Guide untuk SEO teknis — di mana redirects dan rendering fit di bigger picture.
My speaking
- Bagaimana Penelusuran berfungsi (SlideShare) — my walkthrough dari crawling, rendering, pengindeksan, dan peringkat — pipeline itu membuat sebuah JS redirect sebuah phase-three event. (My standing disclaimer applies: “Ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.” (terjemahan) “ini adalah my understanding dari sistem… tidak going untuk menjadi 100% menyelesaikan atau accurate.”)
dari sekitar industry
- Redirects dan Google Search (Google Search Central) — official preference hierarchy dan permanent-vs-temporary menangani.
- Sneaky redirects (Google Search Central) — spam-policy line itu separates sebuah legitimate redirect dari cloaking.
- JavaScript Redirects & SEO: Ketika & cara gunakan Them (mesin pencari Journal) — practical implementation guidance dan
replace()vs.hrefpembedaan. - adalah JavaScript Redirects SEO-Friendly? (mesin pencari Journal) — “avoid ketika alternatives exist” (terjemahan) “hindari ketika alternatives exist” summary.
- JavaScript Redirects dan SEO: Ultimate Guide (OnCrawl) — head-placement guidance, detection tooling, dan penuh Gary Illyes quote.
- adalah JavaScript Redirects buruk untuk SEO? (Conductor) — sebuah concise FAQ-style jawaban untuk informational kueri.
- sebuah Guide untuk Redirect jenis (Lumar) — lebih luas redirect taxonomy dengan JS redirects di context.
Log perubahan
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.