Bỏ qua tới nội dung chính
SEO & Audit kỹ thuật

Mã HTTP Cho SEO: Chọn Đúng 200, 301, 404 và 503

Mã HTTP Cho SEO: Chọn Đúng 200, 301, 404 và 503

Khi một URL biến mất, đội kỹ thuật thường hỏi đội SEO: “Trang này nên trả mã gì?”. Câu trả lời không nằm trong một bảng thuộc lòng. Nó phụ thuộc URL còn nội dung thay thế hay không, việc gián đoạn là tạm thời hay vĩnh viễn, và bạn muốn crawler làm gì ở lần truy cập tiếp theo.

Một mã HTTP sai có thể tạo ra trang lỗi vẫn mang 200, redirect kéo dài nhiều bước, hoặc hàng nghìn URL 503 khiến tốc độ crawl giảm. Ngược lại, lựa chọn đúng giúp trình duyệt, bot tìm kiếm, cache và hệ thống giám sát cùng hiểu một trạng thái.

Mã HTTP là thông điệp từ máy chủ

Mỗi lần trình duyệt hoặc crawler yêu cầu một URL, máy chủ phản hồi bằng status code. Năm nhóm chính là:

  • 1xx: thông tin trong quá trình xử lý.
  • 2xx: yêu cầu đã được xử lý thành công.
  • 3xx: cần đi tới một địa chỉ hoặc trạng thái khác.
  • 4xx: yêu cầu phía client không thể được đáp ứng như gửi.
  • 5xx: máy chủ không thể hoàn thành một yêu cầu hợp lệ.

Đối với SEO, mã trạng thái phải khớp với nội dung người dùng nhìn thấy. Trang báo “không tìm thấy sản phẩm” nhưng trả 200 OK tạo soft 404. Trang vẫn hiển thị nội dung đầy đủ nhưng trả 500 khiến crawler bỏ qua phần nội dung đó. Status và body không nên kể hai câu chuyện khác nhau.

Nhóm 2xx: thành công không có nghĩa chắc chắn được index

200 OK

200 cho biết máy chủ đã trả phản hồi thành công. Google có thể đưa nội dung sang bước xử lý tiếp theo, nhưng không cam kết index. Trang vẫn có thể bị loại vì noindex, canonical sang URL khác, nội dung kém giá trị, trùng lặp hoặc không đáp ứng tín hiệu chất lượng.

Chỉ trả 200 cho URL có nội dung thực. Đừng dùng nó như một cách giữ mọi địa chỉ “sống” sau khi sản phẩm hoặc bài viết đã bị xóa.

204 No Content

204 nói rằng yêu cầu thành công nhưng không có body. Nó hợp với một số API hoặc hành động không cần nội dung, không phù hợp cho landing page muốn xuất hiện trong tìm kiếm. Một trang HTML trống không thể tạo kết quả hữu ích dù status nằm trong nhóm thành công.

206 Partial Content

206 thường dùng khi client yêu cầu một phần tài nguyên, chẳng hạn video hoặc tệp lớn. Đây không phải mã mặc định cho trang HTML. Nếu CDN hoặc proxy bất ngờ trả 206 cho mọi tài liệu, hãy kiểm tra cấu hình range request và cache.

Nhóm 3xx: chuyển địa chỉ có chủ đích

301 Moved Permanently

Dùng 301 khi URL đã chuyển vĩnh viễn và có đích thay thế tương đương. Các trường hợp điển hình:

  • Đổi slug bài viết.
  • Chuyển HTTP sang HTTPS.
  • Hợp nhất hai bài cùng search intent.
  • Thay cấu trúc danh mục.
  • Chuyển sản phẩm cũ sang phiên bản kế nhiệm thực sự tương đương.

Đích phải sát nhu cầu của URL cũ. Redirect một sản phẩm hết hàng về trang chủ hoặc danh mục quá rộng thường gây khó chịu và có thể bị hiểu như soft 404.

302 Found

