# Utiliser FlowConsent avec Google Tag Manager

Avec Google Tag Manager, l'extrait de code FlowConsent se place dans le <head> au-dessus du conteneur GTM, jamais en balise GTM. Puis on règle chaque balise.

> Canonical: https://www.flowconsent.com/fr/doc/install-google-tag-manager
> Last updated: 2026-10-01
Avec Google Tag Manager, l'extrait de code FlowConsent se colle dans le `<head>` de votre site, **au-dessus du snippet GTM**, et jamais sous forme de balise dans GTM : chargée depuis le conteneur, la bannière arriverait trop tard pour le blocage préalable. L'installation tient en deux étapes : placer l'extrait de code avant GTM, puis vérifier que chaque balise de votre conteneur respecte le consentement (automatique pour les balises Google, à configurer pour les autres).

## Avant de commencer

- Un compte sur [app.flowconsent.com](https://app.flowconsent.com) (offre Free gratuite, sans carte bancaire, jusqu'à 25 000 sessions par mois).
- Une bannière créée puis déployée. Sur l'offre Free, le déploiement passe par votre compte Cloudflare ([guide Cloudflare](/fr/doc/cloudflare-deployment)) ; sur Pro et Enterprise, il se fait en un clic.
- Un accès en modification au code du `<head>` de votre site et à votre conteneur GTM.

## Étape 1 : coller l'extrait de code au-dessus du snippet GTM

Copiez votre extrait de code depuis **Builder → Déploiement → Intégration** (onglet **HTML / No-code**). Collez-le **juste après l'ouverture de `<head>`**, puis laissez le snippet `<!-- Google Tag Manager -->` en dessous :

```html title="<head> de votre site"
<head>
  <script>
  // FlowConsent Loader - PLACER AVANT tout autre script dans le <head>
  window.dataLayer=window.dataLayer||[];
  function gtag(){dataLayer.push(arguments);}
  gtag('consent','default',{
    'ad_storage':'denied',
    'analytics_storage':'denied',
    'ad_user_data':'denied',
    'ad_personalization':'denied',
    'wait_for_update':500
  });
  gtag('set','url_passthrough',true);
  gtag('set','ads_data_redaction',true);
  </script>
  <!-- FlowConsent CMP -->
  <script src="https://VOTRE-CODE-LICENCE.consent.flowconsent.com/cookie-manager.js?code=VOTRE_CODE_LICENCE"></script>

  <!-- Google Tag Manager -->
  <script>(function(w,d,s,l,i){ /* code fourni par GTM */ })(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
  <!-- End Google Tag Manager -->

  <!-- le reste de votre <head> -->
</head>
```

Le stub Consent Mode écrit les valeurs `denied` par défaut dans le `dataLayer` avant que GTM ne démarre : le conteneur les lit à son chargement et chaque balise Google part en mode refusé tant que le visiteur n'a pas choisi. Quand le visiteur décide, la bannière envoie `gtag('consent', 'update', …)` et GTM applique le nouvel état. Aucun modèle de la galerie GTM n'est nécessaire.

Le second snippet GTM (`<noscript>` avec une `<iframe>`, juste après `<body>`) reste à sa place habituelle.

## Pourquoi ne pas charger FlowConsent depuis GTM

> [!WARNING]
> Ne créez pas de balise **HTML personnalisé** pour charger FlowConsent. Le conteneur GTM se charge de façon asynchrone : tout ce qu'il injecte arrive après la lecture du HTML. Le déclencheur **Initialisation du consentement - Toutes les pages** de GTM garantit l'ordre à l'intérieur du conteneur, mais pas au-delà : les scripts écrits directement dans la page, ou ajoutés par un plugin, s'exécutent sans attendre. Le blocage préalable exige que FlowConsent s'exécute avant tout traceur, donc dans le HTML, au-dessus de GTM.

Le même raisonnement vaut si GTM est injecté par un plugin ou une intégration native (champ « ID de conteneur GTM » d'un CMS) : si ce code arrive au-dessus de votre extrait de code, retirez l'ID de ces réglages et collez le snippet GTM vous-même, sous FlowConsent. Si vous avez renommé la variable `dataLayer` dans le snippet GTM, remettez `dataLayer` : c'est le nom utilisé par le stub.

## Étape 2 : régler le consentement des balises dans GTM

Dans une balise, ouvrez **Paramètres avancés → Paramètres d'autorisation**. Deux blocs y figurent.

**Vérifications intégrées du consentement.** Les balises Google (balise Google, GA4, Google Ads, Floodlight) lisent elles-mêmes les signaux Consent Mode v2 envoyés par FlowConsent. Rien à configurer : en cas de refus, elles passent en mode sans cookie (pings `gcs=G100`, voir le [guide Google Consent Mode](/fr/doc/google-consent-mode)).

**Vérifications supplémentaires du consentement.** Les balises non Google (Meta Pixel, LinkedIn, Hotjar, HTML personnalisé…) n'ont aucune vérification intégrée. Choisissez **Le déclenchement de la balise nécessite un consentement supplémentaire**, cliquez sur **+ Ajouter un consentement obligatoire** et indiquez le signal correspondant, par exemple `ad_storage` pour un pixel publicitaire ou `analytics_storage` pour un outil de mesure d'audience. La balise ne se déclenche alors que si ces signaux sont accordés au moment où son déclencheur se produit.

> [!TIP]
> La page **Vue d'ensemble du consentement** de GTM liste les balises en deux groupes, consentement configuré ou non : pratique pour n'en oublier aucune. Une balise laissée sur **Non défini** se déclenche sans vérification supplémentaire.

## Vérifier l'installation

1. Dans GTM, cliquez sur **Prévisualiser** : Tag Assistant s'ouvre sur votre site. Sélectionnez une balise Google, puis l'onglet **Consentement** : la colonne **Par défaut sur la page** doit afficher `Denied` pour les quatre signaux. Après un clic sur **Accepter**, la colonne **Mise à jour sur la page** passe à `Granted`.
2. En navigation privée, la bannière s'affiche et l'onglet **Réseau** ne montre aucune requête tierce avant **Accepter** (hors pings Google `gcs=G100`, conformes au refus).
3. Lancez l'[assistant d'installation](/fr/doc/setup-wizard) (Builder → Intégration) : il contrôle que le chargeur est présent avec le bon code de licence, que le stub est présent et qu'il précède chaque tag Google, GTM compris.
4. Terminez par un scan de refus depuis l'onglet **Conformité** ([vérification de conformité](/fr/doc/compliance-verification)).

## Le faire depuis votre agent IA (MCP)

FlowConsent dispose d'un serveur MCP officiel, `https://mcp.flowconsent.com`, utilisable depuis Claude, ChatGPT ou tout client MCP. La connexion se fait en OAuth 2.0 avec votre compte FlowConsent, sans clé d'API. Votre agent récupère l'extrait de code et les consignes de placement (`get_banner_snippet`, `get_setup_instructions`), vérifie l'installation par un vrai scan (`verify_consent_compliance`) et peut poser une surveillance récurrente (`monitor_compliance`). Il ne modifie ni votre site ni votre conteneur GTM : il fournit l'extrait, les instructions et la vérification.

Exemple de demande :

> Donne-moi l'extrait de code de ma bannière pour mon site qui utilise Google Tag Manager, rappelle-moi où le placer par rapport au snippet GTM, puis vérifie qu'il est bien installé sur https://monsite.fr

En savoir plus : [serveur MCP](/fr/doc/mcp-server) et [FlowConsent pour les agents IA](/fr/mcp).

## Questions fréquentes

### Puis-je installer FlowConsent uniquement via une balise GTM ?

Non. Une bannière chargée par GTM arrive après le HTML de la page : les scripts qui ne passent pas par GTM ne seraient pas bloqués à temps. L'extrait de code doit être dans le `<head>`, au-dessus du snippet GTM.

### Dois-je configurer quelque chose pour GA4 ou Google Ads dans GTM ?

Non. Leurs vérifications intégrées du consentement lisent les signaux Consent Mode v2 envoyés par FlowConsent. Seules les balises non Google demandent un consentement supplémentaire.

### Mon pixel Meta dans GTM se déclenche encore après un refus : pourquoi ?

Sa balise est sans doute sur **Non défini**. Passez-la sur **Le déclenchement de la balise nécessite un consentement supplémentaire** avec `ad_storage`, publiez le conteneur, puis relancez un scan de refus.

### Faut-il un modèle FlowConsent de la galerie de modèles GTM ?

Non. Le stub de l'extrait de code définit les valeurs par défaut et la bannière envoie elle-même la mise à jour du consentement : GTM n'a besoin d'aucun modèle supplémentaire.
