📌 Série : réconciliation GA4 × SFCC, partie 5 sur 5. Cet article fait partie d’une série technique sur la réconciliation des commandes e-commerce entre Salesforce Commerce Cloud (SFCC) et Google Analytics 4 (GA4). Il suppose une familiarité avec BigQuery, LookML et l’architecture de table de réconciliation vue dans les parties 1 à 4.
Contexte : pourquoi comparer SFCC et GA4
Salesforce Commerce Cloud (SFCC) est une plateforme e-commerce d’entreprise utilisée par les enseignes moyennes et grandes pour gérer boutique en ligne, catalogue, commandes, comptes clients et logistique. Quand un client passe commande, SFCC l’enregistre côté serveur, quoi que fasse le navigateur du client. GA4, lui, mesure le comportement côté client, via une balise JavaScript : à la fin d’un achat, le navigateur envoie un événement purchase aux serveurs de Google.
En théorie, les deux systèmes enregistrent les mêmes commandes. En pratique, jamais. GA4 rapporte généralement moins de commandes que SFCC : sur les projets que j’ai audités, l’écart allait d’environ 10 % à 35 % des commandes web.
Le taux de correspondance (match rate) est le pourcentage de commandes SFCC pour lesquelles on retrouve une session GA4 et un événement d’achat. 88 % signifie que sur 100 commandes web dans SFCC, 88 ont un événement purchase GA4 correspondant ; les 12 autres sont invisibles dans vos rapports analytics standard.
Une commande orpheline est une commande SFCC sans session GA4 correspondante. Du point de vue de GA4, elle n’existe pas : le client a payé, le chiffre d’affaires est réel, seule l’attribution manque. L’erreur critique est de traiter toutes les commandes orphelines de la même façon. Certaines sont structurellement intraçables (hors ligne, B2B), d’autres relèvent d’une vraie défaillance de tracking qui peut, et doit, être corrigée.
Vous avez normalisé vos identifiants de transaction et votre match rate est de 88 % sur les commandes web. Mais 12 % des commandes web et toutes les commandes hors ligne n’ont toujours aucune session GA4. La bonne approche : classer chaque commande dans votre modèle de données, mesurer chaque catégorie séparément et en tirer de meilleures décisions.
Les cinq catégories de commandes non rapprochées
| Catégorie | Exemples | Nature | Action |
|---|---|---|---|
| Hors ligne | Caisse en magasin, centre d’appels, ventes assistées par un commercial | Attendue, non corrigeable : aucun navigateur n’est impliqué | Classer et mesurer séparément, ne pas « corriger » |
| B2B / API | Création de commande par API, portail grossiste, saisie en back-office | Attendue, non corrigeable ; panier moyen plus élevé | Sortir des KPI grand public |
| ITP / consentement | ITP Safari à 7 jours, consentement refusé, acheteurs à cycle long | Structurelle, correction partielle : cookie perdu, attribué à « direct » | Server-side tagging et enhanced conversions |
| WebView | WebView d’Instagram, TikTok, Gmail, liens WhatsApp | Partiellement corrigeable : le navigateur intégré isole les cookies | Pont app-vers-web (guide Google WebView) |
| Défaut d’implémentation | Tag qui ne part pas, consentement mal configuré, bloqueur de publicités | Corrigeable : devrait être tracké et ne l’est pas | Auditer et corriger l’implémentation, quantifier |
Les catégories 1 et 2 sont structurelles et jamais corrigeables, la 3 est structurelle mais améliorable, les 4 et 5 largement corrigeables avec de l’investissement. Tout regrouper sous « dark traffic » mène à de mauvaises priorités.
Pourquoi ignorer les commandes non rapprochées crée des erreurs cumulatives
Exclure ces commandes de l’analyse ne les fait pas disparaître : leur impact se redistribue, de façon invisible et cumulative, sur les métriques restantes.
L’inflation du « direct »
Dans GA4, une session sans source identifiable apparaît en « (direct) / (none) » ; quand ITP a supprimé le cookie, GA4 ne peut pas la relier à la visite payante précédente. Si 30 % de vos commandes SFCC ne sont pas rapprochées et incluent des commandes dont l’attribution de canal a été perdue (ITP sur Safari, WebView), elles gonflent le « direct » dans vos rapports d’attribution. Un canal qui semble générer 25 % du chiffre d’affaires via le direct en génère peut-être 10 %, et 15 % passent par des canaux payants dont l’attribution s’est perdue.
La cascade de sous-estimation du ROAS
L’utilisateur A clique sur votre annonce Google Ads Search le 1er juin. Il revient le 10 juin via Safari : ITP a effacé son cookie, GA4 le voit comme un nouveau visiteur « direct ». Il convertit, SFCC enregistre la commande, GA4 l’attribue au direct, et les rapports de canaux basés sur GA4 sous-évaluent la recherche payante. Google Ads peut encore compter la conversion via son propre tag et les enhanced conversions : comparez les deux avant de couper des budgets.
C’est la réalité structurelle pour tout commerce dont le cycle de réflexion dépasse 7 jours auprès d’utilisateurs Safari (ITP supprime les cookies écrits par script après 7 jours sans interaction). Vérifiez leur part dans votre propre GA4 (Tech › Navigateur) : sur mobile, c’est souvent un tiers ou plus.
La distorsion du taux de conversion
Si 15 % des achats réels n’ont généré aucun événement GA4, votre taux de conversion est systématiquement sous-estimé, et chaque test A/B, analyse de funnel ou comparaison de cohortes est biaisé à la baisse. Avant d’injecter des taux basés sur GA4 dans des calculs d’enchères, vérifiez-les contre SFCC.
Le système de classification en LookML
La solution : classer chaque commande non rapprochée avant qu’elle n’atteigne un dashboard.
Niveau 1 : classification d’origine
dimension: order_origin {
label: "Order Origin"
type: string
sql: CASE
WHEN ${TABLE}.ga4_session_id IS NOT NULL
THEN 'tracked_web'
WHEN ${TABLE}.ga4_session_id IS NULL
AND ${TABLE}.sfcc_channel IN ('store', 'pos', 'kiosk', 'retail')
THEN 'offline_store'
WHEN ${TABLE}.ga4_session_id IS NULL
AND ${TABLE}.sfcc_channel IN ('phone', 'callcenter', 'agent', 'fax')
THEN 'offline_callcenter'
-- … b2b_wholesale, subscription_automated,
-- WHEN sfcc_order_source = 'mobile_app' THEN 'mobile_app_untracked'
-- WHEN sfcc_channel IN ('web','storefront','website') THEN 'dark_traffic_web'
ELSE 'unknown'
END ;;
}
Niveau 2 : confiance du tracking
dimension: tracking_confidence {
label: "Tracking Confidence"
type: string
sql: CASE
WHEN ${order_origin} = 'tracked_web'
THEN '1. High'
WHEN ${order_origin} IN ('offline_store','offline_callcenter','b2b_wholesale','subscription_automated')
THEN '2. Structural gap'
WHEN ${order_origin} IN ('dark_traffic_web','mobile_app_untracked')
THEN '3. Fixable gap'
ELSE '4. Unknown'
END ;;
}
La bibliothèque de métriques
Quatre mesures gouvernées portent l’essentiel du suivi :
tracked_revenue: somme du CA net SFCC des commandestracked_web(CA attribuable aux canaux digitaux).fixable_gap_revenue: somme du CA net SFCC des commandes de confiance « 3. Fixable gap » (commandes web sans correspondance GA4). C’est l’argument économique de l’investissement en tracking.web_dark_traffic_rate: commandesdark_traffic_webdivisées par les commandes des canaux web/storefront. Cible interne : moins de 15 % (fixée à partir de notre référence). Toute hausse soudaine est à investiguer.revenue_coverage_ratio:tracked_revenuedivisé par le CA net SFCC total.
measure: web_dark_traffic_rate {
type: number
sql: COUNT(DISTINCT CASE WHEN ${order_origin} = 'dark_traffic_web' THEN ${TABLE}.order_id END)
/ NULLIF(COUNT(DISTINCT CASE WHEN ${TABLE}.sfcc_channel IN ('web','storefront') THEN ${TABLE}.order_id END), 0) ;;
value_format_name: percent_1
}
L’architecture des dashboards de réconciliation
- Vue exécutive du chiffre d’affaires : cinq tuiles (CA net SFCC total, CA tracké, CA de l’écart structurel, CA de l’écart corrigeable, ratio de couverture).
- Réconciliation finance : courbe du CA net SFCC contre le CA rapporté par GA4, par mois, avec l’écart. Elle répond à la question du lundi matin : « pourquoi les chiffres sont-ils différents ? »
- Santé de l’implémentation du tracking : tendance du taux de dark traffic web sur 90 jours. Un pic correspond à un déploiement qui a cassé quelque chose, une hausse progressive à une dégradation systémique (dérive du Consent Mode, croissance des bloqueurs).
- Mix business par canal : commandes et CA par
order_origin, par mois, pour montrer la vraie contribution des canaux hors ligne, B2B et abonnement, indépendamment de GA4.
Le point de départ minimal viable
- Exécuter les requêtes de diagnostic de la partie 3 pour connaître votre match rate actuel.
- Créer les deux vues BigQuery normalisées (
norm_sfcc_ordersetnorm_ga4_purchases). - Créer une table de réconciliation BigQuery avec
order_id,order_origin,sfcc_net_revenue,ga4_revenue,revenue_delta,channel,created_at. - Se connecter à Looker et définir les mesures gouvernées de base.
- Construire les quatre tuiles KPI et la courbe de dark traffic.
Sources
- Apple ITP, documentation officielle WebKit : webkit.org/tracking-prevention
- Safari ITP et web analytics, Simo Ahava : simoahava.com
- Mesurer des pages web dans des WebViews (GA4) : developers.google.com/analytics/devguides/collection/ga4/webview
- Consent Mode GA4 : developers.google.com/tag-platform/security/guides/consent
- Meta Conversions API : developers.facebook.com/docs/marketing-api/conversions-api
- Google Ads Enhanced Conversions : support.google.com/google-ads/answer/9888656
- Expression CASE en LookML : cloud.google.com/looker/docs/reference/param-field-sql
- Tables partitionnées BigQuery : cloud.google.com/bigquery/docs/partitioned-tables
Pour aller plus loin, lisez la version complète de l’article (en anglais) : Dark Traffic and Orphan Orders: The Complete Classification, Measurement and Exploitation Guide.
Besoin d’aide sur ce sujet ? Consultant GA4 et audit analytics.