Bei Googlebot treten JavaScript-Fehler auf, da veraltete HTML-Dateien mit neueren JS-Dateien gerendert werden

8

Wir sind kürzlich auf ein Problem gestoßen, bei dem wir var GLOBAL_VAR = true;einer HTML-Seite (z. B. ) eine JavaScript-Variable (z. B. ) hinzugefügt /Search/Indexund die separate JS-Datei (z. B. ) aktualisiert haben, /Scripts/search/index.jsum auf diese JS-Variable zuzugreifen und sie zu verwenden. Nachdem wir diese Änderungen live im Web veröffentlicht hatten, wurden von Googlebot generierte JS-Fehler angezeigt, die von unserer window.onerrorFunktion an uns gesendet wurden . Die Fehler sind wie folgt:

Nicht erfasster Referenzfehler: GLOBAL_VAR ist nicht definiert

Linie 1

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

Wenn ich die Seite / Suche / Index auf unserer Website besuche, sehe ich deutlich, dass die neue JS-Variable vorhanden und definiert ist.

Es ist fast so, als würde Googlebot beim Crawlen unserer Website nicht erkennen, dass sich die HTML-Seite geändert hat. Das bedeutet, dass altes, zwischengespeichertes HTML verwendet wird, das die Einstellung der GLOBAL_VARVariablen nicht enthält , was den JS-Fehler verursacht.

Wir haben die HTML / JS-Änderungen am 06.02. Veröffentlicht und erhalten ab dem 10.02. Immer noch JS-Fehler. Ich hätte gedacht, Googlebot würde die HTML-Änderungen inzwischen erkennen. Wir haben dieses Problem in der Vergangenheit noch nie erlebt.

Warum sollte Googlebot den Cache nicht aktualisieren, wenn sich der HTML-Code einer Seite ändert? Wie können wir Googlebot vor allem dazu bringen, die HTML-Änderungen zu erkennen und ihren Cache zu aktualisieren, damit diese JS-Fehler nicht mehr auftreten?


2019 UPDATE - Eine Sache, die ich hier hinzufügen möchte, ist, dass wir Microsoft Azure Cloud Services verwenden, die über eine Produktions- und eine Staging-Umgebung verfügen. Wir veröffentlichen in Staging, tauschen Staging in Produktion aus, testen die neue Produktion und löschen dann Staging. Das oben beschriebene Szenario scheint nur beim Austauschen / Löschen von Umgebungen aufzutreten, daher muss es etwas damit zu tun haben. Es ist, als würde Googlebot unsere Website crawlen, wenn wir Staging / Produktion austauschen, und es werden einige Daten aus dem Staging und einige aus der Produktion abgerufen, wodurch die zwischengespeicherten Ressourcen von unserer Website verzerrt werden. Es passiert immer noch und füllt immer noch unsere Fehlerprotokolle.

John Washam
quelle
Wie erhalten Sie JS-Fehler in Ihren Serverprotokollen? Nur clientseitige Software stößt normalerweise auf JavaScript-Fehler.
Stephen Ostermiller
1
Wir haben einen Anruf, window.onerrorum jeden JS-Fehler über Ajax an unseren Server zu senden.
John Washam
Ich habe das einmal versucht, aber ich habe so viele Fehler von Anzeigen erhalten, dass sie alle Fehler von meiner eigenen Website übertönten.
Stephen Ostermiller
Um ganz klar zu sein, es scheint, dass Google die neueste .js-Datei verwendet, aber alte Versionen der Seiten rendert? Es ist möglich, dass Googlbot beim Herunterladen keine Seiten rendert. Es kann sie herunterladen und speichern, um sie später zu rendern. Wie lange ist es her, dass Sie diese Änderung vorgenommen haben?
Stephen Ostermiller
1
Es hört sich so an, als hätte Googlebot eine Renderwarteschlange, die von der Downloadwarteschlange getrennt ist und Seiten im Wert von mehreren Tagen enthalten kann. Ich bin mir nicht sicher, was die Lösung für das Problem ist.
Stephen Ostermiller

Antworten:

0

Der einfachste Weg, dies zu lösen, besteht darin, Ihre JavaScript-Dateien zu versionieren. Dann rufen nur neue Seiten das neue JavaScript ab.

Joe Aldrich
quelle
Unsere JavaScript-Dateien werden bei der Produktion versioniert (sie fügen einen Abfragezeichenfolgenparameter hinzu, um sie als von früheren Versionen derselben Datei verschieden zu kennzeichnen). Auch hier liegt das Problem nicht bei der JS-Datei. Googlebot verfügt über die neueste JS-Datei (wie gezeigt, dass der JS-Fehler den richtigen Parameter für die Abfragezeichenfolge enthält), Googlebot verfügt jedoch nicht über den neuesten HTML- Code, der auf die neue JS-Datei verweist . Wir wissen dies, weil Googlebot die neue JS-Datei verwendet, die eine globale Variable verwendet, die auf der neuen HTML-Seite festgelegt ist.
John Washam
Ich habe darüber nachgedacht, aber die meisten JavaScript-Versionen lösen das gegenteilige Problem. Benutzer verwenden die zwischengespeicherte Version der JavaScript-Dateien und die Versionierung zwingt sie, die neue abzurufen. Die Versionierung würde nur funktionieren, wenn Sie eine Kopie der alten JavaScript-Datei behalten, um sie zu erhalten, wenn Sie die alten Versionsparameter erhalten. Normalerweise versionieren Sie, indem Sie die neueste Version bereitstellen, unabhängig von den Parametern. Das wird dieses Problem lösen.
Stephen Ostermiller