Google Analytics eCommerce Tracking - Variablen übergeben

Hallo liebe Oxidler,

Google Analytics in Rohform läuft bei mir bereits, nun möchte ich noch die ECommerce-Tracking-Funktionen nutzen. Dazu muss das folgende Script mit Variablen gefüllt werden. Ich hab leider keine Ahnung wie diese jeweils heissen und auch das testen ist schwierig, da die Daten erst zeitverzögert in GA erscheinen. Deshalb bitte ich euch Profis um Hilfe.

Hier mal beispielhaft der Code, den GA benötigt. Ws müssen, soweit ich das weiss, nicht alle Variablen ausgefüllt sein.
Wichtig wären allerdings für mich: Stadt, Bundesland, Gesamtpreis, Produktname.

Muss ausserdem die additem-Funktion auch in die Thankyou.tpl oder kommt das an eine andere Stelle?

<script type=“text/javascript”>
var gaJsHost = ((“https:” == document.location.protocol) ? “https://ssl.” : “http://www.”);
document.write(unescape("%3Cscript src=’" + gaJsHost + “google-analytics.com/ga.js’ type=‘text/javascript’%3E%3C/script%3E”));
</script>

<script type=“text/javascript”>
var pageTracker = _gat._getTracker(“UA-xxxxxx-1”);
pageTracker._trackPageview();
pageTracker._addTrans(
“1234”, // Auftrags-ID
"Mountain View", // Angliederung
"11,99", // Gesamt
"1,29", // Steuer
"5", // Versand
"San Jose", // Stadt
"California", // Bundesland/Bundesstaat
"USA" // Land
);

pageTracker._addItem(
“1234”, // Auftrags-ID
"DD44", // SKU
"T-Shirt", // Produktname
"Mittelgrün", // Kategorie
"11,99", // Preis
"1" // Menge
);

pageTracker._trackTrans();
</script>

Danke für eure Hilfe!! :rolleyes:

Viele Grüße,
Martin

Hallöli,

also das mit dem Ecommerce Tracking iss nicht gar soo simpel.
Im Standard gibt es die Econda Schnittstelle, als Smartyplugin. hier sind folgende Dateien zuständig:

insert.oxid_tracker.php (hier könnte man sich mit einem eigenen Modul einklinken, äquivalent zu econda)
oxemosadapter.php
emos.php
Die letzten beiden Files machen das eigentlich Tracking, hier findest du alle Variablen drin, aber Achtung, diese Files haben ein etwas anderes Copyright (muss das nicht alles GPL sein bei der CE?) Details sind aber im Kommentar im Header beschrieben.

Du musst auch darauf achten [I]wann [/I]du [I]was [/I][I]wo [/I]einbindest… also das Eccommerce Tracking kann ja Warenkorb, Checkout die verschiedenen schritte… und mehr…

…pack dir mal [{ debug }] in die _header.tpl, dann bekommst du ein Popup, in dem immer alle verfügbaren smartyVariablen mit Inhalte gelistet sind, bei jeder Seite.

Ein Ar*** voll Arbeit sag ich dir, oder investier die 75 Flocken und kauf dir das Modul von Volker Dörk:

Hoffe ich konnte dir weiterhelfen?

Gruß
Magnus

Hallo Magnus,

ja, hast mir auf jeden Fall sehr weitergeholfen - oder zumindest Klarheit verschafft, dass es nicht so easy ist wie ich mir das dachte! :slight_smile:

Eine Grundversion des Trackings wäre schonmal ein Anfang, zB die verkauften Nettowarenwerte pro Tag einfach im Thankyou abfragen. Da kann man dann schonmal was damit anfangen.

Langfristig werde ich dann wohl doch bei Herrn Doerk landen. Auf GA verzichte ich ungern, und mit Econda noch ein zweites Bezahl-Analytics mehr laufen lassen…viel mehr wird es mir wohl auch nicht sagen können als ein voll ausgebautes GA?!

Naja, vielen Dank dir auf jeden Fall & gutes Nächtle!

Martin

Na ja, sooo dramatisch ist das ja auch nicht…

Ich habe das mal wie folgt implementiert:

<?php
/* -----------------------------------------------------------------------------------------
$Id: pt_google_analytics.js.php 1192 2009-06-11 19:31:14Z avenger $

Google Analytics interface for OXID PE 4.

Copyright (c) 2009 avenger, [email protected]

Not released under the GNU General Public License
---------------------------------------------------------------------------------------*/

  $google_analytics='
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker=_gat._getTracker(GOOGLE_ANALYTICS_ID);
pageTracker._initData();
pageTracker._trackPageview';
  if ($page_viewed)
  {
    $google_analytics.='("'.$page_viewed.'")';
  }
  else
  {
    $google_analytics.='()';
  }
  //if (oxConfig::getParameter( 'cl')=='thankyou')
  if ($this->_tpl_vars['is_final_step']===true)
  {
    $order=$this->_tpl_vars['order'];
    $total=$order->getTotalOrderSum();
    $net=$order->getOrderNetSum();
    $store_name=$this->_tpl_vars['oxcmp_shop']->oxshops__oxtitleprefix->value;
    $orders_id=$order->oxorder__oxordernr->value;
    $city=$order->oxorder__oxdelcity->value;
    if (!$city)
    {
      $city=$order->oxorder__oxbillcity->value;
    }
    $country=$order->getDelCountry()->value;
    if (!$country)
    {
      $country=$order->getBillCountry()->value;
    }
    $google_analytics.='
pageTracker._addTrans(
  "'.$orders_id.'",                                                         // Order ID
  "'.addslashes(htmlspecialchars($store_name)).'",                          // Affiliation
  "'.round($total,2).'",                                                    // Total
  "'.round($total-$net,2).'",                                               // Tax
  "'.round($order->oxorder__oxdelcost->value,2).'",                         // Shipping
  "'.addslashes(htmlspecialchars($city)).'",                                // City
  "",                                                                       // State
  "'.addslashes(htmlspecialchars($country)).'"                              // Country
);
';
    $oArticles = $order->getOrderArticles(true);
    // product list
    foreach ( $oArticles as $key => $oOrderArt )
    {
      $google_analytics.='
pageTracker._addItem(
  "'.$orders_id.'",                                                         // Order ID
  "'.htmlspecialchars($oOrderArt->oxorderarticles__oxartnum->value).'",     // SKU
  "'.htmlspecialchars($oOrderArt->oxorderarticles__oxtitle->value).'",      // Product Name
  "'.htmlspecialchars($oOrderArt->oxorderarticles__oxselvariant->value).'", // Category/Attributes
  "'.$oOrderArt->oxorderarticles__oxbprice->value.'",                       // Price
  "'.$oOrderArt->oxorderarticles__oxamount->value.'"                        // Quantity
)
';
  }
    $google_analytics.='
pageTracker._trackTrans();';
}
  $google_analytics.=';
</script>
';
  echo $google_analytics;
?>

Diesen Code z.B. in “out/basic/src/pt_google_analytics.js.php” speichern, und “GOOGLE_ANALYTICS_ID” mit Deinem.ID ersetzen.

In “thankyou.tpl” muss man dann am Anfang das folgende Statement einbauen (damit das Script weiß, wann es auch den eCommerce-Tracking-Teil ausführen soll.):

[{assign var=“is_final_step” value=true}]
(Eleganter wäre es wohl, im Modul zu prüfen, ob die aktive Klasse “thankyou” ist, dann kann man sich den Eingriff in “thankyou.tpl” sparen…

Also im Modul statt

if ($this->_tpl_vars['is_final_step']===true)
if (oxConfig::getParameter( 'cl')=='thankyou')

verwenden.

Habe ich aber noch nicht getestet…)

Und in “_header.tpl” vor “” folgendes einfügen:

[{php}]
include('out/basic/src/pt_google_analytics.js.php');
[{/php}]

[B]

Anmerkung:[/B]

Die in dem Skript verwendete Variable “$page_viewed” ist hier noch nicht verwendet.In meiner xtc/Gambio-Variante des Moduls dient sie dazu, statt der üblichen URL-Darstellung in GA Klartext-Meldungen der Aktivitäten zu erreichen…

z.B. “Produkt xyz ansehen”, “Kategorie abc ansehen”, “Produkt xyz in den Warenkorb legen”, “Impressum lesen” usw. (Das ist in GA wesentlich übersichtlicher, als die URLs! (Obwohl die SEO-URLs da schon recht aussagekräftig sind.))

Das wird dadurch erreicht, dass die URL des Requests in einem vorgeschalteten Modul analysiert, in den zugehörigen Klartext umgesetzt und von dort als “$page_viewed” übergeben wird.

(Irgendwann werde ich dieses Übersetzungsmodul auch mal für OXID machen…)

Achtung:

Das ist die komplette GA-Einbindung, also andere GA-Skripte entfernen!

Hallo @ll,

[QUOTE=Jonesey;11336]
Langfristig werde ich dann wohl doch bei Herrn Doerk landen. Auf GA verzichte ich ungern, und mit Econda noch ein zweites Bezahl-Analytics mehr laufen lassen…viel mehr wird es mir wohl auch nicht sagen können als ein voll ausgebautes GA?!
Martin[/QUOTE]

econda als professionelles, kostenpflichtiges Web Analyse Tool hat mehrere ganz klare Vorteile: die econda Lösung ist direkt auf die Web Analyse von Shopsystemen ausgelegt und hat eine OXID Schnittstelle. Die Integration ist also mit wenigen Klicks erledigt. Mit econda hat man außerdem ein vom Mediapartner (AdWords) unabhängiges System. Die econda Sever stehen in Deutschland und somit im deutschen Rechtsraum (Datenschutz!).

Gestern habe ich übrigens folgende Twitter-Meldung gelesen: “I’m getting sick of sites not completely loading due to slow / non-responsive web analytics (Omniture, Baynote, Google Analytics, etc.).” (Quelle: http://twitter.com/Prolixium)

Hier kommt ein weiterer Vorteil des Serverstandorts Deutschland zum tragen: die econda Technologie und Server gewährleisten stets kürzeste Reaktionszeiten, so dass durch das Tracking keinerlei Verzögerung beim Aufruf Ihrer Website/Ihres Shops entsteht.

Nicht zu unterschätzen ist schließlich, dass man über die Lösung hinaus bei econda ausgewiesene Web-Analyse Experten als Ansprechpartner bei Fragen hat und additive Leistungen zum Aufbau von eigenem Know How nutzen kann.

Am einfachsten ist es, sich selbst ein Bild zu machen mit einem kostenlosen Test.

Wir können auch gerne telefonisch über Ihre/Deine Anforderungen sprechen.

Viele, sonnige Grüße aus Karlsruhe,
Christian

Hallo!

@avenger
1000 Dank! Mal wieder ein sehr sehr hilfreicher Beitrag! Ich habe das so implementiert, mal schauen ob das Tracking so funktioniert - bin gespannt!
Du hast nicht zufällig auch noch eine Lösung um Events zu tracken wie Warenkorb-Add, Vergleich-Add u.ä.? Ich hab das mal mit nem Trichter leidlich versucht hinzukriegen, aber das glaub ich kann so nicht funktionieren :frowning:
Habe gestern bei euch mein Shoptemplate beauftragt - du wirst dich wohl bald eh nochmal mit meinem Codeverhau auseinandersetzen :smiley:

@ C Hagemeyer
Da hast du sicher in vielen Punkten recht. Auf einen Test werde ich es deshalb auch mal ankommen lassen bei euch und dann entscheiden, ob das alles die (nicht gerade geringe) Jahresgebühr wert ist!

Viele Grüße,

Martin

p.s. Bin bis 8.8. in Urlaub, Antworten können etwas dauern…

[QUOTE=Jonesey;11433]Hallo!

@avenger
Du hast nicht zufällig auch noch eine Lösung um Events zu tracken wie Warenkorb-Add, Vergleich-Add u.ä.?[/QUOTE]
Das ist genau dieses Thema…

Anmerkung:

Die in dem Skript verwendete Variable “$page_viewed” ist hier noch nicht verwendet.In meiner xtc/Gambio-Variante des Moduls dient sie dazu, statt der üblichen URL-Darstellung in GA Klartext-Meldungen der Aktivitäten zu erreichen…

z.B. “Produkt xyz ansehen”, “Kategorie abc ansehen”, “Produkt xyz in den Warenkorb legen”, “Impressum lesen” usw. (Das ist in GA wesentlich übersichtlicher, als die URLs! (Obwohl die SEO-URLs da schon recht aussagekräftig sind.))

Das wird dadurch erreicht, dass die URL des Requests in einem vorgeschalteten Modul analysiert, in den zugehörigen Klartext umgesetzt und von dort als “$page_viewed” übergeben wird.

(Irgendwann werde ich dieses Übersetzungsmodul auch mal für OXID machen…)
GA erlaubt im Aufruf von “pageTracker._trackPageview(‘Irgendein Text’)” die Übergabe eines beliebigen Strings , der dann statt der URL für diesen Aufruf gespeichert wird.

In meiner xtc/Gambio-Version dieses Moduls läuft das genau so…

Im Anhang ein Beispiel der so erstellten GA-Liste der am häufigsten besuchten Seiten. (Da bekommt man eine ganz andere Sicht des Shops…)

Aber um das in OXID umsetzen zu können, muss ich noch genauer verstehen, welche Klassen-Aufrufe mit welchen Parametern was bewirken…

[QUOTE=avenger;11448]Das ist genau dieses Thema…
GA erlaubt im Aufruf von “pageTracker._trackPageview(‘Irgendein Text’)” die Übergabe eines beliebigen Strings , der dann statt der URL für diesen Aufruf gespeichert wird.[/QUOTE]
Dieses Konvertierungs-Modul “URL=>Klartext-Aktion” wird auch in einer anderen (m.E.) sehr interessanten (xtc-/Gambio-)Anwendung von mir verwendet:

Einer AJAX-basierten (Quasi-)Echtzeit-Überwachung (5 Sekunden-Raster) des Verkehrs in einem Shop! (Beispiel-Screenshot siehe unten.)

Mit IP-Geolocation, Anbindung an Google Maps usw.

Damit kann man genau verfolgen, wo die Besucher her kommen (zumindest ihr Einwahlknoten) und was im Shop geschieht:

welche Aktionen die Besucher durchführen, Verweildauer, Klickraten, Inhalte der Warenkörbe, Bestellungen. Ob sie von einer anderen Seite verlinkt wurden, evtl. Suchbegriffe bei Google & Co. usw.

Mit Sounds bei Klicks und Produktablage in den Warenkorb und dem Ein- und Austritt von Besuchern in den/aus dem Shop. Und wenn eine Bestellung abgeschlossen wird klingelt natürlich die Registrierkasse… Eine farb- und zeitcodierte Darstellung der Aktivitäten im Browser ist auch gegeben.

[B]Damit bekommt man eine ganz andere Beziehung zu seinem Shop…[/B]

Leider, leider wird das aber noch eine Weile dauern, biss ich das auch für OXID realisieren kann. Dazu muss man schon sehr genau verstehen, wie das Shop-System arbeitet.

Aber auf meiner “ToDo”-Liste steht es schon mal…

Für die IP-Geolocation verwende ich übrigens den Service von http://www.infosniper.net/ . Nach meiner Erfahrung der beste IP-Geolocation-Service für Europa. Während die meisten amerikanischen Services mich z.B. in Berlin vermuten, kommt der “infosniper” der Wahrheit schon sehr nahe. (Obwohl kein Geolocation-Service immer alles richtig erkennt… Auch Google nicht.)

“Just-for-fun” habe ich da auch noch die Open Source “opengeodb” Datenbank ( http://opengeodb.hoppe-media.com/ ) mit eingebunden (darin sind ca. 1 Mio. Datensätze von Orten in D-A-CH mit unheimlich vielen Informationen enthalten). Und die Anwendung dahingehend erweitert, dass sie auch Autokennzeichen, Vorwahl, PLZ und Regierungsbezirk des Besucherorts ermittelt, und eine [B]Umgebungssuche [/B]um den Besucherort gemacht wird. Damit werden dann Orte ab einer bestimmten Größe in einem bestimmten Umkreis (KM) um den Besucherort ermittelt. Mit Entfernung, relativer Himmelsrichtung u.ä.

Schon interessant, was für Informationen man aus einer harmlosen und unscheinbaren IP so ermitteln kann…

In dieser Beziehung war aber mehr “der Weg das Ziel”, um zu sehen, wie man so was nutzen kann, als dass die konkrete Information interessiert…

Hallo Avenger,

das Modul hat wunderbar seinen Dienst verrichtet…bis vor kurzem :frowning: Jetzt zeigt es mir seit den letzten 3 Käufen plötzlich keine COnversions mehr im Dashboard an. Verändert im Code habe ich nichts. Zumindest nicht an den relevanten Stellen die damit zu tun haben… hast du eine Idee wie ich das “debuggen” könnte ob die Variablen richtig übergeben werden?

@all: bevor ihr euch eine Kauflösung für die GA-Implementation sucht, probiert auf jeden Fall dieses Modul…einfach installiert und (im Idealfall :slight_smile: funktioniert es auch prima…

Viele Grüße
Martin

[QUOTE=Jonesey;13561]Hallo Avenger,

das Modul hat wunderbar seinen Dienst verrichtet…bis vor kurzem :frowning: Jetzt zeigt es mir seit den letzten 3 Käufen plötzlich keine COnversions mehr im Dashboard an. Verändert im Code habe ich nichts. Zumindest nicht an den relevanten Stellen die damit zu tun haben… hast du eine Idee wie ich das “debuggen” könnte ob die Variablen richtig übergeben werden?

@all: bevor ihr euch eine Kauflösung für die GA-Implementation sucht, probiert auf jeden Fall dieses Modul…einfach installiert und (im Idealfall :slight_smile: funktioniert es auch prima…

Viele Grüße
Martin[/QUOTE]
Da fällt mir jetzt nix zu ein…

Hast Du irgendwo(!) in OXID was geändert?

Allerdings muss man durchaus auch in Betracht ziehen, dass GA mal nicht richtig funktioniert.

Hatte ich schon mehrfach, dass die sich da mal einen Bug eingebaut haben…

Wenn dann nur andere Modulaufrufe eingebaut, direkt im Code an den Variablen o.ä. habe ich nichts gemacht…könnte ich auch gar nicht :slight_smile:

Gibt es eine Möglichkeit sich die Variablen im thankyou.tpl anzeigen zu lassen? Da ist doch dieser Debug-Mode… Dann würde ich mal eine Testbestellung machen und die gesetzten Variablen vergleichen, vielleicht kommt man dem so auf die Spur…

Es ist komich, die Besucher etc. werden ganz normal gezählt, und im selben Modul wird ja auch das eCommerce-Tracking aufgerufen…
Vielleicht wird die if thispage-Abfrage am Anfang deines Moduls aus irgend einem Grund verneint und nicht ausgeführt. Gibt es den die Möglichkeit so eine Seite Step-by-step ausführen zu lassen um das auszuschliessen?

Viele Grüße,
Martin

[QUOTE=Jonesey;13653]Wenn dann nur andere Modulaufrufe eingebaut, direkt im Code an den Variablen o.ä. habe ich nichts gemacht…könnte ich auch gar nicht :slight_smile:

Gibt es eine Möglichkeit sich die Variablen im thankyou.tpl anzeigen zu lassen? Da ist doch dieser Debug-Mode… Dann würde ich mal eine Testbestellung machen und die gesetzten Variablen vergleichen, vielleicht kommt man dem so auf die Spur…

Es ist komich, die Besucher etc. werden ganz normal gezählt, und im selben Modul wird ja auch das eCommerce-Tracking aufgerufen…
Vielleicht wird die if thispage-Abfrage am Anfang deines Moduls aus irgend einem Grund verneint und nicht ausgeführt. Gibt es den die Möglichkeit so eine Seite Step-by-step ausführen zu lassen um das auszuschliessen?

Viele Grüße,
Martin[/QUOTE]

[{assign var="is_final_step" value=true}]

ist in der “[B]thankyou.tpl[/B]” noch drin?

Ich habe mal eine [B]Testbestellung [/B]in Deinem Shop gemacht, die Bestelldaten werden [B]nicht[/B] mehr an GA übergeben!

Das ist das komplette JS für GA nach der Bestellung, also nur noch das normale Tracking…

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker=_gat._getTracker("xxxxxx");
pageTracker._initData();
pageTracker._trackPageview();
</script>

D.h., die “[B]is_final_step[/B]”-Variable ist also [B]nicht [/B]mehr gesetzt…

Ich habe das Ganze jetzt aber unabhängig von dieser Variablen in “[B]thankyou.tpl[/B]” gemacht, indem ich den Zeitpunkt der Übergabe der Bestelldaten an GA anhand des aktiven Klassennamens “thankyou” ermittle.

Also statt

if ($this->_tpl_vars['is_final_step']===true)

wird jetzt

if (oxConfig::getParameter( 'cl')=='thankyou')

geprüft.

Zudem glaubte ich, GA etwas Gutes zu tun, wenn ich die Umlaute und anderen Sonderzeichen als [B]HTML-Entities[/B] übergebe.

Was aber nicht der Fall ist, weil GA den Text dort einfach abschneidet, wo die HTML-Entity ( z.B. “ü”) beginnt…

Ich habe daher die Datenkonvertierung mit “[B]htmlspecialchars[/B]” aus der Routine entfernt.

Folgend ist der aktuelle Stand der GA-Routine, verwende mal diesen…

<?php
/* -----------------------------------------------------------------------------------------
$Id: pt_google_analytics.js.php 1116 2009-07-11 19:31:14Z gswkaiser $

Copyright (c) 2009 Dipl.-Ing.(TH) Winfried Kaiser, [email protected]

Not released under the GNU General Public License
---------------------------------------------------------------------------------------*/

  $google_analytics='
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker=_gat._getTracker("'.GOOGLE_ANALYTICS_ID.'");
pageTracker._initData();
pageTracker._trackPageview';
  if ($page_viewed)
  {
    $google_analytics.='("'.$page_viewed.'")';
  }
  else
  {
    $google_analytics.='()';
  }
  //if ($this->_tpl_vars['is_final_step']===true)
  if (oxConfig::getParameter( 'cl')=='thankyou')
  {
    $order=$this->_tpl_vars['order'];
    $total=$order->getTotalOrderSum();
    $net=$order->getOrderNetSum();
    $store_name=$this->_tpl_vars['oxcmp_shop']->oxshops__oxtitleprefix->value;
    $orders_id=$order->oxorder__oxordernr->value;
    $city=$order->oxorder__oxdelcity->value;
    if (!$city)
    {
      $city=$order->oxorder__oxbillcity->value;
    }
    $country=$order->getDelCountry()->value;
    if (!$country)
    {
      $country=$order->getBillCountry()->value;
    }
    $google_analytics.='
pageTracker._addTrans(
  "'.$orders_id.'",                                       // Order ID
  "'.addslashes($store_name).'",                          // Affiliation
  "'.round($total,2).'",                                  // Total
  "'.round($total-$net,2).'",                             // Tax
  "'.round($order->oxorder__oxdelcost->value,2).'",       // Shipping
  "'.addslashes($city).'",                                // City
  "",                                                     // State
  "'.addslashes($country).'"                              // Country
);
';
    $oArticles = $order->getOrderArticles(true);
    // product list
    foreach ( $oArticles as $key => $oOrderArt )
    {
      $google_analytics.='
pageTracker._addItem(
  "'.$orders_id.'",                                       // Order ID
  "'.$oOrderArt->oxorderarticles__oxartnum->value.'",     // SKU
  "'.$oOrderArt->oxorderarticles__oxtitle->value.'",      // Product Name
  "'.$oOrderArt->oxorderarticles__oxselvariant->value.'", // Category/Attributes
  "'.$oOrderArt->oxorderarticles__oxbprice->value.'",     // Price
  "'.$oOrderArt->oxorderarticles__oxamount->value.'"      // Quantity
)
';
  }
    $google_analytics.='
pageTracker._trackTrans();';
}
  $google_analytics.=';
</script>
';
  echo $google_analytics;
?>

Du kannst nach Abschluss der Bestellung sehen, welche Daten an GA übergeben werden, indem Du den Quellcode der “thankyou”-Seite öffnest, und den Text “[B]var gaJsHost[/B]” suchst.

Dort beginnt dann das für GA generierte Javascript.

Thx avenger, super gelöst.

@avenger
Sorry hab deine Antwort gerade erst gesehen, schade dass man keine Nachricht bekommt wenn Follow ups im Thread sind…

Die is_final_step war noch drin und wird ganz am Anfang der thankyou.tpl gesetzt. Keine Ahnung wieso das GA-Skript nicht aktiviert wurde. Ich habe jetzt mal deine neue Version eingefügt und werde mal gucken ob jetzt alles getracked wird. Die letzten Bestellungen haben übrigens auch mit dem alten Code wieder funktioniert. Hat wie gesagt nur sporadisch nicht getracked…

Danke für dein Update!!

VG Martin

[QUOTE=Jonesey;14619]Hat wie gesagt nur sporadisch nicht getracked…[/QUOTE]
Wie ich schon erwähnte:

man muss durchaus bei Problemen auch in Erwägung ziehen, dass Google mal Fehler macht…

Hallo Avenger,

danke zunächst für dein Script, funktioniert klasse. Es werden bei mir im Shop die eCommerce Daten wie gewollt übernommen. Etwas “banales” wird allerdings nicht angezeigt, und zwar “Website Ziele”. Ich habe den Verkauf als Ziel definiert (/index.php?cl=thankyou& als “head match”), jedoch bekomme ich keine Ziele angezeigt.

Hast Du eine Idee woran das liegen kann oder ist dies nicht Teil deines Scriptes?

Gruß

[QUOTE=PanchoVilla;16960]Hallo Avenger,

danke zunächst für dein Script, funktioniert klasse. Es werden bei mir im Shop die eCommerce Daten wie gewollt übernommen. Etwas “banales” wird allerdings nicht angezeigt, und zwar “Website Ziele”. Ich habe den Verkauf als Ziel definiert (/index.php?cl=thankyou& als “head match”), jedoch bekomme ich keine Ziele angezeigt.

Hast Du eine Idee woran das liegen kann oder ist dies nicht Teil deines Scriptes?

Gruß[/QUOTE]
Nun, das scheitert daran, dass OXID die Klassen nicht per GET startet (index.php?cl=thankyou), wobei der Parameter dann Teil der URL wäre, sondern der Parameter ‘cl’ (und andere) wird per POST übergeben, und ist somit im GA Javascript via URL nicht. sichtbar…

D.h., GA sieht immer nur die URL “index.php”, GA-“Trichter” und sonstige Funktionen sind daher so ohne Weiteres mit OXID nicht abbildbar…

Danke für die Erklärung! Ich muss sagen, das ist eine große Einschränkung wie ich finde… Gibt es dafür denn irgend einen Work Around oder was meinst Du mit “nicht ohne Weiteres”?

Bei der PE3 konnte man witzigerweise Ziele definieren und auch tracken…

Gruß

Jan

Aufgrund der zentralen Shop-Steuerung von OXID wird an Google Analytics keine richtig sinnvolle Information übergeben.

Um nun trotzdem ein genaueres Tracking zu erreichen, ohne an “-zig” Stellen im Template GA-Tracking-Code einbauen zu müssen, wurde das GA-Tracking-Skript entsprechend erweitert.

Eine OXID-Url sieht ja z.B. wie folgt aus: http://www.mein.shop.de/Versand-und-Bezahlung/

Die Information “[B]Versand-und-Bezahlung[/B]” wäre ja schon mal nicht schlecht als Information für das GA-Tracking…

Und genau das ist die Idee: extrahiere diesen Teil der SEO-Url und übergib ihn an GA!

Mein GA-Skript habe ich dazu um folgenden Code erweitert:

  //Extract SEO-Url target specifier
  $uri=$_SERVER['REQUEST_URI'];
  if (strpos(oxConfig::getInstance()->getConfigParam('sShopURL'),$uri)===true)
  {
    $page_viewed='Startseite';
  }
  else
  {
    $uri=explode('/',$uri);
    $page_viewed=$uri[sizeof($uri)-2];
  }
  //Extract SEO-Url target specifier

Damit wird dann genau dieser Teil aus der URI extrahiert, und man bekommt damit eine sehr detaillierte Tracking-Information für GA, und diese wird an einer [B]zentralen [/B]Stelle im Shop an GA übergeben.

Ist zwar bei weitem nicht so aussagefähig, wie die detaillierte Tarcking Info, die ich unter http://www.oxid-esales.com/forum/showthread.php?p=18007#post18007 beschrieben habe, aber sicher besser als das, was OXID sonst hergibt…

<?php
/* -----------------------------------------------------------------------------------------
$Id: pt_google_analytics.js.php 1192 2009-11-10 05:30:07Z avenger $

Google Analytics interface for OXID PE 4.

Copyright (c) 2009 avenger, [email protected]

Not released under the GNU General Public License
---------------------------------------------------------------------------------------*/

  $google_analytics='
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker=_gat._getTracker(GOOGLE_ANALYTICS_ID);
pageTracker._initData();
pageTracker._trackPageview';
  //Extract SEO-Url target specifier
  $uri=$_SERVER['REQUEST_URI'];
  if (strpos(oxConfig::getInstance()->getConfigParam('sShopURL'),$uri)===true)
  {
    $page_viewed='Startseite';
  }
  else
  {
    $uri=explode('/',$uri);
    $page_viewed=$uri[sizeof($uri)-2];
  }
  //Extract SEO-Url target specifier
  if ($page_viewed)
  {
    $google_analytics.='("'.$page_viewed.'")';
  }
  else
  {
    $google_analytics.='()';
  }
  if (oxConfig::getParameter( 'cl')=='thankyou')
  {
    $order=$this->_tpl_vars['order'];
    $total=$order->getTotalOrderSum();
    $net=$order->getOrderNetSum();
    $store_name=$this->_tpl_vars['oxcmp_shop']->oxshops__oxtitleprefix->value;
    $orders_id=$order->oxorder__oxordernr->value;
    $city=$order->oxorder__oxdelcity->value;
    if (!$city)
    {
      $city=$order->oxorder__oxbillcity->value;
    }
    $country=$order->getDelCountry()->value;
    if (!$country)
    {
      $country=$order->getBillCountry()->value;
    }
    $google_analytics.='
pageTracker._addTrans(
  "'.$orders_id.'",                                                         // Order ID
  "'.addslashes($store_name).'",                                            // Affiliation
  "'.round($total,2).'",                                                    // Total
  "'.round($total-$net,2).'",                                               // Tax
  "'.round($order->oxorder__oxdelcost->value,2).'",                         // Shipping
  "'.addslashes($city)).'",                                                 // City
  "",                                                                       // State
  "'.addslashes($country)).'"                                               // Country
);
';
    $oArticles = $order->getOrderArticles(true);
    // product list
    foreach ( $oArticles as $key => $oOrderArt )
    {
      $google_analytics.='
pageTracker._addItem(
  "'.$orders_id.'",                                                         // Order ID
  "'.$oOrderArt->oxorderarticles__oxartnum->value.'",                       // SKU
  "'.$oOrderArt->oxorderarticles__oxtitle->value.'",                        // Product Name
  "'.$oOrderArt->oxorderarticles__oxselvariant->value.'",                   // Category/Attributes
  "'.$oOrderArt->oxorderarticles__oxbprice->value.'",                       // Price
  "'.$oOrderArt->oxorderarticles__oxamount->value.'"                        // Quantity
)
';
  }
    $google_analytics.='
pageTracker._trackTrans();';
}
  $google_analytics.=';
</script>
';
  echo $google_analytics;
?>

Hallo zusammen!
Das E-Commerce Tracking von Google möchte ich auch schon einige Zeit implementieren.
Frage eines unbedarften Laiens :wink:
Was muss ich jetzt wohin genau abspeichern oder implementieren?
Im Laufe des Threats hab ich irgendwo den Faden verloren. :slight_smile:
Danke!
Joe