Redirect 301 vs 302 trong .htaccess | Freelancer VN chuyển domain/hosting【2026】
Migrate domain hoặc hosting xong → dùng 301, không dùng 302 “cho chắc”. Thống nhất HTTPS và www hoặc apex bằng một chuỗi redirect rõ. Server Apache mới dùng .htaccess; nhiều host VN + Cloudflare thì redirect ở panel/CDN sạch hơn và ít rủi ro 500 hơn. Sai 302 khi chuyển vĩnh viễn khiến Google chậm chuyển xếp hạng — freelancer hay mất tuần theo dõi Search Console mà không biết nguyên nhân.
Freelancer Việt Nam nhận việc chuyển domain, đổi hosting (Hostinger, Vietnix, AZDigi, AWS Lightsail…), hoặc ép HTTPS sau khi gắn SSL gần như luôn đụng redirect. Khách hỏi “sao Google vẫn index bản cũ?” — nửa số lần là vì dùng 302 thay 301, hoặc redirect vòng giữa www / không www / http.
Bài này tập trung quyết định đúng mã, viết rule an toàn trên Apache, và khi nào bỏ .htaccess để dùng panel / Cloudflare.
Bài viết này giúp bạn
- Phân biệt 301 vs 302 theo ngữ cảnh migrate (không chỉ định nghĩa sách)
- Viết redirect trang, www↔apex, ép HTTPS
- Tránh loop, 500, và cache trình duyệt giả “đã ổn”
- Chọn Apache
.htaccessvs host panel vs Cloudflare - Checklist trước khi bàn giao khách
301 vs 302: quyết định trước khi viết file
| Mã | Ý nghĩa HTTP | Khi dùng | SEO khi migrate |
|---|---|---|---|
| 301 | Chuyển vĩnh viễn | Đổi domain, đổi slug, gộp www/apex, http→https cố định | Google thường chuyển tín hiệu sang URL mới |
| 302 | Chuyển tạm thời | Bảo trì, landing campaign ngắn, test A/B | Index/xếp hạng thường giữ ở URL cũ lâu hơn |
Sai phổ biến ở freelancer VN
- Dùng 302 vì sợ “không quay lại được” — Redirect không xóa nội dung server; đổi lại rule là được. Migrate xong mà để 302 = SEO chậm vài tuần đến vài tháng.
- 301 từng trang nhưng để http://www và https://apex song song — Google vẫn thấy hai canonical. Redirect phải gom về một URL chuẩn.
- Copy rule từ blog nước ngoài có khoảng trắng sai trong
%{HTTP_HOST}→ site 500 ngay sau upload.
Quy tắc nhớ: Nếu sau 30 ngày URL cũ không còn phục vụ traffic chính → 301. Chỉ 302 khi bạn chắc sẽ trả URL cũ về trạng thái cũ.
Apache .htaccess: mẫu thực tế
.htaccess đặt ở thư mục gốc site (thường public_html / www). Backup file cũ trước khi sửa — một dấu cách sai có thể 500 toàn site.
1) Redirect một path
Redirect 301 /landing-cu.html https://example.com/dich-vu/
Hoặc với mod_rewrite (linh hoạt hơn khi có điều kiện):
RewriteEngine On
RewriteRule ^blog/bai-cu/?$ https://example.com/blog/bai-moi/ [R=301,L]
2) Ép HTTPS (http → https)
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
3) Apex → www (hoặc ngược lại)
# example.com → www.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
# www → apex
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Thứ tự quan trọng: Thường gom host (www/apex) và scheme (https) thành một chuỗi để tránh A→B→C nhiều hop. Mỗi hop thêm latency và dễ confuse crawler.
4) Domain cũ → domain mới
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old-brand\.vn$ [NC]
RewriteRule ^(.*)$ https://new-brand.vn/$1 [R=301,L]
Đặt rule này trên hosting còn giữ domain cũ (DNS vẫn trỏ về đó). Domain mới chỉ cần nhận traffic — không redirect ngược lại.
Sinh rule nhanh (tránh gõ tay sai)
Khi chỉ cần một cặp from → to với mã 301/302, tạo .htaccess trên Kawa sinh khối RewriteEngine + RewriteCond + RewriteRule trong trình duyệt — không upload cấu hình lên server lạ. Dán vào file sau khi đã backup.
🚀 Tạo .htaccess ngay tại đây
Generator phù hợp redirect từng pattern; rule phức tạp (nhiều điều kiện, exclude admin WordPress, proxy) nên viết tay hoặc dùng panel chuyên dụng.
Apache vs panel hosting vs Cloudflare
Freelancer VN thường không “chỉ có Apache thuần”. Chọn lớp redirect đúng để tránh hai nơi cùng redirect (loop hoặc double hop).
| Lớp | Phù hợp khi | Lưu ý |
|---|---|---|
| .htaccess (Apache) | Shared hosting Apache/LiteSpeed, WordPress classic | Sai cú pháp = 500. Không dùng trên Nginx thuần. |
| Panel redirect | cPanel / DirectAdmin / host có UI Redirects | Dễ bàn giao khách; kiểm tra panel có ghi 301 thật không. |
| Cloudflare Redirect Rules | Site đã proxy cam; muốn đổi rule không SSH | Chạy trước origin — đừng lặp lại cùng rule trên .htaccess. |
| nginx.conf | VPS Nginx, Docker reverse proxy | Không đọc .htaccess. Dùng return 301 / rewrite. |
Khi nào ưu tiên Cloudflare / panel
- Khách đã dùng Cloudflare DNS + proxy: Redirect Rules / Bulk Redirects dễ audit hơn
.htaccesstrên shared host. - Hosting Nginx (một số VPS “tối ưu tốc độ”): đừng dán .htaccess — file bị bỏ qua, bạn tưởng đã redirect.
- WordPress + plugin redirect: ổn cho marketing, nhưng migrate domain nên có rule ở web server/CDN để không phụ thuộc PHP khi site lỗi.
Case study 1: Freelancer chuyển .com → .vn
Tình huống: Landing agency trên oldstudio.com, khách mua oldstudio.vn, hosting Apache + Cloudflare.
Làm đúng:
- DNS domain mới trỏ hosting mới, SSL Let’s Encrypt xanh.
- Trên Cloudflare (domain cũ): Bulk Redirect
https://oldstudio.com/*→https://oldstudio.vn/$1với 301. - Search Console: thêm property domain mới, giữ property cũ để theo dõi 404.
- Cập nhật sitemap, canonical, và link trong email chữ ký / Facebook page.
Làm sai (thật): Rule 302 “tạm vài tuần”. Sau 6 tuần Google vẫn ưu tiên .com trong vài từ khóa brand — khách nghĩ “SEO chết vì đổi domain”. Đổi sang 301 + đợi crawl lại thì ổn định.
Case study 2: Ép HTTPS nhưng quên www
Site có cả http://example.vn, https://example.vn, https://www.example.vn. Chỉ ép HTTPS trên apex → www vẫn HTTP hoặc không redirect.
Checklist tối thiểu:
curl -I http://example.vn→ 301 →https://…(canonical)curl -I http://www.example.vn→ cùng canonicalcurl -I https://www.example.vn→ cùng canonical (nếu chọn apex)- Không còn chuỗi 301→302→301
Dùng cửa sổ ẩn danh hoặc curl — Chrome cache 301 rất lâu, dễ báo cáo sai cho khách.
Lỗi thường gặp và cách xử lý
| Triệu chứng | Nguyên nhân hay gặp | Cách xử lý |
|---|---|---|
| 500 toàn site | Cú pháp .htaccess sai, thiếu RewriteEngine | Khôi phục backup; sửa từng khối |
| ERR_TOO_MANY_REDIRECTS | www↔apex + HTTPS mâu thuẫn, hoặc CF Flexible SSL | Một canonical; SSL Full (strict) nếu dùng CF |
| Redirect “đúng” trên máy bạn, sai máy khác | Cache trình duyệt / CDN | curl -I, purge CF cache |
| SEO chậm sau migrate | Dùng 302 hoặc thiếu redirect trang quan trọng | Đổi 301; map sitemap cũ → mới |
| Rule không chạy | Server Nginx / AllowOverride Off | Chuyển sang nginx/panel/CF |
Checklist bàn giao khách (copy vào PR / email)
- Canonical URL chốt:
https://+ www hoặc apex - Mọi redirect migrate là 301 (trừ bảo trì có ngày kết thúc)
curl -I5–10 URL mẫu (trang chủ, 2 blog, 1 landing, 1 URL đã đổi slug)- Không double redirect CF +
.htaccesscùng logic - Sitemap + canonical trong HTML trỏ domain mới
- Backup
.htaccess/ export Cloudflare rules
FAQ ngắn (thực địa)
WordPress có cần .htaccess không? Có permalink thì WP ghi block riêng — chèn redirect phía trên block # BEGIN WordPress, hoặc dùng Redirect ở CDN để khỏi đụng file WP ghi đè.
301 có mất backlink không? Không “xóa” backlink; 301 giúp chuyển phần lớn tín hiệu. Vẫn nên xin cập nhật link quan trọng (báo chí, đối tác) sang URL mới khi có thể.
Bao lâu Google nhận? Thường vài ngày đến vài tuần tùy crawl. Search Console → Page indexing giúp theo dõi URL cũ còn “Found” không.
Công cụ liên quan
- Tạo .htaccess (301/302) — sinh rule Rewrite trong trình duyệt
- Kiểm tra DNS / CNAME — xác nhận domain đã trỏ đúng trước khi kết luận redirect lỗi
- Kiểm tra SSL — HTTPS xanh trước khi ép redirect
Migrate domain/hosting không cần “phép thuật SEO”. Cần một canonical, 301 đúng chỗ, và kiểm tra bằng header thay vì cảm giác trình duyệt.