302 phù hợp với chuyển hướng tạm thời: thử nghiệm ngắn, trang bảo trì có địa chỉ thay thế, phân luồng trong thời gian giới hạn hoặc chiến dịch sẽ quay về URL gốc. Nếu việc chuyển đã trở thành vĩnh viễn, hãy đổi sang 301 để mục đích rõ ràng cho mọi hệ thống.

Trong thực tế, Google có thể xử lý nhiều redirect tương tự nhau theo tín hiệu tổng thể. Tuy vậy, chọn đúng mã vẫn quan trọng cho trình duyệt, cache, client khác và người bảo trì hệ thống.

303 See Other

303 thường xuất hiện sau một yêu cầu POST, hướng client tới trang kết quả bằng GET. Ví dụ người dùng gửi form rồi được chuyển tới trang xác nhận. Đây là mẫu ứng dụng, không phải công cụ chính để migrate URL SEO.

307 và 308

307 Temporary Redirect308 Permanent Redirect giữ nguyên HTTP method khi chuyển hướng. 308 mang ý nghĩa vĩnh viễn, 307 là tạm thời. Với request GET thông thường, chúng có thể phục vụ migration, nhưng đội kỹ thuật cần hiểu hành vi method trước khi dùng cho form hoặc API.

Redirect chain: khi một quyết định bị kéo qua nhiều đời URL

Một bài từng ở A, đổi sang B rồi sang C. Nếu A vẫn redirect tới B và B tới C, mỗi lượt truy cập phải đi hai bước. Website lâu năm có thể tạo chuỗi năm hoặc sáu hop mà không ai chủ động thiết kế.

Hậu quả gồm:

  • Tăng độ trễ cho người dùng và crawler.
  • Tạo thêm request máy chủ.
  • Làm việc debug canonical và analytics khó hơn.
  • Tăng nguy cơ một hop lỗi hoặc vòng lặp.
  • Giữ internal link trỏ tới kiến trúc đã bỏ.

Mỗi URL cũ nên trỏ thẳng tới đích cuối. Dùng Redirect Chain Checker để xem từng hop, status, vòng lặp và URL kết thúc. Sau đó sửa internal link, canonical và sitemap để dùng URL cuối thay vì dựa mãi vào redirect.

Nhóm 4xx: URL hoặc quyền truy cập có vấn đề

400 Bad Request

Máy chủ không hiểu yêu cầu do cú pháp, header hoặc tham số không hợp lệ. Nếu Googlebot gặp 400 trên URL sạch mà trình duyệt thông thường vẫn mở được, hãy kiểm tra WAF, giới hạn header, xử lý query string và rule chặn user agent.

401 Unauthorized

401 yêu cầu xác thực. Nó phù hợp cho khu vực đăng nhập, API private hoặc tài liệu có quyền. Nội dung muốn xếp hạng không thể đồng thời bắt crawler đăng nhập. Đừng dùng 401 để điều tiết crawl; hãy xử lý tải máy chủ và cấu trúc URL đúng chỗ.

403 Forbidden

403 cho biết máy chủ hiểu yêu cầu nhưng từ chối phục vụ. Các cấu hình CDN, WAF hoặc anti-bot quá mạnh có thể trả 403 nhầm cho crawler hợp lệ. Nếu một loạt trang public rơi khỏi index, hãy đối chiếu log theo thời gian, user agent và IP đã xác minh thay vì tin riêng chuỗi user agent.

404 Not Found

404 là phản hồi đúng khi tài nguyên không tồn tại và không có thay thế tương đương. Không phải mọi 404 đều là “lỗi SEO” cần redirect. Một URL gõ sai, sản phẩm đã ngừng hẳn hoặc bài test bị xóa có thể trả 404 bình thường.

Trang 404 nên:

  • Giải thích ngắn gọn nội dung không còn.
  • Có navigation và ô tìm kiếm nếu phù hợp.
  • Gợi ý khu vực liên quan, không tự động chuyển người dùng.
  • Vẫn trả status 404, không phải 200.

410 Gone

