AmauriC / tarteaucitron.js

RGPD friendly cookie manager
https://tarteaucitron.io/
MIT License
913 stars 366 forks source link

Google Consent Mode et tarteaucitron #850

Closed alaratte closed 3 months ago

alaratte commented 2 years ago

Bonjour.

Y a-t-il un moyen avec tarteaucitron d'utiliser le Google Consent Mode ? Ou de permettre à Google de mettre de la publicité (via Adsense) avec des cookies, quand c'est autorisé par l'internaute, ou sans cookie lorsque c'est refusé ? Idem pour Analytics ?

J'ai fait plusieurs essais, mais cela ne fonctionne pas.

Merci beaucoup

AmauriC commented 2 years ago

👋 Le Google Consent Mode n'est pas (encore?) supporté par tarteaucitron.

Je ne l'utilise pas donc je ne sais pas exactement comment ça fonctionne mais si quelqu'un propose une solution, je serai ravi de l'intégrer ; )

stale[bot] commented 2 years ago

This issue has been automatically marked as inactive because it has not had activity for 20 days. It will be closed in 5 days if no further activity occurs. Thank you for your contributions.

Ben773 commented 2 years ago

Bonjour Amauri,

D'abord, bravo pour Tarteaucitron ! Je déterre le sujet car je suis souvent confronté à ce problème sur les sites de mes clients (je fais du SEA) et le consent mode permet de gérer facilement un grand nombre de tags dans Google Tag Manager. Je poste donc un petit message dans l'espoir de voir cette fonctionnalité implémentée :) Cela peut aussi aider des devs qui cherchent une solution.

Un premier script doit se déclencher juste au-dessus de celui de Tag Manager sur toutes les pages du site. Il bloque le consentement par défaut

``

Puis lancer un script d'update lorsque le consentement est donné (granted). Attention, si l'utilisateur a accepté les cookies analytics mais pas ad (publicité), il ne faut pas mettre la ligne ad_storage et inversement. <script> function consentGranted() { gtag('consent', 'update', { 'ad_storage': 'granted', 'analytics_storage': 'granted', }); } </script>

Ensuite, il suffit d'aller dans vos balises dans Google Tag Manager et dans la rubrique Advanced Settings > Consent Settings, cliquer sur No additional consent required si votre balise vient de chez Google. Si ce n'est pas le cas (Balise Facebook par exemple), cliquer sur Require additional consent for tag to fire puis indiquer _adstorage dans le champs. Et c'est tout ! Hyper rapide quand un plugin de cookies dispose du consent mode :)

Une doc plus complète est disponible dans l'aide Google : https://developers.google.com/tag-platform/devguides/consent#tag-manager_1

Si vous voulez faire un test ensemble Amauri, je me porte volontaire ! Bonne journée

AmauriC commented 2 years ago

Bonsoir Ben 🙂

Si je comprend bien le fonctionnement, le consent mode c'est le tarteaucitron pour Google, par Google?

Si oui, il n'est pas possible d'intégrer le js qui initialise la fonction gtag et ensuite charger Google Ads et Analytics via tarteaucitron?

