微信客服
Telegram:guangsuan
电话联系:18928809533
发送邮件:[email protected]

Phương pháp phát hiện sự cố hiển thị Javascript khiến Google không thể thu thập dữ liệu

本文作者:Don jiang

Kiểm tra URL trên GSC

Nhập URL vào Search Console, nhấp vào “Xem trang đã thu thập dữ liệu”, so sánh mã nguồn HTML để xác nhận xem nội dung cốt lõi có bị biến mất sau khi hiển thị hay không.

So sánh sự khác biệt văn bản

So sánh số lượng ký tự văn bản giữa “Xem nguồn trang”“Kiểm tra phần tử”. Khi tỷ lệ khác biệt văn bản > 20%, rủi ro về lập chỉ mục là cực kỳ cao.

Rich Results Test

Sử dụng công cụ Kiểm tra kết quả nhiều thành phần của Google để xem ảnh chụp màn hình, đảm bảo nội dung quan trọng ở màn hình đầu tiên được tải đầy đủ trong cửa sổ hiển thị 5 giây.

Công cụ chính thức của Google

Công cụ kiểm tra URL của Google Search Console (GSC) là cổng vào để lấy dữ liệu thực tế về việc thu thập dữ liệu của Googlebot.

Thông qua “Kiểm tra URL đang hoạt động”, cấu trúc DOM đầy đủ có thể được tạo ra trong vòng 60-90 giây bằng cách gọi WRS (Web Rendering Service).

GSC cung cấp mã HTML sau khi hiển thị, ảnh chụp màn hình và danh sách các tài nguyên đã tải.

Hiện tại, Googlebot sử dụng nhân Chrome phiên bản ổn định mới nhất, nhưng có ngưỡng thực thi tập lệnh khoảng 5 giây cho mỗi trang đơn lẻ.

Kết hợp với “Kiểm tra kết quả nhiều thành phần”, bạn có thể so sánh sự khác biệt về byte giữa phản hồi gốc và kết quả hiển thị cuối cùng, đồng thời xác định các vấn đề lỗi tải tập lệnh 403 hoặc 404 do bị chặn bởi Robots.txt.

Google Search Console

Trong thanh điều hướng bên lề của Google Search Console, sau khi nhập một URL cụ thể, hệ thống sẽ lấy bản xem nhanh dữ liệu được thu thập gần nhất từ cơ sở dữ liệu chỉ mục của Google.

Nếu trạng thái trang hiển thị “URL đã nằm trên Google”, bạn có thể xem liệu có lỗi phân tích cú pháp HTML hoặc vấn đề tối ưu hóa trên thiết bị di động tại thời điểm thu thập dữ liệu hay không.

Để kiểm tra sâu hơn về việc thiếu nội dung do hiển thị JavaScript, bạn phải nhấp vào nút “Kiểm tra URL đang hoạt động”.

Thao tác này sẽ kích hoạt WRS (Web Rendering Service) khởi chạy một trình duyệt không đầu dựa trên nhân Chromium phiên bản ổn định mới nhất để truy cập trang mục tiêu theo thời gian thực.

Khi WRS thực hiện hiển thị, chiều rộng khung nhìn sẽ được đặt thành 1280 pixel và áp dụng chiến lược thu thập dữ liệu ưu tiên thiết bị di động.

Trong bảng điều khiển “Xem trang đã hiển thị”, tab HTML hiển thị cấu trúc DOM đầy đủ sau khi các tập lệnh đã chạy xong.

Nhân viên kỹ thuật nên so sánh định lượng số dòng mã HTML hoặc dung lượng ký tự hiển thị ở đây với “Xem nguồn trang” (phản hồi gốc của máy chủ) khi xem qua trình duyệt.

Nếu HTML gốc chỉ có 2KB, trong khi HTML sau khi hiển thị tăng lên 50KB, điều đó cho thấy trang này phụ thuộc rất nhiều vào việc hiển thị phía máy khách (client-side rendering).

Nếu HTML sau khi hiển thị thiếu nội dung văn bản chính hoặc thẻ danh sách sản phẩm, thì trang đó được xác định là hiển thị thất bại.

Googlebot phân bổ tài nguyên tính toán hạn chế cho việc thực thi tập lệnh của một trang đơn lẻ. Mặc dù chính thức không đưa ra thời hạn tuyệt đối, nhưng nhiều thử nghiệm cho thấy nếu thời gian tải nội dung vượt quá 5 giây, xác suất phần dữ liệu đó bị bỏ sót trong giai đoạn lập chỉ mục sẽ tăng lên đáng kể.

“Googlebot không chờ đợi vô thời hạn để JavaScript hoàn thành tất cả các tác vụ không đồng bộ. Ngân sách hiển thị của nó bị giới hạn bởi tốc độ tải trang, độ trễ phản hồi của máy chủ (TTFB) và độ phức tạp của việc phân tích cú pháp tập lệnh. Nếu thời gian phản hồi của giao diện API vượt quá 2000 mili giây, nó thường dẫn đến việc nội dung vẫn ở trạng thái Loading tại thời điểm tạo ảnh chụp hiển thị.”

Trong danh sách “Tài nguyên trang” dưới tab “Thêm thông tin”, tất cả các tệp JS và CSS lỗi tải sẽ được liệt kê.

Mã trạng thái 403 hoặc 404 chỉ rõ lỗi cấu hình quyền của máy chủ hoặc đường dẫn tài nguyên không hợp lệ, và điều cần lưu ý nhất là trạng thái “Bị chặn bởi Robots.txt”.

Vì nhiều ứng dụng trang đơn (SPA) đóng gói logic định tuyến và logic hiển thị dữ liệu trong các tệp tập lệnh cụ thể, nếu tệp /robots.txt của trang web có quy tắc Disallow: /assets/ hoặc tương tự khiến Googlebot không thể lấy được tập lệnh chính, thì WRS không thể xây dựng cây DOM đầy đủ.

Kết quả là, ngay cả khi người dùng thấy trang web đầy đủ trong trình duyệt, nhưng trong tầm nhìn thu thập dữ liệu của công cụ tìm kiếm, trang đó có thể chỉ là một khoảng trắng hoặc chỉ chứa khung cơ bản.

