Le parcours utilisateur n’a jamais été aussi fragmenté.
Un utilisateur découvre ton site sur mobile, lit une page produit sur desktop, ouvre ton app le soir, puis finalise son achat dans l’app quelques jours plus tard.
Le problème :
👉 avec la fin des cookies tiers et la purge automatique des cookies sur Safari, Firefox, iOS et bientôt Chrome, la continuité entre ces appareils disparaît.
Les plateformes d’attribution (GA4, Google Ads, Meta, TikTok…) perdent la capacité d’associer les événements entre mobile et desktop.
Résultat :
ROAS faussé
entonnoirs brisés
LTV sous-estimée
conversions non attribuées
funnel incomplet
reporting incohérent
Cet article te donne un tutoriel complet, étape par étape, pour construire une attribution cross-device fiable sans cookies, en combinant :
User_ID,
email hashé,
deep links,
server-side tracking,
CRM,
BigQuery,
et GA4.
Objectif : retrouver une vision claire, unifiée et exploitable du parcours utilisateur.
Le cross-device tracking consiste à identifier le même utilisateur sur plusieurs appareils, même s’il change de :
navigateur,
device,
session,
app → web ou web → app.
Sans cookies, on doit créer un identifiant commun.
Cookies tiers : bloqués (Safari/Firefox) + supprimés en 2025 (Chrome).
Cookies first-party : durées réduites à 1–7 jours sur Safari.
Cookies effacés lors du remplacement d’IP / changement d’appareil.
Cookies inaccessibles en mode privé.
Bref :
Les cookies ne sont plus un support viable pour l’attribution.
ID interne stable, envoyé côté web + app.
Conforme RGPD, compatible GA4, CRM, BigQuery, Ads.
IDFV (iOS)
Firebase App Instance ID
GA4 App Instance ID
Utilisé par Meta, TikTok, Snap.
GA4 combine trois niveaux :
User-ID si l’utilisateur est connecté
Device ID si pas loggé
Modelling pour relier les sessions “probables”
Mais GA4 seul n’est jamais suffisant.
Pour un vrai cross-device, tu dois créer ton propre système.
Un utilisateur clique une pub mobile → achète sur desktop.
Un utilisateur lit un article sur mobile → installe l’app → finalise l’achat dans l’app.
Web → app → web pour un processus de paiement.
Mobile → desktop pour un formulaire complexe.
Sans cross-device, tu perds :
conversions web attribuées au trafic direct
conversions app impossibles à relier à une source web
abonnements mobiles non attribués
retargeting impossible faute d’identifiant stable
Priorise les parcours où la perte de continuité coûte le plus cher :
acquisition paid → conversion
signup web → conversion app
ajout au panier web → achat app
free trial app → upgrade desktop
C’est le seul identifiant réellement stable.
Il appartient à ton CRM.
Il doit être :
généré par ton backend
envoyé côté web (via GTM / gtag)
envoyé dans l’app (Firebase / SDK)
identique dans tous les environnements
Piliers d’une bonne implémentation User_ID :
user_id = identifiant interne unique
jamais d’email brut
user_id envoyé sur chaque event GA4
L’email est le seul identifiant commun web ↔ app ↔ CRM.
Tu dois :
nettoyer l’email (lowercase/trim)
appliquer un hash SHA-256
stocker dans ton CRM
utiliser dans BigQuery
l’envoyer vers Ads (Customer Match)
GA4 interdit l’email brut mais accepte l’email hashé via server-side.
IDFV : stable par app publisher
Firebase Instance ID
GA4 App Instance ID
Ces identifiants permettent de relier des actions app à un user_id (via CRM).
Tu peux envoyer un identifiant commun via CAPI :
external_id
event_id
Ces IDs permettent la déduplication navigateur ↔ serveur.
GA4 → Admin → Data Streams → Web → Config → User-ID
Cela dit à GA4 de fusionner les sessions web + app en un seul profil utilisateur.
Via GTM :
gtag('set', {
'user_id': userId
});
Via dataLayer :
dataLayer.push({
user_id: userId
});
Firebase :
await analytics().setUserId(userId);
Avec User-ID :
GA4 fusionne les sessions web + app
les funnels deviennent multi-device
les rapports cross-platform sont activés
Attention :
→ GA4 ne fusionne pas rétroactivement
→ GA4 ne fusionne pas sans login réel
Lors d’un deep-link :
inclure un JWT contenant :
user_id
email hash
décoder côté web pour recharger le user_id
Déjà utilisé par : Deliveroo, Uber, Spotify.
Technos :
Branch
Adjust
AppsFlyer
On encode dans le lien :
user_id
email hash
→ puis l’app récupère ces données lors du premier launch.
Un utilisateur se connecte :
→ tu synchronises le user_id dans GA4, back + front.
→ GA4 fusionne automatiquement.
Parce que :
les navigateurs bloquent le tracking → pas les serveurs
le backend connaît la vérité (user_id + email hash)
S2S = attribution stable, cross-device et cookieless
Web/App → Backend → BigQuery → GA4 server-side
↓
Google Ads / Meta
Google Tag Manager Server-Side (le plus populaire)
Segment Connections
mParticle
Plateforme custom server-side
Activer l’export → les tables GA4 arrivent :
events
app_events
device_id
user_id (si login)
Colonnes clés :
customer_id
email_hash
LTV
subscription_status
cohort
segments marketing
SELECT
bq_ga4.user_id,
crm.customer_id,
crm.email_hash,
crm.ltv,
crm.segment,
crm.subscription_status,
COUNT(*) AS sessions
FROM ga4.events AS bq_ga4
LEFT JOIN crm.customers AS crm
ON bq_ga4.email_hash = crm.email_hash
GROUP BY 1,2,3,4,5,6
La Customer 360 permet d’identifier les conversions cross-device :
mobile click → desktop conversion
web signup → app purchase
web cart → app checkout
Via GA4 Measurement Protocol :
user_property: segment
user_property: ltv_bucket
user_property: device_bridge
Avec email hash →
audience VIP,
anti-churn,
high-value,
multi-device purchasers.
Avec external_id stable :
meilleure attribution iOS
fusion navigateur/app
ROAS plus proche de la réalité
% sessions fusionnées
% users multi-device
ROAS cross-device
app-to-web conversions
web-to-app conversions
matching rate user_id
taux d’anomalies (session cassée)
user_id envoyé avant connexion
différence user_id web/app
email hash mal normalisé
perte sur Safari/iOS
APIs server-side non dédupliquées
web → login → app → checkout
app → deep link → web
web → mobile (deferred deep link)
multi-device signup
suppression cookie + relogin
panier web → achat app
audiences cross-device basées sur le login
signup mobile → upgrade desktop
abonnement multi-device
attribution web → install app
multi-device retargeting optimisé CAPI
Espérer que GA4 suffise seul
Confondre Client_ID ↔ User_ID
Utiliser des cookies tiers (obsolète)
Stocker des PII dans GA4
Ne pas normaliser email hash
Ne pas utiliser de deferred deep links
Ne pas envoyer user_id dans l’app
Oublier server-side (indispensable)
Le cross-device sans cookies n’est plus un challenge technique, mais un avantage stratégique.
En combinant :
login (User-ID)
email hashé
deep links
server-side events
BigQuery
GA4 identity modelling
… tu reconstruis une vision utilisateur complète, cohérente, et durable.
C’est la seule architecture encore viable pour :
analyser correctement,
attribuer précisément,
optimiser ton ROAS,
et maintenir un tracking robuste dans un monde cookieless.