[Edit] Il doit être possible de gérer gtag('consent', 'update' avec les events tarteaucitron.

Ben773 commented 2 years ago

Bonjour Amauri et merci pour ta réponse.

Je viens de discuter de ta réponse avec un ami dev, c'est exactement ce qu'il a fait. Le premier script qui bloque le consentement par défaut est à charger en dehors de TAC dans le head de toutes les pages. Le 2e s'intègre via des événements TAC.

L'intérêt du Consent mode est que si l'utilisateur ne donne pas son consentement, un ping anonyme est quand même envoyé à Google Analytics ou Google Ads en cas de conversion. Ce ping est ensuite utilisé pour modéliser les données manquantes. Le fonctionnement exact me parait un peu opaque, mais j'en retiens qu'on limite la déperdition des conversions, ce qui en théorie améliore le ROI des campagnes.

GTM est pratique pour gérer un grand nombre de balises : nombreux templates, pas besoin de connaissances en code (hormis les bases html, css et regex), collaboration entre plusieurs personnes dans un conteneur séparé du site.

Du coup, tu auras la réponse si quelqu'un te demande pour le consent mode ;)

Bonne journée

Startouf commented 1 year ago

Bonjour @AmauriC est-il possible de réouvrir ce ticket ? Cela fait maintenant longtemps que Google Consent Mode est disponible, et de plus en plus de personnes vont se poser cette question au moment d'ajouter GTM et/ou TaC

@Ben773 je serais curieux de savoir, en l'état, comment intégrer facilement les 2. Je me fiais surtout à l'article de Cédric Duma https://cedric-duma.fr/tuto-integration-tarteaucitron-google-tag-manager-2020/ mais j'ai peur qu'il commence à être un peu obsolète.

Malgré la réponse sur mon autre issue github, je trouve qu'il est aussi difficile de bien comprendre si/pourquoi le chargement de GTM via Tarte Au Citron est/serait "obligatoire" au sens de la loi française, car on trouve toutes les réponses sur internet.

AmauriC commented 1 year ago

De mon point de vue pas de changement, charger un service Google comme GTM sans consentement ce n'est pas idéal.

stale[bot] commented 1 year ago

This issue has been automatically marked as inactive because it has not had activity for 20 days. It will be closed in 5 days if no further activity occurs. Thank you for your contributions.

bastienito commented 7 months ago

Bonjour @AmauriC est-il possible de réouvrir ce ticket ? Cela fait maintenant longtemps que Google Consent Mode est disponible, et de plus en plus de personnes vont se poser cette question au moment d'ajouter GTM et/ou TaC

@Ben773 je serais curieux de savoir, en l'état, comment intégrer facilement les 2. Je me fiais surtout à l'article de Cédric Duma https://cedric-duma.fr/tuto-integration-tarteaucitron-google-tag-manager-2020/ mais j'ai peur qu'il commence à être un peu obsolète.

Malgré la réponse sur mon autre issue github, je trouve qu'il est aussi difficile de bien comprendre si/pourquoi le chargement de GTM via Tarte Au Citron est/serait "obligatoire" au sens de la loi française, car on trouve toutes les réponses sur internet.

Bonjour,

Il est possible d'intégrer le consent mode V2 avec Tarteaucitron, que GTM soit ou pas déclenché par Tarteaucitron. Je n'ai aucune idée si GTM est activable ou pas sans consentement. C'est une zone floue, comme bien d'autres sur tous ces sujets.

Pour le consent mode, il est difficile de tout décrire ici pour l'intégration mais on peut:

Pour ça, il faut aller lire le cookie tarteaucitron, en extraire les états de chaque groupe, envoyer ces valeurs dans des variables de la couche de données, puis déclencher un event d'update, qui déclenchera à son tour la balise Consent Mode Update de Simo Ahava avec les paramétrages des flags associées aux variables qu'on a mis à jour juste avant.

Dans le cas du choix global, "J'accepte" ou "Je refuse", c'est assez facile. "Je refuse" ne déclenchera pas GTM donc rien ne se passe. "J'accepte" déclenche tout à granted. Pour les choix granulaires "Autoriser", "Interdire", on peut mettre un event listener sur les boutons de choix "Autoriser" "Interdire". En cliquant sur un bouton, ça va appeler le script qui va lire le cookie tarteaucitron, puis en cascade tous les autres pour relancer l'update avec les bonnes valeurs de flags. L'event listener est chargé depuis GTM, donc si GTM n'est pas chargé, évidemment, on écoutera rien. Mais dès que GTM sera autorisé, on ira lire la valeur du cookie, donc on aura les états à jour même si l'utilisateur a cliqué sur d'autres groupes avant d'activer GTM.

J'espère que ça peut vous aider sur le sujet. bonne journée,

MoryCorp commented 6 months ago

Bonjour @AmauriC est-il possible de réouvrir ce ticket ? Cela fait maintenant longtemps que Google Consent Mode est disponible, et de plus en plus de personnes vont se poser cette question au moment d'ajouter GTM et/ou TaC @Ben773 je serais curieux de savoir, en l'état, comment intégrer facilement les 2. Je me fiais surtout à l'article de Cédric Duma https://cedric-duma.fr/tuto-integration-tarteaucitron-google-tag-manager-2020/ mais j'ai peur qu'il commence à être un peu obsolète. Malgré la réponse sur mon autre issue github, je trouve qu'il est aussi difficile de bien comprendre si/pourquoi le chargement de GTM via Tarte Au Citron est/serait "obligatoire" au sens de la loi française, car on trouve toutes les réponses sur internet.

Bonjour,

Il est possible d'intégrer le consent mode V2 avec Tarteaucitron, que GTM soit ou pas déclenché par Tarteaucitron. Je n'ai aucune idée si GTM est activable ou pas sans consentement. C'est une zone floue, comme bien d'autres sur tous ces sujets.

Pour le consent mode, il est difficile de tout décrire ici pour l'intégration mais on peut:

* soit ajouter le code JS pour les signaux par défaut et update, soit utiliser les modules faits par Simo Ahava qui simplifient le travail,

* pour les signaux update, c'est là où c'est un peu compliqué, il faut assujettir les différents flags à des variables correspondant aux catégories publicités, analytics, UX, ... déterminées dans tarteaucitron.

Pour ça, il faut aller lire le cookie tarteaucitron, en extraire les états de chaque groupe, envoyer ces valeurs dans des variables de la couche de données, puis déclencher un event d'update, qui déclenchera à son tour la balise Consent Mode Update de Simo Ahava avec les paramétrages des flags associées aux variables qu'on a mis à jour juste avant.

Dans le cas du choix global, "J'accepte" ou "Je refuse", c'est assez facile. "Je refuse" ne déclenchera pas GTM donc rien ne se passe. "J'accepte" déclenche tout à granted. Pour les choix granulaires "Autoriser", "Interdire", on peut mettre un event listener sur les boutons de choix "Autoriser" "Interdire". En cliquant sur un bouton, ça va appeler le script qui va lire le cookie tarteaucitron, puis en cascade tous les autres pour relancer l'update avec les bonnes valeurs de flags. L'event listener est chargé depuis GTM, donc si GTM n'est pas chargé, évidemment, on écoutera rien. Mais dès que GTM sera autorisé, on ira lire la valeur du cookie, donc on aura les états à jour même si l'utilisateur a cliqué sur d'autres groupes avant d'activer GTM.

J'espère que ça peut vous aider sur le sujet. bonne journée,

@bastienito Merci pour tes ces précisions. Je pense que ça m'a fait gagner beaucoup de temps dans ma recherche. Je me suis basé en grande partie sur la ressource que tu citais : https://www.simoahava.com/analytics/consent-mode-v2-google-tags/ en utilisant le template Google Tag Manager de Simo révisé en Décembre.

Côté Google Tag Manager j'ai cette première balise, qui vient définir toutes les variables de consent sur denied par défaut au chargement de la page :

image image

On le voit également via Tag Assistant :

image

Ensuite j'ai rajouté un p'tit bout de code en bricolage sur le site pour autoriser/retirer le consentement :

document.addEventListener('googleads_allowed', function() {
    window.dataLayer = window.dataLayer || [];
    function gtag() { dataLayer.push(arguments); }
    gtag('consent', 'update', {
        'ad_storage': 'granted'
    });

    console.log("google ads consent granted");
});

document.addEventListener('googleads_disallowed', function() {
    window.dataLayer = window.dataLayer || [];
    function gtag() { dataLayer.push(arguments); }
    gtag('consent', 'update', {
        'ad_storage': 'denied'
    });

    console.log("google ads consent denied.");
});

image

Je ne suis pas encore 100% sûr du fonctionnement mais en analysant le payload de ma requête Google Ads j'ai bien les nouveaux paramètres du consent mode V2 (gcs et gcd) :

image

tups commented 6 months ago

Bonjour,

On peut simplement ajouter des services de la manière suivante :


// Custom Google Analytics Multiple
tarteaucitron.services.multiplegtag = {
    "key": "multiplegtag",
    "type": "other",
    "name": "Google Tag Manager",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
    "cookies": (function () {

       "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],

        if (tarteaucitron.user.multiplegtagUa !== undefined) {
            tarteaucitron.user.multiplegtagUa.forEach(function (data) {
                cookies.push('_gat_gtag_' + data.ua.replace(/-/g, '_'));
                cookies.push('_ga_' + data.ua.replace(/G-/g, ''));
            });
        }

        return cookies;
    })(),
    "js": function () {
        "use strict";
        window.dataLayer = window.dataLayer || [];

        window.gtag = function gtag() {
            dataLayer.push(arguments);
        }

        window.gtag('consent', 'default', {
            ad_storage: 'denied',
            analytics_storage: 'denied',
            ad_user_data: 'denied',
            ad_personalization: 'denied',
            wait_for_update: 500
        });

        window.dataLayer.push({
            'gtm.start': new Date().getTime(),
            event: 'gtm.js'
        });

        if (tarteaucitron.user.multiplegtagUa !== undefined) {

            gtag('js', new Date());

            tarteaucitron.user.multiplegtagUa.forEach(function (data) {
                gtag('config', data.ua, data.options);
                tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + data.ua, '', function () {
                });
            });

            if (typeof tarteaucitron.user.gtagMore === 'function') {
                tarteaucitron.user.gtagMore();
            }

        }

        tarteaucitron.job.push('gtaganalyticsstorage');
        tarteaucitron.job.push('gtagadstorage');
        tarteaucitron.job.push('gtagaduserdata');
        tarteaucitron.job.push('gtagadpersonalization');
        tarteaucitron.job.push('gtagfunctionalitystorage');
        tarteaucitron.job.push('gtagsecuritystorage');
    },
    "fallback": function () {
        tarteaucitron.job.push('gtaganalyticsstorage');
        tarteaucitron.job.push('gtagadstorage');
        tarteaucitron.job.push('gtagaduserdata');
        tarteaucitron.job.push('gtagadpersonalization');
        tarteaucitron.job.push('gtagfunctionalitystorage');
        tarteaucitron.job.push('gtagsecuritystorage');
    }
};

