La situation sur le site en ligne, puis exactement quoi envoyer et quand. Avec le code à intégrer.
⬇ Télécharger l'Excel (codes & variables)Sur la page produit, il n'y a pas encore de variante. Le client choisit d'abord le genre, le produit, la couleur, le col et la taille. Seul un ID de groupe stable existe dès le départ, et le prix peut changer avant tout ajout au panier.
Arrivée sur le t-shirt : le genre n'est même pas choisi. Pas de variante, pas de taille.
Genre, produit, couleur, col. La variante se construit étape par étape.
En choisissant « Pack 2 produits » : 129€ devient 206,40€. Toujours rien dans le panier.au chargement. Seul un ID de groupe stable est connu.
le prix affiché change selon l'option pack.
ne change jamais, quelle que soit la taille, la couleur ou le pack.
Un seul « add to cart » peut ajouter plusieurs lignes, et un ajout ultérieur peut recalculer rétroactivement le prix d'un produit déjà dans le panier (packs, offres groupées). Une valeur figée au moment de l'ajout ne correspond donc plus au panier réel.
Matelas + oreiller (-50%) + protège regroupés dans un seul « add to cart ».
Ajouter le sommier déclenche un prix pack (+899,40€ au lieu de 1499€).
Dans le panier, les DEUX lignes baissent (-449,70 / -209,70). Total 1 538,60€.AddingWell écoutait le clic et avalait l'événement.
un pack ajoute plusieurs produits d'un coup.
un nouvel ajout peut baisser le prix d'un produit déjà dans le panier.
On garde la structure dataLayer existante et tous les champs. Les noms d'événements prennent un suffixe _custom (les noms GA4 standards sont déjà utilisés, on ne peut donc pas les réutiliser). Seules deux règles de valeur changent : laisser les champs variante vides tant qu'aucune variante n'est choisie, et traiter le prix comme une valeur d'affichage, pas comme la valeur de conversion finale.
| Variable | Valeur | Envoyer ? |
|---|---|---|
| item_id | "{{item_group_id}}" | change · GROUP ID (regroupe les variantes) |
| item_product_id | "10243669852506" | garder · ID produit Shopify |
| item_variant_id | "" | vide · jusqu'au choix |
| item_variant | "" | vide · jusqu'au choix |
| sku | "" | vide · jusqu'au choix |
| price | 89 | garder · prix d'affichage, pas final |
| configuration_state | "unresolved" | ajouter · nouveau flag |
dataLayer.push({ event: "view_item_custom", // _custom (nom standard pris) ecommerce: { currency: "EUR", value: 89, // prix affiche, pas final items: [{ item_id: "{{item_group_id}}", // GROUP id (pas le product id) item_product_id: "10243669852506", // product id Shopify item_product_title: "Soutien-gorge", item_name: "Soutien-gorge", item_brand: "Percko", item_category: "", item_variant: "", // vide item_variant_id: "", // vide item_variant_title: "", // vide sku: "", // vide price: 89, // prix d'affichage discount: 0, inventory_quantity: 8569, quantity: 1, item_list_id: null, item_list_name: null, url: "/products/soutien-gorge", configuration_state: "unresolved" // NOUVEAU }] } });
dataLayer.push({ event: "product_variant_selected", // NOUVEL evenement ecommerce: { currency: "EUR", value: 89, items: [{ item_id: "{{item_group_id}}", // GROUP id, inchange item_variant: "Noir / S A-B", // maintenant rempli item_variant_id: "51433313272154", // maintenant rempli item_variant_title: "Noir / S A-B", sku: "FR-SOUTIEN-GORGE-NOIR-S-A-B", price: 89, configuration_state: "resolved", pack_selected: false }] } });
add_to_cart, quand la variante et le pack sont figés.Déclenche add_to_cart pour l'action réelle, puis un cart_updated avec le panier complet recalculé pour que le total soit toujours juste.
| Variable | Valeur | Envoyer ? |
|---|---|---|
| value | 89 | oui · somme des lignes ajoutées |
| item_id | "{{item_group_id}}" | oui · GROUP ID |
| item_variant_id | "51433313272154" | oui · résolu |
| sku | "FR-SOUTIEN-GORGE-..." | oui |
| price | 89 | oui · prix final de la ligne |
| discount | 0 | oui |
| quantity | 1 | oui |
dataLayer.push({ event: "add_to_cart_custom", // _custom (nom standard pris) ecommerce: { currency: "EUR", value: 89, // somme des lignes ajoutees items: [{ item_id: "{{item_group_id}}", // GROUP id item_name: "Soutien-gorge", item_variant: "Noir / S A-B", item_variant_id: "51433313272154", sku: "FR-SOUTIEN-GORGE-NOIR-S-A-B", price: 89, // prix final discount: 0, quantity: 1, url: "/products/soutien-gorge" }] } });
dataLayer.push({ event: "cart_updated", // NOUVEL evenement change_type: "discount_applied", ecommerce: { currency: "EUR", value: 1538.60, // total recalcule = verite items: [ { item_id: "{{item_group_id}}", item_name: "Sommier zoné", item_variant: "80x200", item_variant_id: "...", sku: "...", price: 1049.30, discount: 449.70, quantity: 1 }, { item_id: "{{item_group_id}}", item_name: "Matelas hybride", item_variant: "80x200", item_variant_id: "...", sku: "...", price: 489.30, discount: 209.70, quantity: 1 } ] } });
cart_updated : add_to_cart indique 1 049€ pour le sommier, le matelas tombe silencieusement à 489€, et la valeur du funnel ne correspond plus à la commande. cart_updated porte toujours le vrai total (ici 1 538,60€).