Im September 2024 führte Google die Verwendung von Service Workers in Google Tag Manager (GTM) ein, um die Leistung und Zuverlässigkeit der Messungen zu verbessern:
| „Google Tag Manager kann einen Service Worker verwenden, um die Leistung und Zuverlässigkeit der Messungen zu verbessern. Um sicherzustellen, dass der Service Worker korrekt geladen wird, lesen Sie die Richtlinien zur Content Security Policy.“ |
Im März 2025 kündigte Google dann eine Erweiterung dieser Funktion an:
| „Google Tag verwendet jetzt Service Worker, sofern verfügbar, um Daten an den serverseitigen Tag Manager zu senden und so die Leistung und Zuverlässigkeit der Messungen zu verbessern.“ |
In diesem Artikel wird erläutert, wie GTM und gtag mit Service Workers umgehen, was ein Service Worker ist, wie die Kommunikation zwischen ihnen erfolgt und warum Ihre Analyseanfragen möglicherweise nicht in der Registerkarte „Netzwerk“ von DevTools angezeigt werden.
Service Worker sind Hintergrundskripte, die separat vom Hauptthread einer Website ausgeführt werden. Sie ermöglichen Vorgänge wie Caching, Offline-Unterstützung und Hintergrund-Netzwerkanfragen, ohne die Benutzeroberfläche zu blockieren.
Im Zusammenhang mit GTM und gtag werden Service Worker verwendet, um die Aufgabe des Sendens von Messdaten von der Webseite (z. B. GA4- oder Ads-Hits) auszulagern, wodurch das Tracking schneller und zuverlässiger wird, selbst bei Seitenentladeereignissen oder in langsamen Netzwerken. Beachten Sie, dass in diesem Zusammenhang die später zu sendenden Ereignisse nicht gespeichert werden.
Je nach Ihrer Konfiguration können zwei Arten von Service Workers registriert werden:
1. Service Worker von Ihrer serverseitigen GTM (sGTM)-First-Party-Domain
Wird für GA4-Anfragen verwendet, die an serverseitige Container gesendet werden.
2. Service Worker aus der Domain googletagmanager.com
Wird hauptsächlich von Anzeigenprodukten (Google Ads und Floodlight) für Formular- und Benutzerdatenanfragen verwendet.
Beide Versionen folgen einem ähnlichen Kommunikationsmodell, an dem mehrere Browser-Entitäten beteiligt sind.
Wenn gtag oder GTM ausgeführt wird, erstellt es einen unsichtbaren iframe (src=“about:blank“), der wiederum einen weiteren iframe, sw_iframe.html, lädt. Dieser zweite iframe ist für die Installation des Service Worker-Skripts (sw.js) verantwortlich.
Diese Elemente kommunizieren über die postMessage()-API des Browsers (zum Senden der Informationen) und den message listener zum Empfangen der Informationen und bilden dabei folgenden Ablauf:
gtag/GTM ↔ iframe (about:blank) ↔ iframe (sw_iframe.html) ↔ sw.js (Service Worker)Diese Brücke ermöglicht es gtag oder GTM, die auf der Hauptseite ausgeführt werden, Ereignisdaten an den Service Worker weiterzuleiten, der dann entscheidet, wie und wann diese gesendet werden.
Wenn Sie die Website-Seite mit der Registerkarte „Elemente” der DevTools untersuchen, können Sie die iframes sehen.

