Mục lục bài viết7 mục
- 1.Cơ chế hai giai đoạn khiến nội dung JavaScript dễ bị bỏ sót
- 2.Xác nhận Google thật sự thấy gì trên trang của bạn
- 3.Bốn cách dựng trang và mức rủi ro của từng cách
- 4.Những chi tiết JavaScript hay làm hỏng việc lập chỉ mục
- 5.Quy trình sửa theo thứ tự cho một website đang chạy
- 6.Bảng kiểm điền sẵn cho một mẫu trang chi tiết
- 7.Lưu ý khi đo kết quả và những kỳ vọng sai
Trang hiển thị đầy đủ trên trình duyệt nhưng chỉ một phần nội dung lọt vào kết quả tìm kiếm. Đó là dấu hiệu điển hình của một website dựng bằng JavaScript ở phía trình duyệt. Bài này đưa quy trình bốn bước để xác nhận Google thấy gì, sửa đúng chỗ đang thiếu, và kiểm lại bằng dữ liệu thay vì cảm giác.
Cơ chế hai giai đoạn khiến nội dung JavaScript dễ bị bỏ sót
Google xử lý một trang qua hai giai đoạn tách rời. Giai đoạn đầu, bot tải tài liệu HTML thô mà máy chủ trả về và bóc ngay những gì có sẵn trong đó. Giai đoạn hai, trang được đưa vào hàng đợi render, chạy JavaScript trong một trình duyệt không giao diện, rồi kết quả sau khi chạy mới được xử lý tiếp.
Điểm mấu chốt nằm ở chữ hàng đợi. Giai đoạn hai không xảy ra ngay và không có mốc thời gian cam kết. Với website nhỏ, độ trễ thường không đáng kể. Với website hàng nghìn trang cập nhật liên tục, một phần đáng kể nội dung JavaScript có thể chờ rất lâu mới tới lượt, hoặc bị bỏ qua khi tài nguyên bị chặn.
Hệ quả thực tế là các tín hiệu chỉ tồn tại sau khi chạy JavaScript đều rủi ro hơn hẳn: nội dung chính, liên kết nội bộ, thẻ canonical được chèn động, và thẻ robots thay đổi sau khi tải. Riêng thẻ robots có một luật khắc nghiệt: nếu HTML thô đã ghi noindex, bot dừng ngay và không bao giờ chạy tới bước render để thấy bạn đã đổi ý bằng JavaScript.
Xác nhận Google thật sự thấy gì trên trang của bạn
Đừng đoán bằng cách nhìn trang trên trình duyệt của mình. Có ba cách kiểm tăng dần về độ tin cậy, nên làm cả ba cho các mẫu trang quan trọng.
Cách nhanh nhất là xem mã nguồn trang gốc, không phải bảng kiểm tra phần tử. Chọn một câu đặc trưng giữa bài, tìm nó trong mã nguồn. Không thấy nghĩa là câu đó chỉ xuất hiện sau khi JavaScript chạy.
Cách thứ hai là tắt JavaScript trong trình duyệt rồi tải lại trang. Những gì còn hiện ra chính là phần chắc chắn được xử lý ở giai đoạn đầu. Cách này cho bạn cảm nhận nhanh về tỷ lệ nội dung phụ thuộc vào bước render.
Cách chính xác nhất là dùng công cụ Kiểm tra URL trong Google Search Console, chọn kiểm tra trực tiếp, rồi mở phần HTML đã render và phần ảnh chụp trang. Ở đây bạn còn thấy danh sách tài nguyên không tải được. Đây là chỗ phát hiện ra rằng một tệp JavaScript quan trọng đang bị chặn trong robots.txt, tình huống làm hỏng toàn bộ bước render mà không có triệu chứng nào khác.
Bốn cách dựng trang và mức rủi ro của từng cách
Dựng hoàn toàn ở phía trình duyệt là cách rủi ro nhất. Máy chủ trả về một tài liệu gần như rỗng, mọi thứ phụ thuộc vào JavaScript. Chấp nhận được với ứng dụng nội bộ sau đăng nhập, không nên dùng cho trang cần xếp hạng.
Dựng ở phía máy chủ trả về HTML đã đầy đủ nội dung ngay từ yêu cầu đầu tiên, sau đó JavaScript gắn thêm phần tương tác. Đây là lựa chọn an toàn cho website nội dung có dữ liệu thay đổi thường xuyên.
Dựng sẵn thành tệp tĩnh lúc xuất bản cho kết quả tương đương về mặt lập chỉ mục và nhanh hơn nữa, nhưng cần chạy lại quá trình dựng mỗi lần nội dung đổi. Phù hợp với blog, tài liệu, trang giới thiệu.
Cách thứ tư là render riêng cho bot, tức phát hiện bot rồi trả về bản HTML đã dựng sẵn. Cách này chấp nhận được như giải pháp tạm thời, với điều kiện nội dung trả cho bot giống hệt nội dung trả cho người dùng. Nhược điểm là thêm một hệ thống phải bảo trì, và khi nó hỏng thì hỏng âm thầm.
Những chi tiết JavaScript hay làm hỏng việc lập chỉ mục
Liên kết nội bộ là chỗ sai nhiều nhất. Bot đi theo thẻ liên kết có thuộc tính địa chỉ thật. Một phần tử bấm vào rồi dùng mã để đổi trang không phải liên kết, dù trên màn hình nó trông y hệt. Kết quả là cả một nhánh nội dung không có đường vào.
Nội dung tải khi cuộn xuống là chỗ sai thứ hai. Bot render trong một khung nhìn cố định và không cuộn theo cách người dùng cuộn. Danh sách sản phẩm dạng cuộn vô hạn vì thế thường chỉ được ghi nhận lô đầu tiên. Cách xử lý là luôn có một phiên bản phân trang bằng liên kết thật song song với trải nghiệm cuộn.
Chỗ sai thứ ba là chặn tài nguyên. Nhiều tệp robots.txt cũ vẫn chặn thư mục chứa mã và ảnh vì lý do lịch sử. Khi tệp JavaScript dựng nội dung nằm trong thư mục bị chặn, bước render trả về một trang trống.
Chỗ sai thứ tư là dữ liệu nội dung phụ thuộc vào trạng thái phiên làm việc, ví dụ chỉ hiện sau khi người dùng chọn khu vực hoặc đồng ý điều khoản. Bot không có trạng thái đó, nên thấy trang rỗng hoặc thấy màn hình chờ.

