JavaScript Các chuyển hướng
Điều gì một JavaScript chuyển hướng là, cách Google render pipeline xử lý điều này differently từ một máy chủ-side 301, khi đây là an acceptable cuối cùng resort, và cách implement và detect một — plus nơi meta refresh và đó History API fit.
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này
- Công cụ trực tuyến liên quanrobots.txt Tester
MỘT JavaScript chuyển hướng gửi người dùng và các crawler để một new URL với client-side code (window.location.replace() hoặc .href). đây là đó least reliable chuyển hướng loại vì Google chỉ sees điều này sau kết xuất — mà có thể là delayed, hoặc fail hoàn toàn, với không có mốc thời gian cố định either way. Google chính thức order of preference là máy chủ-side (301/302/307/308) → meta refresh → JavaScript, và của nó tài liệu chẳng hạn plainly: chỉ dùng JS các chuyển hướng nếu bạn không thể làm đó other hai. Khi Google successfully interprets một, đó đích becomes một tín hiệu canonicalization — nhưng đó là không một proven bảo đảm of giống hệt PageRank hoặc xếp hạng outcomes để một 301, so treat điều này as một cuối cùng resort thay vì một như-cho-như đổi. Dùng them on constrained các nền tảng với không máy chủ access, cho SPA lỗi các trang đó trỏ đến một real 404, và little khác. Nếu bạn phải dùng một, dùng window.location.replace() trong đó <head>, drop đó nguồn URL từ của bạn sitemap, và point liên kết nội bộ tại đó cuối đích. Meta refresh là một tách biệt HTML-cấp độ chuyển hướng, và history.pushState()/replaceState() không các chuyển hướng tại all.
Tóm tắt — JavaScript chuyển hướng dùng code trong trang để gửi bạn để khác URL sau khi trang loads. nó hoạt động cho mọi người, nhưng các công cụ tìm kiếm xử lý nó ít hơn reliably hơn “real” máy chủ chuyển hướng ( 301). nếu Bạn có thể thiết lập 301 thay vì, làm đó. Save JavaScript các chuyển hướng cho Khi bạn có không khác option.
Điều gì JavaScript chuyển hướng là
JavaScript chuyển hướng thay đổi navigation qua script execution thay vì HTTP 3xx phản hồi. 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 Google có thể xử lý JavaScript các chuyển hướng nhưng khuyến nghị máy chủ-side các chuyển hướng Khi có thể. 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
có hai rộng ways để gửi ai đó từ một URL để một.
Đó đầu tiên là một máy chủ-side chuyển hướng. Trước đó trang ngay cả loads, đó máy chủ says “that page moved — go here instead” (bản dịch) «đó trang moved — go ở đây thay vì» dùng một mã trạng thái như 301 (vĩnh viễn) hoặc 302 (tạm thời). Đó trình duyệt và đó công cụ tìm kiếm cả hai nhận đó message immediately.
thứ hai là JavaScript chuyển hướng. trang loads thông thường, và sau đó bit của code chạy trong trình duyệt và gửi bạn nơi nào đó khác. Điều gì đó như:
<script>
window.location.replace("https://example.com/new-page/");
</script>cho person clicking khoảng, hai feel gần như giống nhau. cho công cụ tìm kiếm, họ’re rất khác — và đó khác biệt là toàn bộ reason điều này trang tồn tại.
Vì sao các công cụ tìm kiếm treat them differently
Google đọc của bạn trang trong stages. đầu tiên nó crawl (downloads thô HTML). Sau đó nó renders trang — thực ra đang chạy JavaScript, way trình duyệt sẽ. máy chủ-side 301 là visible trong đó đầu tiên step. JavaScript chuyển hướng không phải visible cho đến khi kết xuất step, mà có thể come nhiều sau đó — hoặc, đôi khi, không tại all.
Google says điều này trực tiếp: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (bản dịch) «Chỉ dùng JavaScript các chuyển hướng nếu bạn không thể làm máy chủ-side hoặc meta refresh các chuyển hướng.» (Google Search Central)
So JavaScript chuyển hướng không phải bad — nó chỉ ít hơn reliable. Google sẽ thường nhận ở đó eventually, nhưng thực 301 là nhanh hơn và nhiều hơn certain.
đơn giản rule
- có thể bạn đặt 301 (hoặc 302)? Làm đó. nó gold tiêu chuẩn.
- có thể’t touch máy chủ, nhưng có thể edit HTML
<head>? 0-thứ hai meta refresh là tiếp theo-best option. - Neither? sau đó JavaScript chuyển hướng là fine cuối cùng resort.
couple của điều mọi người nhận sai:
- ** meta refresh không phải JavaScript chuyển hướng.** nó
<meta>tag trong của bạn HTML, và Google xử lý nó trước đó và nhiều hơn reliably hơn JS. history.pushState()không phải chuyển hướng. nó chỉ thay đổi Điều gì trong address bar — nó không gửi anyone anywhere, và các công cụ tìm kiếm không follow nó.
Muốn render-pipeline timing, chi tiết triển khai, và Cách tìm JS các chuyển hướng trong crawl? Chuyển để Nâng cao tab.
Tóm tắt — JavaScript chuyển hướng là client-side chuyển hướng (
window.location.replace(),.href,.assign()) đó Google chỉ xử lý sau khi kết xuất — phase three của crawl → render → chỉ mục. máy chủ-side 301 là seen tại crawl time; JS chuyển hướng chờ on render queue, và Google cho không có mốc thời gian cố định cho đó chờ — nó có thể là nhanh hoặc nó có thể take dài trong khi, và kết xuất có thể fail outright. Google được ghi lại preference order là máy chủ-side → meta refresh → JavaScript, và tài liệu chẳng hạn để sử dụng JS các chuyển hướng chỉ Khi Bạn có thể’t làm khác hai. sau khi Google successfully interprets một, đích becomes vĩnh viễn canonicalization tín hiệu — ngay cả Google được sử dụng them on của họ own blog Khi không có gì khác worked — nhưng đó không được ghi lại proof của giống hệt PageRank hoặc xếp hạng outcomes để 301, so họ’re cuối cùng resort, không spam tín hiệu. legitimate dùng là constrained các nền tảng với không máy chủ config và SPA lỗi các trang đó point tại thực 404. Implement vớiwindow.location.replace()trong<head>, drop nguồn từ của bạn sitemap, repoint liên kết nội bộ, và xác nhận Googlebot có thể fetch JS. Meta refresh là HTML-cấp độ (0s = vĩnh viễn, bất kỳ delay = tạm thời), vàhistory.pushState()/replaceState()không phải các chuyển hướng tại all.
Điều gì được tính as JavaScript chuyển hướng
Script navigation phụ thuộc vào kết xuất và execution, so nó không phải giao thức-tương đương để HTTP chuyển hướng. 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 Processing là có thể, không chính xác-timing hoặc lập chỉ mục bảo đảm. 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
JavaScript chuyển hướng navigates trình duyệt để new URL với client-side code. phổ biến các phương thức, và Cách họ differ:
window.location.replace("url")— navigates và xóa gốc URL từ session history. Đây là một để sử dụng: lại button skips chuyển hướng nguồn thay vì bouncing người dùng straight lại.window.location.href = "url"— navigates nhưng giữ gốc trong history, so lại button trả về để chuyển hướng trang (và có thể tạo loop).document.location.hrefvàwindow.location.assign("url")behave giống nhau way.history.pushState()/history.replaceState()— không các chuyển hướng. họ rewrite address bar không có bất kỳ navigation hoặc HTTP tín hiệu, so các crawler không treat them as các chuyển hướng. SPAs sử dụng them cho trong-app URL thay đổi; họ cần thực<a href>links (hoặc thực tế navigations) để là crawlable.
dividing line đó matters: .replace(), .href, và .assign() all trigger
thực document navigation ( khác biệt giữa them là chỉ Điều gì happens để
session history), trong khi pushState()/replaceState() không bao giờ navigate tại all —
họ touch history state và address bar và không có gì khác. None của four là
HTTP 301; “chuyển hướng” ở đây là shorthand cho client-side navigation, không status
code.
Meta refresh (<meta http-equiv="refresh" content="0;url=...">) là thường
lumped trong với JS các chuyển hướng, nhưng nó HTML directive parsed trước khi JavaScript
chạy — tách biệt, nhiều hơn reliable category, covered dưới.
Cách Google xử lý JavaScript chuyển hướng
Đây là crux. Google pipeline chạy trong stages, và JS chuyển hướng và máy chủ-side chuyển hướng nhận caught tại khác ones:
- Crawl — Googlebot fetches đó URL và đọc đó thô HTML. MỘT máy chủ-side 301/302/307/308 là seen right ở đây.
- Render queue — các trang đó trả về
200chờ để là được kết xuất. Google tài liệu note đó trang “may stay on this queue for a few seconds, but it can take longer than that.” (bản dịch) «có thể stay on này queue cho vài seconds, nhưng điều này có thể take lâu hơn đó.» Google không publish một fixed service-cấp độ timeline beyond đó, so treat đó chờ as unpredictable — điều này có thể là nhanh, hoặc điều này có thể drag — rather hơn assuming bất kỳ cụ thể number of days hoặc weeks. - Render + chỉ mục — headless Chromium chạy đó JavaScript. Này là đó đầu tiên moment một JS chuyển hướng tồn tại as far as Google là concerned.
giống nhau ý tưởng I làm on Crawling và trong JavaScript SEO áp dụng ở đây: kết xuất là tách biệt step từ fetching, và bất cứ điều gì đó phụ thuộc vào nó inherits đó delay và đó risk.
Và đó risk là 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.” (bản dịch) «Trong khi Google attempts để render mỗi URL Googlebot được crawl, kết xuất có thể fail cho various reasons. Này có nghĩa là đó nếu bạn set một JavaScript chuyển hướng, Google có thể không bao giờ see điều này nếu kết xuất of đó nội dung failed.» (Google Search Central) During đó window trước đó chuyển hướng là processed — và forever, nếu kết xuất fails — Google có thể giữ đó empty trang nguồn trong của nó chỉ mục.
Google chính thức preference order
các chuyển hướng tài liệu lays out hierarchy từ phần lớn để least reliable:
- máy chủ-side các chuyển hướng — 301/308 (vĩnh viễn), 302/307 (tạm thời). Best cho mọi thứ: seen tại crawl time, unambiguous.
- Meta refresh — HTML-cấp độ. 0-thứ hai meta refresh là được xem như vĩnh viễn chuyển hướng (như 301); bất kỳ delayed meta refresh là được xem như tạm thời.
- JavaScript các chuyển hướng — cuối cùng resort.
Google words: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (bản dịch) «Chỉ dùng JavaScript các chuyển hướng nếu bạn không thể làm máy chủ-side hoặc meta refresh các chuyển hướng.» Vĩnh viễn các chuyển hướng truyền đó tín hiệu canonical để đó đích; tạm thời ones giữ đó original trong kết quả. (Cách đó interacts với canonical selection là over on Canonicalization.)
Làm giá trị liên kết truyền qua?
Google own các chuyển hướng tài liệu lists JavaScript location navigation among của nó vĩnh viễn redirection các phương thức, và says đó đích becomes đó canonicalization tín hiệu khi Google có interpreted điều này — so đó flat “JS redirects don’t pass PageRank” (bản dịch) «JS các chuyển hướng không truyền PageRank» claim là sai. Điều gì đó tài liệu không establish là đó outcome là giống hệt, immediate, hoặc as reliable as một máy chủ-side 301 — điều này mô tả đó tín hiệu canonical, không phải là bảo đảm of matching PageRank flow, xếp hạng, hoặc timing. Đó honest cách diễn đạt: một 301 truyền đó tín hiệu tại crawl time với near-certainty; một JS chuyển hướng truyền điều này chỉ nếu và khi kết xuất succeeds, và Google không promise đó kết quả sẽ match một 301’s outcome một-cho-một. Đó khoảng trống — không lost equity — là đó real cost of chọn JavaScript.
Đây là cũng Vì sao JS các chuyển hướng không phải hình phạt trigger on của họ own. họ chỉ become spam vấn đề Khi họ’re được sử dụng cho cloaking — cho thấy các crawler một trang và chuyển hướng người dùng để điều gì đó khác, hoặc sending mobile người dùng để unrelated domain. Google sneaky các chuyển hướng policy là về đó intent, không technique.
Khi JavaScript chuyển hướng là right tool
có legitimate cases:
- Constrained các nền tảng. Some shared hosting, CDN, hoặc CMS setups cho bạn không access để máy chủ-side chuyển hướng rules. MỘT JS chuyển hướng là một hợp lệ fallback — và notably, Google dùng JS các chuyển hướng on của họ own Quản trị viên web blog vì, as Gary Illyes put điều này, “that was the only thing we could use for 1:1 redirects, and it works on Google” (bản dịch) «đó đã là điều duy nhất we có thể dùng cho 1:1 các chuyển hướng, và điều này hoạt động on Google» (OnCrawl).
- SPA lỗi xử lý. Google explicitly endorses này: “Use a JavaScript
redirect to a URL for which the server responds with a
404HTTP status code.” (bản dịch) «Dùng một JavaScript chuyển hướng để một URL cho mà đó máy chủ responds với một404HTTP mã trạng thái.» (Google Search Central) MỘT single-trang app đó resolves một bad route có thể chuyển hướng để một real 404 endpoint so Google xử lý đó lỗi correctly thay vì lập chỉ mục một soft 404.
cho vĩnh viễn URL migrations, Đây là không tool — sử dụng 301. I làm giống nhau point trong trang web migrations: JavaScript các chuyển hướng là cuối cùng resort, và Google có thể không bao giờ see them.
Static trang web generators: Hugo aliases trap
phổ biến surprise: Hugo aliases: frontmatter có trong lịch sử generated
meta refresh HTML các trang, không máy chủ-side 301s — và khác static generators
có đã xong similar điều theo mặc định. Generator defaults thay đổi giữa versions,
so kiểm tra của bạn hiện tại deployed version thực tế output thay vì assuming; nếu
aliases: không phải giving bạn 301s, bạn cần nền tảng-cấp độ chuyển hướng rules (Netlify
_redirects, Cloudflare Workers, Vercel vercel.json) plus (on Hugo)
disableAliases: true. I cover điều này trong detail trong
Hugo SEO.
Implementation thực hành tốt nhất
nếu JavaScript chuyển hướng là genuinely của bạn chỉ option:
- Dùng
window.location.replace(), không.href. As Search Engine Journal diễn đạt điều này, JS các chuyển hướng “typically usewindow.location.replace()function rather thanwindow.location.hrefto avoid UX redirect loops” (bản dịch) «typically dùngwindow.location.replace()function thay vìwindow.location.hrefđể tránh UX chuyển hướng loops» (SEJ). - Put điều này trong đó
<head>, không đó<body>. Các trình duyệt parse HTML sequentially và chạy scripts as they hit them, so “position JavaScript redirects in the<head>tag rather than<body>to minimize delay” (bản dịch) «position JavaScript các chuyển hướng trong đó thẻ head tag thay vì thẻ thân phản hồi để minimize delay» (OnCrawl). - Chuyển hướng để đó cuối đích trong một hop. MỘT JS chuyển hướng để một trang đó itself 301s elsewhere làm một chain; chains waste ngân sách crawl và có thể surface trong GSC as một lỗi chuyển hướng.
- Xóa đó nguồn URL từ của bạn XML sitemap. Sitemaps nên list canonical, indexable URLs — không chuyển hướng ones.
- Repoint liên kết nội bộ tại đó đích, so they không route qua đó chuyển hướng tại all.
- Hãy bảo đảm Googlebot có thể fetch đó JS. Nếu đó chuyển hướng lives trong an external
script blocked by
robots.txt, Google không thể render điều này và sẽ không see đó chuyển hướng.
Cách detect JavaScript các chuyển hướng
họ không announce themselves như 301 trong header, so bạn có để render:
- MỘT crawler với JS kết xuất on. OnCrawl khuyến nghị crawling với
“JavaScript rendering enabled (5-second timeout minimum)” (bản dịch) «JavaScript kết xuất enabled (5-second timeout minimum)»; Screaming Frog và
Ahrefs Site Audit có thể cả hai render. Không có kết xuất, một JS-chuyển hướng trang chỉ
looks như một thông thường
200. - Chrome DevTools. Đó Network tab (với “Preserve log” (bản dịch) «Bảo toàn log») cho thấy đó client-side navigation; đó Chuyển hướng Path extension flags điều này cũng.
- Trong Search Console, một successfully processed JS chuyển hướng cho thấy lên dưới Trang với chuyển hướng — đó giống nhau status as bất kỳ được chuyển hướng URL, mà là thông thường cho non-canonical sources. Đó label không guaranteed on bất kỳ được cho kiểm tra, though: điều này reflects whatever Google fetched, được kết xuất, interpreted, và canonicalized tại đó sampled moment, so một URL có thể cho thấy một khác nhau status (hoặc không chuyển hướng status tuy vậy) giữa kiểm tra không có đó đang an lỗi on của bạn end.
Điều gì I’d thực ra làm
máy chủ-side đầu tiên, mỗi time. Meta refresh (0-thứ hai) Khi Bạn có thể edit HTML nhưng
không máy chủ config. JavaScript chỉ Khi cả hai là off bảng — và sau đó với
window.location.replace() trong <head>, sạch sitemap, và kiểm tra đó
chuyển hướng thực ra renders cho Googlebot. cho bất cứ điều gì vĩnh viễn hoặc cao-giá trị,
extra reliability của 301 là worth gần như bất kỳ effort để obtain.
AI summary
condensed take on Nâng cao version:
- MỘT JavaScript chuyển hướng là client-side (
window.location.replace(),.href,.assign()). đây là chỉ processed sau kết xuất — phase three of crawl → render → chỉ mục — whereas một máy chủ-side 301 là seen tại crawl time. - Đó render queue là đó risk: một trang “may stay on this queue for a few seconds, but it can take longer,” (bản dịch) «có thể stay on này queue cho vài seconds, nhưng điều này có thể take lâu hơn,» với không fixed service-cấp độ timeline, và kết xuất có thể fail hoàn toàn, trong mà case Google có thể không bao giờ see đó chuyển hướng và giữ đó trang nguồn được lập chỉ mục.
- Google preference order: máy chủ-side (301/302/307/308) → meta refresh → JavaScript. Tài liệu: “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (bản dịch) «Chỉ dùng JavaScript các chuyển hướng nếu bạn không thể làm máy chủ-side hoặc meta refresh các chuyển hướng.»
- Đó đích becomes một tín hiệu canonicalization khi Google interprets một JS chuyển hướng — so đó “JS redirects don’t pass PageRank” (bản dịch) «JS các chuyển hướng không truyền PageRank» myth là sai — nhưng Google không document đó outcome matches một máy chủ-side chuyển hướng PageRank flow, xếp hạng, hoặc timing chính xác. JS các chuyển hướng không một hình phạt trigger trừ khi dùng cho cloaking (sneaky các chuyển hướng).
- Legitimate dùng: constrained các nền tảng (Google itself dùng them on của họ blog), và SPA lỗi các trang đó chuyển hướng để một real 404 (Google-endorsed).
- Meta refresh ≠ JS chuyển hướng: đây là HTML-cấp độ; 0s = vĩnh viễn, bất kỳ delay =
tạm thời.
history.pushState()/replaceState()không các chuyển hướng — không HTTP tín hiệu, các crawler không follow them. - Hugo
aliases:là meta refresh, không 301s — một phổ biến trap on static generators. - Implementation:
window.location.replace()trong đó<head>, single hop để đó đích, xóa nguồn từ sitemap, repoint liên kết nội bộ, bảo đảm Googlebot có thể fetch đó JS. - Detection: crawl với JS kết xuất on, Chrome DevTools / Chuyển hướng Path, “Page with redirect” (bản dịch) «Trang với chuyển hướng» trong GSC.
Tài liệu chính thức
Chính-nguồn hướng dẫn on các chuyển hướng và JavaScript.
- Các chuyển hướng và Google Search — preference hierarchy (máy chủ-side → meta refresh → JavaScript), vĩnh viễn so với. tạm thời xử lý, và meta refresh delay rules.
- JavaScript SEO Basics — render pipeline và endorsed SPA-404 chuyển hướng sử dụng case.
- khắc phục tìm kiếm-related JavaScript các vấn đề — soft 404s, kết xuất, và gỡ lỗi JS đó Google có thể’t xử lý.
- Sneaky các chuyển hướng (spam policies) — Khi chuyển hướng crosses vào cloaking và becomes policy violation.
Bing / Microsoft
- Bing Quản trị viên web Help — entry point cho Bing hiện tại hướng dẫn. (Tại time của writing, Bing có không dedicated các chuyển hướng help trang tại ổn định URL; Bingbot renders JavaScript ít hơn reliably hơn Googlebot, mà làm JS-chỉ các chuyển hướng riskier cho Bing indexation.)
Quotes từ nguồn
On—record statements từ Google và mọi người ai hoạt động on Tìm kiếm. mỗi Google-tài liệu link là deep link đó jumps để quoted passage.
Google — preference order và kết xuất risk
- “Only use JavaScript redirects if you can’t do server-side or meta refresh redirects.” (bản dịch) «Chỉ dùng JavaScript các chuyển hướng nếu bạn không thể làm máy chủ-side hoặc meta refresh các chuyển hướng.» — Google Search Central tài liệu. Nhảy đến trích dẫn
- “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.” (bản dịch) «Trong khi Google attempts để render mỗi URL Googlebot được crawl, kết xuất có thể fail cho various reasons. Này có nghĩa là đó nếu bạn set một JavaScript chuyển hướng, Google có thể không bao giờ see điều này nếu kết xuất of đó nội dung failed.» — Google Search Central tài liệu. Nhảy đến trích dẫn
Google — endorsed SPA sử dụng case
- “Use a JavaScript redirect to a URL for which the server responds with a
404HTTP status code (for example/not-found).” (bản dịch) «Dùng một JavaScript chuyển hướng để một URL cho mà đó máy chủ responds với một404HTTP mã trạng thái (ví dụ/not-found).» — Google Search Central tài liệu. Nhảy đến trích dẫn
Gary Illyes, Google
- On JS các chuyển hướng generally: “Js redirects are probably not a good idea though.” (bản dịch) «Js các chuyển hướng là probably không một good ý tưởng though.» (July 8, 2020)
- On Google dùng them anyway khi không có gì khác 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.” (bản dịch) «We dùng JS các chuyển hướng on quản trị viên web.googleblog.com vì đó đã là điều duy nhất we có thể dùng cho 1:1 các chuyển hướng, và điều này hoạt động on Google.» Coverage
công cụ tìm kiếm Journal — implementation và giá trị liên kết
- “JavaScript redirects typically use
window.location.replace()function rather thanwindow.location.hrefto avoid UX redirect loops.” (bản dịch) «JavaScript các chuyển hướng typically dùngwindow.location.replace()function thay vìwindow.location.hrefđể tránh UX chuyển hướng loops.» Đọc - “JavaScript redirects are not SEO-friendly and should be avoided when alternatives exist… Only implement JavaScript redirects when server-side alternatives are genuinely unavailable.” (bản dịch) «JavaScript các chuyển hướng không phải SEO-friendly và nên là avoided khi alternatives exist… Chỉ implement JavaScript các chuyển hướng khi máy chủ-side alternatives là genuinely không khả dụng.» Đọc
chuyển hướng types — bảng tra nhanh
Khi Google sees nó, và Cách nó treated
| Phương thức | Khi Google sees nó | được xem như | Reliability |
|---|---|---|---|
máy chủ-side 301 / 308 | Crawl time | Vĩnh viễn | Highest |
máy chủ-side 302 / 307 | Crawl time | Tạm thời | Highest |
Meta refresh, 0 seconds | HTML parse time | Vĩnh viễn | Cao |
Meta refresh, delayed (>0s) | HTML parse time | Tạm thời | Cao |
| JavaScript chuyển hướng | sau khi kết xuất | Follows navigation | Lowest |
history.pushState() / replaceState() | — | không chuyển hướng | n/ |
JavaScript chuyển hướng các phương thức
| Code | History behavior | sử dụng nó? |
|---|---|---|
window.location.replace("url") | Xóa nguồn từ history | Có — được khuyến nghị |
window.location.href = "url" | Giữ nguồn (lại-button loop) | tránh cho các chuyển hướng |
window.location.assign("url") | giống nhau as .href | tránh cho các chuyển hướng |
document.location.href = "url" | Alias cho .href | tránh cho các chuyển hướng |
Fast facts
- Google order: máy chủ-side → meta refresh → JavaScript. Dùng JS chỉ khi đó đầu tiên hai là không thể.
- Khi interpreted, một JS đích chuyển hướng là một tín hiệu canonicalization — đó “JS redirects don’t pass PageRank” (bản dịch) «JS các chuyển hướng không truyền PageRank» myth là sai. Google không document đó outcome as giống hệt để một 301’s, so đó real risk là delay / render failure, không một được ghi lại PageRank hình phạt.
- JS các chuyển hướng là không một hình phạt trừ khi dùng cho cloaking.
- Hugo
aliases:= meta refresh, không 301. - MỘT processed JS chuyển hướng xuất hiện as “Page with redirect” (bản dịch) «Trang với chuyển hướng» trong GSC.
nên I sử dụng JavaScript chuyển hướng? — decision checklist
Walk điều này top để bottom; dừng tại đầu tiên “có.”
- có thể I đặt máy chủ-side
301/302/307/308? → Làm đó. Dừng ở đây. - có thể I edit HTML
<head>nhưng không máy chủ config? → sử dụng 0-thứ hai meta refresh cho vĩnh viễn moves. Dừng ở đây. - Neither là có thể (locked-xuống nền tảng), hoặc nó SPA trang lỗi đó nên hit thực 404? → JavaScript chuyển hướng là acceptable. Continue.
nếu bạn’re sử dụng JavaScript chuyển hướng
- Dùng
window.location.replace()(không.href/.assign()). - Place đó script trong đó
<head>, as sớm as có thể. - Chuyển hướng straight để đó cuối đích — không chain qua một sản phẩm khác chuyển hướng.
- Xóa đó nguồn URL từ của bạn XML sitemap.
- Repoint liên kết nội bộ để đó đích.
- Xác nhận đó chuyển hướng JS là không blocked trong
robots.txtso Googlebot có thể render điều này. - Bạn là không cho thấy các crawler một trang và chuyển hướng người dùng elsewhere (cloaking).
- Verify by crawling với JS kết xuất on và kiểm tra “Page with redirect” (bản dịch) «Trang với chuyển hướng» trong GSC.
được khuyến nghị JavaScript chuyển hướng
Put điều này trong <head> so nó executes as sớm as có thể trong parse order:
<head>
<script>
window.location.replace("https://example.com/new-page/");
</script>
</head>replace() là Điểm mấu chốt lựa chọn — nó drops chuyển hướng URL từ session history,
so lại button không bounce người dùng straight lại vào chuyển hướng.
0-thứ hai meta refresh (tiếp theo-best Khi Bạn có thể’t làm máy chủ-side)
không JavaScript, nhưng right fallback Khi Bạn có thể edit HTML và không máy chủ config. 0-thứ hai delay là treated by Google as vĩnh viễn chuyển hướng:
<head>
<meta http-equiv="refresh" content="0; url=https://example.com/new-page/">
</head>Điều gì không để sử dụng as chuyển hướng
history.pushState() rewrites address bar nhưng thực hiện không navigation và
gửi không HTTP tín hiệu — các crawler sẽ không follow nó:
// NOT a redirect — only changes the URL bar, no navigation happens
history.pushState({}, "", "/new-page/");nếu bạn cần SPA route thay đổi để là crawlable, cho nó thực <a href> link hoặc
genuine navigation, không chỉ History API call.
SPA trang lỗi → thực 404 (Google-endorsed pattern)
Khi single-trang app resolves unknown route, gửi nó để điểm cuối đó
trả về thực tế 404 so Google xử lý lỗi thay vì soft 404:
// On an unresolved route in your SPA:
window.location.href = "/not-found"; // /not-found must return HTTP 404 Tools cho finding và kiểm tra JavaScript các chuyển hướng
- Screaming Frog SEO Spider — enable JavaScript kết xuất (với một sufficient
kết xuất timeout) so JS-chuyển hướng các trang không chỉ trông giống đơn giản
200s. - Ahrefs Site Audit — renders các trang và surfaces các chuyển hướng, chains, và được chuyển hướng liên kết nội bộ.
- Chrome DevTools — Network tab — turn on “Preserve log” (bản dịch) «Bảo toàn log» và watch đó client-side navigation fire.
- Chuyển hướng Path (Chrome extension) — flags client-side các chuyển hướng alongside máy chủ-side ones trong một nhanh popup.
- Google Search Console — URL Inspection — see cách một single URL đã là được crawl và được kết xuất, và liệu Google landed on “Page with redirect.” (bản dịch) «Trang với chuyển hướng.»
- GSC — Trang lập chỉ mục báo cáo — “Page with redirect” (bản dịch) «Trang với chuyển hướng» lists được chuyển hướng URLs; “Redirect error” (bản dịch) «Lỗi chuyển hướng» surfaces chains và loops.
Mistakes để tránh với JavaScript các chuyển hướng
- sử dụng
window.location.href(hoặc.assign()) thay vì.replace()..hrefgiữ chuyển hướng trang trong session history, so lại button bounces người dùng straight lại vào chuyển hướng — loop. Làm thay vì: sử dụngwindow.location.replace(), mà drops nguồn từ history. - Reaching cho JS chuyển hướng on vĩnh viễn, cao-giá trị migration Khi 301 là khả dụng. JS các chuyển hướng là chỉ processed sau khi kết xuất, mà có thể là delayed hoặc fail outright — sai risk để take trên một trang đó matters. Làm thay vì: sử dụng máy chủ-side 301; save JavaScript cho constrained các nền tảng và SPA lỗi các trang.
- Chaining JS chuyển hướng vào một chuyển hướng thay vì landing on cuối đích trong một hop. Chains waste ngân sách crawl và có thể surface as chuyển hướng lỗi trong GSC. Làm thay vì: point JS chuyển hướng straight tại đích URL.
- Leaving nguồn URL trong XML sitemap. Sitemaps nên list canonical, indexable các URL, không chuyển hướng ones. Làm thay vì: xóa nguồn từ sitemap sau khi chuyển hướng là trực tiếp.
- Letting
robots.txtblock script đó fires chuyển hướng. nếu Googlebot có thể’t fetch JS, nó có thể’t render chuyển hướng, và nguồn trang có thể sit được lập chỉ mục indefinitely. Làm thay vì: xác nhận script là crawlable — robots.txt tester kiểm tra chính xác điều này. - Assuming Hugo
aliases:frontmatter cho bạn 301. nó có trong lịch sử generated meta refresh HTML trang, không máy chủ-side chuyển hướng — verify của bạn deployed version thực tế output thay vì assuming. Làm thay vì: sử dụng nền tảng-cấp độ chuyển hướng rules (Netlify_redirects, Cloudflare Workers, Vercelvercel.json) plusdisableAliases: true, as covered trong Hugo SEO. - Treating
history.pushState()/replaceState()as chuyển hướng. họ chỉ rewrite address bar — không navigation, không HTTP tín hiệu, và các crawler không follow them. Làm thay vì: sử dụng thực<a href>link hoặc thực tế navigation cho bất cứ điều gì đó cần để là crawlable. - Cho thấy các crawler một trang và sending người dùng nơi nào đó khác (cloaking). Đây là Điều gì turns legitimate JS chuyển hướng vào sneaky các chuyển hướng policy violation — nó về intent, không technique. Làm thay vì: gửi mọi người, bots được bao gồm, để giống nhau đích.
phổ biến các vấn đề với JavaScript các chuyển hướng
nguồn URL vẫn giữ được lập chỉ mục dài sau khi chuyển hướng went trực tiếp
- có khả năng nguyên nhân: trang là vẫn sitting trong Google render queue, hoặc kết xuất thất bại outright.
- khắc phục + kiểm tra: chạy Trực tiếp Kiểm thử trong Google Search Console’s URL
Inspection tool on nguồn URL. nếu nó hasn’t được kết xuất tuy vậy, chờ — Google
cho không có mốc thời gian cố định cho render queue, so recheck periodically rather
hơn assuming cụ thể window. nếu kết xuất giữ failing, xác nhận
chuyển hướng script không phải blocked (see
robots.txtvấn đề dưới).
lại button trả về straight để chuyển hướng trang
- có khả năng nguyên nhân: chuyển hướng dùng
window.location.hrefhoặc.assign()thay vì.replace(), so nguồn URL vẫn giữ trong session history. - khắc phục + kiểm tra: chuyển script để
window.location.replace(). xác nhận by landing on đích và pressing lại — nó nên skip chuyển hướng nguồn hoàn toàn.
GSC cho thấy “Crawled – currently not indexed” (bản dịch) «Được crawl – hiện tại không được lập chỉ mục» thay vì “Page with redirect” (bản dịch) «Trang với chuyển hướng»
- có khả năng nguyên nhân: Google hasn’t được kết xuất trang tuy vậy, hoặc kết xuất là failing cho đó URL.
- khắc phục + kiểm tra: crawl URL với JS-kết xuất crawler (Screaming Frog hoặc
Ahrefs trang web Audit, kết xuất enabled) để xác nhận chuyển hướng thực ra fires
client-side. cũng kiểm tra đó chuyển hướng script không phải blocked trong
robots.txt— robots.txt tester xác nhận liệu Googlebot có thể fetch nó.
unresolved SPA route hiển thị lên as soft 404 trong GSC
- có khả năng nguyên nhân: route các chuyển hướng nơi nào đó, nhưng đích không
thực ra trả về HTTP
404status. - khắc phục + kiểm tra: point chuyển hướng tại điểm cuối đó genuinely responds
với
404(Google endorsed pattern), sau đó re-chạy URL Inspection để see status thay đổi từ soft 404 để sạch 404.
JS-chuyển hướng trang vẫn looks như đơn giản 200 trong báo cáo crawl
- có khả năng nguyên nhân: crawler ran không có JavaScript kết xuất enabled, so nó chỉ saw ban đầu HTML phản hồi, không client-side navigation.
- khắc phục + kiểm tra: re-crawl với JS kết xuất turned on ( 5-thứ hai timeout minimum là reasonable starting point) và xác nhận chuyển hướng hiện tại hiển thị lên.
Proving chuyển hướng thực ra took effect
| Kiểm thử để chạy | Dự kiến kết quả | Failure interpretation | Monitoring window | Rollback trigger |
|---|---|---|---|---|
| robots.txt tester on đó chuyển hướng script URL | Script là Được phép cho Googlebot | Disallowed — Google không thể fetch đó script, so điều này có thể không bao giờ render đó chuyển hướng | Immediate | Cách sửa hoặc xóa đó blocking robots.txt rule trước relying on đó chuyển hướng |
| Crawl đó nguồn URL với JS kết xuất enabled (Screaming Frog / Ahrefs Site Audit) | Crawler các báo cáo một client-side navigation để đó dự kiến đích | Trang vẫn các báo cáo một đơn giản 200 với không navigation — kết xuất không firing | Immediate (single crawl) | Nếu điều này vẫn không fire sau sửa robots.txt, dùng một 0-second meta refresh hoặc máy chủ-side chuyển hướng thay vì |
| GSC URL Inspection — Trực tiếp Kiểm thử on đó nguồn URL | Được kết xuất kết quả cho thấy đó chuyển hướng executing để đó đích | Kết xuất fails, hoặc đó được kết xuất HTML cho thấy không navigation | Immediate cho đó trực tiếp kiểm thử itself | Nếu Trực tiếp Kiểm thử repeatedly fails để render, treat này nền tảng as unable để hỗ trợ một JS chuyển hướng — nhận máy chủ access hoặc dùng meta refresh |
| GSC — Trang lập chỉ mục báo cáo cho đó nguồn URL | Nguồn URL là listed dưới “Page with redirect” (bản dịch) «Trang với chuyển hướng» | Vẫn cho thấy as được lập chỉ mục, “Crawled – currently not indexed,” (bản dịch) «Được crawl – hiện tại không được lập chỉ mục,» hoặc duplicate nội dung | 2–4 weeks (lập chỉ mục status cập nhật on Google own schedule) | Nếu vẫn không classified as một chuyển hướng sau 4+ weeks, revisit đó render-blocking kiểm tra trên |
| Manual lại-button kiểm tra trong một trình duyệt sau landing on đó đích | Lại button skips đó trang nguồn hoàn toàn | Lại button trả về để đó trang nguồn | Immediate | Chuyển đó script từ .href/.assign() để window.location.replace() |
Tự kiểm tra: JavaScript Các chuyển hướng
Five nhanh các câu hỏi on Cách JavaScript các chuyển hướng hoạt động và Khi nào nên dùng them. Pick câu trả lời cho mỗi, sau đó kiểm tra.
các tài nguyên worth của bạn time
My related writing
- JavaScript SEO Các vấn đề & Thực hành tốt nhất — kết xuất side, mà là Vì sao JS các chuyển hướng carry của họ timing risk.
- Người mới bắt đầu Hướng dẫn để kỹ thuật SEO — nơi các chuyển hướng và kết xuất fit trong bigger picture.
My speaking
- Cách Tìm kiếm Hoạt động (SlideShare) — my walkthrough of crawling, kết xuất, lập chỉ mục, và xếp hạng — đó pipeline đó làm một JS chuyển hướng một phase-three event. (My standing disclaimer áp dụng: “This is my understanding of systems… not going to be 100% complete or accurate.” (bản dịch) «Này là my understanding of các hệ thống… không going để là 100% hoàn tất hoặc chính xác.»)
Từ khoảng đó ngành
- Các chuyển hướng và Google Search (Google Search Central) — đó chính thức preference hierarchy và vĩnh viễn-so với-tạm thời xử lý.
- Sneaky các chuyển hướng (Google Search Central) — đó spam-policy line đó separates một legitimate chuyển hướng từ cloaking.
- JavaScript Các chuyển hướng & SEO: Khi & Cách Dùng Them (Search Engine Journal) — practical implementation hướng dẫn và đó
replace()so với.hrefphân biệt. - Là JavaScript Các chuyển hướng SEO-Friendly? (Search Engine Journal) — đó “avoid when alternatives exist” (bản dịch) «tránh khi alternatives exist» summary.
- JavaScript Các chuyển hướng và SEO: Đó Ultimate Hướng dẫn (OnCrawl) — head-placement hướng dẫn, detection tooling, và đó đầy đủ Gary Illyes quote.
- Là JavaScript Các chuyển hướng Bad cho SEO? (Conductor) — một concise FAQ-style câu trả lời cho đó informational query.
- MỘT Hướng dẫn để Chuyển hướng Types (Lumar) — rộng hơn chuyển hướng taxonomy với JS các chuyển hướng trong context.
Nhật ký thay đổi
Đã cập nhật 8 thg 8, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.
Đã cập nhật 18 thg 7, 2026.
Tóm tắt biên tập và chi tiết thay đổi đã ghi nhận.Chi tiết thay đổi
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
-
Ghi chú thay đổi chi tiết hiện chỉ có bằng tiếng Anh.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.