Việc khắc phục lỗi tập lệnh nên tập trung vào khu vực “Thông báo bảng điều khiển JavaScript”.

Nơi này sẽ ghi lại các ngoại lệ được ném ra khi WRS thực thi mã.

Nếu do nhóm phát triển sử dụng các tính năng ES6+ mới chưa được xử lý qua Polyfill (như BigInt, ResizeObserver, v.v.) và phiên bản Chromium tương ứng tại thời điểm thu thập dữ liệu chưa hoàn toàn tương thích với một số API phi tiêu chuẩn, bảng điều khiển sẽ xuất hiện lỗi Uncaught ReferenceError hoặc SyntaxError.

Loại lỗi này sẽ gây gián đoạn toàn bộ quá trình phân tích cú pháp tập lệnh, khiến tất cả logic chèn nội dung sau đó bị vô hiệu hóa.

Bằng cách quan sát số dòng và tên tệp cụ thể được đề cập trong nhật ký lỗi, bạn có thể xác định chính xác tệp thư viện hoặc khối logic nghiệp vụ nào đang cản trở việc thu thập dữ liệu.

“Ảnh chụp màn hình” sau khi hiển thị là một phương tiện kiểm tra định lượng khác.

Ví dụ, một số tập lệnh sẽ tính toán động chiều cao hoặc độ trong suốt của các phần tử. Nếu ảnh chụp màn hình hiển thị diện tích lớn để trống, ngay cả khi có văn bản trong các thẻ HTML, thuật toán của Google vẫn có thể đánh giá trang đó không thân thiện với người dùng, từ đó giảm ưu tiên lập chỉ mục.

Khi xử lý các trang web có tính động cao, cần đảm bảo tất cả nội dung nằm trong màn hình đầu tiên (Above the Fold) phải hoàn thành hiển thị trong vòng 2 giây.

Kiểm tra kết quả nhiều thành phần

Công cụ Kiểm tra kết quả nhiều thành phần là môi trường kiểm tra công khai do Google cung cấp. Khác với Search Console yêu cầu xác minh quyền sở hữu trang web, công cụ này cho phép bất kỳ ai phân tích bất kỳ URL công khai nào hoặc các đoạn mã được dán vào.

Sau khi nhập URL và kích hoạt kiểm tra, hệ thống sẽ khởi chạy một trình duyệt không đầu dựa trên nhân Chromium phiên bản ổn định mới nhất, mô phỏng hành vi truy cập của Googlebot Smartphone hoặc Googlebot Desktop.

Đối với các ứng dụng trang đơn (SPA) phụ thuộc nhiều vào các khung JavaScript như React, Angular hoặc Vue.js, tính năng “Xem trang đã kiểm tra” do công cụ này cung cấp là tiêu chuẩn để xác định xem nội dung có vào cây DOM thành công hay không.

Do Googlebot có giới hạn phân bổ tài nguyên rõ rệt khi xử lý tập lệnh, nếu trang web cần thực hiện một lượng lớn tính toán chuyên sâu hoặc khởi tạo hơn 20 yêu cầu API không đồng bộ trong giai đoạn khởi tạo, WRS có thể kết thúc việc thu thập HTML trước khi tập lệnh thực thi xong.

Khi thực hiện kiểm tra thời gian thực, hệ thống sẽ tạo một bản chụp HTML sau khi hiển thị.

Thông qua bản chụp này, nhân viên kỹ thuật có thể so sánh chính xác sự khác biệt giữa số byte trả về từ máy chủ gốc và số byte sau khi hiển thị cuối cùng.

Ví dụ, một trang hiển thị phía máy khách (CSR) thuần túy thường có mã mẫu cơ bản chưa đến 5KB HTML gốc, nhưng nếu HTML sau khi hiển thị qua công cụ này có thể đạt trên 100KB, điều đó cho thấy Googlebot đã thực thi tập lệnh thành công và kéo được nội dung động.

Ngược lại, nếu HTML sau khi hiển thị vẫn dừng lại ở khoảng 5KB và không chứa các thẻ văn bản chính, điều đó cho biết việc thực thi tập lệnh đã bị gián đoạn ở cấp độ WRS.

Công cụ hiển thị của Google thiết lập cơ chế thời gian chờ nghiêm ngặt cho việc tải xuống một tài nguyên đơn lẻ, thông thường thời gian tải một tệp JS đơn lẻ không nên quá 2000 mili giây.

Nếu các thư viện bên thứ ba hoặc giao diện API mà trang web tham chiếu phản hồi quá chậm, tab “Tài nguyên trang” trong kết quả kiểm tra sẽ đánh dấu trạng thái tải thất bại tương ứng.

  • Chế độ kiểm tra đoạn mã: Hỗ trợ dán logic mã HTML chưa xuất bản, điều này rất quan trọng để kiểm tra xem logic hiển thị JS có tuân thủ các quy chuẩn thu thập dữ liệu trong giai đoạn môi trường Staging hay không. Bằng cách này, bạn có thể kiểm tra định lượng xem một số đánh dấu Schema được tạo động có thể được phân tích chính xác hay không trước khi hợp nhất mã vào nhánh chính.
  • Chuyển đổi mô phỏng User-Agent: Mặc dù mặc định sử dụng thu thập dữ liệu di động, nhưng khi xử lý một số trang web có logic phản hồi (responsive) phức tạp, việc chuyển sang mô phỏng thiết bị máy tính để bàn có thể phát hiện ảnh hưởng của mức độ ưu tiên tải CSS đối với thứ tự thực thi JS.
  • So sánh bản chụp hiển thị: Ảnh chụp màn hình do hệ thống cung cấp không chỉ là tham khảo hình ảnh, mà còn là căn cứ để phán đoán xem trang web có xuất hiện “lệch nội dung” hay “rung lắc bố cục” hay không, vì sự thay đổi bố cục mạnh mẽ có thể dẫn đến việc Googlebot đánh giá sai tính khả dụng của trang.

