Couche de données e-commerce — socle de traçage (gratuit)
eCommerce Data Layer for Odoo — la couche de données que tous les traceurs attendent : produit vu, ajout au panier, commande passée, avec le prix, la devise et les articles. Sans aucun traceur dedans.
Captures d'écran
Odoo pose la balise, mais n'émet aucun événement e-commerce — et chaque traceur refait la même plomberie
Produit vu, ajout au panier, commande passée, avec le prix, la devise et le détail des articles. Une couche de données posée une fois, et aucun traceur dedans.
| Odoo 20 Community — On Premise | ✔ |
| Odoo.sh | ✔ |
| Odoo Online (SaaS) | ✔ |
Le constat
Odoo 20 injecte bien gtag et le Consent Mode v2. Mais il n'envoie qu'une chose : la page vue. Ni produit consulté, ni ajout au panier, ni commande. Les rapports e-commerce restent vides — le tunnel, le chiffre d'affaires, les articles qui se vendent.
Chaque module de traçage refait donc sa propre plomberie, incompatible avec celle du voisin, et l'on finit avec trois scripts qui lisent le DOM chacun à sa façon. Le premier changement de thème en casse deux.
Les six événements attendus
view_item, view_item_list, add_to_cart, remove_from_cart, begin_checkout et purchase — nommés comme la recommandation e-commerce de Google.
Rendu par le serveur, pas deviné dans le DOM
Les prix, les devises et les références viennent du modèle Odoo. Une remise, une taxe incluse ou une devise secondaire donnent la bonne valeur ; un traceur qui lit le prix affiché se trompe sur les trois.
Le consentement voyage avec l'événement
Chaque événement porte l'état du consentement publicitaire et analytique au moment où il se produit. Un traceur branché dessus sait s'il a le droit de l'envoyer.
Aucun appel sortant
Ce module ne parle à personne : il expose, il n'envoie pas. C'est ce qui lui permet de tourner aussi sur Odoo Online.
La famille
Le socle est gratuit et se suffit : il donne une couche de données propre à qui veut brancher son propre outil. Les trois satellites s'y greffent.
| dyo_tracking_base — le socle | Gratuit — aucun traceur dedans |
| dyo_tracking_ga4 — Google Analytics 4 | Tourne aussi sur Odoo Online |
| dyo_tracking_meta — Pixel et API Conversions | Appelle Meta depuis le serveur |
| dyo_tracking_merchant — flux Merchant Center | Expose un contrôleur |
Ce que fait l'application
Une couche unique
window.dyoDataLayer reçoit les événements du parcours d'achat, dans l'ordre où ils se produisent.
Le détail des articles
Identifiant, libellé, prix unitaire, quantité, catégorie — et la valeur totale avec sa devise.
Les gabarits du parcours
Fiche produit, liste, panier et confirmation : les quatre points où le parcours se mesure.
Rien à configurer
Aucun réglage, aucune clé : le socle pose la plomberie et s'efface.
Le parcours, en vrai

