web-dev-qa-db-de.com

Nicht erfasster ReferenceError: _gaq ist nicht definiert (Google Analytics)

Die folgende Meldung wird angezeigt, wenn eine Site-Seite im chrome debug log angezeigt wird.

Nicht erfasster ReferenceError: _gaq ist nicht definiert

Die Seite selbst soll ein Objekt mit der Ereignisbehandlungsroutine onload verfolgen und einen _trackEvent Für Google Analytics auslösen.

Ich vermute, dass die Datei ga.js Möglicherweise nicht rechtzeitig geladen wird und daher der ausgelöste onload_trackEvent Nicht abgefangen wird. Das asynchrone Snippet wird vor dem Schließen von </body> verwendet und das Objekt befindet sich in der Mitte von <body>.

(Einige andere Beiträge haben auch auf die jQuery-Position verwiesen, aber dies könnte ein roter Hering sein.)

jede Hilfe sehr geschätzt.

33
Alex Brown

Ab https://developers.google.com/analytics/devguides/collection/gajs/ ersetzt dieser Code Ihr vorhandenes "traditionelles Snippet" durch die "neueste, asynchrone Version". Sie sollten das vorhandene Tracking-Snippet entfernen zuerst."

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.Push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.Push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

Um zu sehen, ob Ihre Ereignisse eingehen (um zu wissen, ob dies funktioniert), suchen Sie unter der Menüoption "Echtzeit" auf der linken Seite der Seite "Berichterstellung" nach "Ereignisse".

34
PJ Brunet

In Bezug auf die Position des asynchronen Snippets lautet die GA-Hilfeseite -

Fügen Sie dieses Snippet in Ihre Website-Vorlagenseite ein, sodass es vor dem schließenden </head> - Tag angezeigt wird.

Mein erster Gedanke war, dass JS am unteren Rand der Seite geladen werden sollte, um die Seitengeschwindigkeit zu verbessern. Das asynchrone Tracking-Snippet GA= sollte jedoch in den Kopf geladen werden, da es die Datei ga.js nicht sofort lädt und die Seitenausführung nicht blockiert. (Dies erfolgt durch dynamisches Hinzufügen das Skript-Tag an das DOM, wodurch es in der Warteschlange ganz hinten steht.)

Wenn Sie das asynchrone Snippet aus irgendeinem Grund nicht in den Kopf verschieben können, können Sie _gaq Wie folgt selbst definieren:

<button onclick="var _gaq = _gaq || []; _gaq.Push(['_trackEvent', 'button3', 'clicked'])"/><button>
16
Spongeboy

Hatte das selbe Problem. Sie müssen das Array _gaq Definieren. Fügen Sie dies einfach nach Ihrem Google Analytics-Skript in die Kopfzeile ein:

var _gaq = _gaq || [];
_gaq.Push(['_setAccount', 'UA-XXXXXX-X']);
_gaq.Push(['_trackPageview']);
11
kaleazy

Sie können die letzte Version von analytics.js anstelle von ga.js verwenden

ga.js ist eine Legacy-Bibliothek. Wenn Sie eine neue Implementierung starten, empfehlen wir Ihnen, die neueste Version dieser Bibliothek, analytics.js, zu verwenden. Erfahren Sie für bestehende Implementierungen, wie Sie von ga.js nach analytics.js migrieren.

Hier ist ein Beispiel:

ga('send', {
  hitType: 'event',
  eventCategory: 'Video',
  eventAction: 'play',
  eventLabel: 'cats.mp4'
});
4
Ouadie

Ändern Sie den Tracking-Code in:

<script type="text/javascript">
      var gaq; 
      var _gaq = gaq || [];
      _gaq.Push(['_setAccount', 'UA-XXXXX-X']);
      _gaq.Push(['_setDomainName', 'yourdomain.com']);
      _gaq.Push(['_setAllowLinker', true]);
       _gaq.Push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script');
        ga.type = 'text/javascript';
        ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www')
                      + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(ga, s);
      })();

</script>
0
Gal Samuel