“Kiểm tra kết quả nhiều thành phần không chỉ xác minh dữ liệu cấu trúc, mà còn là phòng thí nghiệm để kiểm tra tính hiển thị của nội dung động. Nếu văn bản trên trang được tải không đồng bộ qua JS, thì việc tìm kiếm văn bản đó có tồn tại trong ‘Xem trang đã kiểm tra’ hay không là cách nhanh nhất để xác minh tỷ lệ thành công của chỉ mục SEO.”

Khi trang web chứa JSON-LD hoặc Microdata được chèn qua tập lệnh, công cụ này sẽ trích xuất thông tin cấu trúc đó từ DOM đã hiển thị.

Nếu có lỗi cú pháp trong mã hoặc do lỗi JS khiến tập lệnh dừng chạy trước khi chèn đánh dấu Schema, công cụ sẽ báo tin nhắn “Không phát hiện thấy kết quả nhiều thành phần”.

Kiểm tra này đặc biệt quan trọng khi xử lý các trang web thương mại điện tử hoặc trang đánh giá, vì Google cần xác định các thuộc tính cụ thể như giá cả, trạng thái kho hàng và xếp hạng trong khi lập chỉ mục.

Nếu các thuộc tính này thiếu trong HTML của “Trang đã được kiểm tra”, ngay cả khi trang giao diện hiển thị bình thường, trang kết quả tìm kiếm (SERP) cũng sẽ không hiển thị bản xem trước xếp hạng sao hoặc giá cả.

Cần đặc biệt chú ý đến nhật ký lỗi bảng điều khiển, vì môi trường WRS có giới hạn chiếm dụng bộ nhớ nghiêm ngặt hơn trình duyệt của người dùng thông thường.

Nếu tập lệnh tiêu thụ quá nhiều tài nguyên CPU, Googlebot có thể từ bỏ việc hiển thị trang đó, dẫn đến việc trong kho chỉ mục chỉ giữ lại một mẫu khung trống.

  • Giới hạn tổng số tài nguyên tải: Khuyến nghị kiểm soát các tài nguyên JS được yêu cầu bởi một trang đơn lẻ dưới 50. Quá nhiều yêu cầu song song sẽ dẫn đến độ trễ điều phối của WRS, tăng rủi ro hiển thị thất bại.
  • Giám sát lỗi thực thi tập lệnh: Công cụ sẽ bắt các ngoại lệ chí mạng như ReferenceError hoặc TypeError dẫn đến đứt gãy chuỗi hiển thị. Nếu thấy lỗi không tương thích đặc tả ES do thiếu Polyfill, nên điều chỉnh mục tiêu biên dịch của công cụ xây dựng ngay lập tức.
  • Tính hiệu lực của phản hồi API: Kiểm tra tất cả các điểm cuối API kéo nội dung động thông qua danh sách tài nguyên. Nếu mã trạng thái hiển thị là “Bị chặn” hoặc “Thời gian chờ”, điều đó có nghĩa là Googlebot đã bị tường lửa chặn hoặc hiệu suất API không đáp ứng được ngưỡng thu thập dữ liệu.

Trong báo cáo do công cụ kiểm tra này tạo ra, mỗi “Cảnh báo” hoặc “Lỗi” đều tương ứng với hành vi của Googlebot trong môi trường lập chỉ mục thực tế.

Nếu công cụ báo “Không thể tải một số tập lệnh”, ngay cả khi các tập lệnh này chạy bình thường trong trình duyệt Chrome của người dùng, bạn vẫn phải coi trọng vì điều này có thể là do dải IP của trình thu thập dữ liệu Googlebot đã bị máy chủ giới hạn tốc độ (Rate Limiting) khi truy cập các tài nguyên này.

Chrome DevTools

Trong môi trường phát triển cục bộ, bảng điều khiển “Điều kiện mạng” (Network conditions) do Chrome DevTools cung cấp là điểm bắt đầu để mô phỏng hành vi thu thập dữ liệu của Googlebot.

Bằng cách nhấn F12 hoặc nhấp chuột phải chọn “Kiểm tra” để mở thanh công cụ, vào menu ba dấu chấm ở góc trên bên phải chọn More tools -> Network conditions.

Trong bảng điều khiển này, bỏ chọn “Sử dụng mặc định của trình duyệt” (Use browser default) và chọn thủ công Googlebot trong danh sách thả xuống.

Thao tác này sẽ sửa đổi chuỗi User-Agent do trình duyệt gửi đi, ví dụ chuyển thành Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html).

Vai trò của bước này là để kiểm tra xem máy chủ có logic đặc biệt nhắm vào trình thu thập dữ liệu hay không.

Nếu máy chủ được cấu hình để trả về mã HTML khác nhau dựa trên UA, môi trường cục bộ sẽ hiển thị kết quả phản hồi hoàn toàn khác so với khi người dùng bình thường truy cập.

Nhân viên kỹ thuật nên so sánh thông tin tiêu đề phản hồi tại thời điểm này, kiểm tra xem Content-Type hoặc các chỉ thị kiểm soát bộ nhớ đệm (Cache-Control) có thay đổi hay không.

Nếu máy chủ trả về lỗi 403 từ chối truy cập hoặc 301 chuyển hướng bất ngờ cho Googlebot, điều đó có nghĩa là lộ trình lập chỉ mục của công cụ tìm kiếm đã bị chặn ngay tại cấp độ máy chủ.

Để mô phỏng “đợt lập chỉ mục đầu tiên” (First-wave indexing) của Googlebot, bạn phải kiểm tra hiệu suất trang web trong trường hợp tắt JavaScript.

Vào trang Cài đặt (Settings) của DevTools, tìm phần Trình gỡ lỗi (Debugger) trong cài đặt ưu tiên, tích chọn “Tắt JavaScript” (Disable JavaScript).

Sau khi làm mới trang, trình duyệt sẽ chỉ hiển thị cấu trúc HTML gốc do máy chủ đẩy ra.

Đối với các trang web sử dụng kiến trúc ứng dụng trang đơn (SPA), thao tác này thường dẫn đến việc trang xuất hiện hoàn toàn trống trơn hoặc chỉ hiển thị hoạt ảnh Loading.

