Google Search Console thường gắn cờ các lỗi soft 404 trong các trang web Next.js, điều này có thể làm lãng phí ngân sách thu thập dữ liệu (crawl budget).
Bản chất của lỗi soft 404 là gì
Một phản hồi 404 thực sự sẽ gửi mã trạng thái HTTP 404, thông báo cho trình duyệt và bot rằng tài nguyên được yêu cầu không tồn tại. Ngược lại, một lỗi soft 404 lại trả về trạng thái 200 OK trong khi cung cấp rất ít hoặc không có nội dung nào. Các công cụ tìm kiếm đọc mã 200 là một trang web hoạt động tốt, nhưng trang đó lại không mang lại giá trị gì. Kết quả là lãng phí các chu kỳ thu thập dữ liệu (crawl cycles) và gửi một tín hiệu đến Google rằng chất lượng nội dung của trang web đang ở mức thấp.
Tại sao Next.js lại rơi vào cái bẫy này
Cơ chế dynamic routing của Next.js cho phép bạn phục vụ các trang như /products/[slug] mà không cần mã hóa cứng (hard-coding) mọi URL. Khi một sản phẩm biến mất khỏi cơ sở dữ liệu, component vẫn được render, và nếu mã nguồn không kiểm tra dữ liệu bị thiếu, Next.js sẽ mặc định phản hồi với mã 200 OK. Điều tương tự cũng xảy ra khi người dùng nhập sai URL hoặc khi các route cũ vẫn còn tồn tại sau khi thiết kế lại trang web. Trang web vẫn tải, nhưng không cung cấp nội dung có ý nghĩa, từ đó kích hoạt cảnh báo soft-404 trong Search Console.
Những rủi ro đối với chủ sở hữu trang web
- Lãng phí ngân sách thu thập dữ liệu (Crawl budget) – Các bot được phân bổ một số lượng yêu cầu giới hạn cho mỗi trang web. Lỗi soft 404 sẽ tiêu tốn hạn mức đó, làm giảm cơ hội để các trang thực sự được lập chỉ mục (indexed).
- Hình phạt SEO – Việc lặp lại các lỗi soft 404 sẽ báo hiệu cho các công cụ tìm kiếm rằng trang web có chất lượng thấp.
- Ảnh hưởng đến trải nghiệm người dùng – Những khách truy cập rơi vào một trang trống sẽ thoát ra ngay lập tức, làm tăng tỷ lệ thoát (bounce rate) và gây ảnh hưởng đến tỷ lệ chuyển đổi.
Cách chuyển đổi lỗi soft 404 thành lỗi 404 chuẩn
1. Sử dụng helper notFound có sẵn
- App Router – Import
notFoundtừnext/navigation. Sau khi fetch dữ liệu, hãy gọinotFound()nếu kết quả không tồn tại. Khi đó, Next.js sẽ gửi trạng thái 404 thực sự. - Pages Router – Trả về
{ notFound: true }từgetStaticPropshoặcgetServerSidePropskhi việc fetch dữ liệu thất bại. Điều này cũng mang lại kết quả tương tự cho API routing cũ hơn.
2. Triển khai trang 404 tùy chỉnh
Trang lỗi mặc định sẽ khiến người dùng cảm thấy bị bỏ rơi. Hãy tạo app/not-found.js (App Router) hoặc pages/404.js (Pages Router) kèm theo các liên kết điều hướng, ô tìm kiếm hoặc gợi ý các nội dung liên quan. Một trang 404 được thiết kế tốt sẽ giữ chân khách truy cập ở lại trang web thay vì đẩy họ rời đi ngay lập tức.
3. Dọn dẹp các route mồ côi (orphaned routes)
Xóa các trang tĩnh không còn mục đích sử dụng. Nếu một tệp vẫn còn đó nhưng nội dung trống rỗng, hãy thêm phản hồi notFound hoặc xóa hoàn toàn tệp đó. Việc kiểm tra định kỳ các thư mục pages hoặc app sẽ giúp ngăn chặn các URL "chết" bị rò rỉ ra ngoài.
4. Thiết lập chuyển hướng vĩnh viễn (301) cho nội dung đã di chuyển
Khi URL của một trang thay đổi, lệnh chuyển hướng 301 sẽ thông báo cho trình duyệt và bot rằng tài nguyên đã được di chuyển vĩnh viễn. Hãy thêm các lệnh chuyển hướng trong next.config.js dưới key redirects. Điều này ngăn chặn việc URL cũ trả về mã 200 nhưng không có nội dung.
5. Theo dõi và xử lý các cảnh báo từ Search Console
Kiểm tra Google Search Console thường xuyên để phát hiện các lỗi soft 404. Sử dụng một trình thu thập dữ liệu (crawler) tự động để phát hiện các lỗi mới trước khi chúng tích tụ lại. Hãy coi mỗi cảnh báo là một tín hiệu để kiểm tra lại logic fetch dữ liệu bên dưới.
Tóm lại
Một trang trả về mã 200 OK trong khi không cung cấp nội dung sẽ âm thầm làm cạn kiệt giá trị SEO. Trong Next.js, các dynamic route và việc fetch dữ liệu không được kiểm tra khiến lỗi soft 404 trở nên phổ biến, nhưng bạn hoàn toàn có thể loại bỏ chúng. Hãy sử dụng notFound, xây dựng một trang 404 tùy chỉnh hữu ích, dọn dẹp các route mồ côi, cấu hình chuyển hướng 301 và luôn cảnh giác với Search Console để bảo vệ ngân sách thu thập dữ liệu, duy trì thứ hạng và giữ chân khách truy cập trên trang web.
