Hi Leute Bei meinem alten Gambio GX2 Shop habe ich Analytics gemäss dieser Anleitung eingebaut: http://www.seo-woman.de/gambio-google-analytics-einbauen/ Wie sieht das nun bei GX3 aus? Ist da immernoch ein Umweg nötig, damit Analytics korrekt arbeitet oder funktioniert das mittlerweile über die Eingabe im Admin-Menü? Liebe Grüsse Gianluca
Die Anleitung macht es schon richtig, als Overload. Allerdings sind die Ordner ab 3.1 bischen anders benannt. Funktionsweise bleibt jedoch gleich. Aber es geht auch mit Tracking code.
Danke Dennis, aber welches sind denn nun im GX3 die neuen Ordner? Ohne diese Info kann man das ja nicht lösen. Ich bin noch neu in Gambio und forsche da grade nach. Meine Vermutung: Der Ordner mit den Ausgangs-Sample-Dateien lautet GXUserComponents\overloads\_extender_samples\HeaderExtenderComponent Und die erstellte Extenderdatei gehört nach GXUserComponents\overloads Ich hab das nach der Anleitung, die auch Gianluca oben zitiert so versucht, aber leider klappte das nicht. Und dann hätt ich gleich noch eine Zusatzfrage: auf der checkout_success-Seite würde ich gerne das Analytics-eCommercetracking einbauen, also die Verkaufsumsätze und verkauften Artikel tracken. Wie krieg ich das hin? Die Anleitungen, die ich fand, beziehen sich alle auf ältere Gambio-Versionen... Danke Christian
Hi, leg mal unter GXUserComponents\overloads einen Ordner "CheckoutSuccessExtenderComponent" an und darin dann eine PHP Datei IndivStyleGoogleAnalytics.inc.php mit folgendem Inhalt: PHP: <?phpclass IndivStyleGoogleAnalytics extends IndivStyleGoogleAnalytics_parent { function proceed() { parent::proceed(); $coo_order = MainFactory::create_object('order', array($this->v_data_array['orders_id'])); $orders_total_query = xtc_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $orders_products_query = xtc_db_query("select * from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $i = 0; while ($product = xtc_db_fetch_array($orders_products_query)) { $orders_products[$i] = $product; $catname = xtc_db_fetch_array(xtc_db_query( "SELECT c.categories_name FROM categories_description c, products_to_categories p WHERE p.products_id = '".$orders_products[$i]['products_id']."' AND p.categories_id != '0' AND p.categories_id = c.categories_id ")); $orders_products[$i]['categories'] = $catname['categories_name']; $i++; } while ($product = xtc_db_fetch_array($orders_total_query)) { $orders_total[$product['class']] = $product['value']; } $trans = array( 'id' => $this->v_data_array['orders_id'], 'affiliation' => 'Shopname', 'revenue' => $orders_total['ot_total'], 'shipping' => $orders_total['ot_shipping'], 'tax' => $orders_total['ot_tax']); $i = 0; foreach ($orders_products as $value) { $items[$i] = array( 'sku' => $value['products_model'], 'name' => $value['products_name'], 'category' => $value['categories'], 'price' => $value['products_price'], 'quantity' => $value['products_quantity'] ); $i++; } function getTransactionJs(&$trans) { $mytotal = "ga('ecommerce:addTransaction', { 'id': '{$trans['id']}', 'affiliation': '{$trans['affiliation']}', 'revenue': '{$trans['revenue']}', 'shipping': '{$trans['shipping']}', 'tax': '{$trans['tax']}' }); "; return $mytotal; } function getItemJs(&$transId, &$item) { $myitem = "ga('ecommerce:addItem', { 'id': '$transId', 'name': '{$item['name']}', 'sku': '{$item['sku']}', 'category': '{$item['category']}', 'price': '{$item['price']}', 'quantity': '{$item['quantity']}' }); "; return $myitem; } $google_analytics = "<script type=\"text/javascript\"> (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', 'GOOGLE_ID HIERHIN', 'auto'); ga('send', 'pageview'); ga('require', 'ecommerce'); "; $google_analytics .= getTransactionJs($trans); foreach ($items as &$item) { $google_analytics .= getItemJs($trans['id'], $item); } $google_analytics .= " ga('ecommerce:send'); </script>"; $this->html_output_array['google_analytics'] = $google_analytics; return $this->html_output_array; //Änderung Ende }} bringt Analytics und eCommerce-Tracking. Sollte egl helfen und ist Updatesicher EDIT: Denk dran in Zeile 99 deine Google-ID einzutragen
Hey Tobias, super, danke - versuch ich gleich und berichte! Kleine prinzipielle Anregung vorab: damit Analytics rechtssicher eingesetzt wird, solltest du folgende Ergänzungen (fett) machen (jetzt mal "normal", ohne Integration in obiges Skript): <script type="text/javascript"> var gaProperty = 'UA-XXXXXXX-X'; var disableStr = 'ga-disable-' + gaProperty; if (document.cookie.indexOf(disableStr + '=true') > -1) { window[disableStr] = true; } function gaOptout() { document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; window[disableStr] = true; } </script> <script type="text/javascript"> (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-XXXXXXX-X', 'auto'); ga('set', 'anonymizeIp', true); ga('require', 'displayfeatures'); ga('require', 'ecommerce'); ga('send', 'pageview'); </script> Der obige Bolck ist nötig, damit die lt. Google-Geschäftsbedingungen und EU-Datenschutzrichtlinie vorgeschriebenen Opt-Out-Möglichkeiten funktionieren und die "anonymizeip"-Funktion kürzt die IP vor Speicherung um das letzte Zahlentrippel. "displayfeatures" ist nötig, um auch zB. soziodemographische Daten wie Alter und Geschlecht´(bei einem Google-Dienst eingeloggter) User in Analytics zu sehen.
Hallo nochmal Tobias, super, das funktioniert schon mal prinzipiell- many THX!! Trotzdem würd ichs gern noch ein klein bisschen anders haben (siehe unten: 2) bzw. fehlt mir noch der eigentlich einfachere Teil (siehe unten: 1) 1) das einfachere Problem: ich hätte den "normalen" Analytics-Code (also den in meinem vorigen Posting ohne deine eCommerce-Berechnungen) im HEAD-Bereich ALLER Seiten (inkl.!! Checkout-Success) 2) das komplexere: auf der Checkout-Success-Seite, in der dann nach Lösung von 1) der "normale" Analytics-Code schon im HEAD-Bereich existiert, soll das eCommerce-Tracking so wie von dir vorgeschlagen unten im Content nach dem FORM-Tag integriert werden Ich hätt das so versucht, dass ich einen Ordner HeaderExtenderComponent angelegt hab, mit einer ähnlichen Datei wie deiner IndivStyleGoogleAnalytics.inc.php da stünde nur das folgende drin: PHP: <?phpclass IndivStyleGoogleAnalytics extends IndivStyleGoogleAnalytics_parent { function proceed() { parent::proceed(); $google_analytics = " <script type=\"text/javascript\"> (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', 'GOOGLE_ID HIERHIN', 'auto'); ga('send', 'pageview'); ga('require', 'ecommerce'); </script>"; $this->html_output_array['google_analytics'] = $google_analytics; return $this->html_output_array; //Änderung Ende }} Das bewirkt aber leider nix. Könntest du mir da bitte noch weiter helfen? Krieg das irgendwie noch nicht ganz hin, mir fehlt da noch etwas der Gambio-System-Durchblick... ;-) Danke vielmals Christian
Hi Christian, den Teil habe ich zusätzlich noch über das Backend direkt eingebunden. Also im Gambio-Admin Shop-Einstellungen -> SEO -> Tracking-Codes (letzter Reiter) Google ist glücklicherweise intelligent genug die Besucher auf der checkout_success nicht doppelt zu zählen. Ich meine mich errinern zu können, dass ich damals Probleme hatte als ich den Code getrennt habe. Bin aber auch gerne für ne saubere Lösung zu haben. Und danke für den Hinweiß oben, werde ich die Tage mal einbauen.
Hello again, und danke nochmal. Mit der Admin-Lösung wird der Analytics-Code aber leider auch nicht im HEAD-Bereich platziert, sondern sogar ganz unten vor dem </BODY>. Würd mich wundern, wenn das mit dem eCommercetracking zusammen dann funktioniert. Könntest du mir nicht kurz den mir fehlenden Tipp geben, wie ich es schaffe, etwas im HEAD zu platzieren? Mein Versuch mit der HeaderExtender-Datei (s.o.) schlug zwar fehl, wenn ich aber die Sample-Datei von GX3 nach obigem Muster aktiviere tut sie was: Code: class HeaderExtender extends HeaderExtender_parent { /** * Overloaded "proceed" method. */ public function proceed() { parent::proceed(); echo '<meta http-equiv="Content-Script-Type" content="text/javascript">'; } } Sie schreibt "<meta http-equiv="Content-Script-Type" content="text/javascript">" ganz an den Beginn der aufegrufenen Shop-Dateien, noch vor die DTD - was natürlich zu Fehlern führt. Ich bräucht nur wissen, wie man was an andere Stelle in den HEAD kriegt, dann komm ich schon weiter, hoff ich. Nochmal THX Christian
So, jetzt hab ichs mit deiner Hilfe und etwas nachdenken hinbekommen, scheint mir! So hab ichs gelöst (vielleicht hilft das ja auch anderen Usern, die vor dem selben Problem stehen, weiter): 1) Allgemeinen GoogleAnalytics-Code im HEAD ALLER Seiten einfügen (so wie es Google empfiehlt und nicht "irgendwo" im Code): Ordner GXUserComponents/overloads/HeaderExtenderComponent anlegen darin Datei GATrackingHead.inc.php erstellen mit folgendem Inhalt (abgeänderte Lösung von http://www.seo-woman.de/gambio-google-analytics-einbauen/): PHP: <?php/* -------------------------------------------------------------- GoogleAnalyticsTrackingHead.inc.php Setzt Analytics-TrackingCode in den Dokument-HEAD vor </HEAD> --------------------------------------------------------------*/class GATrackingHead extends GATrackingHead_parent // Name muss mit Dateiname ubereinstimmen{ function proceed() { parent::proceed(); $this->v_output_buffer['google_analytics'] = <<<EOB <script type="text/javascript"> var gaProperty = 'UA-XXXXXXX-X'; var disableStr = 'ga-disable-' + gaProperty; if (document.cookie.indexOf(disableStr + '=true') > -1) { window[disableStr] = true; } function gaOptout() { document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/'; window[disableStr] = true; } </script> <script type="text/javascript"> (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-XXXXXXX-X', 'auto'); ga('set', 'anonymizeIp', true); ga('require', 'displayfeatures'); ga('require', 'ecommerce'); ga('send', 'pageview'); </script>EOB; }} 'UA-XXXXXXX-X' muss natürlich (2x) durch den eigenen Analytics-Code ersetzt werden 2) CheckoutSuccess-Seite mit Analytics-eCommerceTracking ergänzen, damit alle Verkäufe getrackt werden: Ordner GXUserComponents/overloads/CheckoutSuccessExtenderComponent anlegen darin Datei GAeCommerceTracking.inc.php erstellen mit folgendem Inhalt: PHP: <?phpclass GAeCommerceTracking extends GAeCommerceTracking_parent { function proceed() { parent::proceed(); $coo_order = MainFactory::create_object('order', array($this->v_data_array['orders_id'])); $orders_total_query = xtc_db_query("select * from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $orders_products_query = xtc_db_query("select * from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int) $this->v_data_array['orders_id'] . "'"); $i = 0; while ($product = xtc_db_fetch_array($orders_products_query)) { $orders_products[$i] = $product; $catname = xtc_db_fetch_array(xtc_db_query( "SELECT c.categories_name FROM categories_description c, products_to_categories p WHERE p.products_id = '".$orders_products[$i]['products_id']."' AND p.categories_id != '0' AND p.categories_id = c.categories_id ")); $orders_products[$i]['categories'] = $catname['categories_name']; $i++; } while ($product = xtc_db_fetch_array($orders_total_query)) { $orders_total[$product['class']] = $product['value']; } $trans = array( 'id' => $this->v_data_array['orders_id'], 'affiliation' => 'Shopname', 'revenue' => $orders_total['ot_total'], 'shipping' => $orders_total['ot_shipping'], 'tax' => $orders_total['ot_tax']); $i = 0; foreach ($orders_products as $value) { $items[$i] = array( 'sku' => $value['products_model'], 'name' => $value['products_name'], 'category' => $value['categories'], 'price' => $value['products_price'], 'quantity' => $value['products_quantity'] ); $i++; } function getTransactionJs(&$trans) { $mytotal = "ga('ecommerce:addTransaction', { 'id': '{$trans['id']}', 'affiliation': '{$trans['affiliation']}', 'revenue': '{$trans['revenue']}', 'shipping': '{$trans['shipping']}', 'tax': '{$trans['tax']}' }); "; return $mytotal; } function getItemJs(&$transId, &$item) { $myitem = "ga('ecommerce:addItem', { 'id': '$transId', 'name': '{$item['name']}', 'sku': '{$item['sku']}', 'category': '{$item['category']}', 'price': '{$item['price']}', 'quantity': '{$item['quantity']}' }); "; return $myitem; } $google_analytics = "<script type=\"text/javascript\">"; $google_analytics .= getTransactionJs($trans); foreach ($items as &$item) { $google_analytics .= getItemJs($trans['id'], $item); } $google_analytics .= " ga('ecommerce:send'); </script>"; $this->html_output_array['google_analytics'] = $google_analytics; return $this->html_output_array; //Änderung Ende }} Das ist praktisch "Dein" Codevorschlag, aber ohne die hier eigentlich nicht ganz korrekte Integration des allgemeinen Analytics-Codes. Wichtig ist ja auch, dass ga('require', 'ecommerce'); VOR ga('ecommerce:send'); im Code steht, und das wäre mit der Lösung, den allgemeinen Code über das Admin-Panel zu integrieren, nicht der Fall (da wird der allg. Analytics-Code ganz unten vor dem schließenden BODY eingebaut. Einen kleinen Fehler hat die Sache aber noch: es wird nicht die Category der gekauften Produkte erkannt und an Analytics übertragen, das bleibt leer: PHP: ga('ecommerce:addItem', { 'id': '400211', 'name': 'Testprodukt', 'sku': '345678', 'category': '', 'price': '18.9000', 'quantity': '1.0000' }); obwohl meine Produkte Kategorien zugeordnet sind und dein Skript für mein laienhaftes PHP-Verständnis korrekt aussieht Hast du noch eine Ahnung, was der Grund sein könnte, dass die Kategorie fehlt? Wär super, wenn wir auch das noch hinbekämen Dann wär das eine "saubere" Lösung. (Nur die Integration des AdwordsConversions-Skripts fehlt dann noch, aber das sollte mit obigem Wissen auch noch lösbar sein.) Nochmals allerherzlichsten Dank für deine Hilfe, die mich viele Schritte weiter gebracht hat (hab eh auf "Bedanken" geklickt Schönen Gruß Christian
Ich habe das alles eingebunden. Wie sehe ich nun welche Adowrdskampagne die meisten Conversions bringt? Das Zielvorhaben habe ich bei Analytics eingerichtet.
Hi, erstmal musst du auf verlässliche Daten warten. Die "meisten" Conversion ist relativ. Wenn Ich in eine Kampagne 10.000€ investiere und 100 Conversations erziele ist das nicht umbedingt besser als 1.000€ Investition mit 88 Conversions. Aber das sollte klar sein. Verfolgen kannst du deine Adwords in Analytics unter: Akquisition -> AdWords -> Kampagnen
Vielen Dank für die Anleitung! Kann 2) auch ohne 1) eingerichtet werden? Und habt ihr das Problem mit der leeren Kategorie hinbekommen? Habt ihr ein Adwords Conversion Skript geschrieben?
Zu deinen Fragen (sorry für die späte Antwort) Nein, 1) muss sein, damit 2) klappt. Nein, weil wir vom Support darauf keine Antwort bekamen mit dem Hinweis, das sei ein Drittanbieter-Problem, zu dem man eben keinen Support biete... Nein Hoff, das hilft noch... Christian
Hallo an Alle, hat es bereits jemand geschafft, Google E-Commerce-Tracking über den Google Tag Manager einzubinden? Dafür muss auf der Bestell-Bestätigungsseite folgender Data-Layer eingebunden werden und mit den Variablen aus Gambio versehen werden. Code: <script> window.dataLayer = window.dataLayer || []; dataLayer.push({ 'transactionId': '1234', 'transactionAffiliation': 'Acme Clothing', 'transactionTotal': 38.26, 'transactionTax': 1.29, 'transactionShipping': 5, 'transactionProducts': [{ 'sku': 'DD44', 'name': 'T-Shirt', 'category': 'Apparel', 'price': 11.99, 'quantity': 1 },{ 'sku': 'AA1243544', 'name': 'Socks', 'category': 'Apparel', 'price': 9.99, 'quantity': 2 }] }); </script> Quelle: https://www.analyticsmania.com/post/ecommerce-tracking-with-google-tag-manager/ Ich weiß, dass es das Modul Gambio Google Services gibt, das ist allerdings keine wirkliche Alternative für den Tag Manager.
Gambio Google Services ist für das E-Commerce Tracking an sich super, aber wir möchten zusätzlich individuelle Ereignisse tracken, die sich nur mit dem Tag Manager umsetzen lassen. Zudem haben wir einige Zielvorhaben in GA definiert, die mit dem neuen Gambio Modul leider nicht mehr ausgelöst werden. Dadurch können wir bestimmte Conversions nicht mehr richtig aufzeichnen. Ich hatte die Problematik bereits per Ticket eingereicht, leider sind wir zu keinem Ergebnis gekommen. Scheinbar stören bei uns zudem externe Module die Funktion des Google Services Moduls. Deshalb der Umstieg auf den Google Tag Manager.
Allerdings, ja... Es wäre natürlich großartig, falls jemand dafür eine Vorlage bereitstellen könnte Kann mir gut vorstellen, dass mehrere Leute gerne den Google Tag Manager nutzen möchten in Verbindung mit E-Commerce Tracking. Dann ließe sich sogar "Cross Domain Tracking" mit zwei Tracking-IDs einbinden!