Nếu thông tin văn bản chính, menu điều hướng hoặc danh sách sản phẩm của trang web hoàn toàn biến mất sau khi tắt tập lệnh, điều đó có nghĩa là công cụ tìm kiếm phải bước vào giai đoạn “đợt lập chỉ mục thứ hai” phức tạp hơn, tức là giai đoạn hiển thị WRS để lấy nội dung.

Lúc này, bạn nên ghi lại số byte của HTML gốc, ví dụ 15KB mã khung cơ bản, và so sánh với DOM sau khi hiển thị đầy đủ để xác định quy mô nội dung được chèn bởi JS.

“ Trong môi trường mô phỏng cục bộ, tắt JavaScript là bài kiểm tra áp lực hiệu quả nhất. Nếu mã HTML gốc của một trang thiếu thẻ H1 hoặc các đoạn văn bản chính chứa thông tin ngữ nghĩa quan trọng, thì trang đó đối mặt với rủi ro cực cao bị lập chỉ mục như một trang trắng khi môi trường mạng biến động hoặc hạn ngạch hiển thị của Google bị thắt chặt. ”

Môi trường chạy của Googlebot không phải là một máy tính để bàn hiệu suất cao. Sử dụng bảng điều khiển “Hiệu suất” (Performance) trong DevTools, bạn có thể mô phỏng khả năng tính toán của Googlebot một cách thực tế hơn.

Trong cài đặt hiệu suất, điều chỉnh Giới hạn CPU (CPU Throttling) thành giảm tốc độ 4 lần hoặc 6 lần (4x or 6x slowdown).

Nếu một tác vụ hiển thị chỉ mất 800 mili giây trên một chiếc MacBook hiệu suất cao nhưng tăng lên 5500 mili giây khi giảm tốc 6 lần, nó đã chạm đến ngưỡng hiển thị 5 giây thường gặp của Googlebot.

Bằng cách xem các tác vụ dài (Long Tasks) trong biểu đồ hình ngọn lửa, bạn có thể xác định thư viện JS khổng lồ nào đang chặn luồng chính, dẫn đến độ trễ hiển thị.

Nếu các chỉ số định lượng như Tổng thời gian chặn (TBT) vượt quá 2000 mili giây trong môi trường này, thường báo hiệu rằng Googlebot có thể từ bỏ việc chờ đợi trước khi nội dung được tạo ra hoàn toàn, thay vào đó sẽ chụp lại bản chụp DOM không đầy đủ hiện tại.

Xác minh thủ công bằng trình duyệt

Xác minh thủ công xác nhận trạng thái hiển thị bằng cách so sánh sự khác biệt dữ liệu giữa Initial HTML (HTML ban đầu) và Rendered DOM (DOM đã hiển thị).

Googlebot sử dụng công cụ hiển thị Chrome mới nhất, nhưng nếu việc thực thi JS vượt quá ngưỡng 5 giây hoặc yêu cầu tài nguyên của một trang vượt quá 50, nội dung có thể không được lập chỉ mục.

Kiểm tra thủ công cần chú ý đến chuỗi tải tài nguyên, đảm bảo thuộc tính href của thẻ <a> xuất hiện sẵn trong mã nguồn HTML, thay vì được tạo động qua sự kiện onclick, để đảm bảo tính liên kết của lộ trình thu thập dữ liệu.

Mã nguồn và DOM thời gian thực

Mã xem qua view-source trong trình duyệt phản ánh luồng văn bản gốc do máy chủ gửi đi, trong khi bảng điều khiển Elements của công cụ dành cho nhà phát triển hiển thị mô hình đối tượng bộ nhớ (DOM) sau khi đã được công cụ hiển thị phân tích, thực thi tập lệnh và sửa lỗi.

Đối với các trang web sử dụng kiến trúc ứng dụng trang đơn (SPA), mã nguồn gốc thường chỉ chứa một thẻ vùng chứa trống với id="app" hoặc id="root" cùng một vài tham chiếu tập lệnh có tổng dung lượng vượt quá 500KB.

So sánh số lượng ký tự văn bản thuần trong mã nguồn với số lượng ký tự văn bản trong DOM sau khi hiển thị, khi tỷ lệ này vượt quá 1:20 (tức là HTML gốc chỉ có 100 từ trong khi sau khi hiển thị đạt 2000 từ), đợt thu thập dữ liệu đầu tiên của công cụ tìm kiếm gần như không thể lấy được bất kỳ thông tin ngữ nghĩa hiệu quả nào.

Sự khác biệt này sẽ dẫn đến việc trang web ở trạng thái chân không nội dung trong giai đoạn đầu lập chỉ mục, phải chờ đợi xử lý lần hai của hàng đợi hiển thị.

Chiều hướng so sánh Đặc điểm dữ liệu Mã nguồn gốc (Initial HTML) Đặc điểm dữ liệu DOM sau hiển thị (Rendered DOM) Ảnh hưởng chỉ mục của sự khác biệt kỹ thuật
Tổng số nút DOM Thường ít hơn 50 nút, cấu trúc cực kỳ phẳng. Có thể vượt quá 1500 nút, độ sâu phân cấp tăng. Số lượng nút tăng vọt cho thấy việc tạo nội dung phụ thuộc hoàn toàn vào việc chạy JS.
Trạng thái thẻ Meta Chứa tiêu đề chung hoặc mô tả giữ chỗ được mã hóa cứng. Chứa các thẻ SEO trang cụ thể được chèn động bởi tập lệnh. Trình thu thập dữ liệu có thể ghi lại siêu dữ liệu trang sai trước khi tập lệnh chạy.
Thẻ Canonical Thiếu hoặc trỏ đến URL trang chủ cố định của trang web. Được cập nhật động thành đường dẫn tuyệt đối tiêu chuẩn của trang hiện tại. Thẻ không nhất quán sẽ dẫn đến xung đột phân tích cú pháp các thuộc tính trang của công cụ tìm kiếm.
Dữ liệu cấu trúc JSON-LD Trong đoạn mã trống hoặc chỉ có khung Schema cơ bản. Được điền đầy đủ dữ liệu giá sản phẩm, đánh giá hoặc kho hàng. Quyết định xem trang kết quả tìm kiếm (SERP) có thể hiển thị đoạn trích phong phú hay không.
Liên kết nội bộ (Internal Links) Thanh điều hướng có thể trống, liên kết chưa được tạo. Chứa đầy đủ thẻ <a> và đường dẫn phân loại động. Ảnh hưởng đến hiệu quả của trình thu thập dữ liệu trong việc khám phá các URL sâu khác trong trang web.