Quy trình sửa theo thứ tự cho một website đang chạy
Bước một là dựng bảng kiểm cho từng mẫu trang, không kiểm từng URL. Một website thường có khoảng năm tới bảy mẫu: trang chủ, trang danh sách, trang chi tiết, trang tìm kiếm nội bộ, trang tài liệu, trang đích chiến dịch. Chọn hai URL đại diện cho mỗi mẫu.
Bước hai là chạy cả ba cách kiểm ở phần trên cho từng URL đại diện, ghi kết quả vào bảng với ba cột: nội dung chính có trong HTML thô, liên kết nội bộ có trong HTML thô, tài nguyên bị chặn.
Bước ba là sửa theo thứ tự ảnh hưởng. Bỏ chặn tài nguyên trong robots.txt trước vì đây là sửa một dòng và có thể mở khóa toàn bộ bước render. Kế đến là đổi các phần tử điều hướng thành liên kết thật. Sau đó mới tới việc chuyển mẫu trang quan trọng nhất sang dựng phía máy chủ, thường bắt đầu bằng mẫu trang chi tiết vì đó là nơi tập trung nội dung.
Bước bốn là xác nhận lại sau hai tới bốn tuần bằng chính bảng đã lập, cộng thêm số liệu trong báo cáo Trang của Search Console cho từng nhóm URL. Nếu số trang được lập chỉ mục trong nhóm đã sửa tăng rõ trong khi nhóm chưa sửa đứng yên, bạn có bằng chứng rằng nguyên nhân đúng là ở khâu JavaScript chứ không phải ở chất lượng nội dung.
Bảng kiểm điền sẵn cho một mẫu trang chi tiết
Đây là bản ghi mẫu cho mẫu trang chi tiết sản phẩm của một website dựng bằng framework JavaScript, sau khi chạy đủ ba cách kiểm.
Số liệu và kết quả trong ví dụ dưới đây là bản dựng cho một tình huống giả định, không phải bản ghi lấy từ một website cụ thể.
URL đại diện: trang chi tiết một sản phẩm đang bán. Nội dung mô tả trong HTML thô: không có, chỉ xuất hiện sau khi render. Bảng thông số kỹ thuật: không có trong cả HTML thô lẫn bản đã render vì nằm trong tab tải theo yêu cầu. Đánh giá của người mua: có sau khi render. Liên kết sang sản phẩm liên quan: là phần tử bấm, không phải liên kết thật. Thẻ tiêu đề: có trong HTML thô. Thẻ canonical: chèn bằng JavaScript. Tài nguyên bị chặn: một tệp trong thư mục tài nguyên tĩnh.
Việc cần làm rút ra từ bảng này, xếp theo thứ tự: bỏ chặn thư mục tài nguyên, đưa thẻ canonical vào HTML thô, đổi liên kết sản phẩm liên quan thành liên kết thật, đưa bảng thông số ra khỏi tab tải theo yêu cầu, cuối cùng mới chuyển mẫu trang này sang dựng phía máy chủ.
Lưu ý khi đo kết quả và những kỳ vọng sai
Đừng kỳ vọng thay đổi thứ hạng ngay sau khi sửa. Việc bạn vừa làm là giúp nội dung được ghi nhận đầy đủ, đó là điều kiện cần chứ không phải điều kiện đủ để lên top.
Đừng dùng số lượng trang đã lập chỉ mục toàn site làm thước đo duy nhất, vì con số này còn chịu ảnh hưởng từ nhiều thay đổi khác. Chia theo nhóm URL và so nhóm đã sửa với nhóm chưa sửa cho kết luận đáng tin hơn nhiều.
Cuối cùng, đừng bỏ qua việc kiểm lại định kỳ. Mỗi lần đội phát triển thay thư viện giao diện hoặc đổi cách điều hướng, các vấn đề JavaScript cũ có thể quay lại. Đưa ba cách kiểm ở trên vào danh sách việc phải làm trước mỗi lần đưa bản mới lên chạy thật là cách rẻ nhất để không phải sửa lại từ đầu.
=== FAQ === Q: Google có thật sự chạy được JavaScript hiện đại không hay nên tránh hoàn toàn? A: Bot render bằng một phiên bản trình duyệt cập nhật khá sát nên phần lớn mã hiện đại chạy được, vấn đề nằm ở độ trễ của hàng đợi render và ở các tài nguyên bị chặn chứ không phải ở khả năng chạy mã. Q: Nội dung trong tab ẩn hoặc phần bấm để mở rộng có được tính không? A: Được tính nếu nội dung đã có sẵn trong tài liệu và chỉ bị ẩn bằng CSS, còn nếu nội dung chỉ được tải về sau khi người dùng bấm thì bot thường không thấy. Q: Website nhỏ vài chục trang thì có cần lo chuyện này không? A: Vẫn nên kiểm một lần cho mỗi mẫu trang, vì với số trang ít thì độ trễ hàng đợi không phải vấn đề, nhưng lỗi chặn tài nguyên hay liên kết giả thì ảnh hưởng ngay lập tức bất kể quy mô.
Chạy hết quy trình trên, bạn biết chắc phần nào của website đang được ghi nhận và phần nào không, thay vì tiếp tục sửa nội dung cho một trang mà bot chưa từng đọc được. Nên kiểm ngay mẫu trang mang lại nhiều traffic nhất trong tuần này, vì mỗi tuần chờ thêm là thêm một tuần nội dung mới tiếp tục rơi vào cùng một lỗi.