Praktische Demonstration der zwischen dem iframe und dem Service Worker ausgetauschten Nachrichten:
googletagmanager.comDieser Service Worker wird für GA4-Anfragen verwendet, die an einen serverseitigen GTM-Container gesendet werden.
Das GA4-gtag-Skript (G-{Measurement ID} usw.) ist für die Weiterleitung der Ereignisse an den Service Worker zuständig.
Es überprüft anhand verschiedener Bedingungen, ob ein Ereignis über den Service Worker gesendet werden soll:
analytics.google.com/g/collect oder www.google-analytics.com/g/collect gesendet (z. B. wenn der Parameter server_container_url konfiguriert ist). beforeunload-Ereignis). Während des Entladens umgehen Anfragen wie user_engagement-Ereignisse den Service Worker. - Genauer gesagt wird überprüft, ob der Browser-User-Agent KEINE der folgenden Zeichenfolgen enthält: „; wv“ ODER „FBAN“ ODER „FBAV“ ODER ((„GSA“ ODER „GoogleApp“) UND („iPhone“ ODER „iPad“))
Der Service Worker ist aktiv und bereit (Status 2).
- Diese Überprüfung wird durch die Methode .delegate() durchgeführt, die hier zu sehen ist.
Wenn alle Bedingungen erfüllt sind, wird das Ereignis über den Service Worker gesendet. Andernfalls wird es direkt über fetch, XHR, sendBeacon oder Image (in dieser Reihenfolge) von der Hauptseite gesendet.
Und wenn die ersten beiden Bedingungen erfüllt sind, wird der Parameter richsstsse zur Ereignis-URL hinzugefügt (weitere Informationen dazu). Dieser Parameter ermöglicht es dem Browser, die Antwort zu verarbeiten, z. B. das Senden von Anfragen, die vom sGTM für die Synchronisierung von Drittanbieter-Cookies angeordnet wurden.
Dieser Service Worker scheint Ereignisse für Google Ads- und Floodlight-Produkte zu verarbeiten.
Einige Anfragen werden darüber abgewickelt, z. B.:
https://www.google.com/ccm/form-data/{Conversion ID}/... und https://www.google.com/pagead/form-data/{Conversion ID}/...)https://www.google.com/ccm/form-data/{Conversion ID}/... nur).Das auf der Seite geladene Ads-Produkt-gtag-Skript (AW-{Conversion ID}, DC-{Floodlight Config ID} usw.) ist für die Weiterleitung der Ereignisse an den Service Worker verantwortlich.
Die Bedingungen für die Verwendung dieses Service Workers sind ähnlich:
send_user_data_hit ist einer der folgenden: - user_data_web: wird vom automatisch erfassten Benutzerdatenereignis verwendet
- user_data_lead: wird vom Google Ads-Ereignis „Vom Nutzer bereitgestellt“ verwendet
beforeunload-Ereignis). 2). - Diese Überprüfung erfolgt durch die Methode .delegate(), die hier zu sehen ist.
Wenn eine dieser Bedingungen nicht erfüllt ist, wird der Treffer wie gewohnt von der Hauptseite gesendet.
Sowohl gtag als auch GTM enthalten eine Methode namens .delegate, die die abschließende Überprüfung durchführt, bevor entschieden wird, ob das Ereignis über einen Service Worker oder die Hauptseite gesendet wird.
Die Logik ist einfach:
k.delegate = function (a, b, c) {
this.getState() !== 2
? (this.H.C( // Path 1: Not Ready - Sends event from main page.
this.C,
{
state: this.getState(),
hg: this.initTime,
ng: Math.round(Ab()) - this.initTime
},
void 0,
a.commandType
),
c({ // Call the failure callback
failureType: this.C
}))
: this.N.wo(a, b, c); // Path 2: Ready - Sends events from Service Worker.
};
Wenn der Status (state) 2 ist, wird die Anfrage über den Service Worker gesendet. Andernfalls über die Hauptseite.
Der Service Worker und die Hauptseite tauschen alle X Sekunden (derzeit 5 Sekunden) Heartbeat-Nachrichten aus, um diesen Status auf dem neuesten Stand zu halten. Die Statusvariable gibt die Bereitschaft des Service Workers an:
| Status | Bedeutung |
|---|---|
| 0 | Anfangszustand bei der Initialisierung der Seite |
| 1 | Versuch, eine Kommunikation zwischen der Hauptseite und dem Service Worker herzustellen |
| 2 | Service Worker ist bereit, und der Handshake mit der Hauptseite war erfolgreich |
| 3 | Wiederholung nach Fehler |
| 4 | Schwerwiegender Fehler / Fehlgeschlagen / Kommunikationskanal ist geschlossen |
Sie können die Verwendung von Service Workers auf verschiedene Weise überprüfen.
Filtern Sie nach Anfragen an sw.js oder sw_iframe.html.
Hinweis:
Service Worker, der von der First-Party-Domain sGTM geladen wurde.


Service Worker, geladen von der Domain googletagmanager.com.

Öffnen Sie DevTools → gehen Sie zur Registerkarte Anwendung → Service Worker → Klicken Sie auf Alle Registrierungen anzeigen und suchen Sie nach Ihrer Domain.

Wenn Sie Ads-Produkte von Google verwenden: Sie sehen, dass der Service Worker von googletagmanager.com bereitgestellt wird.

Anfragen, die von einem Service Worker bearbeitet werden, werden durch ein Zahnradsymbol neben der URL gekennzeichnet. Diese stehen für Zugriffe, die vom Hintergrundprozess und nicht von der Hauptseite gesendet werden.

Wenn Ihre GA4- oder Ads-Ereignisse nicht auf der Registerkarte „Netzwerk“ der Hauptseite angezeigt werden, werden sie wahrscheinlich stattdessen vom Service Worker gesendet. Sie werden jedoch weiterhin im GTM-Vorschaumodus-Fenster angezeigt, wo Sie sie überprüfen können.
Möglicherweise werden bis zu zwei Service Worker angezeigt: einer für Ihre sGTM-Domain und einer für die Domain von Google. Jeder von ihnen verarbeitet verschiedene Arten von Ereignissen, wie oben beschrieben.
Die schrittweise Integration von Service Workers in GTM und gtag durch Google markiert einen Wandel hin zu einer robusteren Form der Bereitstellung und Verarbeitung von Ereignissen. Durch die Auslagerung der Ereignisbereitstellung in Hintergrundskripte verbessert Google die Leistung, Zuverlässigkeit und Genauigkeit der Datenerfassung, insbesondere in Randfällen wie schnellen Absprüngen oder instabilen Verbindungen. Dies bedeutet jedoch auch, dass einige Anfragen nicht mehr auf der herkömmlichen Registerkarte „Netzwerk“ angezeigt werden.
Für Spezialisten im Bereich der digitalen Analyse bedeutet dies:
Da diese Funktion ständig weiterentwickelt wird, ist es für eine genaue Fehlerbehebung und Datenzuverlässigkeit entscheidend, sich darüber im Klaren zu sein, wie gtag und GTM Service Worker nutzen.
Kommentare