Khi thực hiện so sánh chuyên sâu, bằng cách nhập document.body.innerText.length trong bảng điều khiển, bạn có thể lấy tổng số ký tự sau khi hiển thị hiện tại và đối chiếu với dung lượng byte của tệp mã nguồn.

Nếu kích thước mã nguồn là 30KB, nhưng innerText sau khi hiển thị đạt 15.000 ký tự, trọng số văn bản chính tập trung hoàn toàn vào lớp hiển thị.

Lúc này, nếu trong tập lệnh tồn tại một hàm đệ quy mất hơn 200ms để thực thi, hoặc tham chiếu đến một API bên ngoài có thời gian tải vượt quá 2.0s, công cụ hiển thị của Googlebot có thể dừng ghi lại trước khi nội dung được chèn hoàn toàn do chiến lược phân bổ tài nguyên.

Chỉ số định lượng Ngưỡng rủi ro Hậu quả thực tế của việc thu thập và lập chỉ mục
Tỷ lệ khác biệt văn bản mã (Text Ratio Gap) > 80% văn bản được tạo bởi JS Trang web rất dễ bị đánh giá là “nội dung mỏng” trong môi trường không có tập lệnh.
Tỷ lệ thành công trích xuất liên kết < 5 thẻ <a> hợp lệ trong mã nguồn Ngân sách thu thập dữ liệu (Crawl Budget) sẽ bị lãng phí trong việc chờ đợi vô tận.
Chiếm dụng bộ nhớ thực thi tập lệnh Tiêu thụ bộ nhớ ngăn xếp vượt quá 50MB Máy chủ hiển thị có thể buộc chấm dứt tác vụ hiển thị do giới hạn bộ nhớ.
Độ đầy đủ HTML màn hình đầu tiên < 10% nội dung hình ảnh chính hiển thị trong mã nguồn Người dùng sẽ thấy màn hình trắng trong thời gian dài dưới mạng chậm, dẫn đến tổn hại tín hiệu xếp hạng.

Kiểm tra menu điều hướng trong bảng điều khiển Elements, nếu liên kết hiển thị là <a href="javascript:void(0)" onclick="navigateTo('/page')">, mặc dù trông giống một liên kết trong DOM sau khi hiển thị, nhưng đối với trình thu thập của công cụ tìm kiếm, đây là một ngõ cụt không thể theo dấu.

Thuộc tính href tiêu chuẩn phải tồn tại sẵn trong HTML gốc do máy chủ trả về, hoặc được tạo thành định dạng <a href="/target-path"> tiêu chuẩn sau khi tập lệnh chạy.

Các trang web có cấu trúc liên kết HTML gốc đầy đủ thường có tốc độ lập chỉ mục trang mới nhanh hơn từ 40% đến 70% so với các trang web phụ thuộc hoàn toàn vào việc chèn liên kết bằng JS.

Nếu trong mã nguồn tồn tại thẻ meta noindex, trong khi logic tập lệnh cố gắng loại bỏ nó và thay thế bằng index sau khi hiển thị, cách làm này thường vô hiệu.

Công cụ tìm kiếm thường ưu tiên tuân thủ các chỉ thị được tìm thấy trong HTML ban đầu, dẫn đến việc trang web không thể vào quy trình lập chỉ mục bình thường.

Xác minh mô phỏng môi trường

Mở công cụ dành cho nhà phát triển (DevTools) trong trình duyệt Chrome, nhấn Ctrl+Shift+P để gọi menu lệnh, nhập Disable JavaScript và nhấn Enter, đây là điểm bắt đầu để mô phỏng trạng thái thu thập dữ liệu lần đầu của công cụ tìm kiếm.

Tải lại trang trong trạng thái tắt tập lệnh, nếu lúc này màn hình hiển thị trống trơn hoặc chỉ có khung cơ bản, điều đó cho thấy Initial HTML phía máy chủ không có bất kỳ nội dung văn bản thực chất nào.

Đối với một tệp HTML 100KB, nếu 90% nội dung văn bản trong đó dựa vào gói nén JavaScript 2MB được tải sau đó để tạo ra, thì khi có độ trễ mạng hoặc lỗi thực thi tập lệnh, công cụ tìm kiếm rất có khả năng chỉ ghi lại được một thẻ vùng chứa trống.

Tham số mô phỏng Tiêu chuẩn và giá trị cài đặt Kết quả quan sát và chỉ số dữ liệu
Tiết lưu mạng (Network Throttling) Fast 3G (Mô phỏng 1.5 Mbps tải xuống, độ trễ 40ms) Nếu thời gian hoàn thành hiển thị nội dung chính vượt quá 5000ms (5 giây), hàng đợi hiển thị của Google có thể ngừng chờ đợi.
Giới hạn CPU (CPU Throttling) 4x slowdown (Mô phỏng hiệu suất bộ xử lý di động) Khi thời gian Phân tích tập lệnh (Script Evaluation) vượt quá 1.5 giây, việc chiếm dụng luồng chính trong thời gian dài sẽ dẫn đến nội dung hiển thị chậm trễ.
Mô phỏng User-Agent Googlebot Smartphone (Chrome/W.X.Y.Z) Kiểm tra xem máy chủ có trả về lỗi 403 hoặc mã thích ứng di động cụ thể hay không.
Kích thước khung nhìn (Viewport) 411 x 731 pixel (Chiều rộng thiết bị di động tiêu chuẩn) Xác nhận xem nội dung có tự động tải mà không cần thực hiện các thao tác tương tác như nhấp, trượt hay không.

Thay đổi chuỗi User-Agent của trình duyệt thành Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html).

Tích chọn Disable cache trong bảng điều khiển Network, quan sát chuỗi tải tài nguyên dưới danh nghĩa Googlebot.

Trong quy trình thu thập dữ liệu tiêu chuẩn, Googlebot thường không tải tất cả các tệp phương tiện, nó sẽ ưu tiên phân tích cú pháp văn bản và dữ liệu cấu trúc.