view_item_list est émis avec les articles présentés et leur prix issu du modèle.
view_item porte la référence, le prix unitaire et la devise — ceux de la liste de prix du site, pas ceux du texte affiché.Ce que le module ne fait pas
- Il n'envoie rien, à personne : il n'y a pas de traceur dedans, c'est le principe.
- Il ne pose pas de bandeau de consentement — il lit celui d'Odoo.
- Il ne modifie ni les prix, ni les taxes, ni le tunnel de commande.
Fiche technique
| Modèles étendus | website |
| Ressources | static/src/js/dyo_datalayer.js, gabarits du parcours d'achat |
| Langue | Français |
| Dépendances | website_sale |
| Licence | LGPL-3 (GNU Lesser General Public License v3) |
| Prix | GRATUIT |
| Version | 20.0.1.0.0 |
| Nom technique | dyo_tracking_base |
DYONYSOS — welcome@dyonysos.fr
Ce que l'application ne fait pas
- Il n'envoie rien, à personne : il n'y a pas de traceur dedans, c'est le principe.
- Il ne pose pas de bandeau de consentement — il lit celui d'Odoo.
- Il ne modifie ni les prix, ni les taxes, ni le tunnel de commande.
Applications du magasin nécessaires
Aucune.
Modules Odoo Community utilisés
website_sale
Applications qui la complètent
| Série | Version | État | Publiée le |
|---|---|---|---|
| 20.0 | 20.0.1.0.0 | Disponible | 02/10/2026 |
| 19.0 | 19.0.1.0.0 | Disponible |
Fiche générée depuis le code de l'éditeur (dépôt privé, branche 20.0) : le code source n'est pas publié.
Contrôle automatique du magasin (distinct de l'éditeur), appliqué à toutes les applications. Conforme.
| Contrôle | Résultat | Effet si absent |
|---|---|---|
| Manifeste lisible sans exécution | conforme | bloquant |
| Licence reconnue (LGPL-3) | conforme | bloquant |
| Aucune dépendance vers Odoo Enterprise | conforme | bloquant |
| Aucun import de code Enterprise | conforme | bloquant |
| Aucun en-tête de licence Enterprise | conforme | bloquant |
| Icône static/description/icon.png | conforme | déclasse |
| Description (static/description/index.html ou README) | conforme | déclasse |
| Tests automatisés (tests/test_*.py) | conforme | déclasse |
| Traduction française (i18n/fr.po) | absent | info |
| Section « Ce que le module ne fait pas » | conforme | info |
| Titre de 70 caractères au plus (57 actuellement) | conforme | info |
| Résumé en français | conforme | info |
Guide utilisateur — Couche de données e-commerce (socle)
Ce module ne se voit pas. Il ne pose ni écran ni menu : il met à disposition, dans chaque page de la boutique, ce qui s'y passe, pour qu'un module de traçage puisse le lire.
1. Vérifier qu'il fonctionne
Ouvrez une fiche produit de la boutique, affichez le code source de la page et
cherchez dyo-datalayer-event. Vous devez y voir un bloc de ce genre :
{"event": "view_item",
"ecommerce": {"currency": "EUR", "value": 24.9,
"items": [{"item_id": "GAL-01", "item_name": "Galet gravé",
"price": 24.9, "quantity": 1.0,
"item_category": "Décoration"}]}}
Si le bloc est là, le socle fait son travail. S'il manque, c'est que le module n'est pas installé sur ce site — vérifiez le site actif en multi-sites.
2. Les événements émis
| Page | Événement | Quand |
|---|---|---|
| Fiche produit | view_item |
au chargement |
| Boutique, catégorie, recherche | view_item_list |
au chargement, avec le rang de chaque article |
| Panier | begin_checkout |
au chargement, si le panier n'est pas vide |
| Confirmation de commande | purchase |
au chargement, avec la référence, la taxe et le port |
| Ajout au panier | add_to_cart |
sans rechargement, à la réponse du serveur |
3. Pourquoi les prix sont justes
Les valeurs viennent du modèle Odoo, pas du texte affiché. Une remise, une taxe incluse ou une devise secondaire donnent donc le bon montant. Un traceur qui lit le prix dans la page se trompe sur les trois — c'est la cause la plus fréquente d'un chiffre d'affaires mesuré qui ne correspond à rien.
4. Lire la couche depuis votre propre code
document.addEventListener("dyo-datalayer", (e) => {
console.log(e.detail.event, e.detail.ecommerce);
});
L'écouteur reçoit aussi ce qui a été poussé avant son chargement :
window.dyoDataLayer conserve la file.
5. Le consentement
window.dyoConsentement() rend l'état au moment de l'appel :
{ analytics: false, marketing: false }
Le socle ne décide pas à la place du traceur : il expose l'état, le traceur choisit d'envoyer ou non. C'est ce qui permet à chaque module de suivre sa propre politique.
Ce que le module ne fait pas
Il n'envoie rien à personne — c'est ce qui lui permet de tourner sur Odoo Online. Il ne pose pas de bandeau de consentement : Odoo en fournit un.
Avis des clients connectés. Un avis noté par client ; l'éditeur peut y répondre. Connectez-vous pour laisser un avis.
- Éditeur
- DYONYSOS
- contact@omnifloo.com
- Clients Omnifloo
- Support inclus selon votre formule : centre d'aide.
