Intégration Google Tag Manager
Injectez le widget Ekoo via un tag Custom HTML dans GTM
Google Tag Manager permet d'ajouter le widget Ekoo sans modifier le code source de votre site. Vous créez un tag Custom HTML qui insère le conteneur et le script sur la page.
data-ekooReqdata-ekoo-product-idReqdata-ekoo-localeautodata-ekoo-variantdata-ekoo-review-iddata-ekoo-on-eventdata-ekoo-directionnormaldata-ekoo-scale1data-ekoo-animationpulsedata-ekoo-animation-durationcontinuousdata-ekoo-always-openfalsedata-ekoo-show-imagetruedata-ekoo-not-fully-clickablefalsedata-ekoo-autoplayfalsedata-ekoo-show-transcriptfalsedata-ekoo-show-speed-buttonfalsedata-ekoo-closed-state-main-textdata-ekoo-closed-state-secondary-textdata-ekoo-modeautodata-shadow-modeopenwindow.EKOO_FORCE_SPA = truewindow.ekooShadowMode = "open"1. Créer un tag Custom HTML
- Ouvrez votre conteneur GTM.
- Allez dans Tags → Nouveau.
- Choisissez le type HTML personnalisé.
- Collez le code ci-dessous dans le champ de saisie.
1<script>2(function() {3 // 1. Create the widget container4 var container = document.createElement('div');5 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');6 container.setAttribute('data-ekoo-product-id', 'MY_PRODUCT_ID');7 container.setAttribute('data-ekoo-locale', 'fr');89 // 2. Insert the container at the desired location10 // Adjust the CSS selector to match your site11 var target = document.querySelector('.product-detail');12 if (target) {13 target.appendChild(container);14 } else {15 document.body.appendChild(container);16 }1718 // 3. Load the Ekoo script19 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {20 var script = document.createElement('script');21 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';22 script.defer = true;23 document.head.appendChild(script);24 } else if (window.ekooLoad) {25 window.ekooLoad();26 }27})();28</script>2. Cibler le bon élément sur la page
Utilisez document.querySelector() pour positionner le widget à l'endroit voulu. Exemples de sélecteurs courants :
.product-detail— bloc principal de la fiche produit#add-to-cart— juste avant/après le bouton d'ajout au panier[data-product-id]— élément portant l'ID du produit
Astuce
Utilisez l'inspecteur de votre navigateur pour identifier le sélecteur CSS idéal, puis testez-le dans la console avec document.querySelector('...').
3. Product ID dynamique
Si votre site rend l'identifiant du produit disponible dans le DOM ou dans le dataLayer, vous pouvez le récupérer dynamiquement :
1<script>2(function() {3 // Retrieve the product ID from a DOM attribute4 var productEl = document.querySelector('[data-product-id]');5 var productId = productEl6 ? productEl.getAttribute('data-product-id')7 : null;89 if (!productId) return; // No product, no widget1011 var container = document.createElement('div');12 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');13 container.setAttribute('data-ekoo-product-id', productId);14 container.setAttribute('data-ekoo-locale', 'fr');1516 var target = document.querySelector('.product-detail');17 if (target) {18 target.appendChild(container);19 }2021 // Check that the script is not already loaded22 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {23 var script = document.createElement('script');24 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';25 script.defer = true;26 document.head.appendChild(script);27 } else if (window.ekooLoad) {28 window.ekooLoad();29 }30})();31</script>4. Configurer le déclencheur
Le tag doit se déclencher après que le DOM de la page produit soit prêt :
- DOM Ready — convient dans la plupart des cas.
- Window Loaded — si le contenu est chargé en asynchrone après le DOM Ready.
- Ajoutez un filtre de page (ex.
Page URL contient /product/) pour ne déclencher le tag que sur les fiches produit.
5. Gestion du timing
GTM injecte après le DOM
GTM exécute les tags après le chargement du DOM. Si votre site utilise du rendu côté client (SPA, lazy-loading), l'élément cible peut ne pas encore exister. Dans ce cas, utilisez un MutationObserver pour attendre l'apparition de l'élément.
1<script>2(function() {3 function injectEkoo(target) {4 var container = document.createElement('div');5 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');6 container.setAttribute('data-ekoo-product-id', 'MY_PRODUCT_ID');7 container.setAttribute('data-ekoo-locale', 'fr');8 target.appendChild(container);910 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {11 var script = document.createElement('script');12 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';13 script.defer = true;14 document.head.appendChild(script);15 } else if (window.ekooLoad) {16 window.ekooLoad();17 }18 }1920 var target = document.querySelector('.product-detail');21 if (target) {22 injectEkoo(target);23 return;24 }2526 // Wait for the element to appear27 var observer = new MutationObserver(function(mutations, obs) {28 var el = document.querySelector('.product-detail');29 if (el) {30 obs.disconnect();31 injectEkoo(el);32 }33 });34 observer.observe(document.body, { childList: true, subtree: true });35})();36</script>6. Prévisualiser et publier
- Cliquez sur Prévisualiser dans GTM pour tester votre tag en mode debug.
- Naviguez vers une page produit ayant un audio publié.
- Vérifiez que le widget s'affiche correctement.
- Si tout est bon, cliquez sur Soumettre pour publier la version.
Pièges courants
- Tag déclenché trop tôt : l'élément cible n'est pas encore dans le DOM → utilisez DOM Ready ou un MutationObserver.
- Script chargé en double : vérifiez avec
querySelectorque le script n'est pas déjà présent avant de l'ajouter. - Product ID en dur : pensez à rendre le product ID dynamique si vos pages produit partagent le même tag GTM.
- Politique CSP : si votre site utilise une Content Security Policy stricte, ajoutez
app.ekoo.coà la directivescript-src.
Aller plus loin
- Charger le script dans le <head> via un second tag GTM — pour réduire le LCP.
- Intégration Commanders Act — alternative européenne à GTM.
Note
Besoin d'aide ? Consultez la FAQ ou contactez le support Ekoo.