Suivi First-Party avec Netlify
Configurez un proxy first-party sur Netlify à l'aide de simples règles de redirection. Fonctionne avec n'importe quel site statique ou framework.
Difficulté : Facile - Il suffit d'ajouter quelques lignes dans un fichier de configuration.
Pourquoi Cela Fonctionne (Same-Origin)
Cette approche utilise /api/_z/script.js qui se trouve sur la même origine que votre site web. Firefox ETP et les autres protections de suivi ne bloquent que les demandes cross-origin.
- Le navigateur voit :
yourdomain.com/api/_z/script.js→ Même origine ✅ - Netlify redirige la demande vers le serveur Zenovay côté serveur (le navigateur ne voit jamais cela)
- Toutes les protections de suivi sont contournées car la demande est first-party
Avant de Commencer
Assurez-vous que vous avez :
- Un projet déployé sur Netlify
- Votre code de suivi Zenovay (trouvé sous Domaines → votre site → Général, dans la carte de script de suivi)
- L'accès à la configuration de build de votre projet
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

Option 1 : Utiliser le Fichier _redirects (Plus Simple)
Le moyen le plus facile de configurer le proxy est d'utiliser le fichier _redirects de Netlify.
Étape 1 : Créer le Fichier de Redirections
Créez un fichier _redirects dans votre dossier public/ (ou partout où vont vos assets statiques) :
# Proxy de suivi first-party Zenovay
/api/_z/* https://api.zenovay.com/fp/:splat 200Comment cela fonctionne : Le code de statut 200 transforme cela en une réécriture (proxy) au lieu d'une redirection. Le navigateur voit votre domaine, mais Netlify récupère depuis l'API Zenovay en arrière-plan.
Étape 2 : Ajouter le Script de Suivi
<script defer
data-tracking-code="VOTRE_CODE_DE_SUIVI"
src="/api/_z/script.js">
</script>Étape 3 : Déployer
netlify deploy --prodOu poussez vers votre dépôt Git si vous avez le déploiement continu configuré.
Option 2 : Utiliser netlify.toml (Plus Explicite)
Pour des configurations plus complexes, utilisez netlify.toml :
Étape 1 : Créer ou Mettre à Jour netlify.toml
Ajoutez la règle de redirection à votre netlify.toml à la racine de votre projet :
# Proxy de suivi first-party Zenovay
[[redirects]]
from = "/api/_z/*"
to = "https://api.zenovay.com/fp/:splat"
status = 200
force = trueSi vous avez déjà un netlify.toml, ajoutez la redirection à votre fichier existant :
[build]
command = "npm run build"
publish = "dist"
# Proxy de suivi first-party Zenovay
[[redirects]]
from = "/api/_z/*"
to = "https://api.zenovay.com/fp/:splat"
status = 200
force = true
# Vos autres redirections...
[[redirects]]
from = "/*"
to = "/index.html"
status = 200L'ordre compte ! Mettez la redirection Zenovay AVANT les redirections catch-all (comme les fallbacks SPA). Netlify traite les redirections dans l'ordre.
Étape 2 : Ajouter le Script de Suivi
<script defer
data-tracking-code="VOTRE_CODE_DE_SUIVI"
src="/api/_z/script.js">
</script>Étape 3 : Déployer
netlify deploy --prodExemples Spécifiques au Framework
React (Create React App)
/api/_z/* https://api.zenovay.com/fp/:splat 200<!DOCTYPE html>
<html lang="en">
<head>
<script defer data-tracking-code="VOTRE_CODE_DE_SUIVI" src="/api/_z/script.js"></script>
<!-- other head elements -->
</head>
<body>
<div id="root"></div>
</body>
</html>Vue.js (Vite)
/api/_z/* https://api.zenovay.com/fp/:splat 200<!DOCTYPE html>
<html lang="en">
<head>
<script defer data-tracking-code="VOTRE_CODE_DE_SUIVI" src="/api/_z/script.js"></script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>Gatsby
[build]
command = "gatsby build"
publish = "public"
[[redirects]]
from = "/api/_z/*"
to = "https://api.zenovay.com/fp/:splat"
status = 200
force = trueimport React from 'react'
export const onRenderBody = ({ setHeadComponents }) => {
setHeadComponents([
<script
key="zenovay"
defer
data-tracking-code="VOTRE_CODE_DE_SUIVI"
src="/api/_z/script.js"
/>
])
}Hugo
/api/_z/* https://api.zenovay.com/fp/:splat 200<script defer data-tracking-code="VOTRE_CODE_DE_SUIVI" src="/api/_z/script.js"></script>11ty (Eleventy)
/api/_z/* https://api.zenovay.com/fp/:splat 200Assurez-vous que _redirects est copié vers la sortie en ajoutant à votre .eleventy.js :
module.exports = function(eleventyConfig) {
eleventyConfig.addPassthroughCopy("src/_redirects");
// ... rest of config
}Vérifier que Cela Fonctionne
Vérifier dans le Tableau de Bord Netlify
- Allez à votre site dans le Tableau de Bord Netlify
- Cliquez sur Configuration du site → Redirections
- Vous devriez voir votre redirection
/api/_z/*listée
Vérifier l'Onglet Réseau
- Visitez votre site déployé
- Ouvrez DevTools (F12)
- Allez à l'onglet Réseau
- Rechargez la page
- Recherchez
/api/_z/script.js
Vous devriez voir :
- Statut : 200
- Domaine : Votre domaine Netlify
- Réponse : Code JavaScript
Tester en Mode Strict de Firefox
- Ouvrez Firefox
- Paramètres → Confidentialité et Sécurité → Protection Renforcée Contre le Suivi : Stricte
- Visitez votre site
- Vérifiez que le script se charge correctement
Dépannage
La Redirection Retourne 404
Cause : Le fichier _redirects n'est pas publié ou se trouve au mauvais endroit.
Solution :
- Assurez-vous que
_redirectsse trouve dans votre répertoire de publication (généralementpublic/oudist/) - Pour les outils de build, assurez-vous que le fichier est copié pendant le build
- Vérifiez le Tableau de Bord Netlify → Redirections pour voir s'il est reconnu
La Redirection Cause une Boucle
Cause : Une autre redirection interfère.
Solution :
- Utilisez
force = truedansnetlify.tomlpour remplacer d'autres règles - Assurez-vous que la redirection Zenovay vient AVANT les règles catch-all
- Vérifiez les règles conflictuelles dans
_redirectsetnetlify.toml
Le Script Se Charge Mais Retourne du HTML
Cause : Une redirection catch-all SPA intercepte la demande.
Solution : Mettez la redirection Zenovay AVANT votre fallback SPA :
# Cela DOIT venir en premier
[[redirects]]
from = "/api/_z/*"
to = "https://api.zenovay.com/fp/:splat"
status = 200
force = true
# Le fallback SPA vient après
[[redirects]]
from = "/*"
to = "/index.html"
status = 200La Géolocalisation Affiche Mauvais Emplacement
Cause : Le proxy de Netlify ne transfère pas automatiquement l'IP du client.
Solution : Malheureusement, les redirections simples de Netlify ne supportent pas les en-têtes personnalisés. La géolocalisation sera basée sur la localisation du serveur de bord de Netlify. Pour une géolocalisation précise, considérez :
- Utiliser les Netlify Functions (Edge Functions) - configuration plus complexe
- Utiliser Cloudflare Workers devant Netlify
Avancé : Utiliser les Netlify Edge Functions
Pour plus de contrôle (y compris le transfert d'IP), vous pouvez utiliser les Netlify Edge Functions :
import type { Context } from '@netlify/edge-functions'
export default async (request: Request, context: Context) => {
const url = new URL(request.url)
const path = url.pathname.replace('/api/_z/', '')
const targetUrl = `https://api.zenovay.com/fp/${path}${url.search}`
// Récupérer l'IP du client
const clientIP = context.ip || ''
const headers = new Headers(request.headers)
headers.set('X-Zenovay-Real-IP', clientIP)
headers.delete('Host')
const response = await fetch(targetUrl, {
method: request.method,
headers: headers,
body: request.body,
})
const responseHeaders = new Headers(response.headers)
responseHeaders.set('Access-Control-Allow-Origin', '*')
return new Response(response.body, {
status: response.status,
headers: responseHeaders,
})
}
export const config = {
path: '/api/_z/*',
}Exemple Complet
my-netlify-site/
├── netlify.toml
├── public/
│ ├── _redirects
│ └── index.html
├── src/
│ └── ...
└── package.json[build]
command = "npm run build"
publish = "dist"
[[redirects]]
from = "/api/_z/*"
to = "https://api.zenovay.com/fp/:splat"
status = 200
force = true<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Site</title>
<script defer data-tracking-code="VOTRE_CODE_DE_SUIVI" src="/api/_z/script.js"></script>
</head>
<body>
<div id="app"></div>
</body>
</html>Liste de Contrôle Finale
Avant de terminer, vérifiez TOUS les points suivants :
-
_redirectsounetlify.tomla la règle de redirection Zenovay - La règle de redirection vient AVANT les règles catch-all SPA
- La balise de script utilise
/api/_z/script.js(pas l'URL Zenovay directe) - L'attribut
data-tracking-codecontient votre code de suivi correct - Le projet est déployé (pas juste en cours d'exécution localement)
- Testé dans Firefox avec la Protection Renforcée Contre le Suivi définie sur Stricte
- Les visites apparaissent dans le tableau de bord Zenovay
Prochaines Étapes
- Événements Personnalisés - Suivre les interactions utilisateur
- Identification des Visiteurs - Lier les analytics aux utilisateurs
- Dépannage - Plus d'aide sur les problèmes