Chuyển hướng vĩnh viễn 308
Chuyển hướng 308 là gì, cách mã này giữ nguyên phương thức HTTP khác với 301, khi nào nên dùng và cách Google xử lý tín hiệu SEO.
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 quanHTTP Status & Redirect Checker
308 Permanent Redirect báo một lần chuyển vĩnh viễn giống 301 nhưng thêm bảo đảm nghiêm ngặt: client không được đổi phương thức yêu cầu tại URL mới, nên một client tuân thủ sẽ lặp cùng yêu cầu và mang body theo; POST vẫn là POST. Với SEO, mã này tương đương 301: tài liệu Google gọi 308 là “Equivalent to 301” (tương đương 301), Gary Illyes nói Google hợp nhất nó với 301 và Fabrice Canel xác nhận Bing xử lý hai mã giống nhau. Vì vậy, hãy dùng 308 khi chuyển endpoint API, webhook, biểu mẫu hoặc luồng xác thực mà yêu cầu không phải GET phải đến đích nguyên vẹn. Với lần chuyển trang GET thông thường, HTTPS hoặc đổi tên miền, 301 vẫn là mặc định thực dụng nhờ hỗ trợ rộng trong công cụ, CDN và plugin. Hỗ trợ trình duyệt 308 rất cao trong năm 2026, khoảng 96,5%+ theo caniuse, nhưng vẫn phải kiểm tra chính stack, client và proxy của bạn; một số hệ thống cũ chỉ cung cấp 301/302/307.
Tóm tắt — 308 Permanent Redirect nói rằng tài nguyên đã chuyển vĩnh viễn, giống 301, nhưng thêm một cam kết: phương thức yêu cầu không được thay đổi tại địa chỉ mới. Vì trình duyệt lặp lại cùng yêu cầu thay vì tạo yêu cầu mới, phần còn lại, gồm dữ liệu biểu mẫu, thường đi cùng. Một lần gửi biểu mẫu vẫn là gửi biểu mẫu chứ không âm thầm biến thành lần truy cập trang thông thường. Công cụ tìm kiếm xử lý hai mã giống nhau nên 301 phù hợp với lần chuyển trang thông thường. Hãy dùng 308 khi chuyển API hoặc biểu mẫu và yêu cầu gốc phải đến đích nguyên vẹn.
308 thực sự là gì
Khi máy chủ đưa trình duyệt từ URL này sang URL khác, phản hồi mang một mã trạng thái. Hai mã sau cho biết trang đã chuyển vĩnh viễn:
- 301 — “Moved Permanently” (Đã chuyển vĩnh viễn). Mã chuyển hướng vĩnh viễn lâu đời từ thời web ban đầu.
- 308 — “Permanent Redirect” (Chuyển hướng vĩnh viễn). Mã mới hơn, được thêm vào đặc tả năm 2015, làm cùng nhiệm vụ và thêm một bảo đảm mà 301 chưa từng có.
Bảo đảm đó là toàn bộ lý do 308 tồn tại. Khi truy cập trang, trình duyệt thường gửi GET để lấy nội dung. Khi gửi biểu mẫu hoặc đăng nhập, nó gửi POST mang dữ liệu. Với 301 kiểu cũ, trình duyệt được phép đổi POST thành GET trên đường đến URL mới, thường làm mất dữ liệu. 308 không được đổi phương thức như vậy. Vì client lặp lại cùng yêu cầu thay vì tạo yêu cầu mới, dữ liệu thường đi cùng. Tuy nhiên, nếu điều này quan trọng cho API hoặc thanh toán, đừng chỉ dựa vào đặc tả: hãy thử yêu cầu thật và xác nhận body đến URL mới. Evidence for this claim RFC 7538 defines 308 Permanent Redirect as a permanent move whose redirect follow-up must not change the request method. Scope: HTTP semantics for 308 responses. Confidence: high · Verified: IETF: RFC 7538 §3 — 308 Permanent Redirect
308 có hại cho SEO không?
Không. Tài liệu Google ghi rõ 308 “Equivalent to 301” (bản dịch) «có giá trị tương đương mã 301». Cả hai là chuyển hướng vĩnh viễn và truyền tín hiệu xếp hạng sang URL mới theo cùng cách. Bing cũng xử lý giống nhau. Không có lợi ích hay hình phạt xếp hạng khi dùng 308; lựa chọn dựa trên hành vi kỹ thuật, không phải thứ hạng. Evidence for this claim Google treats 308 as equivalent to 301 for Search and groups both as permanent redirects. Scope: Google Search processing; the two status codes remain semantically different for HTTP clients. Confidence: high · Verified: Google: HTTP status codes and Search Google: Redirects and Google Search
Vậy nên dùng mã nào?
Với trang chuyển thông thường, như URL mới, chuyển từ http sang https hoặc đổi tên miền, 301 là lựa chọn dễ và phổ quát. Mọi trình duyệt, plugin và công cụ hosting đều hiểu nó.
Hãy dùng 308 riêng khi thứ được chuyển không chỉ là một trang:
- API do phần mềm khác gọi.
- Biểu mẫu hoặc đăng nhập gửi dữ liệu.
- Webhook, tức URL tự động mà dịch vụ khác gửi POST đến.
Trong các trường hợp đó, bạn không thể để phương thức bị hạ xuống và dữ liệu mất; 308 bảo đảm điều đó không xảy ra.
Muốn xem lịch sử đặc tả, trích dẫn chính xác từ Google và Bing cùng đoạn cấu hình máy chủ? Hãy chuyển sang thẻ Nâng cao.
Tóm tắt — 308 là chuyển hướng vĩnh viễn bắt buộc giữ phương thức: cùng tín hiệu canonical hóa như 301 — tài liệu Google nói “Equivalent to
301” (bản dịch) «có giá trị tương đương mã301» — nhưng bảo đảm client không đổi phương thức ở URL mới. Client tuân thủ sẽ lặp lại cùng yêu cầu nên body đi cùng. 308 tồn tại vì HTTP có mã tạm thời giữ phương thức là 307 nhiều năm trước khi có mã vĩnh viễn tương ứng; RFC 7538 năm 2015 lấp khoảng trống và RFC 9110 nay trỏ thẳng từ định nghĩa 301 đến 308. Với SEO, hai mã có thể thay thế nhau: Illyes nói Google “merges” (bản dịch) «hợp nhất» 308 với 301; Fabrice Canel xác nhận Bing cũng xử lý ngang nhau. Dùng 308 khi yêu cầu không phải GET phải được giữ, như di chuyển API, webhook, xác thực hay POST biểu mẫu, nhưng hãy kiểm tra phương thức và body bằng client thật. Nếu không, 301 vẫn là mặc định. Hỗ trợ trình duyệt 308 mạnh trong năm 2026, khoảng 96,5%+ theo caniuse, nhưng RFC 9110 vẫn nói mã này trẻ hơn và có thể không được nhận biết ở mọi nơi; một số plugin CMS, giao diện edge và proxy cũ chỉ có 301/302/307.
Cơ chế của 308
308 Permanent Redirect mang cùng thông điệp với 301: tài nguyên nay nằm vĩnh viễn ở URL mới. Điểm bổ sung là client không được đổi phương thức yêu cầu tại đích. Vì client lặp lại cùng yêu cầu thay vì tạo yêu cầu mới, body đi cùng với client tuân thủ đặc tả. Đây là hệ quả của bảo đảm phương thức, không phải lời hứa riêng được chứng nhận; hãy kiểm tra đầu cuối trên client và máy chủ thật. MDN mô tả 308 là mã giữ nguyên phương thức và trong thực tế cả body, trong khi 301 có thể không giữ.
Cách diễn đạt dễ hiểu trong hướng dẫn chuyển hướng của Ahrefs là: “A 308 redirect is the same as a 301 redirect, except it retains the HTTP method of the original request, GET or POST, when performing the redirect.” (bản dịch) «308 giống 301, ngoại trừ giữ phương thức HTTP của yêu cầu gốc, GET hoặc POST.» Trong hướng dẫn mã trạng thái HTTP, tôi viết ngắn hơn: “308 Permanent Redirect – Has the same functionality as a 301 redirect, except you can’t switch between POST and GET.” (bản dịch) «308 Permanent Redirect có chức năng như 301, ngoại trừ không thể đổi giữa POST và GET.» Evidence for this claim RFC 7538 defines 308 Permanent Redirect as a permanent move whose redirect follow-up must not change the request method. Scope: HTTP semantics for 308 responses. Confidence: high · Verified: IETF: RFC 7538 §3 — 308 Permanent Redirect
Hãy xem ví dụ cụ thể. Một client gửi đơn hàng bằng POST đến /api/orders với body JSON:
POST /api/orders HTTP/1.1
Host: shop.example.com
Content-Type: application/json
{ "sku": "A-100", "qty": 2 }Nếu endpoint trả 301 và client dùng quyền lịch sử cho phép đổi sang GET, yêu cầu có thể đến URL mới như một GET rỗng: body mất và đơn hàng thất bại. Với 308, client phải lặp lại POST tại URL mới; client tuân thủ mang body theo nên đơn hàng được xử lý. Hãy xác nhận bằng client và log máy chủ của bạn trong thẻ Scripts, thay vì giả định phổ quát. Đây là khác biệt thực tế duy nhất và chỉ xuất hiện khi yêu cầu gốc không phải GET.
Vì sao 308 tồn tại: lịch sử đặc tả
Phần này thường bị bỏ qua nhưng là cách rõ nhất để hiểu mã.
307 xuất hiện trước. HTTP đã có chuyển hướng tạm thời giữ phương thức là 307 từ lâu, nhưng đặc tả lõi RFC 7231 không có mã vĩnh viễn tương ứng. Vì vậy, có mã tạm thời “giữ phương thức” và mã vĩnh viễn 301 “có thể đổi phương thức”, nhưng thiếu mã vĩnh viễn “giữ phương thức”.
RFC 7538 lấp khoảng trống. 308 được thêm để trở thành phiên bản vĩnh viễn còn thiếu của 307: đầu tiên là RFC 7238 thử nghiệm tháng 06/2014, sau đó chuẩn hóa thành RFC 7538 tháng 04/2015. Nó lấp một lỗ hổng thật, không thay thế 301.
Đặc tả hiện hành trỏ thẳng đến nó. RFC 9110 vẫn ghi sự mơ hồ của 301 rồi nêu 308 như cách sửa ngay trong định nghĩa 301: user agent “MAY change the request method from POST to GET for the subsequent request… If this behavior is undesired, the 308 (Permanent Redirect) status code can be used instead.” (bản dịch) «CÓ THỂ đổi POST thành GET cho yêu cầu sau; nếu không muốn hành vi đó, có thể dùng 308.» Trong mục riêng về 308, RFC 9110 thêm giới hạn trung thực: mã này “is much younger (June 2014) than its sibling codes and thus might not be recognized everywhere.” (bản dịch) «trẻ hơn nhiều so với các mã cùng nhóm và do đó có thể không được nhận biết ở mọi nơi».
Vì vậy, hành vi POST sang GET của 301 không phải bug mà là quyền lịch sử được đặc tả ghi nhận; 308 là cách chính thức để từ chối hành vi đó.
301 với 308: khác biệt thực tế trong một bảng
| Yêu cầu GET thông thường | POST/PUT/DELETE có body | |
|---|---|---|
| 301 | Hoạt động giống 308 | Có thể bị đổi sang GET và mất body |
| 308 | Hoạt động giống 301 | Bảo đảm phương thức và body được lặp lại |
| Tín hiệu SEO | Giống nhau: vĩnh viễn, hợp nhất | Giống nhau: vĩnh viễn, hợp nhất |
Kết luận: với phần lớn chuyển hướng là GET, 301 và 308 làm cùng việc. Bảo đảm chỉ có giá trị khi phương thức không phải GET mang body. Xem bài so sánh 301 với 308 để hiểu đầy đủ.
Google có xử lý 308 giống 301 cho SEO không?
Có, rõ ràng và được ghi nhận. Tài liệu mã trạng thái HTTP của Google nói 301 là chuyển hướng được dùng như “a strong signal that the redirect target should be processed” (bản dịch) «tín hiệu mạnh rằng đích nên được xử lý», còn 308 “Equivalent to 301” (bản dịch) «có giá trị tương đương mã 301». Google lưu ý dù xử lý giống nhau, các mã khác nhau về ngữ nghĩa và nên chọn mã phù hợp để client khác hưởng lợi. Nói đơn giản, Google không phạt khi dùng mã “không tối ưu”, nhưng phần mềm khác dựa vào khác biệt kỹ thuật. Evidence for this claim Google treats 308 as equivalent to 301 for Search and groups both as permanent redirects. Scope: Google Search processing; the two status codes remain semantically different for HTTP clients. Confidence: high · Verified: Google: HTTP status codes and Search Google: Redirects and Google Search
Tài liệu chuyển hướng của Google đặt hai mã cùng tầng được khuyên dùng: “The 301 and 308 status codes mean that a page has permanently moved to a new location.” (bản dịch) «Mã 301 và 308 nghĩa là trang đã chuyển vĩnh viễn đến vị trí mới.» Hướng dẫn di chuyển site cũng nêu rõ chuyển hướng HTTP vĩnh viễn như 301 và 308.
Cần biết rằng sự tương đương này không phải lúc nào cũng được ghi trong tài liệu. Gary Illyes nói Google hợp nhất 308 vào 301; bài Search Engine Roundtable mô tả thời điểm phát biểu không chính thức cuối cùng đi vào tài liệu. Những chủ site từng hỏi “đã có tài liệu chưa?” là thận trọng đúng, dù hành vi nền tảng không đổi. Thẻ Trích dẫn có nguyên văn đã xác minh và liên kết sâu.
Bing có xử lý 308 giống 301 không?
Có. Bing không có trang tài liệu riêng chi tiết như Google, nhưng Fabrice Canel của Microsoft xác nhận trực tiếp trên X tháng 09/2024, được Search Engine Roundtable đưa tin: Bing xử lý 308 giống 301. Đây là phát biểu có thẩm quyền của Bing; xem nguyên văn trong thẻ Trích dẫn.
Khi nào thực sự dùng 308
Trường hợp riêng của 308 gần như luôn là yêu cầu không phải GET.
Di chuyển endpoint hoặc phiên bản API. Chuyển /v1/ sang /v2/ hay đổi host API là ví dụ chuẩn. Client gọi bằng POST/PUT/PATCH/DELETE và body thật. 308 bảo đảm phương thức cùng payload qua hop; 301 có nguy cơ hạ xuống GET và làm yêu cầu mắc kẹt.
Di chuyển site có nhiều POST. Thanh toán, đăng nhập/xác thực và đích form-action đều gửi dữ liệu POST. Nếu URL đó đổi trong lần di chuyển, 308 giữ nguyên lần gửi trong khi 301 có thể không.
Đổi URL webhook. Khi dịch vụ khác POST đến webhook đang được chuyển, 308 yêu cầu HTTP client POST lại đến địa chỉ mới với body nguyên vẹn, đúng điều webhook cần.
Điểm chung: dùng 308 khi mất body hoặc âm thầm đổi phương thức sang GET sẽ làm hỏng chức năng, không chỉ tác động chút ít đến SEO.
Trước khi bật trong các trường hợp này, hãy kiểm thử như một tích hợp, không chỉ nhìn mã trạng thái:
- Phát lại phương thức và payload thật trên bản staging của endpoint mới.
- Xác nhận header Authorization hoặc cookie có được phép đi theo và có thật sự đi theo không.
- Nếu yêu cầu gốc không idempotent, như POST tạo đơn hàng, theo dõi tác dụng phụ trùng trong hop.
- Xác nhận query string và header
Content-Typeđược giữ, không chỉ body. - Kiểm tra chính client thật — bên gửi webhook, SDK API hoặc trình duyệt — có tự theo 308 trước khi bỏ endpoint cũ. Không phải HTTP client nào cũng mặc định làm vậy.
Khi 301 vẫn là mặc định thực dụng
Với mọi trường hợp GET thông thường, 301 vẫn hợp lý:
- Đổi URL nội dung hoặc trang thông thường.
- Di chuyển HTTP → HTTPS.
- Đổi tên miền và di chuyển site chuẩn.
- Chuẩn hóa dấu gạch chéo cuối và
www/khôngwww.
Ở đây yêu cầu chỉ là GET nên bảo đảm của 308 không đem thêm lợi ích, còn 301 thắng về tính phổ quát. Không có chi phí SEO với mã nào. Đừng đổi hàng loạt 301 hiện có sang 308 để tìm lợi ích thứ hạng không tồn tại. Trong hệ ưu tiên của hướng dẫn chuyển hướng Ahrefs, 308 và 301 cùng ở tầng cao nhất, trước meta refresh, JavaScript và cách vòng khác; chúng ngang hàng, không phải bậc thang.
Giới hạn hỗ trợ và mức dùng thực tế năm 2026
Hỗ trợ trình duyệt không còn là rủi ro thực tế như trước. Theo dữ liệu hiện hành của caniuse, 308 được hỗ trợ khoảng 96,5%+ toàn cầu; hãy xem bảng trực tuyến vì con số thay đổi. Khoảng trống tập trung ở trình duyệt đã quá cũ. Cảnh báo “IE11 không dùng được 308” không còn phù hợp lưu lượng chính.
Công cụ mới là giới hạn hiện tại. Không phải tầng nào cũng có lựa chọn 308. Một số plugin chuyển hướng CMS, giao diện quy tắc CDN/edge và proxy/load balancer cũ chỉ cho 301/302/307. Trước khi dùng, hãy xác minh tầng thật sự phục vụ chuyển hướng có phát 308 hay âm thầm hạ mã; thẻ Scripts có lệnh kiểm tra trên đường truyền. Lưu ý của RFC 9110 rằng 308 trẻ hơn và có thể không được nhận biết ở mọi nơi áp dụng cho triển khai nói chung. Năm 2026, tác động chủ yếu nằm ở công cụ, không phải trình duyệt phổ biến.
Chú thích không chuẩn: “308 Resume Incomplete”
Một nét lạ cho thấy mã còn trẻ: ngoài tự nhiên, 308 không chỉ là chuyển hướng. API upload của Google Drive dùng lại 308 với nghĩa hoàn toàn khác — “Resume Incomplete” (bản dịch) «tiếp tục lần tải lên chưa hoàn tất» — báo upload theo phần bị dừng và client nên tiếp tục. John Mueller từng nêu điều này và MDN cũng ghi nhận. Nó không thay đổi ý nghĩa 308 khi làm chuyển hướng nhưng cho thấy mã ít “ổn định về văn hóa” hơn 301 lâu đời.
Chuỗi và hop chuyển hướng áp dụng giống nhau
Crawler Google mặc định theo tối đa 10 hop chuyển hướng, nhưng đây là mặc định chứ không phải hằng số phổ quát; sản phẩm cụ thể có thể khác, ví dụ URL Inspection không theo chuyển hướng. Giới hạn mặc định giống nhau với hop 301 hay 308. Nếu xếp chồng chuyển hướng, như đường API cũ qua hai hop, vẫn phải tránh chuỗi và vòng lặp; hãy rút xuống một hop khi có thể.
Tóm tắt cho AI
Bản cô đọng của phần Nâng cao:
- 308 = vĩnh viễn + bắt buộc giữ phương thức. Cùng thông điệp với 301 nhưng thêm bảo đảm client không đổi phương thức ở URL mới. Client tuân thủ lặp cùng yêu cầu nên body đi theo; hãy xác minh đầu cuối thay vì chỉ dựa vào đặc tả.
- SEO tương đương 301. Google nói 308 “Equivalent to
301” (bản dịch) «có giá trị tương đương mã301»; Gary Illyes nói Google hợp nhất 308 vào 301; Fabrice Canel xác nhận Bing xử lý giống nhau. Không có lợi ích hay hình phạt xếp hạng. Các câu của Illyes/Mueller/Canel được Search Engine Roundtable dẫn lại và cần đối chiếu nguồn gốc trước khi coi là cuối cùng. - Lý do tồn tại: HTTP có 307 tạm thời giữ phương thức nhiều năm trước mã vĩnh viễn tương ứng. RFC 7538 năm 2015 lấp khoảng trống. RFC 9110 nói 301 “MAY change the request method from POST to GET… for historical reasons” (bản dịch) «CÓ THỂ đổi POST sang GET vì lý do lịch sử» và có thể dùng 308 nếu không muốn.
- Dùng 308 cho: di chuyển API/phiên bản, URL webhook, luồng POST biểu mẫu/xác thực — nơi mất phương thức/body sẽ phá chức năng. Trước khi đổi, phát lại phương thức và payload thật trong staging, kiểm tra header xác thực, idempotency và hành vi theo chuyển hướng của client.
- Dùng 301 cho: đổi trang thông thường, HTTP→HTTPS, đổi tên miền, chuẩn hóa; tất cả là GET nên bảo đảm 308 không giúp thêm, còn 301 phổ quát hơn.
- Mức dùng: hỗ trợ trình duyệt mạnh, khoảng 96,5%+ theo caniuse, nhưng RFC 9110 vẫn có giới hạn rằng mã trẻ hơn và có thể không được nhận biết ở mọi nơi. Năm 2026, vấn đề chủ yếu là một số plugin CMS, giao diện CDN/edge và proxy cũ chỉ có 301/302/307. Hãy xác minh tầng phục vụ thật sự phát 308. 308 có thể cache theo suy đoán nên mã sai hoặc đã rollback vẫn có thể nằm trong cache.
- Chú thích: Google Drive dùng “308 Resume Incomplete” (bản dịch) «308 — tiếp tục upload chưa hoàn tất» cho upload bị dừng; đây không phải chuyển hướng và cho thấy mã còn trẻ.
Tài liệu chính thức
Tài liệu nguồn sơ cấp về 308 từ công cụ tìm kiếm và đặc tả HTTP.
- Mã trạng thái HTTP, lỗi mạng, DNS và Google Search — ghi 308 “Equivalent to
301”, lưu ý khác ngữ nghĩa nhưng được xử lý giống nhau và giới hạn 10 hop. - Chuyển hướng và Google Search — nói mã
301và308đều nghĩa là trang đã chuyển vĩnh viễn. - Di chuyển site khi URL thay đổi — khuyên dùng chuyển hướng HTTP vĩnh viễn như 301 và 308.
Đặc tả HTTP
- RFC 9110 — HTTP Semantics — đặc tả hiện hành; §15.4.9 định nghĩa 308 cùng giới hạn “much younger… might not be recognized everywhere” (bản dịch) «trẻ hơn nhiều và có thể không được nhận biết ở mọi nơi», còn §15.4.2 định nghĩa 301 và trỏ đến 308 khi không muốn POST đổi sang GET.
- RFC 7538 — HTTP Status Code 308 (Permanent Redirect) — tiêu chuẩn giới thiệu 308 tháng 04/2015, thay RFC 7238 thử nghiệm tháng 06/2014.
Tham chiếu
- MDN — 308 Permanent Redirect — ngữ nghĩa giữ phương thức/body và cách dùng “Resume Incomplete” không chuẩn của Google Drive.
- caniuse — mã trạng thái HTTP 308 — bảng hỗ trợ trình duyệt, khoảng 96,5%+ toàn cầu.
Trích dẫn từ nguồn
Các phát biểu được ghi nhận từ Google, Bing và đặc tả HTTP; mỗi liên kết dẫn sâu đến đoạn nguồn.
Google — sự tương đương cốt lõi
- “301 (moved permanently): Google follows the redirect, and Google systems use the redirect as a strong signal that the redirect target should be processed.” (bản dịch) «301: Google theo chuyển hướng và dùng nó như tín hiệu mạnh rằng đích nên được xử lý.» — Tài liệu Google Search Central. Đi đến trích dẫn
- “308 (moved permanently): Equivalent to
301.” (bản dịch) «308 (đã chuyển vĩnh viễn): tương đương301.» Đi đến trích dẫn - “While Google treats these status codes the same way, keep in mind that they’re semantically different. Use the status code that’s appropriate for the redirect so other clients (for example, e-readers, other search engines) may benefit from it.” (bản dịch) «Dù Google xử lý các mã này giống nhau, hãy nhớ chúng khác về ngữ nghĩa và dùng mã phù hợp để client khác cũng hưởng lợi.» Đi đến trích dẫn
- “The
301and308status codes mean that a page has permanently moved to a new location.” (bản dịch) «Mã 301 và 308 nghĩa là trang đã chuyển vĩnh viễn đến vị trí mới.» Đi đến trích dẫn
Gary Illyes, Google
- Về cách Google xử lý 308: “we just merge that with 301 so we really don’t care iirc.” (bản dịch) «chúng tôi chỉ hợp nhất nó với 301 nên thật sự không quan tâm, nếu tôi nhớ đúng.» Được Search Engine Roundtable dẫn nguyên văn trong Google chính thức xử lý 308 như 301, tháng 07/2021; hãy đối chiếu bản gốc trước khi coi là cuối cùng.
John Mueller, Google
- Về cách dùng không chuẩn: “Google Drive uses a 308 redirect as a Resume Incomplete response to indicate to the client when an incomplete upload stalled. So that is a bit different. But you can use it as a normal redirect.” (bản dịch) «Google Drive dùng 308 như phản hồi Resume Incomplete để báo lần upload chưa hoàn tất bị dừng; điều đó hơi khác, nhưng bạn vẫn có thể dùng nó như chuyển hướng thông thường.» Được Search Engine Roundtable dẫn lại trong Google có thể xử lý 308 như 301, tháng 05/2018; hãy đối chiếu bản gốc.
Fabrice Canel, Microsoft Bing
- “I accidentally deleted my reply, so confirming again: Bing treats 308 redirects the same as 301 redirects.” (bản dịch) «Tôi vô tình xóa phản hồi nên xác nhận lại: Bing xử lý chuyển hướng 308 giống chuyển hướng 301.» Fabrice Canel trên X tháng 09/2024, được Search Engine Roundtable dẫn trong Bing xử lý 308 giống 301; hãy đối chiếu bản gốc.
RFC 9110 — đặc tả ngữ nghĩa HTTP
- Về lý do 308 tồn tại, từ định nghĩa 301: “For historical reasons, a user agent MAY change the request method from POST to GET for the subsequent request. If this behavior is undesired, the 308 (Permanent Redirect) status code can be used instead.” (bản dịch) «Vì lý do lịch sử, user agent CÓ THỂ đổi POST thành GET cho yêu cầu sau; nếu không muốn, có thể dùng 308.» Đọc RFC 9110
- Về mức dùng, 308 “is much younger (June 2014) than its sibling codes and thus might not be recognized everywhere.” (bản dịch) «trẻ hơn nhiều so với các mã cùng nhóm và do đó có thể không được nhận biết ở mọi nơi.» Đọc RFC 9110
Chuyển hướng này có nên là 308 không?
Vì 301 và 308 tương đương về SEO, đây không phải quyết định xếp hạng. Câu hỏi cốt lõi là: có yêu cầu không phải GET mang body hay không, và tầng chuyển hướng có thật sự phát được 308 không? Hãy đi theo cây quyết định.
Should I use a 308 for this redirect?
Tóm lại: GET thông thường → 301; yêu cầu không phải GET cần giữ và stack phát được mã → 308. Hai mã có thể thay thế nhau cho SEO, nên câu hỏi về phương thức cùng phép kiểm tra công cụ là yếu tố quyết định.
Quan niệm sai và lỗi về 308
Các điểm dưới đây đến trực tiếp từ lỗi thường gặp.
“308 tốt hơn 301 cho SEO.” Sai. Tài liệu Google nói “Equivalent to 301” (bản dịch) «có giá trị tương đương mã 301»; Illyes, Mueller và Canel của Bing đều xác nhận ngang nhau. Không công cụ tìm kiếm nào coi 308 vượt trội về SEO. Chọn mã này vì đúng phương thức/body, không phải lợi thế xếp hạng.
“Nên đổi mọi 301 hiện có sang 308.” Đây là thay đổi vô ích, không tăng thứ hạng. Nếu yêu cầu chỉ là GET như phần lớn chuyển trang, 301 đã hoạt động giống hệt trong thực tế. Chỉ đổi khi chuyển hướng thật sự mang phương thức không phải GET.
“308 không an toàn vì mới hơn.” Cách nói này quá mức khi nói riêng trình duyệt: RFC 7538 đã hơn một thập kỷ, Google và Bing xác nhận hỗ trợ, còn caniuse ghi khoảng 96,5%+ với khoảng trống chủ yếu ở phiên bản quá cũ. RFC 9110 vẫn giữ giới hạn chung rằng 308 trẻ hơn và có thể không được nhận biết ở mọi nơi. Năm 2026, điều đó chủ yếu hiện thành thiếu tùy chọn trong plugin CMS, giao diện CDN hoặc proxy cũ, không phải vấn đề client hay công cụ tìm kiếm phổ biến.
“301 luôn làm hỏng yêu cầu POST/API.” Đây cũng là cách nói quá. Nhiều client hiện đại xử lý hợp lý; rủi ro thật được đặc tả ghi nhận là quyền đổi POST sang GET “vì lý do lịch sử”. 308 loại bỏ hoàn toàn rủi ro này, nhưng không sửa một lỗi chắc chắn xảy ra với mọi client.
“308 lúc nào cũng chỉ là mã chuyển hướng.” Không hẳn. Cách dùng không chuẩn “308 Resume Incomplete” (bản dịch) «308 — tiếp tục upload chưa hoàn tất» của Google Drive dùng mã cho upload bị dừng, ý nghĩa hoàn toàn khác. Đây là lời nhắc rằng cách dùng 308 ngoài thực tế còn trẻ và ít ổn định hơn 301.
Đối chiếu thêm — “chuyển hướng vĩnh viễn làm mất PageRank.” Đây không phải chủ đề chính, nhưng hướng dẫn Google xếp 301 và 308 chung nhóm chuyển hướng vĩnh viễn dùng làm tín hiệu xử lý URL mới như canonical. Điều đó mô tả tính liên tục, không phải mất giá trị. Hãy giữ cách nói hẹp là hành vi xử lý đã được ghi nhận, thay vì bảo đảm tuyệt đối rằng PageRank không bao giờ mất.
Xác nhận và triển khai 308
Việc hữu ích nhất với 308 là xác minh mã thật trên đường truyền. Lỗi phổ biến không phải trình duyệt mà là tầng công cụ âm thầm hạ 308 dự kiến xuống 301 hoặc không phát chuyển hướng.
Kiểm tra mã trạng thái bằng curl
# Show only the response headers; -I sends a HEAD request.
curl -sI https://example.com/old-path | head -n 1
# → HTTP/1.1 308 Permanent Redirect (what you want)
# → HTTP/1.1 301 Moved Permanently (your layer downgraded it)Để xác nhận phương thức thật sự được giữ trên POST, mục đích chính của 308, hãy theo chuyển hướng bằng -L và xem đích nhận gì. -X POST cùng --data chỉ giữ là POST qua hop nếu máy chủ trả 308/307:
curl -sIL -X POST --data '{"sku":"A-100"}' \
-H 'Content-Type: application/json' \
https://api.example.com/v1/orders
# Inspect each hop's request line; a 308 keeps it "POST", a 301 may show "GET".Theo dõi toàn bộ chuỗi
Nếu đường đi có nhiều hop, hãy in mọi mã trạng thái để nhận ra lần hạ mã hoặc hop thừa:
curl -sIL https://example.com/old-path \
| grep -iE '^HTTP/'
# Each line is one hop. Collapse chains to a single hop where you can.Kiểm tra 308 có được cache trước khi rollback
RFC 9110 cho phép 308 được cache theo suy đoán: client hoặc tầng trung gian có thể cache ngay cả khi không có header Cache-Control. Vì vậy, 308 sai hoặc cần đảo ngược có thể tiếp tục được phục vụ từ cache sau khi sửa origin. Trước khi kết luận chuyển hướng bị “kẹt”:
- Thử bằng cả client mới, như ẩn danh chưa truy cập, và client từng vào URL cũ; client có và không cache có thể khác nhau.
- Kiểm tra
Cache-Control,ExpiresvàAgebằngcurl -sI. - Thử GET thông thường và yêu cầu không phải GET đại diện riêng biệt; cache có thể khác theo phương thức.
- Khi rollback 308, purge rõ cache edge/CDN; đừng cho rằng xóa quy tắc origin là đủ, và một số client đã cache có thể không tự yêu cầu lại.
Chrome DevTools Console — kiểm tra chuyển hướng từ trình duyệt
Dán vào Console DevTools để xem URL cuối và trạng thái mà không rời trang. Fetch với chế độ chuyển hướng thủ công báo trực tiếp trạng thái của phản hồi đầu:
// Reports the status of the first response (the redirect itself), not the target.
fetch('https://example.com/old-path', { method: 'HEAD', redirect: 'manual' })
.then(r => console.log('type:', r.type, 'status:', r.status || '(opaqueredirect)'));
// Follow the chain and log where it lands:
fetch('https://example.com/old-path', { method: 'HEAD', redirect: 'follow' })
.then(r => console.log('final URL:', r.url, 'final status:', r.status));Bookmarklet — xem URL trả gì bằng một lần nhấp
Tạo bookmark với đoạn này làm URL, rồi nhấp trên trang để nhập URL và xem trạng thái cuối cùng kèm URL đích:
javascript:(function(){var u=prompt('URL to check:',location.href);if(!u)return;fetch(u,{method:'HEAD',redirect:'follow'}).then(function(r){alert('Final status: '+r.status+'\nLanded on: '+r.url);}).catch(function(e){alert('Error: '+e);});})();Triển khai 308 trên máy chủ
Apache (.htaccess) — mod_rewrite với R=308 khai báo rõ:
RewriteEngine On
RewriteRule ^old-path/?$ /new-path [R=308,L]nginx — return 308 chính xác và không mơ hồ:
location = /old-path {
return 308 https://example.com/new-path;
}Express.js (Node) — truyền mã trạng thái cho redirect():
app.all('/api/v1/orders', (req, res) => {
// 308 keeps the POST body intact on the way to /api/v2/orders
res.redirect(308, '/api/v2/orders');
});Next.js — đặt permanent: true để phát 308; chuyển hướng vĩnh viễn của Next là 308:
// next.config.js
module.exports = {
async redirects() {
return [
{ source: '/api/v1/:path*', destination: '/api/v2/:path*', permanent: true },
];
},
};Hành vi framework và tầng hosting thay đổi theo phiên bản. Với Next.js, kết quả có thể khác tùy phiên bản và nơi kích hoạt: mục redirects() trong next.config.js, lời gọi permanentRedirect() trong Server Action hoặc phản hồi streaming không nhất thiết cùng mã. Cảnh báo tương tự áp dụng cho phiên bản module Apache/nginx và CDN/proxy phía trước origin. Hãy coi đoạn cấu hình là điểm khởi đầu, không phải bảo đảm, rồi xác nhận tài liệu phiên bản thật.
Sau triển khai, chạy lại curl -sI để xác nhận đường truyền thật mang 308; đây là bước thường bị bỏ qua và gây tiếc nuối.
Công cụ xác nhận 308 trên đường truyền
Công cụ miễn phí của Patrick
- Redirect Checker — theo dõi một URL hoặc lô nhỏ, xác nhận phản hồi đầu là
308, đích đúng và chuỗi kết thúc bằng phản hồi khỏe mạnh. - Bulk HTTP Status Code Checker — kiểm tra tối đa 500 URL đã di chuyển, lọc phản hồi 301/302/307 ngoài dự kiến và xuất chuỗi hoặc vòng lặp để sửa.
Chứng minh hành vi nghiêm ngặt khi cần
curlvới payload thử nghiệm an toàn — phát lại phương thức thật trên staging hoặc endpoint không phá dữ liệu và theo chuyển hướng; xác nhận nguồn phát 308.- Log ứng dụng/API gateway — xác minh đích nhận cùng phương thức, content type và body. Redirect checker chứng minh trạng thái cùng đích; log nhận chứng minh việc giữ phương thức hoạt động đầu cuối.
- Bảng Network của Browser DevTools — hữu ích cho biểu mẫu và xác thực, nhưng thử riêng webhook và API vì khả năng tương tác là lý do chọn 308 hơn 301.
- URL Inspection của Google Search Console — với URL trang có thể lập chỉ mục, xác nhận lần chuyển vĩnh viễn được xử lý như 301 và đích là canonical được chọn.
Tự kiểm tra: 308 Permanent Redirect
Năm câu hỏi nhanh về bản chất, lý do tồn tại và cách công cụ tìm kiếm xử lý 308. Chọn đáp án rồi kiểm tra.
Tài nguyên đáng xem
Bài viết của tôi
- 11 loại chuyển hướng và tác động SEO cùng Joshua Hardwick — định nghĩa 308, cách nói “giống nhau cho SEO nhưng khác với biểu mẫu” và hệ ưu tiên nơi 308 cùng 301 ở tầng cao nhất.
- Mã trạng thái HTTP và tác động SEO — nói rõ 308 có chức năng như 301 trừ việc không thể đổi POST và GET, đồng thời được xử lý giống 301 và hợp nhất về phía trước.
- Di chuyển website cần nhiều hơn checklist — vì sao tôi dùng 301 hoặc 308, không dùng 302/307, cho lần chuyển vĩnh viễn.
- Hướng dẫn nhập môn Technical SEO — vị trí của chuyển hướng trong bức tranh lớn.
Tài nguyên trong ngành
- Chuyển hướng và Google Search — hướng dẫn chính thức gọi 301 và 308 cùng là lựa chọn vĩnh viễn.
- Mã trạng thái HTTP, lỗi mạng, DNS và Google Search — gọi 308 “Equivalent to 301” và lưu ý khác ngữ nghĩa.
- RFC 9110 — HTTP Semantics — định nghĩa 301 trỏ đến 308 khi không muốn đổi POST sang GET.
- RFC 7538 — HTTP Status Code 308 — tiêu chuẩn giới thiệu 308.
- MDN — 308 Permanent Redirect — ngữ nghĩa phương thức/body và ghi chú Google Drive.
- caniuse — mã trạng thái HTTP 308 — bảng hỗ trợ trình duyệt bác bỏ quan niệm 308 mong manh.
- Bing xử lý 308 giống 301 — xác nhận năm 2024 của Fabrice Canel.
- Google chính thức xử lý 308 như 301 — bối cảnh câu “we just merge that with 301” (bản dịch) «chúng tôi chỉ hợp nhất nó với 301» của Gary Illyes và thời điểm tài liệu trở thành chính thức.
Nhật ký thay đổi
Đã cập nhật 22 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 9 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 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 17 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.
Không thể so sánh đầy đủ — không có bản lưu trước đó cho lần sửa đổi này.
Try it live
This is a real endpoint on this site — not a simulation.
Hit it from the button, open it in a new tab, or
curl -i it from your terminal, and the server answers with the actual status code this article is about.