Passer au contenu principal

Gérer le consentement Axeptio avec votre custom pixel Shopify

Écrit par Manon Manso
Mis à jour il y a plus de 6 mois

Vous faites votre tracking via un custom pixel dans votre store Shopify ?

Les custom pixels dans Shopify sont des environnement dits “Sandbox”, dans lesquels vous pouvez suivre un ensemble d’évĂšnements envoyĂ©s Ă  Shopify, pour par exemple les envoyer Ă  votre conteneur GTM et vos diffĂ©rents outils d’analyse de trafic.

De par leur nature “Sandbox”, les custom pixels ne peuvent pas accĂ©der aux Ă©lĂ©ments du contenu principal du site, comme par exemple le consentement Axeptio. Ceci peut s’avĂ©rer problĂ©matique, notamment si vous dĂ©clenchez vos outils sur les Ă©vĂšnements Axeptio.

Par conséquent, il vous faudra transmettre les évÚnements Axeptio vers votre custom pixel. Nous verrons dans cette documentation comment.

Envoyer les évÚnements Axeptio depuis le theme.liquid

Il est possible d’envoyer des Ă©vĂšnements depuis votre site vers la sandbox en utilisant les Ă©vĂšnements natifs de Shopify, et ainsi faire passer des informations du site au custom pixel. C’est ce que nous allons faire pour transmettre le consentement Axeptio.

Tout d’abord, il va nous falloir envoyer cet Ă©vĂšnement. Rendez-vous dans votre fichier theme.liquid, et rajoutez ces quelques lignes de code Ă  la fin de la balise body :

<script> 
window._axcb = window._axcb || [];
window._axcb.push(function(sdk){
sdk.on('cookies:complete', function(choices){
Shopify.analytics.publish('cookies:complete', {axeptioConsent: choices});
});
});
</script>

Ensuite, rendez-vous dans votre custom pixel.

Au dĂ©but de celui-ci, rajoutez le code de rĂ©ception de l’évĂšnement :

// RECEPTION DU CONSENTEMENT VIA LE THEME.LIQUID // 
window.dataLayer = window.dataLayer || [];
window.analytics = window.analytics;
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,
});

analytics.subscribe("cookies:complete", function (data) {
let axeptioConsent = data.customData.axeptioConsent;
let axeptioChoices = [];
for (let entry in axeptioConsent) {
if (entry.indexOf("$") === -1 && axeptioConsent[entry]) {
dataLayer.push({ event: `axeptio_activate_${entry}` });
axeptioChoices.push(entry);
}
}
dataLayer.push({ event: "axeptio_update", axeptio_authorized_vendors: axeptioChoices, });
gtag("consent", "update", {
ad_storage: axeptioConsent.$$googleConsentMode.ad_storage,
ad_user_data: axeptioConsent.$$googleConsentMode.ad_user_data,
ad_personalization: axeptioConsent.$$googleConsentMode.ad_personalization,
analytics_storage: axeptioConsent.$$googleConsentMode.analytics_storage,
});
});

Ce code va recréer les signaux normalement envoyés par Axeptio, et les envoyer dans le dataLayer de GTM. Il va également recréer les signaux de consentement propres au Google Consent Mode v2.

Recréer les évÚnements Axeptio sur votre checkout

Depuis AoĂ»t 2024 et le basculement sur le nouveau checkout de Shopify, ce dernier n’est plus basĂ© sur le theme.liquid, et la seule mĂ©thode de rajouter du code se fait via les custom pixels.

Par consĂ©quent, Axeptio ne peut pas ĂȘtre chargĂ© sur le checkout, et n’enverra donc pas ses Ă©vĂšnements.

Pour pouvoir accéder aux consentement Axeptio et le transmettre à vos outils de tracking, il va nous falloir recréer les informations de consentement à partir des cookies Axeptio stockant le consentement.

Pour cela, rajoutez ce code dans votre custom pixel, toujours au début :

// REGENERATION DU CONSENTEMENT DANS LE CHECKOUT // 
function getCookie(name) {
const value = "; " + document.cookie;
const parts = value.split("; " + name + "=");
if (parts.length === 2) return parts.pop().split(";").shift();
}

