it-swarm.com.de

Wie kann ich mit Google Analytics von AJAX aufgerufene Seiten verfolgen?

Ich rufe eine Seite auf meiner Website mit AJAX auf, aber aus irgendeinem Grund registriert Google Analytics den Seitenbesuch nicht. Muss ich etwas erzwingen, um AJAX ausgelöste Seiten zu registrieren?

Ich verwende den neuesten Universal-Anaytics-Code wie folgt:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).Push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-XXXXXXXX-1', 'mywebsite.ext');
  ga('send', 'pageview');

</script>

Ich verwende einen Aufruf von JQuery AJAX für die Seite, die das obige Snippet enthält, wie folgt:

<script>
//<![CDATA[             
$(document).ready(function(){

        $.ajax({
                url : "http://www.mywebsite.ext",
                type: "GET",
                async: false,
                data : { fromajax : "y" },
                success: function(data, textStatus, jqXHR)
                {
                        // alert("success - Data: " + data + "\ntextStatus: " + textStatus);
                },
                error: function (jqXHR, textStatus, errorThrown)
                {
                        alert("error \ntextStatus: " + textStatus + "\nerrorThrown: " + errorThrown + "\njqXHR: " + jqXHR);
                }
        });

});
//]]>

Ich bin sicher, dass die Seite aufgerufen wird, da einige Protokollierungsanweisungen in eine Datenbank geschrieben werden. Ich weiß auch, dass der Analytics-Code funktioniert, da ich ihn mit der Echtzeitübersicht teste.

Zusammenfassend habe ich eine Seite mit dem Namen http: //www.mywebsite.ext unter Verwendung von AJAX und die Zielseite ( http: //www.mywebsite.ext ) enthält einige Universal Analytics-Code, der die Seite nicht zu verfolgen scheint. Wenn Sie die Seite normalerweise über Ihren Browser besuchen, wird die Seite gut nachverfolgt.

Ich habe seitdem aus dem Thread herausgefunden, dass ich die "ga" -Funktion mit einem virtuellen Ordner aufrufen kann. Ich habe daher auf den Aufruf von AJAX verzichtet und stattdessen Universal Analytics wie folgt geändert:

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).Push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXXXXX-1', 'mywebsite.ext');
ga('send', 'pageview', '/localfolder/page');
ga('send', 'pageview');

</script>

Das Problem, das ich jetzt habe, ist, dass es ga aufruft ('send', 'pageview', '/ localfolder/page'); aber nicht ga ('send', 'pageview');

Aber ich verstehe, dass es ein Mindestintervall zwischen Ereignissen gibt: Google Analytics - Ereignisprotokollierung - Mindestintervall zwischen den Ereignissen

Ich habe daher ein setTimeout (function () {}, 2000) hinzugefügt. zwischen Ereignissen und dem letzten Ereignis wird immer noch nicht aufgerufen. Ich bin sogar auf 9 Sekunden gestiegen.

16
user2599927

Der alte Standard zum Laden von Google Analytics war die asynchrone Methode:

var _gaq=[["_setAccount","UA-#######-#"],["_trackPageview"]];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
g.src=("https:"==location.protocol?"//ssl":"//www")+".google-analytics.com/ga.js";
s.parentNode.insertBefore(g,s)}(document,"script"));

Dieses Bit verfolgt das anfängliche Laden der Seite, jedoch keine nachfolgenden AJAX Aufrufe. Wenn Sie das Laden einer Seite verfolgen möchten, fügen Sie das folgende Snippet hinzu:

// "_trackEvent" is the pageview event, 
_gaq.Push(['_trackPageview', '/some-page']);

_trackPageview wird erneut verwendet, aber diesmal geben wir die URL der AJAX Adresse an, die geladen wurde. Wenn Sie das kleine JavaScript-Snippet verwenden, können Sie die Seitenzugriffe genau so verfolgen, als würden Sie die gesamte Seite neu laden. Ich würde empfehlen, dieses Snippet mit dem History-Plugin von MooTools zu verwenden.

In Kombination mit Ajax sollte Ihr Code dem ähneln:

jQuery(document).ajaxComplete(function(e, xhr, settings){
  var d = document.location.pathname + document.location.search + document.location.hash;
  _gaq.Push(['_trackPageview', d]);
});

Wenn Sie Universal Analytics Code verwenden möchten, ist die Syntax für virtuelle Seitenladungen unterschiedlich.

Dies ist die Syntax für das Nachverfolgen von virtuellen Seitenzugriffen in UA: 

ga(‘send’, ‘pageview’, ‘path to your virtual page’);

Beispiele:

<a href=”http://www.example.com/gu/dw/seo-beginners-guide.pdf” onClick=”ga(‘send’, ‘pageview’, ‘/virtual/guides/download/seo-beginners-guide.pdf’);”> Download SEO Beginners Guide</a> 

Wenn ein Benutzer auf den Link "Download SEO Beginners Guide" klickt, generiert UA eine virtuelle Seitenansicht mit dem Namen "/virtual/guides/download/seo-beginners-guide.pdf".

Quellen:
http://davidwalsh.name/ajax-analytics
https://stackoverflow.com/a/7762559/3582159
http://www.optimizesmart.com/event-tracking-guide-google-analytics-simplified-version/

20
GlabbichRulz

Html

<a class="ajax-load" href="home.html" >Home</a>

Javascript

jQuery(document).ready(function($) {
    $(".ajax-load").click(function(event) {
        event.preventDefault();
        var href = $(this).attr("href");
        $.ajax({
            url: href,
            type: 'post',
            dataType: 'html',

        })
        .done(function(response) {
            $(".somediv").html(response);
            // now send page view
            ga('send','pageview','/virtual/....');
        })
        .fail(function() {
            // show error dialog
        })
    });
});
1
Ilyas karim

Möglicherweise haben Sie Probleme, weil diejenigen, die Ajax erhalten, kein Javascript erwarten oder verarbeiten.

Google hat dieses Protokoll als Lösung:

POST/Collect HTTP/1.1 Host: www.google-analytics.com

payload_data

details finden Sie hier:

https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#proxy-server-tracking

Sie müssen eine POST - oder GET-Methode in Ihrer Skriptsprache verwenden. Wenn Sie eine Antwort und eine funktionierende Lösung finden, lassen Sie es mich wissen! Ich tue alles, um das zum Laufen zu bringen.

0
user3313824

Diese Antwort gilt nur für neue GA Snippets

Die hochgelobte Antwort hat für mich nicht funktioniert, hier ist eine leicht modifizierte Version von diese Antwort , die für mich funktioniert

if ("ga" in window) {
    tracker = ga.getAll()[0];
    if (tracker) {
        tracker.set("page", '/some-page');
        tracker.send("pageview");
    }
}
0
dav