Diese Anleitung bezieht sich auf die Shopware‑Extension „Google Tag Manager / GA4 / Server‑Side Tracking„ von Bui Hinsche GmbH. Ziel ist es, beim erfolgreichen Kunden‑Login ein login
‑Event samt relevanter Kundendaten an den Google Tag Manager‑DataLayer zu senden.
Login Route definieren
- Administration → Einstellungen → Google Tag Manager → Routen & DataLayer
- Neue Route anlegen:
frontend.account.home.page
(Seite nach erfolgreichem Login)
DataLayer‑Payload hinterlegen
Diese Variablen sollten im Modul Login konfiguriert werden, sowie für alle anderen Seitentypen / Module die nicht die Finish-Page sind.
- Off-Canvas Cart
- Cart Page
- Confirm Page
- Add To Cart
- Remove From Cart
- Checkout Register Page
- Listing (ajax)
- Product Detail
- Home Page
- Login
{ "event": "GA4_EVENTNAME", "user_data": { "email": {{ context.customer.email }} }, "user_roperties": { "customer_group": {{ context.currentCustomerGroup.name }}, }, "user": { "id": {{ context.customer.id }}, "number": {{ context.customer.customerNumber }}, "group": {{ context.currentCustomerGroup.name }}, "token": {{ context.token }}, "email": {{ context.customer.email }} } }
Natürlich funktionieren diese Variablen nur für eingeloggte Kunden. Bei nicht eingeloggten Kunden liegen diese Daten nicht vor.
Wer aber dennoch nach einer Sessionweiten Identität im dataLayer sucht, der kann diese mit dem Warenkorb Token herstellen. Dieser ist über die Variable {{ context.token }}
erreichbar.
{ "user": { "token": "{{ context.token }} } }
DataLayer Payload für das Purchase Event
Im Finish Event können die Daten aus der Order verwendet werden. Das funktioniert dann auch für Gäste zuverlässig.
{ "event": "purchase", "ecommerce": { "transaction_id": "{{ page.order.orderNumber }}", "value": "{{ page.order.price.netPrice }}", "currency": "{{ context.currency.isoCode }}" }, "user_data": { "email": {{ page.order.orderCustomer.email }} }, "user_roperties": { "customer_group": {{ context.currentCustomerGroup.name }}, }, "user": { "id": "{{ context.customer.id }}", "number": "{{ page.order.orderCustomer.customerNumber }}", "group": "{{ context.currentCustomerGroup.name }}", "token": "{{ context.token }}" "email_sha256": "{{ page.order.orderCustomer.email }}", } }
Im Code hervorzuheben ist die Änderung des ecommerce.value = {{page.order.positionPrice}}
zum Nettowert der Bestellung erfasst.
Wer den Nettowartenwert nutzen möchte, muss etwas mehr Code anwenden:
{# Netto-Zwischensumme nur Artikel #} {% set itemsNetSubtotal = 0 %} {% for item in page.order.lineItems %} {% set itemTax = 0 %} {% for t in item.price.calculatedTaxes %} {% set itemTax = itemTax + t.tax %} {% endfor %} {% set itemNet = item.price.totalPrice - itemTax %} {% set itemsNetSubtotal = itemsNetSubtotal + itemNet %} {% endfor %} {{ itemsNetSubtotal|number_format(2, '.', '') }}
Mit diesen kleinen Änderungen kann man dann mit Hilfe von Serverside-Tracking die Identitätsfeststellung von Nutzern im Onlineshop wesentlich verbessern.