SEO & Marketing

301 vs 302 vs 307 vs 308: Nên Dùng Redirect Nào

Chọn sai loại redirect có thể khiến URL cũ nằm trên Google nhiều tháng, hoặc biến việc gửi form thành một GET request làm mất dữ liệu. Dưới đây là ý nghĩa của từng mã trạng thái, nên dùng mã nào, và cách kiểm tra redirect của bạn có hoạt động đúng không.

Cơ bản · 7 phút đọc · Cập nhật 30 tháng 10, 2026

301 vs 302 vs 307 vs 308: Nên Dùng Redirect Nào

Tổng quan 4 loại redirect

Mã trạng tháiVĩnh viễn?Giữ nguyên method và body?Dùng cho
301 Moved PermanentlyCóKhông đảm bảo (POST có thể đổi thành GET)Trang đã chuyển, HTTP → HTTPS, đổi tên miền
302 FoundKhôngKhông đảm bảoChuyển tạm thời ngắn hạn, A/B test, bảo trì
307 Temporary RedirectKhôngCóChuyển tạm thời các API endpoint và form
308 Permanent RedirectCóCóChuyển vĩnh viễn các API endpoint nhận POST

Về SEO, Google coi 301 và 308 là tín hiệu mạnh cho thấy URL mới nên thay thế URL cũ, và chuyển tín hiệu xếp hạng sang URL mới. Ngược lại, 302 và 307 báo cho Google giữ URL cũ trong chỉ mục. Chi tiết đầy đủ về từng mã có trong trang HTTP Status Codes.

Nên chọn loại nào

  • Trang đã chuyển hẳn (đổi slug, gộp bài viết, đổi tên miền) → 301.
  • HTTP sang HTTPS, www sang non-www → 301 (hoặc 308).
  • Tạm thời (trang khuyến mãi, bảo trì, điều hướng theo vị trí hoặc ngôn ngữ) → 302.
  • API endpoint hoặc form handler đã chuyển → 308 (vĩnh viễn) hoặc 307 (tạm thời), để dữ liệu POST không bị mất.

Tránh chuỗi và vòng lặp

Chuỗi là /a → /b → /c: mỗi bước tốn thêm một lượt đi về, và crawler có thể ngừng theo dõi sau vài bước. Vòng lặp (/a → /b → /a) làm trang không thể truy cập. Sau khi migrate, hãy trỏ mọi URL cũ thẳng đến đích cuối cùng. Kiểm tra toàn bộ đường đi của bất kỳ URL nào, gồm từng bước, mã trạng thái và thời gian, bằng Redirect Checker, và xem các phiên bản http, https, www và non-www có cùng kết thúc ở một nơi không.

Quy tắc copy-paste

Apache (.htaccess):

Redirect 301 /old-page /new-page
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Nginx:

location = /old-page { return 301 /new-page; }
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

Vercel (vercel.json): "permanent": true sẽ trả về 308, và Google xử lý giống 301.

{ "redirects": [ { "source": "/old-page", "destination": "/new-page", "permanent": true } ] }

Nếu bạn có một bảng tính gồm danh sách URL cũ → mới, hãy chuyển nó thành rule cho bất kỳ server nào bằng Redirect Generator, hoặc tạo file cấu hình Apache đầy đủ bằng .htaccess Generator.

Checklist khi migrate

  1. Ánh xạ mọi URL cũ sang URL mới phù hợp nhất, đừng chuyển hết về trang chủ vì Google coi đó là soft 404.
  2. Dùng 301 (hoặc 308) cho chuyển hướng vĩnh viễn và giữ chúng ít nhất một năm.
  3. Cập nhật liên kết nội bộ và sitemap sang URL mới, để redirect chỉ còn là lưới an toàn.
  4. Thử một số URL cũ, sau đó theo dõi báo cáo Pages trong Search Console để tìm lỗi 404.

Câu hỏi thường gặp

Redirect 301 có làm mất giá trị SEO không?
Không. Google truyền tín hiệu xếp hạng qua redirect 301 và 308. Chuỗi redirect dài có thể làm chậm hoặc làm yếu tín hiệu này, nên hãy redirect thẳng đến URL cuối cùng.
302 có xấu cho SEO không?
Không khi việc chuyển là tạm thời. Nếu dùng cho chuyển hẳn, nó sẽ giữ URL cũ trong chỉ mục lâu hơn cần thiết, nên hãy dùng 301 thay thế.
Sự khác nhau giữa 301 và 308 là gì?
Cả hai đều là chuyển hướng vĩnh viễn. 308 đảm bảo method và body của request được giữ nguyên, nên POST vẫn là POST; còn với 301, client có thể chuyển sang GET.

Đọc tiếp