410 nói rõ tài nguyên đã bị xóa có chủ đích. Với Google Search, cả 404410 đều dẫn tới việc URL không được giữ trong index khi trạng thái tồn tại. Chọn 410 khi hệ thống biết chắc nội dung đã kết thúc; chọn 404 khi đơn giản là không tìm thấy. Không cần đổi hàng nghìn 404 hợp lệ sang 410 chỉ để mong deindex nhanh hơn.

429 Too Many Requests

429 cho biết client gửi quá nhiều yêu cầu. Google xem đây là tín hiệu máy chủ quá tải và có thể giảm tốc độ crawl tạm thời. Nếu rate limiter trả 429 cho crawler thường xuyên, hãy xem quota, cache và quy tắc nhận diện. Việc mở hoàn toàn không giới hạn cũng không phải giải pháp; mục tiêu là mức phục vụ ổn định.

Nhóm 5xx: máy chủ đang thất bại

500 Internal Server Error

500 là lỗi ứng dụng hoặc máy chủ không xác định. Một vài lỗi thoáng qua có thể xảy ra, nhưng tỷ lệ cao trên nhiều URL cho thấy release, database, dependency hoặc tài nguyên hệ thống có vấn đề.

502 Bad Gateway

502 thường xuất hiện khi proxy hoặc CDN không nhận phản hồi hợp lệ từ upstream. Kiểm tra health của application server, timeout giữa các lớp, DNS nội bộ và giới hạn kết nối.

503 Service Unavailable

503 phù hợp cho bảo trì hoặc quá tải tạm thời. Có thể gửi header Retry-After để client biết lúc nên thử lại. Trang bảo trì phải trả 503, không phải 200; nếu không, công cụ tìm kiếm có thể thấy một trang “đang bảo trì” giống nhau trên mọi URL.

Không để 503 kéo dài nhiều ngày nếu website thực tế đã đóng hoặc URL đã mất. Lỗi máy chủ dai dẳng có thể khiến URL đang index dần bị loại và tốc độ crawl toàn site giảm.

504 Gateway Timeout

504 nghĩa là gateway chờ upstream quá lâu. Hãy tìm query database chậm, API phụ thuộc, cache miss, worker cạn hoặc timeout không đồng bộ giữa CDN và server.

Bảng chọn status theo tình huống

Tình huống Status thường phù hợp
Nội dung tồn tại và tải bình thường 200
URL đổi vĩnh viễn, có trang tương đương 301 hoặc 308
Chuyển tạm thời rồi quay lại URL gốc 302 hoặc 307
Tài nguyên không tồn tại, không có đích thay 404
Tài nguyên đã xóa có chủ đích 410
Khu vực yêu cầu đăng nhập 401
Máy chủ từ chối quyền truy cập 403
Bị giới hạn do quá nhiều request 429
Bảo trì hoặc quá tải ngắn hạn 503
Lỗi ứng dụng chưa phân loại 500

Bảng này là điểm bắt đầu. Với ecommerce, một sản phẩm hết hàng tạm thời vẫn nên trả 200, giữ thông tin sản phẩm, trạng thái tồn kho và lựa chọn thay thế. Sản phẩm ngừng vĩnh viễn có mẫu kế nhiệm gần như tương đương có thể 301; nếu không có thay thế phù hợp, 404 hoặc 410 trung thực hơn.

Soft 404: status thành công, nội dung lại thất bại

Soft 404 thường xuất hiện khi:

  • Trang không có sản phẩm nhưng vẫn trả 200.
  • Mọi URL sai đều render trang chủ.
  • Trang tìm kiếm không có kết quả vẫn indexable.
  • Nội dung bị xóa, template chỉ còn header và footer.
  • Website redirect URL không liên quan về danh mục rộng.

Kiểm tra báo cáo Page indexing trong Search Console và lấy mẫu URL. Không nên chỉ đổi vài câu chữ trên trang lỗi để né nhận diện. Hãy trả status đúng hoặc cung cấp nội dung thực sự có ích cho truy vấn.

Robots.txt không thay được status code

Chặn /old-page trong robots.txt không nói rằng trang đã bị xóa, chuyển đi hay cần đăng nhập. Crawler chỉ biết nó không được phép lấy nội dung. URL đã được biết vẫn có thể tồn tại trong hệ thống tìm kiếm mà không có body để đánh giá.