tarteaucitron.services.gtaganalyticsstorage = {
    "key": "gtaganalyticsstorage",
    "type": "analytic",
    "name": "Google Tag Manager (Statistique)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
   "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
    "js": function () {

        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);

        gtag('consent', 'update', {
            'analytics_storage': 'granted'
        });
    }
};

tarteaucitron.services.gtagadstorage = {
    "key": "gtagadstorage",
    "type": "ads",
    "name": "Google Tag Manager (Publicité)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
    "cookies": (function () {
        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '_gcl_au'];
    })(),
    "js": function () {
        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);
        gtag('consent', 'update', {
            'ad_storage': 'granted'
        });
    }
};

tarteaucitron.services.gtagaduserdata = {
    "key": "gtagaduserdata",
    "type": "ads",
    "name": "Google Tag Manager (Ciblage utilisateur)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
   "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
    "js": function () {
        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);
        gtag('consent', 'update', {
            'ad_user_data': 'granted'
        });
    }
};

tarteaucitron.services.gtagadpersonalization = {
    "key": "gtagadpersonalization",
    "type": "ads",
    "name": "Google Tag Manager (Publicité personnalisé)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
    "cookies": (function () {
        return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '_gcl_au'];
    })(),
    "js": function () {
        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);
        gtag('consent', 'update', {
            'ad_personalization': 'granted'
        });
    }
};

