Trackum

GA4 in Single-Page-Apps: Seitenaufrufe richtig zählen

Single-Page-Apps wechseln Inhalte ohne Neuladen, ein normaler Google-Tag zählt nur den ersten Aufruf. Wähle die erweiterte Messung oder eigene page_view-Ereignisse, nie beides.

Technik · 28. Oktober 2026 · 4 Min. Lesezeit

Foto: Florian Olivo auf Unsplash

Das Problem bei Single-Page-Apps

Single-Page-Apps, etwa mit React, Vue oder Angular, wechseln Inhalte per History-API, ohne die Seite neu zu laden. Ein normaler Google-Tag zählt dann nur den ersten Seitenaufruf. Alle weiteren Schritte innerhalb der App fehlen in GA4. Die Folgen siehst du schnell: Besucher scheinen nur eine einzige Seite anzusehen, Kampagnen wirken schwächer, und der Weg durch die App lässt sich nicht nachvollziehen.

Nicht jede Adressänderung ist ein echter Seitenwechsel. Auch Filter oder die Auswahl von Produktvarianten können die Adresse verändern und dann als Seitenaufruf mitgezählt werden. Ein Beispiel: Ein kleiner Shop als App ändert beim Wechsel der Farbe die Adresse. Wird jede Änderung gezählt, entstehen Seitenaufrufe, die niemand als Seite wahrnehmen würde.

Erkennen, ob deine Seite betroffen ist

Ob du das Problem hast, siehst du schnell. Klicke dich in der Vorschau des Tag Managers durch die App. Bleibt die Seite ohne Neuladen und die Vorschau zeigt nach dem ersten Aufruf keine neuen Seitenaufrufe, wird nicht gezählt. Auch in den GA4-Berichten fällt es auf: Die Zahl der Seitenaufrufe pro Besuch liegt auffällig bei 1.

Oft ist das nicht klar, weil Entwickler die App schon mit einer Zählung versehen haben, ohne dass der Betreiber davon weiß. Frage nach, ob das Framework oder ein Paket eigene page_view-Ereignisse sendet. Sonst startest du ein Setup, das sich später mit deinem eigenen überschneidet.

Passend dazu: Cross-Domain-Tracking in GA4 richtig einrichten

Erweiterte Messung oder eigene Seitenaufrufe

Es gibt zwei Wege. Die erweiterte Messung von GA4 kann Seitenaufrufe zählen, wenn sich der Browserverlauf ändert. Das ist die schnelle Lösung: Du aktivierst die Option im Web-Datenstream, und GA4 reagiert auf die Änderungen des Browserverlaufs. Alternativ meldest du bei jedem Routenwechsel selbst einen Seitenaufruf per dataLayer, mit page_location und page_title. Das ist mehr Arbeit, dafür bestimmst du genau, was als Seite gilt.

Nutze nie beides. Sendet deine App eigene page_view-Ereignisse und die erweiterte Messung zählt zusätzlich, wird jeder Wechsel doppelt gezählt. Prüfe auch, ob dein Framework oder Boilerplate von sich aus page_view sendet.

Wann welcher Weg passt: Bei einer einfachen App, in der jede Adressänderung wirklich eine neue Seite ist, genügt die erweiterte Messung. Gibt es Filter, Varianten oder Schritte, die die Adresse ändern, ohne eine Seite zu sein, sind eigene Ereignisse besser, weil du dort festlegst, was zählt.

  • Entscheide dich für einen der beiden Wege.
  • Bei der erweiterten Messung eigene page_view-Ereignisse entfernen.
  • Bei eigenen Ereignissen page_location und page_title mitgeben.
  • Festlegen, ob Filter- und Variantenwechsel als Seite zählen.

Eigene Seitenaufrufe per dataLayer