Nếu trang web phát hiện User-Agent qua tập lệnh và thực hiện các logic khác nhau, ví dụ đóng một số giao diện không đồng bộ đối với trình thu thập dữ liệu, nó sẽ dẫn đến cấu trúc DOM trong bảng điều khiển Elements hoàn toàn khác với những gì người dùng bình thường thấy.

Trong bảng điều khiển Network, đặt tốc độ mạng thủ công thành Fast 3G và giới hạn hiệu suất CPU xuống 4x slowdown.

Máy chủ hiển thị của Googlebot khi xử lý hàng tỷ trang web trên toàn cầu, tài nguyên tính toán phân bổ cho một trang đơn lẻ là có hạn. Bằng cách ghi lại quá trình tải qua bảng điều khiển Performance, trọng tâm là xem hoạt động của luồng Main.

Nếu các tác vụ dài (Long Tasks) do Evaluate Script tạo ra vượt quá 50 mili giây và tổng cộng chiếm hơn 70% chu kỳ tải, thì trong môi trường thu thập dữ liệu thực tế, công cụ hiển thị có thể hoàn thành việc ghi bản chụp trước khi nội dung được lấp đầy hoàn toàn.

Nếu khoảng cách giữa First Contentful Paint (FCP)Largest Contentful Paint (LCP) kéo dài ra hơn 3 giây do thực thi JS quá lâu, xác suất công cụ tìm kiếm thu thập được trang web khiếm khuyết sẽ tăng khoảng 40%.

Sử dụng tab Sensors bên dưới công cụ dành cho nhà phát triển để mô phỏng thủ công các vị trí địa lý khác nhau (như San Francisco hoặc London).

Các nút thu thập dữ liệu của Googlebot chủ yếu phân bố tại Hoa Kỳ. Nếu logic JS của trang web chứa logic tự động chuyển hướng dựa trên địa chỉ IP hoặc tạo nội dung dựa trên dấu thời gian địa phương, nó có thể dẫn đến việc phiên bản trang web được thu thập không phù hợp với phiên bản của khu vực đối tượng mục tiêu.

Kiểm tra thông tin lỗi trong bảng điều khiển Console, đặc biệt là ReferenceError hoặc TypeError.

Mặc dù phiên bản công cụ hiển thị của Google (Evergreen Googlebot) liên tục được cập nhật, nhưng nó có thể có sự khác biệt về hỗ trợ đối với một số Web API cực mới (như WebGPU mới nhất hoặc các phiên bản WebAssembly cụ thể).

Nếu trong mã không thực hiện tốt việc xử lý tương thích Polyfill, tập lệnh sẽ bị sập khi thực hiện được một nửa, dẫn đến cây DOM ngừng xây dựng.

  • Giới hạn số lượng yêu cầu: Thống kê tổng số yêu cầu mạng được phát ra trước khi trang hoàn thành hiển thị. Nếu một trang yêu cầu hơn 50 tài nguyên JS hoặc CSS, do giới hạn đồng thời của trình duyệt và hạn ngạch tài nguyên của trình thu thập, một số tập lệnh có thể không được tải kịp thời.
  • Trạng thái Shadow DOM: Xem trong bảng điều khiển Elements xem có tồn tại đánh dấu #shadow-root (closed) hay không. Googlebot có thể phân tích cú pháp Shadow DOM ở chế độ Open, nhưng nội dung ở chế độ Closed là vô hình đối với trình thu thập dữ liệu, cần đảm bảo tất cả Web Components ở trạng thái Open.
  • Xác minh định dạng liên kết: Trong DOM sau khi hiển thị, sử dụng Ctrl+F tìm kiếm thẻ <a. Đảm bảo tất cả các liên kết chuyển hướng đều chứa thuộc tính href đầy đủ. Nếu chuyển hướng được kiểm soát qua các sự kiện JS như window.location.href hoặc router.push mà không để lại mỏ neo tiêu chuẩn trong HTML, công cụ tìm kiếm sẽ không thể khám phá các trang con này.
  • Tải lười ảnh (Image Lazy Load): Kiểm tra xem thẻ <img> có thay thế nội dung từ data-src vào thuộc tính src khi không cuộn trang hay không. Googlebot có thể mô phỏng một phần việc cuộn trang, nhưng đối với các tập lệnh phụ thuộc vào trình lắng nghe sự kiện scroll phức tạp, hiệu quả thu thập dữ liệu của nó không ổn định. Sử dụng thuộc tính loading="lazy" tiêu chuẩn là cách làm an toàn hơn.

So sánh kích thước byte và số lượng nút văn bản giữa Initial HTMLRendered DOM.

Nếu sự khác biệt về độ bao phủ văn bản giữa hai bên vượt quá 80% và phần lớn nội dung văn bản chỉ được chèn sau sự kiện DOMContentLoaded, điều đó cho thấy SEO của trang web phụ thuộc rất nhiều vào hiệu suất hiển thị.

Khuyến nghị ghi lại Total Blocking Time (TBT) trong quá trình kiểm tra, nếu giá trị này vượt quá 300ms, thường báo hiệu rằng quá trình thực thi tập lệnh sẽ cản trở việc phân tích cú pháp DOM của trình thu thập dữ liệu.

Xem tỷ lệ sử dụng tệp JS qua bảng điều khiển Coverage của Chrome, nếu 80% mã trong một tập lệnh 500KB không được thực thi khi tải màn hình đầu tiên, những mã dư thừa này sẽ tiêu tốn vô ích dung lượng tính toán của máy chủ hiển thị, từ đó ảnh hưởng đến tốc độ lập chỉ mục nội dung.

Công cụ thu thập dữ liệu chuyên nghiệp

Các công cụ thu thập dữ liệu chuyên nghiệp có thể mô phỏng môi trường Chrome (như Screaming Frog v20+).

Dữ liệu cho thấy chi phí thu thập dữ liệu cho việc thực thi tập lệnh cao gấp 20 lần so với HTML tĩnh.