tarteaucitron.services.gtagfunctionalitystorage = {
    "key": "gtagfunctionalitystorage",
    "type": "api",
    "name": "Google Tag Manager (Fonctionnalité du site)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
    "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
    "js": function () {
        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);
        gtag('consent', 'update', {
            'functionality_storage': 'granted'
        });
    },
    "fallback": function () {

    }
};

tarteaucitron.services.gtagsecuritystorage = {
    "key": "gtagsecuritystorage",
    "type": "api",
    "name": "Google Tag Manager (Sécurité et prévention)",
    "uri": "https://support.google.com/analytics/answer/9976101?hl=fr",
    "needConsent": true,
    "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'],
    "js": function () {
        tarteaucitron.userInterface.respond(document.getElementById('multiplegtagAllowed'), true);
        gtag('consent', 'update', {
            'security_storage': 'granted'
        });
    }
};

Ce service se déclenche de la manière suivante :

<script>
        tarteaucitron.user.multiplegtagUa = multiplegtagUa || [];
        tarteaucitron.multiplegtagUa.push({
            'ua': 'GTM-XXXXXX',
            'options': {}
        });
        (tarteaucitron.job = tarteaucitron.job || []).push('multiplegtag');
</script>

Par défaut, le Google Consent V2 est désactivé, puis s'active si les utilisateurs ont validé dans TarteAuCitron. Si un consentement est coché, on active automatique le Google Tag Manager. Si on ajoute le Google Tag Manager, il charge automatiquement les sous-consentements qui sont dépendant.

AmauriC commented 6 months ago

Merci beaucoup @tups, c'est ce que j'était en train de préparer, ça va accélérer la mise en place!

AmauriC commented 6 months ago

Mise en place du Google Consent Mode v2 https://github.com/AmauriC/tarteaucitron.js/commit/8cf12b2d8e4106a801fc42139c0af9d56179b171

1- Par défaut - actuellement - l'option googleConsentMode est sur false 2- Si Google Ads est chargé, ajout d'un service "personalized ads" qui gère ad_user_data et ad_personalization 3- Le service Google Ads gère ad_storage 4- Le service GA4 gère analytics_storage

Tous les retours sont bienvenus :)

Nemephir commented 6 months ago

Bonjour,

Merci beaucoup pour cette mise à jour, qui sera très utile.

Après avoir fait la mise jour pour activer le Google Consent V2, je rencontre deux problèmes avec GTM.

Dans un premier temps, tous les services utilisés via GTM sont censé remonter avant l'acceptation (visibles sur le plugin Tag Assistant Legacy). Cela fonctionnait avant la mise à jour, mais ce n'est plus le cas maintenant.

Une fois que les cookies sont acceptés, la balise Google Ads ne remonte plus via GTM. Analytics et Global Site Tag, eux, fonctionnent.

Un développeur avec qui on est en contact a eu exactement le même problème.

Voici le code utilisé :

<script src="{{ siteUrl('theme/js/tarteaucitron/tarteaucitron.min.js') }}"></script>
<script type="text/javascript">
    tarteaucitron.init({
        "orientation": "bottom",
        "iconPosition": "BottomLeft",
        "DenyAllCta": true,
        "AcceptAllCta": true,
        "removeCredit": true,
        "showIcon": false,
        "googleConsentMode": true
    });
</script>
<script type="text/javascript">
    tarteaucitron.user.googletagmanagerId = 'GTM-XXXXXXX';
    (tarteaucitron.job = tarteaucitron.job || []).push('googletagmanager');
</script>
AmauriC commented 6 months ago

@Nemephir Possible d'avoir une url pour reproduire le problème? Les changements pour le consent mode concerne l'envoi d'info au Datalayer via les events tarteaucitron, je ne vois pas pourquoi ça changerai le comportement sur le chargement des services. tarteaucitron était déjà à jour ou vous utilisiez une ancienne version?

Nemephir commented 6 months ago

Merci @AmauriC, voici l'url : https://www.boucherieagricoledelivery.com. On a toujours eu la version 1.9.1 sur ce site, chargée via CDN. Pour faire la mise à jour, on est passé par un téléchargement des fichiers.

