Technical SEO

HTTP Status Code là gì?

Định nghĩa nhanh

HTTP Status Code là mã số ba chữ số máy chủ trả về cho mỗi yêu cầu, cho biết kết quả xử lý: thành công (2xx), chuyển hướng (3xx), lỗi client (4xx), hoặc lỗi server (5xx). Theo Google, 2xx không đảm bảo chắc chắn được index, 301 là tín hiệu chuyển hướng mạnh còn 302/307 là tín hiệu yếu, và chỉ mã 429 trong nhóm 4xx ảnh hưởng đến tốc độ crawl - các mã 4xx khác thì không.

HTTP Status Code là gì?

HTTP Status Code (mã trạng thái HTTP) là mã số ba chữ số mà máy chủ web trả về cho mỗi yêu cầu (request) từ trình duyệt hoặc trình thu thập dữ liệu, cho biết kết quả xử lý yêu cầu đó: thành công, cần chuyển hướng, lỗi do phía người dùng, hay lỗi do phía máy chủ. Mọi lượt tải trang, mọi lượt Googlebot ghé thăm một URL, đều đi kèm một mã trạng thái — dù người dùng thông thường hiếm khi nhìn thấy nó.

Bốn nhóm mã trạng thái và ý nghĩa với Google Tìm kiếm

Theo tài liệu chính thức của Google Search Central, mã trạng thái được chia thành 4 nhóm chính, mỗi nhóm ảnh hưởng khác nhau đến việc crawl và index:

Nhóm Ý nghĩa chung Google Tìm kiếm xử lý ra sao
2xx (thành công) Yêu cầu được xử lý thành công Google cân nhắc lập chỉ mục nội dung nhận được — nhưng 2xx KHÔNG đảm bảo chắc chắn sẽ được index
3xx (chuyển hướng) Nội dung đã chuyển sang URL khác Googlebot đi theo tối đa 10 bước chuyển hướng; 301 là tín hiệu mạnh, 302/307 là tín hiệu yếu cho biết nên xử lý trang đích
4xx (lỗi phía client) URL không tồn tại hoặc không có quyền truy cập Google không dùng nội dung nhận được; URL đã index trước đó sẽ dần bị loại khỏi chỉ mục
5xx (lỗi phía server) Máy chủ gặp sự cố khi xử lý yêu cầu Google giảm tốc độ crawl tương ứng với số URL lỗi; nếu kéo dài, URL đã index sẽ bị xóa khỏi chỉ mục

Những mã cụ thể quan trọng nhất với SEO

  • 200 (OK) — thành công tiêu chuẩn, nội dung được chuyển tiếp cho quy trình lập chỉ mục.
  • 301 (Moved Permanently) — tín hiệu mạnh nhất trong nhóm chuyển hướng, dùng khi một URL đã đổi vĩnh viễn.
  • 302 (Found) / 307 (Temporary Redirect) — chuyển hướng tạm thời, Google coi là tín hiệu yếu hơn 301 khi quyết định trang nào nên được xử lý là chính.
  • 304 (Not Modified) — báo hiệu nội dung không đổi so với lần crawl trước, giúp tiết kiệm tài nguyên crawl mà không ảnh hưởng đến việc lập chỉ mục.
  • 404 (Not Found) — URL không tồn tại; nếu URL từng được index, hệ thống sẽ dần loại nó khỏi chỉ mục theo thời gian (xem thêm bài 404 Error để hiểu sâu về cách chẩn đoán).
  • 429 (Too Many Requests) — riêng mã này trong nhóm 4xx được Googlebot hiểu là dấu hiệu server quá tải, không phải lỗi nội dung, và sẽ khiến crawler tự giảm tốc độ crawl.
  • 500/502/503 (lỗi server) — Google giảm dần tốc độ crawl tương ứng số lượng URL gặp lỗi; khi server phục hồi ổn định, tốc độ crawl sẽ tăng dần trở lại.

Một chi tiết kỹ thuật hay bị bỏ qua: 401/403 không dùng để giới hạn tốc độ crawl

Tài liệu chính thức của Google lưu ý rõ: đừng dùng mã 401 (Unauthorized) hoặc 403 (Forbidden) như một cách “chặn bớt” Googlebot để giảm tải server — ngoại trừ 429, các mã 4xx không ảnh hưởng đến tốc độ crawl của Google. Muốn kiểm soát tốc độ crawl, cần dùng đúng cơ chế giới hạn tốc độ thu thập dữ liệu trong Search Console, không “lách” bằng mã lỗi truy cập.

Ví dụ đọc mã trạng thái qua HTTP header thực tế

HTTP/1.1 301 Moved Permanently
Location: https://example.com/san-pham-moi/
Content-Type: text/html; charset=UTF-8

