Skip to content

Cookies & marketing

Regle de base : aucun outil collectant des donnees ne se charge avant le consentement de l'utilisateur. Le template implemente le consentement avec vanilla-cookieconsent et Google Consent Mode v2.

  • Lib vanilla-cookieconsent 3.1 (CSS importe). Charge en lazy depuis scripts/index.js (requestIdleCallback / fallback setTimeout) pour ne pas bloquer le LCP.
  • Lit les traductions depuis un noeud #cc_translations (JSON injecte cote serveur, alimente par le dictionnaire / cookiesSettings).
  • Categories : necessary (active, read-only) et analytics (desactivee par defaut ; autoClear des cookies _ga*/_gid).
  • Cookie de consentement : expiration 180 jours.
  • A chaque consentement/changement, appelle updateGTMConsent() qui pousse gtag('consent','update', { analytics_storage: 'granted'|'denied' }).

Le popup ne s'affiche que si CookieConsent:Enabled=true (appsettings.json -> CookieConsentOptions, src/Web/Options/CookieConsentOptions.cs). Le _MasterLayout n'inclut _cookiesConsent.cshtml que dans ce cas. Mettre Enabled=false quand un CMP tiers (OneTrust, Didomi...) est integre.

Le CSS de la librairie (dist/cookieconsent.css, importe dans scripts/modules/cookiesConsent.js) est extrait par Vite dans wwwroot/css/cookiesConsent/main.css et injecte au runtime au chargement du chunk lazy. Piege : vanilla-cookieconsent 3.x pose son markup au runtime (#cc-main, .cm/.cm__*, .pm/.pm__*, .cc-*), donc ces selecteurs sont absents des .cshtml et PurgeCSS les supprime. Ils sont conserves via la safelist greedy: [/^cc[-_]/, /^cc$/, /^cm/, /^pm/, /^show--/, /^disable--/] dans vite.config.helper.js (voir ../architecture/frontend-build.md). Sans elle, seules les variables :root { --cc-* } survivent et le popup s'affiche sans style.

Google Analytics 4 (Views/Partials/layout/marketing/_googleAnalytics4.cshtml)

  • Inclus inconditionnellement dans le <head> du _MasterLayout, mais Consent Mode v2 protege les donnees : gtag('consent','default', { analytics_storage: 'denied' }) est pose avant tout, donc rien n'est stocke tant que le visiteur n'a pas accepte.
  • Ne s'injecte que si Model.GoogleAnalytics4Id (propriete du document type marketingSettings) est renseigne.
  • anonymize_ip: true (LPD / RGPD). preconnect/dns-prefetch vers googletagmanager pour la latence.

Ajouter un outil marketing / analytics

Procedure (README "Guide de developpement") :

  1. Creer un partial sous Views/Partials/layout/marketing/.
  2. L'inclure dans Views/Layouts/_MasterLayout.cshtml (fin du <head>), conditionne au consentement le cas echeant.
  3. Mettre a jour scripts/modules/cookiesConsent.js (acceptCookies() / handlers de consentement) pour injecter/activer le script dynamiquement au moment du consentement - sinon il faudrait recharger la page.
  4. Si l'outil pose des classes/cookies dynamiques, penser a la safelist PurgeCSS et a l'autoClear de la categorie concernee.

Contributors

No contributors

Changelog

No recent changes