AmauriC commented 6 months ago

La v1.9.1 a plus de 3 ans, beaucoup de chose ont changé depuis. Sur votre installation actuelle tarteaucitron ne gère que GTM, donc le consent mode ne s'applique pas. Pour que ce soit tarteaucitron qui gère Google Ads et Analytics, il faut les retirer de GTM et les installer via tarteaucitron.

Nemephir commented 6 months ago

D'accord, c'est bien noté. Donc on ne peut plus faire passer Analytics et Ads via GTM, tout étant compatible avec Tarte au citron. C'est bien dommage, mais j'imagine qu'il y a des raisons techniques derrière. Merci beaucoup pour la précision @AmauriC 👍

Wafy-source commented 6 months ago

Bonjour,

Je suis un peu perdu avec les derniers messages que vous venez de publier.

Il n'est plus possible de faire passer Analytics et Ads via GTM tout en étant compatible avec Tarte au citron ? Qu'est ce que celà veux dire ? On ne peut plus utiliser les balises analytics et google ads dans son conteneur GTM ?

bastienito commented 6 months ago

Salut Nemephir, Avoir Gads et GA4 dans GTM et Tarteaucitron est possible. C'est ce qu'on fait. Je l'explique dans un commentaire plus haut. La version qu'il y a sur le site date du 20210705.

Wafy-source commented 6 months ago

Bonjour @bastienito est-ce qu'il serait possible d'échanger ensemble car beaucoup de message différent sont envoyé à ce sujet je suis actuellement en train de mettre en place le consent mode v2 avec tarte au citron sur mon site.

Comment vérifier la version de mon tarte au citron ? Voici mon site : https://shop.sanipousse.com/

J'ai relu votre poste et je vais essayer de passer par le template de Simo ahava pour mettre à jour les signaux.

Cependant avez vous des pistes ou un script déjà disponible pour récupéré les valeurs des cookies en fonction du consentement ?

Savez-vous également si il est possible de faire un update des signaux sans avoir à intégrer de script dans le code du site ? Je n'ai pas accès au code en tant que web analyste et je peux uniquement passer par google tag manager.

Merci

AmauriC commented 6 months ago

Il n'est plus possible de faire passer Analytics et Ads via GTM tout en étant compatible avec Tarte au citron ?

@Nemephir Vu la configuration actuelle, GAds et GA4 ne sont jamais passé par tarteaucitron. Il faut configurer tac pour le faire https://tarteaucitron.io/fr/install/ et retirer l'intégration de GTM.

Comment vérifier la version de mon tarte au citron ?

@Wafy-source la version de tac sur le site est de 2020. Avec la dernière version dispo tac s'occupe d'envoyer les signaux à Google en fonction du statut des services gads et ga4.

Wafy-source commented 6 months ago

@AmauriC

Merci Amauri pour votre réponse , savez-vous une fois la librairie mise à jour quels sont les étapes à réaliser côté GTM dans ce cas ?

Faut'il que j'utilise le template de simo pour envoyé les signaux par défault ? Et ensuite les signaux se mettrons à jour automatiquement ?

Pas besoin de récupéré les valeurs des cookies pour mettre à jour justement les signaux à l'intérieur de GTM ?

MoryCorp commented 6 months ago

Mise en place du Google Consent Mode v2 8cf12b2

1- Par défaut - actuellement - l'option googleConsentMode est sur false 2- Si Google Ads est chargé, ajout d'un service "personalized ads" qui gère ad_user_data et ad_personalization 3- Le service Google Ads gère ad_storage 4- Le service GA4 gère analytics_storage

Tous les retours sont bienvenus :)

Hello @AmauriC le plugin WordPress sera directement compatible du coup ? Pas besoin d'attendre une release Github ?

MoryCorp commented 6 months ago

Mise en place du Google Consent Mode v2 8cf12b2 1- Par défaut - actuellement - l'option googleConsentMode est sur false 2- Si Google Ads est chargé, ajout d'un service "personalized ads" qui gère ad_user_data et ad_personalization 3- Le service Google Ads gère ad_storage 4- Le service GA4 gère analytics_storage Tous les retours sont bienvenus :)

Hello @AmauriC le plugin WordPress sera directement compatible du coup ? Pas besoin d'attendre une release Github ?

J'ai ma réponse

image

drpark commented 6 months ago

Bonjour, Je me suis penché sur la question et pour faire fonctionner google tag manager je pose tarteaucitron avec les 2 services GA4 et ads et derrière j'appelle le script google tag manager standard, ainsi je conserve le conversion linker etc fonctionnel.

sachant que si tout est denied GTM s'active en mode reduit donc conforme rgpd vu que pas de cookie, et des la validation dans le bandeau ca passe alors en allowed. le seul hic qu'il me reste, c'est que parfois j'ai "A tag read consent state before a default was set" ca voudrait dire que tarteaucitron met du temps à envoyer le datalayer

