Google Tag Manager + Enhanced E-Commerce Tracking [BETA-TESTER GESUCHT]

Hallo Shopware-Community,

wir updaten in Kürze unser beliebtes und kostenloses Plugin " Google Tag Manager + Enhanced E-Commerce Tracking für Shopware" (http://store.shopware.com/wbm3958109111964/google-tag-manager-enhanced-e-commerce-tracking-fuer-shopware.html). Zudem wird das Plugin mit dem Update auch Open Source werden.

Vor dem Release suchen wir noch Shopbetreiber oder Dienstleister, die das Plugin testen wollen. Das Repository steht dafür quelloffen auf GitHub bereit. Wir würden uns über Feedback sehr freuen, da dies den Release des Pluginupdates im Community-Store beschleunigen würde.

VIelen Dank!

1 Like

Hi zusammen, 

bitte auf jeden Fall noch die ecomm_ Variablen mit einbinden, da diese für Remarketing standardmäßig benötigt werden. 

Sieht aber schon sehr toll aus.

LG,

Chris 

Hi nochmal,

das Ding sieht schon  ziemlich genial aus. Ich habe allerdings gerade versucht, die ecomm_prodid fürs Remarketing einzubinden und eine Ausgaben in der Form im Produktlisting
habe ich nicht hinbekommen:

ecomm_prodid: [34592212, ‘23423-131-12’, ‘gp232123-19a’]

Könnt Ihr da noch eine Spezialvariable mit einbauen, mit der das dann funktioniert?

LG und Dankeschön,

Chris

Konkret gehts dann um das hier:

https://developers.google.com/adwords-remarketing-tag/parameters

Wäre schon toll, wenn man das mit dem Manager hinbekommt, dann braucht man wirklich kein weiteres Plugin.

Hi,

sorry, hab den Thread hier gerade erst gesehen. Ich bin Entwickler bei Webmatch. Wenn du dir aus dem Repository den neuesten Stand holst, dann kannst du dem Property jetzt mit etwas Tricksen ein array zuweisen. In dem Beispiel um dem property ecomm_prodid mit einem Array aller Artikelnummern im Warenkorb zu geben. Dafür gibst du dem property folgenden Wert:

["{/literal}{foreach $sBasket.content as $sArticle}{if !$sArticle@first}{34|chr}{/if}{$sArticle.ordernumber}{if !$sArticle@last}{34|chr},{/if}{/foreach}{literal}"]

Das ist ziemlich kryptisch, aber funktioniert.

Krasse Marie, da wäre ich so niemals drauf gekommen. Genial. Jetzt hat man ein Plugin für wahrlich alles.

LG und Dankeschön, 

Chris 

Hallo und guten Morgen,

ich habe den Tagmanager jetzt ins Live-System integriert und möchte mich an dieser Stelle für das wirklich
tolle Plugin bedanken.

Die google_tag_params werden jetzt auf allen Seitentypen korrekt ausgegeben und die von Dir propagierte
Lösung ist simpel und schnell umzusetzen.

Vielen Dank auch für die ausführliche Erklärung auf Git.

Ein schönes Wochenende wünscht,

Chris

Freut mich zu hören. :slight_smile: Ich habe übrigens gerade diese und weitere Eigenschaften für das Adwords Remarketing hinzugefügt zur Standard-Konfiguration, d.h. nach Erstinstallation. Das Plugin kommt also jetzt von Haus aus vorkonfiguriert für Enhanced Ecommerce und Adwords Remarketing.

Hi nochmal,

prima, das hört sich doch perfekt an. Also dann bitte so, ja?

 

dataLayer.push({
    "ecommerce": {
        "detail": {
            "actionField": {
                "list": "Strumpfmode"
            },
            "name": "Timo Tattoo Strumpfhose",
            "id": "TR-TIMO-COSM-1",
            "price": "9.9",
            "brand": "Trasparenze",
            "category": "Strumpfmode",
            "variant": ""
        },
        "currencyCode": "EUR"
    },
    "google_tag_params": {
        "ecomm_prodid": "TR-TIMO-COSM-1",
        "ecomm_pagetype": "detail",
        "ecomm_totalvalue": "9.9",
        "ecomm_category": "Strumpfmode"
    }
})

Kann man bei totalvalue noch die Anführungszeichen entfernen, so dass der Wert alleine da steht? Ich befürchte, dass hier der Wert
ansonsten nicht genommen wird. Zumindest bleibt das bei Adwords Conversions dann leer, obwohl im Tag-Manager gemappt.

Es müsste dann eigentlich so aussehen:

 

"ecomm_totalvalue": 9.9

Vielen Dank und viele Grüße,

Chris

Danke für den Hinweis mit _google_tag_params. _Die Eigenschaften hatte ich noch nicht so gruppiert. Hab ich jetzt nachgeholt.

Was den anderen Punkt angeht wäre es super, wenn du und die Community im Allgemeinen sowas testen könntet. Ich bin mir nicht sicher ob Google da wirklich strict ist was den Type des Wert angeht. Ich vermute eher, dass die das auf Serverseite nochmal casten. Andernfalls müsste ich die Werte alle nochmal auslesen und gegebenenfalls entsprechend casten. Das wäre im Prinzip dann ein kompletter Iterations-Cycle, der unnötig wäre, wenn Google der Type erstmal egal ist. Und das Tracking soll ja auch kein bisschen mehr Runtime beanspruchen, als unbedingt notwendig. :slight_smile: Ich werde da aber auch unsere Kontakte nochmal spielen lassen und mich in der Hinsicht schlau machen.

@d.coder schrieb:

Danke für den Hinweis mit _google_tag_params. _Die Eigenschaften hatte ich noch nicht so gruppiert. Hab ich jetzt nachgeholt.

Was den anderen Punkt angeht wäre es super, wenn du und die Community im Allgemeinen sowas testen könntet. Ich bin mir nicht sicher ob Google da wirklich strict ist was den Type des Wert angeht. Ich vermute eher, dass die das auf Serverseite nochmal casten. 

 

@ecomm_totalvalue:

Die Vorgaben von Google sind doch eindeutig und die Referenzimplementierung auf deren Seite ebenfalls.  

The value should be passed as a javascript Number and should not include any currency symbols.

Insofern sind die Anführungszeichen dann wie vermutet falsch.

Sehr clever von Google den Client da in die Verantwortung zu nehmen, aber gut… :wink:

Mit dem letzten Commit casten wir jetzt Values nach dem smarty compile. Das heißt auch es ist noch eine kleine Änderung am Wert der Eigenschaft ecomm_prodid notwendig:

[{foreach $sArticles as $sArticle}"{$sArticle.ordernumber|escape}"{if !$sArticle@last},{/if}{/foreach}]

Ist jetzt auch einfacher zu lesen :wink:

Cool, jetzt gehts auch so, wie anfänglich von mir vermutet. Besten Dank!

Hi nochmal,

hab mir eben noch das neue Preset angeschaut, das stimmt an manchen Stellen noch nicht wirklich.

Kann ich Dir irgendwie mein Preset zukommen lassen? Das ist jetzt schon komplett getestet und funzt definitiv.
Du hast auch noch irgendwo ne Dopplung der google_tag_params drin.

Dann ist mir noch aufgefallen, dass die Arraywerte eigentlich in Hochkommas müssten, also dann so:

[{foreach $sArticles as $sArticle}’{$sArticle.ordernumber|escape}’{if !$sArticle@last},{/if}{/foreach}]

Aber ich denke, genau nach den Doppelten machst Du ne Abfrage rein, gell?

LG und Dankeschön,

Chris

So, das ist meiner Meinung nach so richtig:

 

INSERT INTO `wbm_data_layer_properties` (`id`, `module`, `parentID`, `name`, `value`) VALUES
(1, 'frontend_listing_index', 0, 'ecommerce', ''),
(2, 'frontend_listing_index', 1, 'currencyCode', 'EUR'),
(4, 'frontend_listing_index', 1, 'impressions', '$sArticles as $sArticle'),
(6, 'frontend_listing_index', 4, 'name', '{$sArticle.articleName|escape}'),
(7, 'frontend_listing_index', 4, 'id', '{$sArticle.ordernumber|escape}'),
(8, 'frontend_listing_index', 4, 'price', '{$sArticle.price_numeric}'),
(9, 'frontend_listing_index', 4, 'brand', '{$sArticle.supplierName|escape}'),
(10, 'frontend_listing_index', 4, 'category', '{$sCategoryContent.name|escape}'),
(11, 'frontend_listing_index', 4, 'list', 'Category'),
(12, 'frontend_detail_index', 0, 'ecommerce', ''),
(13, 'frontend_detail_index', 12, 'detail', ''),
(14, 'frontend_detail_index', 13, 'actionField', ''),
(15, 'frontend_detail_index', 14, 'list', '{$sCategoryInfo.name|escape}'),
(16, 'frontend_detail_index', 13, 'name', '{$sArticle.articleName|escape}'),
(17, 'frontend_detail_index', 13, 'id', '{$sArticle.ordernumber|escape}'),
(18, 'frontend_detail_index', 13, 'price', '{$sArticle.price_numeric}'),
(19, 'frontend_detail_index', 13, 'brand', '{$sArticle.supplierName|escape}'),
(20, 'frontend_detail_index', 13, 'category', '{$sCategoryInfo.name|escape}'),
(21, 'frontend_detail_index', 13, 'variant', '{$sArticle.additionaltext|escape}'),
(23, 'frontend_detail_index', 12, 'currencyCode', 'EUR'),
(24, 'frontend_checkout_ajaxaddarticlecart', 0, 'event', 'addToCart'),
(25, 'frontend_checkout_ajaxaddarticlecart', 0, 'ecommerce', ''),
(26, 'frontend_checkout_ajaxaddarticlecart', 25, 'currencyCode', 'EUR'),
(27, 'frontend_checkout_ajaxaddarticlecart', 25, 'add', ''),
(28, 'frontend_checkout_ajaxaddarticlecart', 27, 'products', ''),
(30, 'frontend_checkout_ajaxaddarticlecart', 28, 'id', '{$smarty.request.sAdd|escape}'),
(33, 'frontend_checkout_ajaxaddarticlecart', 28, 'quantity', '{$smarty.request.sQuantity}'),
(34, 'frontend_checkout_ajaxdeletearticlecart', 0, 'event', 'removeFromCart'),
(35, 'frontend_checkout_ajaxdeletearticlecart', 0, 'ecommerce', ''),
(36, 'frontend_checkout_ajaxdeletearticlecart', 35, 'remove', ''),
(37, 'frontend_checkout_ajaxdeletearticlecart', 36, 'products', ''),
(38, 'frontend_checkout_ajaxdeletearticlecart', 37, 'id', '{$smarty.request.sDelete}'),
(39, 'frontend_checkout_cart', 0, 'event', 'checkout'),
(40, 'frontend_checkout_cart', 0, 'ecommerce', ''),
(41, 'frontend_checkout_cart', 40, 'checkout', ''),
(42, 'frontend_checkout_cart', 41, 'actionField', ''),
(43, 'frontend_checkout_cart', 42, 'step', '1'),
(44, 'frontend_checkout_cart', 41, 'products', '$sBasket.content as $sArticle'),
(45, 'frontend_checkout_cart', 44, 'name', '{$sArticle.articlename|escape}'),
(46, 'frontend_checkout_cart', 44, 'id', '{$sArticle.ordernumber|escape}'),
(47, 'frontend_checkout_cart', 44, 'price', '{$sArticle.priceNumeric}'),
(48, 'frontend_checkout_cart', 44, 'brand', '{$sArticle.additional_details.supplierName|escape}'),
(49, 'frontend_checkout_cart', 44, 'quantity', '{$sArticle.quantity}'),
(50, 'frontend_checkout_confirm', 0, 'event', 'checkout'),
(51, 'frontend_checkout_confirm', 0, 'ecommerce', ''),
(52, 'frontend_checkout_confirm', 51, 'checkout', ''),
(53, 'frontend_checkout_confirm', 52, 'actionField', ''),
(54, 'frontend_checkout_confirm', 53, 'step', '2'),
(55, 'frontend_checkout_confirm', 53, 'option', '{$sPayment.description|escape}'),
(56, 'frontend_checkout_confirm', 52, 'products', '$sBasket.content as $sArticle'),
(57, 'frontend_checkout_confirm', 56, 'name', '{$sArticle.articlename|escape}'),
(58, 'frontend_checkout_confirm', 56, 'id', '{$sArticle.ordernumber|escape}'),
(59, 'frontend_checkout_confirm', 56, 'price', '{$sArticle.priceNumeric}'),
(60, 'frontend_checkout_confirm', 56, 'brand', '{$sArticle.additional_details.supplierName|escape}'),
(61, 'frontend_checkout_confirm', 56, 'quantity', '{$sArticle.quantity}'),
(62, 'frontend_checkout_finish', 0, 'purchase', ''),
(63, 'frontend_checkout_finish', 62, 'actionField', ''),
(64, 'frontend_checkout_finish', 63, 'id', '{$sOrderNumber|escape}'),
(65, 'frontend_checkout_finish', 63, 'revenue', '{$sAmount}'),
(66, 'frontend_checkout_finish', 63, 'tax', '{$sAmountTax}'),
(67, 'frontend_checkout_finish', 63, 'shipping', '{$sShippingcosts}'),
(68, 'frontend_checkout_finish', 62, 'products', '$sBasket.content as $sArticle'),
(69, 'frontend_checkout_finish', 68, 'name', '{$sArticle.articlename|escape}'),
(70, 'frontend_checkout_finish', 68, 'id', '{$sArticle.ordernumber|escape}'),
(71, 'frontend_checkout_finish', 68, 'price', '{$sArticle.priceNumeric}'),
(72, 'frontend_checkout_finish', 68, 'brand', '{$sArticle.additional_details.supplierName|escape}'),
(73, 'frontend_checkout_finish', 68, 'quantity', '{$sArticle.quantity}'),
(74, 'frontend_search_defaultsearch', 0, 'ecommerce', ''),
(75, 'frontend_search_defaultsearch', 74, 'currencyCode', 'EUR'),
(76, 'frontend_search_defaultsearch', 74, 'impressions', '$sSearchResults.sArticles as $sArticle'),
(77, 'frontend_search_defaultsearch', 76, 'name', '{$sArticle.articleName|escape}'),
(79, 'frontend_search_defaultsearch', 76, 'id', '{$sArticle.ordernumber|escape}'),
(80, 'frontend_search_defaultsearch', 76, 'price', '{$sArticle.price_numeric}'),
(81, 'frontend_search_defaultsearch', 76, 'brand', '{$sArticle.supplierName|escape}'),
(82, 'frontend_search_defaultsearch', 76, 'list', 'Search Results'),
(83, 'frontend_search_defaultsearch', 0, 'siteSearchTerm', '{$smarty.request.sSearch|escape}'),
(84, 'frontend_search_defaultsearch', 0, 'siteSearchResults', '{$sSearchResults.sArticlesCount}'),
(85, 'frontend_listing_index', 4, 'position', '{($pageIndex|default:1 - 1) * {config name=articlesperpage} + {$smarty.foreach.loop.iteration}}'),
(86, 'frontend_search_defaultsearch', 76, 'position', '{$smarty.foreach.loop.iteration}'),
(87, 'frontend_listing_index', 0, 'google_tag_params', ''),
(88, 'frontend_listing_index', 87, 'ecomm_prodid', '[{foreach $sArticles as $sArticle}"{$sArticle.ordernumber|escape}"{if !$sArticle@last},{/if}{/foreach}]'),
(90, 'frontend_listing_index', 87, 'ecomm_pagetype', 'category'),
(91, 'frontend_detail_index', 0, 'google_tag_params', ''),
(92, 'frontend_detail_index', 91, 'ecomm_prodid', '{$sArticle.ordernumber|escape}'),
(94, 'frontend_detail_index', 91, 'ecomm_pagetype', 'detail'),
(95, 'frontend_checkout_finish', 0, 'google_tag_params', ''),
(96, 'frontend_checkout_finish', 95, 'ecomm_prodid', '[{foreach $sBasket.content as $sArticle}"{$sArticle.ordernumber|escape}"{if !$sArticle@last},{/if}{/foreach}]'),
(97, 'frontend_checkout_finish', 95, 'ecomm_pagetype', 'purchase'),
(99, 'frontend_detail_index', 91, 'ecomm_totalvalue', '{$sArticle.price_numeric}'),
(100, 'frontend_checkout_cart', 0, 'google_tag_params', ''),
(101, 'frontend_checkout_cart', 100, 'ecomm_prodid', '[{foreach $sBasket.content as $sArticle}"{$sArticle.ordernumber|escape}"{if !$sArticle@last},{/if}{/foreach}]'),
(104, 'frontend_checkout_cart', 103, 'ecomm_totalvalue', '{$sArticle.priceNumeric}'),
(105, 'frontend_checkout_cart', 100, 'ecomm_pagetype', 'cart'),
(106, 'frontend_checkout_cart', 100, 'ecomm_totalvalue', '{$sArticle.priceNumeric}'),
(107, 'frontend_checkout_finish', 95, 'ecomm_totalvalue', '{$sAmount}'),
(108, 'frontend_search_defaultsearch', 0, 'google_tag_params', ''),
(109, 'frontend_search_defaultsearch', 108, 'ecomm_prodid', '[{foreach $sSearchResults.sArticles as $sArticle}"{$sArticle.ordernumber|escape}"{if !$sArticle@last},{/if}{/foreach}]'),
(110, 'frontend_search_defaultsearch', 108, 'ecomm_pagetype', 'searchresults'),
(111, 'frontend_detail_index', 91, 'ecomm_category', '{$sCategoryInfo.name|escape}'),
(112, 'frontend_listing_index', 87, 'ecomm_category', '{$sCategoryInfo.name|escape}');

 

1 Like

Hi,

ich glaub das Problem ist, dass wir Änderungen momentan noch so vornehmen, als wäre das Plugin noch nirgends installiert, da wir ja auch noch nicht offiziell released haben. :slight_smile: Daher werden sich deine Anpassungen auch nicht mit den Default-Einträgen aus der install.sql vertragen.

Dann hast du zb für frontend_detail_index $sCategoryInfo drin. Ich glaube diese Variable ist dort gar nicht gesetzt. Ich schau mir das nächste Woche aber nochmal genauer an. Und letztendlich ist ja genau das Sinn und Zweck des Plugins, dass jeder den dataLayer genau so gestalten kann, wie er/sie es für ideal empfindet. :) Bezüglich der Hochkommas hab ich mich an der Ausgabe von json_encode orientiert. Die Funktion escaped mit double quotes und ich finde es persönlich als konsequent genau so zu verfahren. Aber auch hier bist du völlig frei und solltest auch single quotes verwenden können, wenn dir das lieber ist. Ich hab zumindest keine Logik auf double quotes gebaut.