if ( window.location.href.includes("/checkout/") || window.location.href.includes("/checkouts/") ) {
analytics.subscribe("page_viewed", () => {
const axeptio_authorized_vendors = decodeURIComponent( getCookie("axeptio_authorized_vendors") );
const axeptio_cookies = decodeURIComponent(getCookie("axeptio_cookies"));
dataLayer.push({ event: "axeptio_update", axeptio_authorized_vendors: axeptio_authorized_vendors, });
const acceptedVendors = axeptio_authorized_vendors.split(",");
acceptedVendors.forEach((vendor) => {
if (vendor.length >= 1) {
let event = "axeptio_activate_" + vendor;
dataLayer.push({ event: event });
}
});
gtag("consent", "update", {
ad_storage: axeptio_cookies.includes('"ad_storage":"granted"') ? "granted" : "denied",
ad_user_data: axeptio_cookies.includes('"ad_user_data":"granted"') ? "granted" : "denied",
ad_personalization: axeptio_cookies.includes( '"ad_personalization":"granted"' ) ? "granted" : "denied",
analytics_storage: axeptio_cookies.includes( '"analytics_storage":"granted"' ) ? "granted" : "denied",
});
});
}

Si vous passez uniquement par le custom pixel pour votre tracking, que ce soit pour le site principal ou pour le checkout, vous pouvez combiner ces deux codes afin d’assurer le bon fonctionnement du tracking sur tout le site.

Voici un exemple complet, avec le code de chargement de GTM inclus :


// CHARGEMENT GTM //

(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-XXXXXXXX");

window.dataLayer = window.dataLayer || [];
window.analytics = window.analytics;
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,
});

// RECEPTION DU CONSENTEMENT VIA LE THEME.LIQUID //

analytics.subscribe("cookies:complete", function (data) {
let axeptioConsent = data.customData.axeptioConsent;
let axeptioChoices = [];
for (let entry in axeptioConsent) {
if (entry.indexOf("$") === -1 && axeptioConsent[entry]) {
dataLayer.push({ event: `axeptio_activate_${entry}` });
axeptioChoices.push(entry);
}
}
dataLayer.push({
event: "axeptio_update",
axeptio_authorized_vendors: axeptioChoices,
});
gtag("consent", "update", {
ad_storage: axeptioConsent.$$googleConsentMode.ad_storage,
ad_user_data: axeptioConsent.$$googleConsentMode.ad_user_data,
ad_personalization: axeptioConsent.$$googleConsentMode.ad_personalization,
analytics_storage: axeptioConsent.$$googleConsentMode.analytics_storage,
});
});

// REGENERATION DU CONSENTEMENT DANS LE CHECKOUT //

function getCookie(name) {
const value = "; " + document.cookie;
const parts = value.split("; " + name + "=");
if (parts.length === 2) return parts.pop().split(";").shift();
}
if (
window.location.href.includes("/checkout/") ||
window.location.href.includes("/checkouts/")
) {
analytics.subscribe("page_viewed", () => {
const axeptio_authorized_vendors = decodeURIComponent(
getCookie("axeptio_authorized_vendors")
);
const axeptio_cookies = decodeURIComponent(getCookie("axeptio_cookies"));
dataLayer.push({
event: "axeptio_update",
axeptio_authorized_vendors: axeptio_authorized_vendors,
});
const acceptedVendors = axeptio_authorized_vendors.split(",");
acceptedVendors.forEach((vendor) => {
if (vendor.length >= 1) {
let event = "axeptio_activate_" + vendor;
dataLayer.push({ event: event });
}
});
gtag("consent", "update", {
ad_storage: axeptio_cookies.includes('"ad_storage":"granted"')
? "granted"
: "denied",
ad_user_data: axeptio_cookies.includes('"ad_user_data":"granted"')
? "granted"
: "denied",
ad_personalization: axeptio_cookies.includes(
'"ad_personalization":"granted"'
)
? "granted"
: "denied",
analytics_storage: axeptio_cookies.includes(
'"analytics_storage":"granted"'
)
? "granted"
: "denied",
});
});
}

Avez-vous trouvé la réponse à votre question ?