Est ce que tarteaucitron rempli le datalayer en asynchrone?

drpark commented 6 months ago

Petite update: j'ai desactivé dans les services gtag et googleads la partie js pour que leurs balises respectives ne soient pas appelées et j'ai mis l'appel au tag GTM standard de cette facon window.addEventListener('tac.root_available', function() { (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXX'); }) }) Ainsi je suis sur que le datalayer a été correctement configuré avant. Et j'ai donc mes evenements configurés dans GTM qui fonctionnent parfaitement avec les bons consentements.

Wafy-source commented 6 months ago

Hello @drpark quand vous parler de votre datalayer est-ce que ce datalayer est automatiquement généré par tac avec un consent_update que l'on peu utiliser comme déclencheur pour nos evenements GTM ?

sarahP33 commented 6 months ago

Bonjour, j'ai une question concernant l'utilisation de Tarte au citron sur Matomo pour activer le consent mode V2. J'ai bien compris que c'était OK avec GTM mais est ce que c'est également possible via le Matomo Manager ?

AmauriC commented 6 months ago

Maintenant que le consent mode est dispo, possible de charger GAds/GA4 dans tous les cas? Ou il faut toujours le premier consentement pour charger le tag? 🧐

Yoyo-5 commented 6 months ago

Maintenant que le consent mode est dispo, possible de charger GAds/GA4 dans tous les cas? Ou il faut toujours le premier consentement pour charger le tag? 🧐

Je l'ai deployé sur la preprod du site d'un client et l'extension Chrome Consent Mode Inspector by InfoTrust montre que les paramètres sont tous en unknown tant qu'on n'a pas accepté. Si on refuse, cela reste en unknown.

drpark commented 6 months ago

Maintenant que le consent mode est dispo, possible de charger GAds/GA4 dans tous les cas? Ou il faut toujours le premier consentement pour charger le tag? 🧐

Je l'ai deployé sur la preprod du site d'un client et l'extension Chrome Consent Mode Inspector by InfoTrust montre que les paramètres sont tous en unknown tant qu'on n'a pas accepté. Si on refuse, cela reste en unknown.

Regarde mes posts précédents... J' ai du faire quelques modifs pour que ça fonctionne bien

drpark commented 6 months ago

Hello @drpark quand vous parler de votre datalayer est-ce que ce datalayer est automatiquement généré par tac avec un consent_update que l'on peu utiliser comme déclencheur pour nos evenements GTM ?

Je laisse tac gérer le data layer par contre j'ai viré les appels de scripts dans les services pour Analytics et ads. Et je lance manuellement le Google tag original après m être assuré que tac était loadé

Yoyo-5 commented 6 months ago

Maintenant que le consent mode est dispo, possible de charger GAds/GA4 dans tous les cas? Ou il faut toujours le premier consentement pour charger le tag? 🧐

Je l'ai deployé sur la preprod du site d'un client et l'extension Chrome Consent Mode Inspector by InfoTrust montre que les paramètres sont tous en unknown tant qu'on n'a pas accepté. Si on refuse, cela reste en unknown.

Regarde mes posts précédents... J' ai du faire quelques modifs pour que ça fonctionne bien

Thanks, je me suis inspiré de ce que tu as posté, cela semble fonctionner bien mieux. 👍

Nek- commented 6 months ago

Maintenant que le consent mode est dispo, possible de charger GAds/GA4 dans tous les cas? Ou il faut toujours le premier consentement pour charger le tag? 🧐

Hello, j'arrive comme un cheveu sur la soupe, mais pour faire simple, la réponse est oui, il faut charger GA systématiquement quand le consent est spécifié. :)

Wafy-source commented 6 months ago

@drpark j'ai desactivé dans les services gtag et googleads la partie js pour que leurs balises respectives ne soient pas appelées et j'ai mis l'appel au tag GTM standard de cette facon window.addEventListener('tac.root_available', function() { (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXX'); }) }) Ainsi je suis sur que le datalayer a été correctement configuré avant. Et j'ai donc mes evenements configurés dans GTM qui fonctionnent parfaitement avec les bons consentements.

Originally posted by @drpark in https://github.com/AmauriC/tarteaucitron.js/issues/850#issuecomment-1972597754

Pourrais-tu me dire quel sont les partie js pour que leurs balises respectives ne soient pas appelées pour gtag et google ads :

Voici le script de gtag par exemple :

Ah tu gardé que cette partie pour que Google Analytics 4 s'affiche dans ton bandeau :

      (tarteaucitron.job = tarteaucitron.job || []).push('gtag');
drpark commented 6 months ago

oui j'ai gardé la partie (tarteaucitron.job = tarteaucitron.job || []).push('gtag'); et pareil pour google ads afin que les evenement soit déclenchés selon le consentement de l'utilisateur. Et dans services j'ai désormais ca

