Googlebot gặp phải lỗi JavaScript do hiển thị các tệp HTML lỗi thời với các tệp JS mới hơn


8

Gần đây chúng tôi đã gặp phải một vấn đề trong đó chúng tôi đã thêm một biến JavaScript (ví dụ var GLOBAL_VAR = true;) vào trang HTML (ví dụ /Search/Index) và cập nhật tệp JS riêng (ví dụ /Scripts/search/index.js) để truy cập và sử dụng biến JS đó. Sau khi xuất bản những thay đổi này trực tiếp lên web, chúng tôi đã bắt đầu nhận được các lỗi JS do Googlebot tạo ra được gửi cho chúng tôi bởi window.onerrorchức năng của chúng tôi . Các lỗi như:

Uncaught ReferenceError: GLOBAL_VAR không được xác định

Dòng 1

http://example.com/Scripts/search/index.js

Khi tôi truy cập trang / Tìm kiếm / Chỉ mục trên trang web của chúng tôi, tôi thấy rõ biến JS mới ở đó và được xác định.

Gần như khi Googlebot đang thu thập dữ liệu trang web của chúng tôi, nó không phát hiện ra rằng trang HTML đã thay đổi. Vì vậy, điều đó có nghĩa là nó đang sử dụng HTML cũ, được lưu trong bộ nhớ cache không bao gồm cài đặt của GLOBAL_VARbiến, điều này gây ra lỗi JS.

Chúng tôi đã xuất bản các thay đổi HTML / JS vào ngày 2/6 và chúng tôi vẫn nhận được lỗi JS kể từ ngày 2/10. Tôi đã nghĩ rằng Googlebot sẽ nhận ra các thay đổi HTML ngay bây giờ. Chúng tôi chưa bao giờ gặp vấn đề này trong quá khứ.

Tại sao Googlebot không cập nhật bộ đệm của họ nếu HTML của trang thay đổi? Quan trọng nhất, làm cách nào chúng tôi có thể khiến Googlebot phát hiện các thay đổi HTML và cập nhật bộ đệm của chúng, vì vậy chúng tôi sẽ ngừng nhận các lỗi JS này?


CẬP NHẬT 2019 - Một điều tôi sẽ thêm ở đây là chúng tôi sử dụng Microsoft Azure Cloud Services có môi trường sản xuất và dàn dựng. Chúng tôi xuất bản để dàn dựng, hoán đổi dàn dựng sang sản xuất, thử nghiệm sản xuất mới, sau đó xóa dàn dựng. Kịch bản được mô tả ở trên dường như chỉ xảy ra khi trao đổi / xóa môi trường, vì vậy nó phải có một cái gì đó để làm với điều đó. Giống như Googlebot đang thu thập dữ liệu trang web của chúng tôi khi chúng tôi trao đổi dàn dựng / sản xuất và nó bắt đầu nhận được một số dữ liệu từ dàn dựng và một số từ sản xuất, làm biến dạng tài nguyên được lưu trong bộ nhớ cache của họ từ trang web của chúng tôi. Nó vẫn đang xảy ra và vẫn điền vào nhật ký lỗi của chúng tôi.


Làm thế nào bạn nhận được lỗi JS trong nhật ký máy chủ của bạn? Chỉ phần mềm phía máy khách thường gặp lỗi JavaScript.
Stephen Ostermiller

1
Chúng tôi có một cuộc gọi để window.onerrorgửi từng lỗi JS đến máy chủ của chúng tôi thông qua Ajax.
John Washam

Tôi đã thử điều đó một lần, nhưng tôi đã nhận được rất nhiều lỗi từ quảng cáo, rằng họ đã nhấn chìm bất kỳ lỗi nào từ trang web của riêng tôi.
Stephen Ostermiller

Để rõ ràng, có vẻ như Google đang sử dụng tệp .js mới nhất, nhưng có hiển thị các phiên bản cũ của các trang không? Có thể Googlbot không kết xuất các trang khi tải xuống chúng. Nó có thể tải chúng xuống và lưu chúng để được hiển thị sau. Đã bao lâu rồi bạn thực hiện thay đổi này?
Stephen Ostermiller

1
Có vẻ như Googlebot có một hàng đợi kết xuất tách biệt với hàng đợi tải xuống và có thể có các trang có giá trị vài ngày trong đó. Tôi không chắc giải pháp cho vấn đề là gì.
Stephen Ostermiller

Câu trả lời:


0

Cách dễ nhất để giải quyết vấn đề này là phiên bản các tệp JavaScript của bạn. Sau đó, chỉ các trang mới sẽ tìm nạp JavaScript mới.


Các tệp JavaScript của chúng tôi được phiên bản sản xuất (chúng nối thêm một tham số chuỗi truy vấn để biểu thị chúng là khác biệt với các phiên bản trước đó của cùng một tệp). Một lần nữa, vấn đề không nằm ở tệp JS. Googlebot có tệp JS mới nhất (bằng chứng là chúng tôi đã thấy thông số chuỗi truy vấn chính xác trong lỗi JS), nhưng Googlebot không có HTML mới nhất đang tham chiếu tệp JS mới . Chúng tôi biết điều này bởi vì Googlebot đang sử dụng tệp JS mới sử dụng biến toàn cục được đặt trên trang HTML mới.
John Washam

Tôi đã xem xét điều này, nhưng hầu hết các phiên bản JavaScript đều giải quyết được vấn đề ngược lại. Người dùng đang sử dụng phiên bản được lưu trong bộ nhớ cache của các tệp JavaScript và phiên bản buộc họ phải tìm nạp phiên bản mới. Phiên bản sẽ chỉ hoạt động nếu bạn giữ một bản sao của tệp JavaScript cũ để phục vụ khi bạn nhận được các tham số phiên bản cũ. Thông thường bạn phiên bản bằng cách phục vụ phiên bản mới nhất cho dù các tham số là gì. Điều đó sẽ giải quyết vấn đề này.
Stephen Ostermiller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.