Khi sự khác biệt số lượng từ HTML giữa “trước khi hiển thị” và “sau khi hiển thị” vượt quá 10%, hoặc sự khác biệt về số lượng liên kết nội bộ được nhận diện vượt quá 5%, tỷ lệ thành công của chỉ mục thường sẽ giảm xuống.

Việc kiểm tra cần chú ý đến tỷ lệ hoàn thành hiển thị trong vòng 5 giây, cũng như việc tải tập lệnh có thất bại do mã trạng thái 403 hay không.

Screaming Frog SEO Spider

Khi sử dụng Screaming Frog để thu thập dữ liệu quy mô lớn, việc chuyển chế độ hiển thị từ “Chỉ văn bản (Text Only)” sang “JavaScript” sẽ khiến hành vi của trình thu thập thay đổi từ các yêu cầu HTTP đơn giản sang mô phỏng trình duyệt đầy đủ.

Phần mềm sẽ khởi chạy các phiên bản Headless Chrome bên dưới để phân tích cú pháp từng tệp tập lệnh trên trang web.

Về cấu hình kỹ thuật, người dùng cần chọn rõ ràng tùy chọn JavaScript trong menu Configuration > Spider > Rendering.

Sự thay đổi về mặt dữ liệu là rất đáng kể, quá trình thu thập dữ liệu thực thi JavaScript thường làm tăng nhu cầu về bộ nhớ (RAM) lên từ 5 đến 10 lần.

Ví dụ, khi thu thập 100.000 trang chứa các khung React hoặc Angular phức tạp, khuyến nghị phân bổ ít nhất 16GB đến 32GB bộ nhớ cho phần mềm, nếu không tiến trình hiển thị Chrome có thể bị sập do thiếu tài nguyên.

Trình thu thập dữ liệu sẽ mô phỏng phiên bản công cụ hiển thị của Chrome trong quá trình chạy, đảm bảo cấu trúc DOM thu thập được nhất quán với “Evergreen Chrome” mà Googlebot hiện đang sử dụng.

Danh mục chỉ số HTML gốc (Source) HTML sau hiển thị (Rendered) Khuyến nghị ngưỡng khác biệt
Số lượng từ (Word Count) Chỉ chứa khung cơ bản và siêu dữ liệu Chứa văn bản được tải không đồng bộ Khác biệt > 15% cần rà soát thủ công
Số lượng liên kết nội bộ (Internal Links) 0 hoặc rất ít liên kết giữ chỗ Liên kết điều hướng và sản phẩm được tạo động Khác biệt > 0 cho thấy tồn tại rủi ro thu thập
Thẻ Canonical Có thể thiếu hoặc trỏ đến giá trị mặc định Phiên bản cuối cùng sau khi được sửa đổi bởi JS Phải lấy phiên bản sau khi hiển thị làm chuẩn
Dung lượng trang (Size) Thường < 50 KB Có thể tăng lên 500 KB – 2 MB Quá lớn có thể dẫn đến việc Google cắt bớt

Khi phần mềm mô phỏng thực thi tập lệnh, cài đặt mặc định cho AJAX Timeout (Thời gian chờ tải không đồng bộ) thường là 5 giây, tương tự như chiến lược xử lý tập lệnh của Googlebot.

Nếu phản hồi giao diện dữ liệu của một trang bị chậm, dẫn đến việc nội dung được điền vào DOM sau 5 giây, thì kết quả thu thập được của Screaming Frog sẽ là một trang “vỏ rỗng”.

Bằng cách so sánh dữ liệu trong cột Word Count, bạn có thể định lượng hiện tượng này:

Nếu số từ sau khi hiển thị trái lại ít hơn số từ trong mã nguồn, hoặc cả hai hoàn toàn giống nhau nhưng trang web thực tế có rất nhiều chữ, thường cho thấy tập lệnh hiển thị đã không thể thực thi xong trong thời gian quy định.

Trong các thử nghiệm nhắm vào trang web thương mại điện tử, nếu danh sách sản phẩm được tải qua cuộn động, trình thu thập dữ liệu cũng có thể kích hoạt thực thi tập lệnh bằng cách cấu hình “Window Size” hoặc mô phỏng hành động cuộn xuống, từ đó thu thập được thông tin hàng hóa vốn ở trạng thái ẩn.

Đối với kiểm tra kỹ thuật của các trang web lớn, sử dụng tính năng “JavaScript Rendering Table” trong “Bulk Export” có thể xuất báo cáo chênh lệch hiển thị cho toàn bộ trang web.

Báo cáo này liệt kê từng dòng sự thay đổi của các thẻ Title, Meta DescriptionH1 của mỗi URL trước và sau khi hiển thị.

Trong các trường hợp thực tế, nếu phát hiện thẻ H1 sau khi hiển thị trở thành “Loading…” hoặc “Undefined”, điều này chứng minh rằng công cụ tìm kiếm đã thu thập được mã trạng thái trung gian thay vì nội dung cuối cùng.

Tab “Resource” của phần mềm sẽ ghi lại mã trạng thái HTTP của từng tệp tập lệnh (.js) và bảng kiểu (.css).

Nếu một số tập lệnh chức năng trả về lỗi 403 Forbidden, thường là do tường lửa của máy chủ (WAF) nhận diện nhầm hành vi Headless Chrome của trình thu thập là cuộc tấn công độc hại và thực hiện chặn, điều này sẽ khiến bố cục và nội dung của toàn bộ trang không thể hiển thị bình thường.

Trạng thái tài nguyên hiển thị Nguyên nhân xảy ra Ảnh hưởng đến thu thập dữ liệu
Blocked by robots.txt Đường dẫn tập lệnh được đặt thành Disallow Googlebot không thể đọc tập lệnh, hiển thị thất bại
Status Code: 429 Tần suất yêu cầu quá cao dẫn đến kích hoạt giới hạn lưu lượng Một số tài nguyên trang tải không đầy đủ, nội dung bị thiếu
Status Code: 404 Đường dẫn tệp tập lệnh không hợp lệ Các thành phần động phụ thuộc vào tập lệnh đó không thể hiển thị
Timeout (Exceeded 5s) Giao diện phản hồi chậm hoặc logic tập lệnh phức tạp HTML thu thập được trống rỗng hoặc chứa thông báo lỗi

