Suivi propriétaire avec Cloudflare Workers
Configurez un proxy propriétaire à l'aide de Cloudflare Workers. Ce guide s'adresse aux utilisateurs d'hébergement partagé (Hostinger, GoDaddy, Bluehost, etc.) qui ne peuvent pas configurer de proxys côté serveur.
Limitation importante : Firefox ETP non contourné
Ce guide configure un sous-domaine personnalisé (z.yourdomain.com). Bien qu'il contourne certains bloqueurs de publicités et Safari ITP, il ne contourne PAS Firefox Enhanced Tracking Protection (ETP) car les sous-domaines sont toujours considérés comme des origines différentes.
Si vous avez besoin de la compatibilité Firefox ETP, utilisez plutôt l'une de ces options de proxy au même domaine :
- Cloudflare Pages Functions - Si vous êtes sur Cloudflare Pages
- Vercel - Si vous êtes sur Vercel
- Netlify - Si vous êtes sur Netlify
- Next.js - Si vous utilisez Next.js
Ceux-ci utilisent des chemins /api/_z/ qui sont de la même origine et contournent vraiment toute la protection de suivi.
Difficulté : Facile - Prend environ 10 minutes. Aucune expérience en codage requise. Juste copier et coller.
Nommage du sous-domaine
Si vous procédez avec cette approche, utilisez z.yourdomain.com (et non analytics.*, metrics.*, tracking.* ou stats.* qui sont bloqués par des filtres heuristiques supplémentaires).
Avant de commencer
Assurez-vous d'avoir :
- Un compte Cloudflare (le niveau gratuit fonctionne parfaitement) - Inscrivez-vous ici
- Votre domaine ajouté à Cloudflare (voir l'étape 2)
- Votre code de suivi Zenovay (trouvé sous Domains → your site → General)
Format de votre code de suivi
Votre code de suivi ressemble à : ZV_XXXXXXXXXX
- Commence par
ZV_ - Suivi de 10 caractères (lettres et chiffres)
- SENSIBLE À LA CASSE - copiez-le exactement
Exemple : ZV_Q8U0GYD70WR
Pourquoi Cloudflare Workers ?
Cloudflare Workers s'exécutent sur le réseau edge mondial de Cloudflare (plus de 300 centres de données). Cela signifie :
- Rapide : Temps de réponse inférieurs à 50 ms dans le monde entier
- Gratuit : 100 000 requêtes/jour sur le plan gratuit (plus que suffisant pour la plupart des sites)
- Simple : Aucun serveur à gérer
- Fiable : 99,99 % de disponibilité
Étape 1 : Créer un compte Cloudflare
Si vous avez déjà un compte Cloudflare, passez à l'étape 2.
- Allez sur cloudflare.com
- Cliquez sur Sign Up (coin supérieur droit)
- Entrez votre adresse e-mail
- Créez un mot de passe (au moins 8 caractères)
- Cliquez sur Create Account
- Vérifiez votre e-mail et cliquez sur le lien de vérification
L'e-mail n'arrive pas ? Vérifiez votre dossier de spam. L'e-mail provient de [email protected].
Étape 2 : Ajouter votre domaine à Cloudflare
Cette étape est obligatoire. Sans ajouter votre domaine à Cloudflare, vous ne pouvez pas créer de sous-domaine personnalisé comme z.yourdomain.com.
- Connectez-vous à votre tableau de bord Cloudflare
- Cliquez sur Add a Site (grand bouton bleu)
- Entrez le nom de votre domaine (par exemple,
yourdomain.com)- N'incluez pas
www.ouhttps:// - Juste le domaine :
yourdomain.com
- N'incluez pas
- Cliquez sur Continue
- Sélectionnez le plan Free et cliquez sur Continue
- Cloudflare scannera vos enregistrements DNS existants - cliquez sur Continue
- Cloudflare vous montre deux serveurs de noms comme :
bella.ns.cloudflare.comtroy.ns.cloudflare.com
- Copiez ces serveurs de noms - vous en aurez besoin à l'étape suivante
Mettre à jour les serveurs de noms de votre domaine
Maintenant, vous devez pointer votre domaine vers Cloudflare :
- Connectez-vous à votre registraire de domaine (où vous avez acheté votre domaine) :
- GoDaddy : godaddy.com
- Namecheap : namecheap.com
- Google Domains : domains.google.com
- Hostinger : hostinger.com
- Trouvez les paramètres DNS ou serveurs de noms de votre domaine
- Remplacez les serveurs de noms existants par les serveurs de noms Cloudflare
- Enregistrez les modifications
Les changements de serveurs de noms prennent du temps. Cela peut prendre de 5 minutes à 48 heures pour que les modifications se propagent. Généralement, c'est fait dans les 30 minutes.
Cloudflare vous enverra un e-mail lorsque votre domaine sera actif.
Utilisez l'hébergement partagé ? Vous pouvez toujours ajouter votre domaine à Cloudflare. Votre hébergement existant continuera à fonctionner - Cloudflare devient simplement un proxy devant. Votre site web fonctionnera normalement.
Étape 3 : Créer le Worker
- Dans la barre latérale du tableau de bord Cloudflare, cliquez sur Workers & Pages
- Cliquez sur le bouton bleu Create
- Cliquez sur Create Worker
- Donnez un nom à votre worker :
zenovay-proxy- Utilisez uniquement des lettres minuscules, des chiffres et des traits d'union
- Les espaces ne sont pas autorisés
- Cliquez sur Deploy
Vous verrez un message de succès. Maintenant, nous devons ajouter le code du proxy.
Étape 4 : Ajouter le code du proxy
Ne sautez aucune étape ! Copiez le code exactement comme indiqué. Un caractère manquant brisera tout.
- Après le déploiement, cliquez sur Edit code (ou allez sur votre Worker et cliquez sur "Edit code")
- Vous verrez un éditeur de code avec un code par défaut
- Sélectionnez TOUT le code existant (Cmd+A sur Mac, Ctrl+A sur Windows)
- Supprimez-le (appuyez sur Supprimer ou Retour arrière)
- Copiez et collez le code suivant :
// Zenovay First-Party Proxy Worker
// This proxies tracking requests through your domain to bypass ad blockers
export default {
async fetch(request) {
const url = new URL(request.url);
// Get the real visitor IP address (for accurate geolocation)
const clientIP = request.headers.get('CF-Connecting-IP') || '';
// Determine the target URL based on the request path
let targetUrl;
if (url.pathname === '/script.js' || url.pathname === '/z.js') {
// Script requests go to the regular endpoint
targetUrl = `https://api.zenovay.com/z.js${url.search}`;
} else {
// All other requests (events, settings) go through first-party endpoint
targetUrl = `https://api.zenovay.com/fp${url.pathname}${url.search}`;
}
// Copy the original request headers
const headers = new Headers(request.headers);
// IMPORTANT: Forward the real visitor IP for accurate geolocation
headers.set('X-Zenovay-Real-IP', clientIP);
// Remove the Host header (we're proxying to a different domain)
headers.delete('Host');
// Handle CORS preflight requests
if (request.method === 'OPTIONS') {
return new Response(null, {
status: 204,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
},
});
}
try {
// Forward the request to Zenovay API
const response = await fetch(targetUrl, {
method: request.method,
headers: headers,
body: request.body,
});
// Add CORS headers to the response
const responseHeaders = new Headers(response.headers);
responseHeaders.set('Access-Control-Allow-Origin', '*');
// Return the response to the visitor's browser
return new Response(response.body, {
status: response.status,
headers: responseHeaders,
});
} catch (error) {
// If something goes wrong, return an error
return new Response(JSON.stringify({ error: 'Proxy error' }), {
status: 502,
headers: { 'Content-Type': 'application/json' },
});
}
}
}- Cliquez sur Save and Deploy (coin supérieur droit)
- Attendez le message "Worker deployed successfully"
Code copié avec succès ? Vous devriez voir "Worker deployed successfully" en haut. Si vous voyez des erreurs, assurez-vous d'avoir copié TOUT le code, y compris l'ouverture export default { et la fermeture }.
Étape 5 : Ajouter votre domaine personnalisé
CRITIQUE : Vous DEVEZ utiliser z.yourdomain.com
Firefox et Edge bloquent automatiquement ces sous-domaines :
analytics.yourdomain.com— BLOQUÉmetrics.yourdomain.com— BLOQUÉtracking.yourdomain.com— BLOQUÉstats.yourdomain.com— BLOQUÉtelemetry.yourdomain.com— BLOQUÉpixel.yourdomain.com— BLOQUÉ
Le SEUL sous-domaine recommandé est : z.yourdomain.com
C'est un sous-domaine neutre d'une seule lettre que les navigateurs ne bloquent pas.
Maintenant, relions votre Worker à votre domaine :
- Allez sur votre Worker dans le tableau de bord Cloudflare
- Cliquez sur l'onglet Settings (pas "Triggers" - il a été déplacé vers Settings)
- Faites défiler vers le bas pour trouver la section Domains & Routes
- Cliquez sur Add → Custom Domain
- Entrez votre sous-domaine :
z.yourdomain.com- Remplacez
yourdomain.compar votre domaine réel - Gardez le préfixe
z.exactement comme indiqué
- Remplacez
- Cliquez sur Add Custom Domain
- Cloudflare fera automatiquement :
- Créer un enregistrement DNS pour
z.yourdomain.com - Provisionner un certificat SSL (HTTPS)
- Cela prend 1-2 minutes
- Créer un enregistrement DNS pour
Attendez la coche verte. Votre domaine personnalisé affichera "Initializing" puis passera à "Active" avec une coche verte. Ne procédez pas tant que vous ne voyez pas la coche verte.
Étape 6 : Tester votre Worker
Avant d'ajouter le script de suivi, assurez-vous que le Worker fonctionne :
- Ouvrez un nouvel onglet de navigateur
- Allez à :
https://z.yourdomain.com/script.js- Remplacez
yourdomain.compar votre domaine réel
- Remplacez
- Vous devriez voir du code JavaScript (un tas de code minifié)
Voir du code JavaScript ? Votre Worker fonctionne correctement. Passez à l'étape 7.
Voir une erreur ou une page vierge ?
- Vérifiez que votre domaine personnalisé affiche "Active" dans Cloudflare
- Attendez 2-3 minutes et réessayez
- Assurez-vous que vous avez tapé l'URL correctement
Étape 7 : Ajouter le script de suivi à votre site Web
IMPORTANT : Vous devez utiliser la méthode de script en ligne ci-dessous.
La simple méthode <script src="..."> ne fonctionne PAS de manière fiable avec Cloudflare Workers car :
- Cloudflare Rocket Loader peut interférer avec le chargement du script
- La config doit être définie AVANT le chargement du script
Utilisez la méthode de script en ligne montrée ci-dessous.
Ajoutez ce code à la section <head> de votre site Web. Vous pouvez trouver votre code de suivi sous Domains → your site → General dans l'application Zenovay.

