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.

Bernhard prange webmeisterei

SEA-Experte: Bernhard Prange

Bernhard Prange ist Google Ads Freelancer und Tracking-Spezialist mit über 10 Jahren Erfahrung im Performance-Marketing. Sein Fokus liegt auf datengetriebenem Arbeiten: von Google Shopping über Conversion-Tracking bis hin zu serverseitigen Lösungen mit Matomo und BigQuery.

Als Ansprechpartner für Agenturen, E-Commerce-Unternehmen und B2B-Dienstleister verbindet er technisches Know-how mit strategischem Blick auf Marketing und Geschäftsmodelle.

Beiträge, die dich auch interessieren könnten…

  • Bessere Daten, bessere Entscheidungen: Datenanreicherung im Server-Side Tracking

    Lesen
  • Google Ads DemandGen: Der vollständige Praxis-Leitfaden

    Lesen
  • Claude MCP: 30+ Integrationen für WordPress, Google Ads & SEO

    Lesen
  • Leseverhalten von Nutzern mit dem Google Tag Manager tracken

    Lesen