tarteaucitron.services.googleads = { "key": "googleads", "type": "ads", "name": "Google Ads", "uri": "https://policies.google.com/privacy", "needConsent": true, "cookies": (function () { var googleIdentifier = tarteaucitron.user.googleadsId, tagUaCookie = '_gatgtag' + googleIdentifier, tagGCookie = 'ga' + googleIdentifier;

    tagUaCookie = tagUaCookie.replace(/-/g, '_');
    tagGCookie = tagGCookie.replace(/G-/g, '');

    return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
})(),
"js": function () {
    "use strict";

}

};

// google analytics tarteaucitron.services.gtag = { "key": "gtag", "type": "analytic", "name": "Google Analytics (GA4)", "uri": "https://policies.google.com/privacy", "needConsent": true, "cookies": (function () { var googleIdentifier = tarteaucitron.user.gtagUa, tagUaCookie = '_gatgtag' + googleIdentifier, tagGCookie = 'ga' + googleIdentifier;

    tagUaCookie = tagUaCookie.replace(/-/g, '_');
    tagGCookie = tagGCookie.replace(/G-/g, '');

    return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];
})(),
"js": function () {
    "use strict";

}

};

Wafy-source commented 6 months ago

merci @drpark

Je n'arrive pas à comprendre ou tu trouve les éléments des services que tu viens de montrer :

je suis en version pro :

Pour charger la librairie j'ai juste. :

Ensuite le code pour google analytics par exemple est :

j'ai garder uniquement :

    <script type="text/javascript">
    tarteaucitron.user.gtagUa = 'G-XXXXXXXXX';
    // tarteaucitron.user.gtagCrossdomain = ['example.com', 'example2.com'];
    tarteaucitron.user.gtagMore = function () { /* add here your optionnal gtag() */ };
    (tarteaucitron.job = tarteaucitron.job || []).push('gtag');
    </script>

</body>

et j'ai garder uniquement la ligne :

(tarteaucitron.job = tarteaucitron.job || []).push('gtag');

ou est ce que je trouve

// google analytics tarteaucitron.services.gtag = { "key": "gtag", "type": "analytic", "name": "Google Analytics (GA4)", "uri": "https://policies.google.com/privacy", "needConsent": true, "cookies": (function () { var googleIdentifier = tarteaucitron.user.gtagUa, tagUaCookie = 'gat_gtag' + googleIdentifier, tagGCookie = 'ga' + googleIdentifier;

tagUaCookie = tagUaCookie.replace(/-/g, '_');
tagGCookie = tagGCookie.replace(/G-/g, '');

return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au'];

})(), "js": function () { "use strict";

}

drpark commented 6 months ago

Moi en version gratuite. Il faut aller voir dans tarteaucitron.services.js

Et je ne passe pas par tarteaucitron pour afficher le gtag car il faut que le gtag se load même sans aucun consentement

Wafy-source commented 6 months ago

@dpark La balise google de base de mon côté ne se charge pas à l'acceptation des cookies mais uniquement après rechargement de page care j'ai ajouter dans les paramètre de consentement de ma balise analytics_storage en consentement supplémentaire nécessaire

De votre côté elle se charge sur All pages peu importe le consentement ?

lchk609 commented 6 months ago

Bonjour, Je suis en train d'installer le google consent mode sur mon site via TAC. J'ai remarqué que lorsque je chargeais GTM avec TAC il fallait que la balise GTM soit dans le DOM (donc que l'utilisateur l'active dans la bannière de consentement) pour que le consentement puisse être envoyé a Google. La solution que j'ai trouvé est d'enlever GTM de TAC et de le laisser dans le DOM. Existe-t-il une alternative avec TAC à ma solution ?

AmauriC commented 6 months ago

Les services GA4 et Google Ads sont maintenant chargé tout le temps et le consent mode autorise (ou non) l'envoi de data à Google.

lchk609 commented 6 months ago

Les services GA4 et Google Ads sont maintenant chargé tout le temps et le consent mode autorise (ou non) l'envoi de data à Google.

Merci pour ta réponse, le google consent mode est disponible uniquement pour ceux qui ont TAC pro ? j'ai vu que le package n'a pas été updaté depuis 2 mois.

Nek- commented 6 months ago

Les services GA4 et Google Ads sont maintenant chargé tout le temps et le consent mode autorise (ou non) l'envoi de data à Google.

Trop bien merci ! C'est possible d'avoir une release pour tester tout ça ? 😄

AmauriC commented 6 months ago

Je termine un dernier ajout demain et je publie une nouvelle release ; )

Wafy-source commented 6 months ago

@drpark

Hello j'ai reussi en suivante tes méthoes à faire quelque chose de propre. Ma dernière question est de mon côté dans tarteaucirton.services.js j'ai bien :