Đoạn header trên cho biết: máy chủ xác nhận URL đã chuyển vĩnh viễn (301), đồng thời chỉ định rõ địa chỉ đích qua header Location — thiếu header này, trình duyệt/crawler sẽ không biết chuyển hướng đến đâu dù mã trạng thái đúng là 3xx.

Cách kiểm tra mã trạng thái của một URL

Có thể kiểm tra nhanh qua công cụ dòng lệnh (ví dụ curl -I https://example.com để chỉ lấy header), qua tab Network của DevTools trình duyệt, hoặc trực tiếp qua URL Inspection Tool trong Google Search Console để xem chính xác mã trạng thái Googlebot nhận được ở lần crawl gần nhất.

Vì sao Search Console báo lỗi cho một số mã 3xx nhưng không phải tất cả

Search Console chỉ tạo thông báo lỗi cho các mã trong khoảng 4xx-5xx, và riêng với nhóm 3xx thì chỉ báo lỗi khi CHUỖI chuyển hướng đó thất bại — ví dụ chuyển hướng đến một URL khác rồi URL đó lại lỗi, hoặc chuỗi chuyển hướng vượt quá 10 bước mà Googlebot cho phép đi theo. Một redirect 301 đơn giản, dẫn thẳng đến một URL 200 hợp lệ, sẽ không bị coi là lỗi — đây là hành vi hoàn toàn bình thường và mong muốn.

Chuỗi chuyển hướng (redirect chain) và giới hạn 10 bước

Một chi tiết kỹ thuật quan trọng ít được nhắc đến: Googlebot mặc định chỉ đi theo tối đa 10 bước chuyển hướng liên tiếp cho việc crawl nội dung web thông thường. Nếu URL A chuyển đến B, B chuyển đến C, và cứ thế kéo dài vượt quá giới hạn này, Googlebot sẽ dừng lại và không xử lý được URL đích cuối cùng. Đáng chú ý, các công cụ khác của Google — như Công cụ kiểm tra (Rich Results Test, URL Inspection Test) — thậm chí KHÔNG đi theo chuyển hướng nào cả, nghĩa là kết quả kiểm tra qua các công cụ này có thể khác với hành vi crawl thực tế trên diện rộng của Googlebot. Đây là lý do vì sao đôi khi một trang “test” báo lỗi trong khi crawl thực tế vẫn xử lý được, hoặc ngược lại.

Mã trạng thái và tệp robots.txt — một trường hợp đặc biệt

Cách Google xử lý mã trạng thái cho chính tệp robots.txt có quy tắc riêng, khác với các URL nội dung thông thường: nếu robots.txt trả về 3xx, Google sẽ đi theo chuyển hướng để tìm tệp quy tắc thực sự; nếu trả về 4xx, Google coi như KHÔNG có robots.txt và crawl tự do; nhưng nếu trả về 5xx kéo dài, Google có thể tạm dừng toàn bộ hoạt động crawl trên site đó vì không xác định được quy tắc crawl có đang bị cấm hay không — một lỗi server tưởng chừng nhỏ ở đúng một tệp có thể ảnh hưởng đến toàn bộ khả năng crawl của website.

Sai lầm thường gặp

  • Trả về mã 200 cho một trang lỗi/trống thay vì 404 thật — gây ra tình trạng “soft 404” khiến Google khó xử lý đúng.
  • Dùng 302 cho các chuyển hướng vĩnh viễn, làm loãng tín hiệu truyền giá trị xếp hạng đáng lẽ nên dùng 301.
  • Chặn crawl bằng mã 401/403 với kỳ vọng giảm tải server, trong khi cơ chế này không ảnh hưởng đến tốc độ crawl như mong đợi.
  • Để server trả 5xx kéo dài mà không xử lý, khiến các URL đã index dần bị loại khỏi chỉ mục.

Checklist kiểm tra mã trạng thái HTTP

  • Trang lỗi/không tồn tại có trả đúng 404 (không phải 200 giả)?
  • Chuyển hướng vĩnh viễn có dùng đúng 301, không nhầm với 302/307?
  • Header Location có được thiết lập đúng cho mọi chuyển hướng?
  • Server có ổn định, không phát sinh 5xx thường xuyên khi Googlebot truy cập?

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

Mã trạng thái có phải là yếu tố xếp hạng trực tiếp không?

Không trực tiếp theo nghĩa “200 tốt hơn thì hạng cao hơn”. Nhưng mã trạng thái sai (như soft 404, chuyển hướng sai loại) có thể khiến Google hiểu sai tình trạng trang, gián tiếp ảnh hưởng đến khả năng lập chỉ mục và xếp hạng.

Có bao nhiêu mã trạng thái HTTP tất cả?

Chuẩn HTTP định nghĩa hàng chục mã khác nhau, nhưng theo Google, chỉ khoảng 20 mã là thực sự phổ biến trong môi trường web thực tế và đáng để quản trị viên nắm rõ ý nghĩa.

Nguồn tham khảo