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.onerror
chứ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
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_VAR
biế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.
window.onerror
gửi từng lỗi JS đến máy chủ của chúng tôi thông qua Ajax.