Dir in jedem Fall vielen Dank nochmal für das Feedback und die Anregungen. Genau so hatten wir uns das von der Community erhofft. :slight_smile:

Guten Morgen, nur mal kurz vom Handy aus. Die Variablen sind allesamt im Frontend gesetzt. Ich hatte es mal mit Single Quotes probiert und dann wird das komplette Value wieder ind Double Quotes gesetzt. 

Bitte für die Anregungen. Gerne. Jeder hat halt andere Anforderungen und die können mit Eurem Modul am besten umgesetzt werden.

LG,

Chris 

Hi nochmal,

ich komme nicht drauf, wie man die Events für AddToCart usw. im neuen Tag Manager konfiguriert und wie ich die Events anspreche.

Den Trigger verstehe ich auch nicht ganz. Könnt Ihr das eventuell nochmal beschreiben?

LG und Danke,

Chris

Hi, hat sich jetzt erledigt, man muss im GTM sämtliche integrierten Variablen aktivieren, die unter “Klicks” aufgeführt sind.

Ansonten muss man gerade bei UA Analytics den Tracking-Typ “Transaktion” auswählen und darauf achten, dass die Tags
entsprechend den Google Vorgaben geschachtelt sind. Also immer ecommerce -> purchase -> actionField etc…

LG,

Chris