tarteaucitron.services.googleads = { key: "googleads", type: "ads", name: "Google Ads", uri: "https://policies.google.com/privacy", needConsent: true, cookies: function() { var googleIdentifier = tarteaucitron.user.googleadsId , tagUaCookie = "_gatgtag" + googleIdentifier , tagGCookie = "ga" + googleIdentifier; tagUaCookie = tagUaCookie.replace(/-/g, "_"); tagGCookie = tagGCookie.replace(/G-/g, ""); return ["_ga", "_gat", "_gid", "utma", "utmb", "utmc", "utmt", "__utmz", tagUaCookie, tagGCookie, "_gcl_au"] }(), js: function() { "use strict"; window.dataLayer = window.dataLayer || []; tarteaucitron.addScript("https://www.googletagmanager.com/gtag/js?id=" + tarteaucitron.user.googleadsId, "", function() { window.gtag = function gtag() { dataLayer.push(arguments) } ; gtag("js", new Date); var additional_config_info = timeExpire !== undefined ? { anonymize_ip: true, cookie_expires: timeExpire / 1e3 } : { anonymize_ip: true }; gtag("config", tarteaucitron.user.googleadsId, additional_config_info); if (typeof tarteaucitron.user.googleadsMore === "function") { tarteaucitron.user.googleadsMore() } }) }, fallback: function() { if (tarteaucitron.parameters.googleConsentMode === true) { this.js() } } };

Cependant j'ai des ligne supplémentaire que tu n'a pas

    window.dataLayer = window.dataLayer || [];
    tarteaucitron.addScript("https://www.googletagmanager.com/gtag/js?id=" + tarteaucitron.user.googleadsId, "", function() {
        window.gtag = function gtag() {
            dataLayer.push(arguments)
        }
        ;
        gtag("js", new Date);
        var additional_config_info = timeExpire !== undefined ? {
            anonymize_ip: true,
            cookie_expires: timeExpire / 1e3
        } : {
            anonymize_ip: true
        };
        gtag("config", tarteaucitron.user.googleadsId, additional_config_info);
        if (typeof tarteaucitron.user.googleadsMore === "function") {
            tarteaucitron.user.googleadsMore()
        }
    })
},
fallback: function() {
    if (tarteaucitron.parameters.googleConsentMode === true) {
        this.js()
    }

    Est-ce que tu les as retiré à la main et pour quel raison ?
peter-power-594 commented 6 months ago

Messieurs le bonjour :-)

Je n'ai pas trop compris j'ai mis à jour le script (version gratuite - branche master) mais je n'ai pas l'impression que cela marche : image

Poke @AmauriC pour confirmer tu penses publier une nouvelle version dans la journée ?

Cheers

drpark commented 6 months ago

@Wafy-source oui j'ai tout enlevé car je gere tout via le tag manager, la les 2 elements dans services me servent juste a separer les autorisations ads et analytics pour le consent mode de google. tout est ensuite géré par le google tag.

peter-power-594 commented 6 months ago

Mise en place du Google Consent Mode v2 8cf12b2

1- Par défaut - actuellement - l'option googleConsentMode est sur false 2- Si Google Ads est chargé, ajout d'un service "personalized ads" qui gère ad_user_data et ad_personalization 3- Le service Google Ads gère ad_storage 4- Le service GA4 gère analytics_storage

Tous les retours sont bienvenus :)

@AmauriC le champion ! Aventi ! Merci beaucoup Mr CHAMPEAUX c'est au top. GG 🚀

Rectification : cela marche a l'air de bien fonctionné de mon côté en utilisant la branche master ❤️

Précision : pour ceux qui veulent utiliser la technique de l'Advanced Consent Mode cela ne marche pas avec le service "multiplegtag". Il faut obligatoirement passer par un service "googleads" + un service "gtag" dans la configuration de tarteaucitron actuellement 🥇 (Interprétation du message)

// Google Analytics (GA4)
tarteaucitron.user.gtagUa = 'G-ABC123ABC1';
(tarteaucitron.job = tarteaucitron.job || []).push('gtag');
// Google Ads
tarteaucitron.user.googleadsId = 'AW-123456789';
(tarteaucitron.job = tarteaucitron.job || []).push('googleads');

Je vois que des personnes "bouillantes" ont utilisé des versions personnalisées, bien joué gentlemen mais perso j'ai abandonné de mon côté 😢 ... du moins pour Google. Voici quelques captures d'écran

Si Google Tag (Mesure d'audience) accepté et Google Ads (Régie publicitaire) accepté :

image

image

Si Google Tag (Mesure d'audience) accepté et Google Ads (Régie publicitaire) non accepté :

image

image

Salutations

AmauriC commented 6 months ago

Merci à tous pour vos retours 😊

Je vais préciser comment ça fonctionne parce qu'il y a eu pas mal de changements en quelques jours:

C'est dispo sur la version open source et v pro (manuel ou auto), comme toujours 😙


Pour ceux qui préférent passer par GTM ou un autre tag manager, il y a 6 nouveaux services pour chaque signal du consent mode. Quand c'est activé sur tac, le signal passe en granted, si il est refusé ou sans consentement, il reste à denied.


La release v1.17 regroupe toutes ces nouveautés.

Si besoin, n'hésitez pas, je suis là 👨‍💻