En septembre 2024, Google a introduit l’utilisation des Service Workers dans Google Tag Manager (GTM) pour améliorer les performances et la fiabilité des mesures:
| "Google Tag Manager peut utiliser un service worker pour améliorer les performances et la fiabilité des mesures. Pour vous assurer que le service worker se charge correctement, consultez les consignes sur la Content Security Policy. |
Puis, en mars 2025, Google a annoncé une extension de cette fonctionnalité:
| "La balise Google utilise désormais des service workers, lorsqu’ils sont disponibles, pour envoyer des données à Tag Manager côté serveur. Cela améliore les performances et la fiabilité des mesures." |
Cet article explique comment GTM et gtag gèrent les Service Workers, ce qu’est un Service Worker, comment la communication fonctionne entre eux, et pourquoi certaines requêtes analytics peuvent ne pas apparaître dans l’onglet Network de DevTools.
Les Service Workers sont des scripts d’arrière-plan qui fonctionnent séparément du thread principal d’un site web. Ils permettent des opérations comme la mise en cache, le support hors ligne et les requêtes réseau en arrière-plan, sans bloquer l’interface utilisateur.
Dans le contexte de GTM et gtag, les Service Workers servent à déplacer la tâche d’envoi des données de mesure depuis la page web, par exemple les hits GA4 ou Ads. Cela rend le suivi plus rapide et plus stable, même pendant les événements de déchargement de page ou sur les réseaux lents. Dans ce contexte, le Service Worker ne stocke pas les événements pour les envoyer plus tard.
Deux types de Service Workers peuvent être enregistrés, selon votre configuration:
1. Service Worker depuis le domaine first-party de votre server-side GTM (sGTM).
Utilisé pour les requêtes GA4 envoyées aux conteneurs côté serveur.
2. Service Worker depuis le domaine googletagmanager.com.
Utilisé surtout par les produits Ads, comme Google Ads et Floodlight, pour les requêtes form-data et user-data.
Les deux versions suivent un modèle de communication similaire avec plusieurs éléments du navigateur.
Quand gtag ou GTM s’exécute, il crée une iframe invisible (src=”about:blank”). Cette iframe charge ensuite une autre iframe, sw_iframe.html. Cette deuxième iframe installe le script du Service Worker (sw.js).
Ces éléments communiquent avec l’API postMessage() du navigateur pour envoyer les informations, et avec le message listener pour les recevoir. Cela forme le flux suivant:
gtag/GTM ↔ iframe (about:blank) ↔ iframe (sw_iframe.html) ↔ sw.js (Service Worker)Ce pont permet à gtag ou GTM, qui s’exécute sur la page principale, de transmettre les données d’événement au Service Worker. Le Service Worker décide ensuite comment et quand les envoyer.
Si vous inspectez la page du site web dans l’onglet Elements de DevTools, vous pouvez voir les iframes.

Démonstration réelle des messages échangés entre l’iframe et le Service Worker:
Ce Service Worker est utilisé pour les requêtes GA4 envoyées à un conteneur server-side GTM.
Le script GA4 gtag (G-{Measurement ID}, etc.) se charge de transmettre les événements au Service Worker.
Il vérifie si un événement doit être envoyé via le Service Worker selon plusieurs conditions:
Si toutes les conditions sont remplies, l’événement est envoyé via le Service Worker. Sinon, il est envoyé directement depuis la page principale avec fetch, XHR, sendBeacon ou Image, dans cet ordre.
Si les deux premières conditions sont remplies, le paramètre richsstsse est ajouté à l’URL de l’événement (vous pouvez en savoir plus à ce sujet). Ce paramètre permet au navigateur de traiter la réponse, par exemple, d’envoyer les requêtes demandées par sGTM pour la synchronisation des cookies tiers.
Ce Service Worker semble gérer les événements des produits Google Ads et Floodlight.
Certaines requêtes passent par lui, par exemple:
Le script gtag du produit Ads chargé sur la page (AW-{Conversion ID}, DC-{Floodlight Config ID}, etc.) se charge de transmettre les événements au Service Worker.
Les conditions d’utilisation de ce Service Worker sont similaires:
Si l’une de ces conditions n’est pas remplie, le hit est envoyé depuis la page principale comme d’habitude.
gtag et GTM incluent tous les deux une méthode appelée .delegate. Elle effectue le dernier contrôle avant de décider si l’événement doit être envoyé via un Service Worker ou depuis la page principale.
La logique est la suivante:
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.
};
Quand le state est 2, la requête est envoyée via le Service Worker. Sinon, elle est envoyée depuis la page principale.
Le Service Worker et la page principale échangent des messages heartbeat à intervalle régulier, actuellement toutes les 5 secondes, pour garder ce state à jour. La variable state représente l’état de disponibilité du Service Worker:
| Etat | Signification |
|---|---|
| 0 | État initial au chargement de la page |
| 1 | Tentative d’établissement de la communication entre la page principale et le Service Worker |
| 2 | Le Service Worker est prêt et la connexion avec la page principale a réussi |
| 3 | Nouvelle tentative après une erreur |
| 4 | Erreur fatale, échec ou canal de communication fermé |
Vous pouvez vérifier l’utilisation des Service Workers de plusieurs façons.
Filtrez les requêtes avec sw.js ou sw_iframe.html.
Note:
Service Worker chargé depuis le domaine first-party de sGTM.


Service Worker chargé depuis le domaine googletagmanager.com.

Ouvrez DevTools, allez dans l’onglet Application, puis Service Workers. Cliquez sur See all registrations et cherchez votre domaine.

Si vous utilisez des produits Ads de Google, vous verrez le Service Worker servi depuis googletagmanager.com.

Les requêtes gérées par un Service Worker affichent une icône d’engrenage à côté de l’URL. Ces requêtes représentent les hits envoyés depuis le processus d’arrière-plan, et non depuis la page principale.

Si vos événements GA4 ou Ads n’apparaissent pas dans l’onglet Network de la page principale, ils sont probablement envoyés par le Service Worker. Ils apparaîtront tout de même dans la fenêtre Google Tag Manager's preview and debug mode, et vous pourrez les inspecter à cet endroit.
Vous pouvez voir jusqu’à deux Service Workers: un pour votre domaine sGTM et un autre pour le domaine de Google. Chacun gère différents types d’événements, comme expliqué plus haut.
L’intégration progressive des Service Workers dans GTM et gtag montre que Google avance vers une façon plus stable d’envoyer et de gérer les événements. En déplaçant l’envoi des événements vers des scripts d’arrière-plan, Google améliore les performances, la fiabilité et la précision de la collecte de données, surtout dans des cas comme les départs rapides de page ou les connexions instables. Cela signifie aussi que certaines requêtes n’apparaîtront plus dans l’onglet Network classique.
Pour les spécialistes de l’analytics digital, cela signifie:
Comme cette fonctionnalité continue d’évoluer, il est important de comprendre comment gtag et GTM utilisent les Service Workers pour déboguer correctement et garder des données fiables.
Commentaires