<script data-cfasync="false">
window.ZENOVAY_TRACKER_CONFIG = {
trackingCode: 'YOUR_TRACKING_CODE',
apiUrl: 'https://z.yourdomain.com',
settingsEndpoint: '/settings'
};
var script = document.createElement('script');
script.src = 'https://z.yourdomain.com/script.js';
script.defer = true;
document.head.appendChild(script);
</script>Ce qu'il faut remplacer :
| Placeholder | Remplacer par | Exemple |
|---|---|---|
YOUR_TRACKING_CODE | Votre code de suivi du tableau de bord Zenovay | ZV_Q8U0GYD70WR |
z.yourdomain.com (apparaît 2 fois) | Votre domaine personnalisé réel | z.mywebsite.com |
Remplacez LES DEUX occurrences de z.yourdomain.com ! Il y a deux places dans le code où vous devez mettre votre domaine.
Exemple avec des valeurs réelles :
<script data-cfasync="false">
window.ZENOVAY_TRACKER_CONFIG = {
trackingCode: 'ZV_Q8U0GYD70WR',
apiUrl: 'https://z.mywebsite.com',
settingsEndpoint: '/settings'
};
var script = document.createElement('script');
script.src = 'https://z.mywebsite.com/script.js';
script.defer = true;
document.head.appendChild(script);
</script>Où ajouter ce code :
- WordPress : Utilisez un plugin comme "Insert Headers and Footers" ou ajoutez à votre
header.phpdu thème - Wix : Settings → Custom Code → Head Code
- Squarespace : Settings → Advanced → Code Injection → Header
- Shopify : Online Store → Themes → Edit Code →
theme.liquid(dans la section<head>) - Fichiers HTML : Entre les balises
<head>et</head> - N'importe quel CMS : Recherchez "Custom Code" ou "Header Scripts" dans vos paramètres
Étape 8 : Vérifier que cela fonctionne
Vérification 1 : Onglet Network (N'importe quel navigateur)
- Ouvrez votre site Web dans Chrome, Firefox ou Edge
- Appuyez sur F12 (ou Cmd+Option+I sur Mac) pour ouvrir DevTools
- Cliquez sur l'onglet Network
- Actualisez votre site Web (Cmd+R ou Ctrl+R)
- Dans la boîte filtre/recherche, tapez
script.js - Recherchez une requête à
z.yourdomain.com/script.js
Ce que vous devriez voir :
- Status : 200 (OK)
- Domain :
z.yourdomain.com(votre domaine, pas api.zenovay.com)
Vérification 2 : Mode Firefox Strict (Le plus important !)
Firefox a la protection de suivi la plus stricte. Si cela fonctionne dans Firefox, cela fonctionne partout.
- Ouvrez le navigateur Firefox
- Cliquez sur le menu (☰) → Settings
- Cliquez sur Privacy & Security dans la barre latérale gauche
- Sous "Enhanced Tracking Protection", sélectionnez Strict
- Fermez les paramètres et visitez votre site Web
- Ouvrez DevTools (F12) → onglet Network
- Actualisez la page
- Recherchez
script.js- il devrait se charger avec le statut 200
Fonctionne en mode Firefox Strict ? Félicitations ! Votre suivi propriétaire est correctement configuré et fonctionne dans TOUS les navigateurs.
Vérification 3 : Tableau de bord Zenovay
- Allez à app.zenovay.com et connectez-vous
- Cliquez sur votre site Web
- Visitez votre site Web dans un autre onglet
- Dans 1-2 minutes, vous devriez voir la visite apparaître dans votre tableau de bord
Liste de contrôle finale
Avant d'avoir terminé, vérifiez TOUS ces éléments :
- Worker déployé sur
z.yourdomain.com(répondant avec du code JavaScript) - Le domaine personnalisé utilise le préfixe
z.(PASanalytics.,metrics., etc.) - La balise script inclut l'attribut
data-cfasync="false" -
window.ZENOVAY_TRACKER_CONFIGest défini avec le bontrackingCode - Les deux URLs du script utilisent votre domaine personnalisé
z.yourdomain.com - Testé dans Firefox avec Enhanced Tracking Protection défini sur Strict
- Les visites apparaissent dans le tableau de bord Zenovay
Dépannage
Worker retourne l'erreur 522 ou 524
Cause : Délai d'expiration lors de la connexion à l'API Zenovay.
Solution :
- Vérifiez que
api.zenovay.comest accessible (visitez-le dans votre navigateur) - Vérifiez qu'il n'y a pas de fautes de frappe dans le code du proxy
- Essayez de redéployer le worker (Edit code → Save and Deploy)
Le domaine personnalisé affiche une erreur SSL
Cause : Certificat SSL non encore provisionné.
Solution : Attendez 1-5 minutes. Cloudflare provisionne automatiquement les certificats SSL. Si cela prend plus de 10 minutes, vérifiez que les serveurs de noms de votre domaine pointent correctement vers Cloudflare.
Le script se charge mais pas de données dans le tableau de bord
Cause : Généralement une incohérence du code de suivi.
Solution :
- Ouvrez la console DevTools de votre navigateur (F12 → onglet Console)
- Recherchez les messages d'erreur rouges
- Vérifiez que votre
trackingCodecorrespond exactement à celui de votre tableau de bord Zenovay (sensible à la casse !) - Assurez-vous que le domaine du site Web est enregistré dans Zenovay
"Le script s'exécute" mais rien ne se passe
Cause : L'apiUrl dans votre config est incorrect.
Solution :
Assurez-vous que votre window.ZENOVAY_TRACKER_CONFIG a le bon apiUrl:
apiUrl: 'https://z.yourdomain.com', // Votre domaine personnalisé réel
La géolocalisation affiche un mauvais emplacement
Cause : L'IP réelle du visiteur n'est pas transférée à Zenovay.
Solution : Assurez-vous que votre code worker inclut cette ligne :
headers.set('X-Zenovay-Real-IP', clientIP);
Firefox/Edge bloque toujours
Cause : Vous utilisez un sous-domaine bloqué comme analytics.* ou metrics.*.
Solution :
Changez votre domaine personnalisé en z.yourdomain.com. Vous devrez :
- Allez sur Workers & Pages → Votre Worker → Settings
- Supprimez l'ancien domaine personnalisé
- Ajoutez un nouveau domaine personnalisé :
z.yourdomain.com - Mettre à jour les deux URLs dans votre script de suivi
Avancé : Plusieurs sites Web
Si vous avez plusieurs sites Web, vous pouvez utiliser un worker pour tous :
-
Ajoutez plusieurs domaines personnalisés au même worker :
z.website1.comz.website2.comz.website3.com
-
Chaque site Web utilise son propre code de suivi :
<script data-cfasync="false">
window.ZENOVAY_TRACKER_CONFIG = {
trackingCode: 'ZV_SITE1CODE',
apiUrl: 'https://z.website1.com',
settingsEndpoint: '/settings'
};
var s = document.createElement('script');
s.src = 'https://z.website1.com/script.js';
s.defer = true;
document.head.appendChild(s);
</script><script data-cfasync="false">
window.ZENOVAY_TRACKER_CONFIG = {
trackingCode: 'ZV_SITE2CODE',
apiUrl: 'https://z.website2.com',
settingsEndpoint: '/settings'
};
var s = document.createElement('script');
s.src = 'https://z.website2.com/script.js';
s.defer = true;
document.head.appendChild(s);
</script>Prochaines étapes
- Custom Events - Suivez les clics sur les boutons et les envois de formulaires
- Visitor Identification - Connectez analytics aux comptes d'utilisateurs
- Troubleshooting - Plus d'aide sur les problèmes courants
Besoin d'aide ?
Si vous êtes bloqué :
- Vérifiez à nouveau chaque étape ci-dessus
- Assurez-vous d'utiliser
z.yourdomain.com(pasanalytics.*oumetrics.*) - Testez en mode Firefox Strict
- Vérifiez la console du navigateur pour les erreurs (F12 → onglet Console)
Toujours bloqué ? Contactez le support à [email protected] avec :
- Votre nom de domaine
- Capture d'écran de l'onglet Network
- Tous les messages d'erreur de l'onglet Console