Nếu URL chuyển, dùng redirect. Nếu mất, trả 404 hoặc 410. Nếu còn nhưng không muốn index, để crawler truy cập và đọc noindex. Robots.txt Checker giúp phát hiện rule chặn nhầm, nhưng quyết định vòng đời URL vẫn nằm ở response.

Audit status code theo template, không theo vài URL đẹp

Một trang chủ trả 200 không nói được catalog có khỏe hay không. Lấy mẫu và thống kê theo template:

  1. Trang chủ và navigation chính.
  2. Danh mục, phân trang và bộ lọc.
  3. Sản phẩm còn hàng, hết tạm thời và ngừng bán.
  4. Bài blog mới, cũ, đổi slug và đã xóa.
  5. URL có tham số, chữ hoa, slash và hostname khác.
  6. Sitemap, robots.txt, ảnh chính và tệp quan trọng.

Đối chiếu status với canonical, meta robots, sitemap và internal link. Một URL 301 không nên còn trong sitemap. Trang 404 không nên nhận hàng nghìn internal link. Trang 200 muốn index không nên canonical sang nơi khác.

Dùng SEO Checker để kiểm tra phản hồi và tín hiệu on-page của URL đại diện, sau đó SEO audit miễn phí để tìm lỗi lặp theo nhóm trang.

Giám sát trước khi traffic giảm

Thiết lập cảnh báo cho tỷ lệ 5xx, thời gian phản hồi và thay đổi status của các URL quan trọng. Sau mỗi deployment hoặc migration, chạy smoke test gồm:

  • Homepage, trang đăng nhập và trang doanh thu.
  • Một URL đại diện cho mỗi template.
  • Robots.txt và sitemap index.
  • Redirect từ URL cũ.
  • Một URL không tồn tại để xác nhận 404 thật.

Log máy chủ nên lưu status, path, thời gian, user agent và request ID đủ lâu để so sánh trước và sau sự cố. Khi lỗi chỉ xảy ra với bot hoặc một khu vực, log thường trả lời nhanh hơn việc tải lại trang từ máy cá nhân.

Kết luận

HTTP status code là hợp đồng ngắn giữa server và client. SEO dùng hợp đồng đó để hiểu nội dung còn tồn tại, đã chuyển, bị xóa hay tạm thời không phục vụ. Chọn mã theo vòng đời thật của URL, giữ status nhất quán với body, và làm sạch sitemap cùng internal link sau mỗi thay đổi.

Đừng redirect mọi lỗi về trang chủ, đừng trả 200 cho trang rỗng và đừng dùng robots.txt để che một quyết định chưa được đưa ra. Một hệ thống status rõ ràng giúp cả người dùng, crawler lẫn đội vận hành bớt phải đoán.

Nguồn tham khảo: Google Search Central về cách mã HTTP ảnh hưởng crawlerhướng dẫn xử lý redirect.

Quảng cáo

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

404 có luôn là lỗi SEO cần redirect không?
Không. Nếu tài nguyên không tồn tại và không có trang thay thế tương đương, 404 là phản hồi đúng. Chỉ redirect khi có đích thực sự đáp ứng cùng nhu cầu.
Trang bảo trì nên trả 200 hay 503?
Trang bảo trì tạm thời nên trả 503, có thể kèm Retry-After. Trả 200 khiến nội dung bảo trì bị hiểu như nội dung hợp lệ của nhiều URL.
301 và 302 khác nhau thế nào trong migration?
301 biểu thị chuyển vĩnh viễn; 302 dành cho chuyển tạm thời. Khi cấu trúc URL đã đổi lâu dài, 301 giúp mục đích rõ ràng với mọi client và hệ thống cache.
#Technical SEO #On-page SEO

Nhận bản tóm tắt SEO checklist qua email

Đăng ký để nhận bản tóm tắt các bước tối ưu SEO quan trọng nhất từ bài viết này.

Kiểm tra website của bạn miễn phí

Chạy SEO audit hoặc kiểm tra chất lượng traffic ngay — không cần đăng ký.