Formulare in GA4 messen: Contact Form 7, Elementor, HubSpot
Viele Formulare senden ohne Seitenwechsel. Der Formular-Trigger zählt dann Klicks, nicht Erfolge. So nutzt du das richtige Signal und misst echte Leads.

Foto: Phil Hearing auf Unsplash
Das Problem mit Formularen ohne Seitenwechsel
Viele Formulare senden per AJAX ohne Seitenwechsel: Der Besucher klickt auf „Absenden“, und statt einer neuen Seite erscheint unter dem Formular ein grüner Kasten mit „Danke für Ihre Nachricht“. Der Formular-Trigger des Tag Managers feuert dann beim Klick auf „Absenden“, auch wenn Pflichtfelder fehlen oder der Versand scheitert. Du zählst Klicks, nicht erfolgreiche Anfragen, und die Zahlen sind zu hoch. Bei Werbekampagnen ist das besonders heikel, weil Google Ads auf diese falschen Abschlüsse optimiert.
Richtig ist, auf das Erfolgssignal des Formulars zu hören. Eine Alternative ist eine echte Dankeseite mit eigener Adresse, deren Aufruf als Erfolg zählt. Wenn dein Formular nach dem Absenden auf eine eigene Seite weiterleitet, ist das die einfachste und robusteste Lösung: Du legst einen Seitenaufruf-Trigger auf die Adresse der Dankeseite und bist fertig. Alles Folgende betrifft Formulare, die auf derselben Seite bleiben.
Erfolgssignale je System
Jedes Formularsystem meldet den Erfolg auf eigene Weise. Entscheidend ist, dass das Signal erst entsteht, wenn der Versand wirklich geklappt hat.
- Contact Form 7: das Browser-Ereignis wpcf7mailsent.
- Elementor Pro: das jQuery-Ereignis submit_success.
- HubSpot-Formulare im iframe: melden den Erfolg per Nachricht an die Seite (onFormSubmitted).
Bei Contact Form 7 ist das einfach, weil es ein normales Browser-Ereignis ist, auf das ein kleines Skript hört. Bei Elementor ist es ein jQuery-Ereignis, das nur über jQuery abgefangen werden kann, nicht mit einem normalen Ereignis-Listener. Bei HubSpot steckt das Formular in einem iframe, also einem eigenen Dokument in deiner Seite, das nicht direkt zugänglich ist. Es schickt stattdessen eine Nachricht an die umgebende Seite, und dein Skript muss auf diese Nachricht hören. Standard-Auslöser des Tag Managers reichen in diesen Fällen nicht aus.
Passend dazu: Meta Pixel über den Google Tag Manager einrichten
Vom Signal zum dataLayer-Ereignis
Das kleine Skript hat eine einzige Aufgabe: Es fängt das Erfolgssignal ab und schreibt ein Ereignis in den dataLayer, etwa mit dem Namen „formular_erfolg“ und, wenn du mehrere Formulare hast, einer Kennung des Formulars. Das legst du in einem „Benutzerdefiniertes HTML“-Tag im Tag Manager an, der auf allen Seiten mit Formular läuft. Das Skript sollte nur zuhören und nichts anderes tun.
Aus dem dataLayer-Ereignis macht der Tag Manager den Rest. Du legst einen Trigger vom Typ „Benutzerdefiniertes Ereignis“ an, der auf „formular_erfolg“ hört. An diesen Trigger hängst du ein GA4-Ereignis-Tag. Als Ereignisname bietet sich generate_lead an, ein von Google vorgesehener Name für Kontaktanfragen. Wenn du mehrere Formulare hast, gibst du die Kennung als Ereignisparameter mit, damit du in GA4 die Formulare trennen kannst. In GA4 markierst du das Ereignis als Schlüsselereignis, damit du Kanäle und Kampagnen nach echten Anfragen beurteilen kannst.
Was nicht an GA4 gehört
Sende keine E-Mail-Adressen, Namen oder Freitexte aus dem Formular an GA4. Das Ereignis generate_lead braucht diese Angaben nicht, und GA4 darf nach den Nutzungsbedingungen keine personenbezogenen Daten dieser Art erhalten. Ein Parameter mit der Kennung des Formulars oder der Seite genügt für die Auswertung. Prüfe, dass im dataLayer-Ereignis nur das steht, was du auch wirklich senden willst, denn alles, was dort steht, kann ein Tag später ungeprüft weitergegeben werden.
Praxisbeispiel: Handwerksbetrieb mit Contact Form 7
Ein Malerbetrieb hat auf der Seite „Kontakt“ ein Contact-Form-7-Formular für Angebotsanfragen. Der Betreiber hat zuerst den Formular-Trigger des Tag Managers genutzt und stellt fest, dass GA4 mehr Anfragen zählt, als im Postfach ankommen. Der Grund: Jeder Klick auf „Absenden“ zählt, auch wenn Pflichtfelder fehlen. Er stellt um: Ein kleines Skript hört auf wpcf7mailsent und schreibt „formular_erfolg“ in den dataLayer. Der Trigger darauf löst das Ereignis generate_lead aus. Nach der Umstellung stimmt die Zahl mit den Mails im Postfach überein, und Google Ads kann auf echte Anfragen optimieren.
Einwilligung und Test
Das Ereignis darf nur mit Einwilligung gesendet werden. Teste daher mit und ohne Einwilligung, jeweils mit einem gültigen und einem ungültigen Formular, also vier Durchläufe. Im Vorschaumodus des Tag Managers und in den Netzwerk-Anfragen siehst du, ob das Ereignis nur bei Erfolg und nur mit Zustimmung ausgelöst wird. Ein typischer Fehler ist der Auslöser auf den Klick statt auf den Erfolg: Dann feuert das Ereignis auch bei leerem Formular.
Weitere Fehler: Das Ereignis feuert doppelt, weil sowohl ein Formular-Trigger als auch der neue Trigger an einem Tag hängen. Oder das Skript läuft nicht auf der Seite, auf der das Formular im Pop-up lädt. Und beim Einsatz von HubSpot-Formularen funktioniert der Weg nur, wenn die Nachricht aus dem iframe auch bei deiner Einbettung ankommt. Teste das auf jeder Seite, auf der das Formular vorkommt.
Kontrolle in GA4
Wenn der Vorschaumodus sauber aussieht, prüfst du im nächsten Schritt GA4 selbst. In der DebugView siehst du die Ereignisse deines Testgeräts in Echtzeit, wenn du den Vorschaumodus des Tag Managers parallel aktiv hast. Dort muss generate_lead nach dem Absenden genau einmal erscheinen und, wenn du einen Parameter für die Formularkennung mitgibst, mit dem richtigen Wert. Erst dann solltest du das Ereignis als Schlüsselereignis markieren.
Vergleiche außerdem nach einigen Tagen die Zahl der Ereignisse in GA4 mit den tatsächlichen Anfragen in deinem Postfach oder deinem System. Eine kleine Abweichung ist normal, denn wer die Einwilligung ablehnt, wird nicht gemessen. Weichen die Zahlen stark ab, ist das ein Hinweis auf Fehler im Trigger, nicht auf schlechte Werbung.
Wann sich Hilfe lohnt
Gerade die iframe- und jQuery-Fälle brauchen etwas JavaScript und genaues Testen. Trackum richtet Formular-Tracking mit GA4 und Consent Mode v2 ein.
Häufige Fragen
Warum zählt der Formular-Trigger im Tag Manager falsch?
Bei Formularen ohne Seitenwechsel feuert er schon beim Klick auf „Absenden“, auch wenn Pflichtfelder fehlen oder der Versand scheitert. Du misst dann Klicks statt Leads.
Welches Signal nutze ich bei Contact Form 7?
Das Browser-Ereignis wpcf7mailsent. Es tritt nach erfolgreichem Versand auf, nicht bei Validierungsfehlern.
Darf ich E-Mail-Adressen oder Namen an GA4 senden?
Nein. Sende keine E-Mail-Adressen oder Namen an GA4. Das Ereignis generate_lead braucht diese Angaben nicht.
Wie teste ich die Messung?
Teste beide Fälle: ein gültig ausgefülltes und ein ungültiges Formular. Im Vorschaumodus muss das Ereignis nur beim erfolgreichen Absenden erscheinen. Teste außerdem mit und ohne Einwilligung.
Weiterlesen
Meta Pixel über den Google Tag Manager einrichten
Meta Pixel im Tag Manager: Vorlage oder eigener HTML-Tag, Basis-Tag auf allen Seiten, Ereignis-Tags, Marketing-Einwilligung und Test im Events Manager.
AnleitungBorlabs Cookie mit Consent Mode v2 und Tag Manager verbinden
Borlabs Cookie erfasst die Einwilligung, der Tag Manager liefert die Tags aus. Wie du beides ohne Doppelungen verbindest und im Vorschaumodus prüfst.
AnleitungConsent Mode v2 mit Complianz (WordPress)
Complianz unterstützt den Consent Mode v2 und den Tag Manager. Entscheidend sind klare Zuständigkeiten, Standard „abgelehnt“ und ein Test nach jeder Änderung.