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.

Xuất bản lần đầu: 28 thg 6, 2026 · Cập nhật lần cuối: 22 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

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 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ườngPOST/PUT/DELETE có body
301Hoạt động giống 308Có thể bị đổi sang GET và mất body
308Hoạt động giống 301Bảo đảm phương thức và body được lặp lại
Tín hiệu SEOGiống nhau: vĩnh viễn, hợp nhấtGiố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ông www.

Ở đâ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ể.

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.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.