Baliser add_to_cart proprement

add_to_cartselect_item

Le piège de la fusion

Le dataLayer de GTM ne remplace pas les objets : il les fusionne en profondeur. Un add_to_cart poussé après un view_item_list hérite donc des items de la liste si rien ne les efface entre-temps.

Le correctif tient en une ligne, et il doit précéder chaque événement ecommerce :

dataLayer.push({ ecommerce: null });
dataLayer.push({ event: "add_to_cart", ecommerce: { /* … */ } });

C'est ce que fait pushEcommerce sur ce site, et c'est la seule raison de son existence.

La vérification

Sur le catalogue, cliquez « Ajouter au panier » sur un produit. Dans l'aperçu, l'événement add_to_cart doit porter un article, et sa quantity doit valoir 1.

Recommencez depuis une fiche produit en passant la quantité à 3. La quantity poussée doit valoir 3, et value 36 — pas 12.

select_item n'est pas un clic sur « Ajouter »

Sur ce site, select_item ne part que sur le lien d'une carte, jamais sur son bouton d'ajout. La distinction n'est pas cosmétique : compter les ajouts directs comme des sélections gonfle le taux de clic des listes, et le rapport montre alors des sélections qu'aucune vue produit ne suit — une anomalie qu'on passe des heures à chercher côté attribution alors qu'elle est côté balisage.