Chế độ xem “Rendered Page” do phần mềm cung cấp cho phép người dùng so sánh song song bản chụp mã nguồn gốc và bản chụp trực quan sau khi hiển thị.

Bằng cách này, có thể phát hiện trực quan những nội dung bị JavaScript ẩn đi, ví dụ như văn bản nằm trong các tab chỉ hiển thị sau khi nhấp chuột.

Nếu nội dung văn bản của một trang chiếm dưới 20% trong HTML gốc, trong khi 80% nội dung phụ thuộc vào hiển thị, thì tính ổn định của trang đó trong kho chỉ mục của Google sẽ đối mặt với thách thức.

Screaming Frog cũng có thể bắt được các Console Errors (Lỗi bảng điều khiển), nếu trang web tạo ra các lỗi cú pháp JavaScript chí mạng trong quá trình tải, phần mềm sẽ hiển thị nổi bật trong báo cáo.

Khi xử lý hàng trăm nghìn URL, khuyến nghị bật tùy chọn “Store Images” và “Store Rendered HTML”, nó cho phép lấy lại bản chụp hiển thị của bất kỳ trang nào vào bất kỳ lúc nào sau khi kết thúc việc thu thập dữ liệu.

Bằng cách phân tích chênh lệch “Link Discovery”, bạn có thể thống kê tỷ lệ liên kết nội bộ bắt buộc phải chạy tập lệnh mới có thể được phát hiện.

Nếu tỷ lệ này vượt quá 30%, độ sâu thu thập dữ liệu (Crawl Depth) của trang web sẽ trở nên khó kiểm soát do độ trễ thực thi tập lệnh.

Lumar (DeepCrawl)

Lumar sử dụng năng lượng tính toán đám mây phân tán, chuyên cung cấp quét tự động cho các trang web lớn có hàng triệu URL.

Khi xử lý các tác vụ yêu cầu thực thi JavaScript, hệ thống chạy thông qua hàng nghìn phiên bản trình duyệt mô phỏng ở chế độ nền.

Các công cụ cục bộ thông thường bị giới hạn bởi bộ nhớ vật lý, ví dụ một máy tính có bộ nhớ 32GB khi chạy chế độ hiển thị thường chỉ có thể hỗ trợ từ 20 đến 50 luồng song song.

Trong khi đó, Lumar chạy trên máy chủ đám mây, có thể tự động mở rộng lên hơn 500 luồng tùy theo quy mô tác vụ, đảm bảo hoàn thành việc thu thập dữ liệu hiển thị đầy đủ cho 1 triệu trang trong vòng 24 giờ.

Nếu việc chạy tập lệnh của một trang vượt quá 5000 mili giây (tức là 5 giây), hệ thống sẽ đánh dấu URL đó là “trang chi phí cao”, vì Googlebot trong truy cập thực tế thường không chờ đợi quá lâu cho một tài nguyên đơn lẻ, điều này sẽ dẫn đến nội dung xuất hiện trống trong kho chỉ mục.

Trong một dự án React hoặc Vue tiêu chuẩn, HTML gốc có thể chỉ chứa từ 2KB đến 5KB mã khung cơ bản, trong khi cây DOM sau khi hiển thị (DOM Tree) có thể phình to lên 300KB đến 800KB.

Sự tăng trưởng byte hơn 100 lần này cho thấy trang web đó phụ thuộc cực cao vào tập lệnh.

Các chỉ số mà Lumar cung cấp bao gồm Tổng số nút DOM (DOM Node Count), nếu số lượng nút vượt quá 1500 nút theo khuyến nghị của Google, hiệu suất hiển thị sẽ giảm đáng kể.

Bằng cách ghi lại Time to Interactive (Thời gian có thể tương tác) và Total Blocking Time (Tổng thời gian chặn) trên đám mây, công cụ này có thể tìm ra tệp JS nào (ví dụ một gói vendor.js đơn lẻ vượt quá 500KB) đang cản trở việc hiển thị nội dung bình thường.

Đối với các trang web thương mại điện tử lớn hoặc đa quốc gia, bằng cách phát ra yêu cầu tại các nút máy chủ ở các khu vực khác nhau, có thể phát hiện xem một số tập lệnh chịu trách nhiệm hiển thị nội dung có không thể tải được ở các khu vực cụ thể do lỗi cấu hình CDN hay không.

Báo cáo dữ liệu sẽ liệt kê tỷ lệ tài nguyên tập lệnh có mã trạng thái 4xx và 5xx.

Nếu một trang có 20% yêu cầu tập lệnh trả về lỗi 403 (thường do robots.txt chặn hoặc tường lửa bảo vệ), thì kết quả hiển thị của trang đó sẽ bị thiếu hụt.

Hệ thống báo cáo của Lumar sẽ tạo ra một “bản đồ chênh lệch hiển thị”, chú thích chi tiết sự thay đổi số lượng liên kết nội bộ trong trang khi bật và tắt JavaScript.

Nếu sau khi tắt tập lệnh, số lượng liên kết trên trang giảm từ 200 xuống còn 0, điều đó cho thấy cấu trúc tìm địa chỉ của trang web hoàn toàn phụ thuộc vào việc thực thi động, điều này có ảnh hưởng tiêu cực đến tốc độ khám phá trang mới của Googlebot.

Nền tảng này cũng hỗ trợ tích hợp dữ liệu hiển thị thu thập được với API của Google Search Console.

Nếu dữ liệu cho thấy số từ tăng 300% sau khi hiển thị nhưng lưu lượng tìm kiếm không tăng tương ứng, có thể cho thấy nội dung được chèn động đã không được Google nhận diện hiệu quả.

Lumar sẽ xuất ra chỉ số Rendered Page Word Count và so sánh nó với Source HTML Word Count.

Các trang có chênh lệch tỷ lệ (Ratio Gap) càng lớn thường có biểu hiện thu thập dữ liệu kém ổn định hơn. Thông qua quan sát trên hơn 500.000 mẫu, khi Rendering Gap vượt quá 80%, độ trễ lập chỉ mục của trang thường tăng thêm từ 3 đến 7 ngày.

滚动至顶部