Wer eigene Ereignisse sendet, braucht eine Absprache mit der Entwicklung. Bei jedem Routenwechsel legt die App ein Ereignis in den dataLayer, etwa mit dem Namen virtual_pageview, und gibt page_location und page_title mit. Im Tag Manager lauscht ein Trigger auf dieses Ereignis und löst den GA4-Ereignis-Tag mit dem Namen page_view aus. Die Werte für Adresse und Titel liest der Tag aus Variablen, die auf den dataLayer zeigen.

Das Muster ist einfach, die Fehlerquellen liegen in den Details. Der Ereignisname im dataLayer muss exakt zum Trigger passen, und die Variablen müssen genau so heißen wie die Felder, die die App schreibt. Stimmen Schreibweisen nicht, fehlen Adresse oder Titel im Bericht, ohne dass ein Fehler auftaucht. Schreibe die Absprache in ein kurzes Dokument, das Entwicklung und Tracking gemeinsam nutzen.

Der Seitentitel

Der Seitentitel wechselt in Apps manchmal erst kurz nach der Adresse. Löst du das Ereignis zu früh aus, erscheint der alte Titel. Schreibe die Daten erst in den dataLayer, wenn Adresse und Titel stimmen. In den Berichten erkennst du das Problem daran, dass viele Seiten denselben Titel tragen, obwohl die Adressen verschieden sind.

Typische Fehler

Das häufigste Muster sind doppelte Seitenaufrufe: Die erweiterte Messung ist an, und zusätzlich sendet der Tag bei jedem Routenwechsel ein eigenes page_view. Das zweite Muster sind fehlende Aufrufe nach dem Neuladen, weil der Tag nur auf das Ereignis der App hört und nicht auf den normalen Seitenaufruf. Und schließlich Aufrufe mit leerem oder falschem Titel. Ein Beispiel aus der Praxis: Eine Praxis mit Online-Terminbuchung als App meldet nur den ersten Schritt der Buchung. Dass Patienten bis zur Bestätigung kommen, sieht man in GA4 nicht, bis die Schritte als eigene Seitenaufrufe oder Ereignisse gemeldet werden.

Testen

Prüfe im Vorschaumodus des Tag Managers und in der DebugView von GA4, dass bei jedem gewünschten Routenwechsel genau ein page_view ankommt, weder fehlend noch doppelt. Teste auch Filter- und Variantenwechsel. Gehe dazu die App durch, wie ein Besucher es täte: Startseite, Unterseite, zurück per Browser-Taste, Filter setzen, Variante wählen, Seite neu laden. Jeder Schritt hat ein erwartetes Ergebnis, das du dir vorher aufschreibst.

Teste außerdem mit und ohne Einwilligung. Die Einwilligung muss auch bei Routenwechseln gelten, und der erste Aufruf darf nicht fehlen, wenn der Besucher erst später im Banner zustimmt.

Trackum richtet Tracking ein, auch mit Tag Manager und GA4, mit festen Preisen vorab. Getestet wird mit und ohne Einwilligung, live geht es innerhalb eines Werktags.

Häufige Fragen

Warum zählt GA4 in einer Single-Page-App nur den ersten Aufruf?

Die App wechselt Inhalte per History-API ohne Neuladen. Ein normaler Google-Tag zählt deshalb nur den ersten Seitenaufruf, solange nichts Weiteres sendet.

Kann ich die erweiterte Messung und eigene page_view-Ereignisse kombinieren?

Nein. Dann zählt jeder Seitenwechsel doppelt. Nutze entweder die erweiterte Messung oder eigene Seitenaufrufe per dataLayer.

Wie gehe ich mit Filterwechseln in der Adresse um?

Auch Adressänderungen ohne echten Seitenwechsel, etwa Filter oder Variantenwahl, können als Seitenaufruf mitgezählt werden. Lege fest, was als Seite gilt, und prüfe das im Test.

Wann ist der Seitentitel verfügbar?

Der Titel wechselt in Apps manchmal erst kurz nach der Adresse. Sende das Ereignis erst, wenn der neue Titel bereitsteht.