[{"data":1,"prerenderedAt":2540},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fdata\u002Fanalytique-axee-sur-la-confidentialite":13},{"i18nKey":4,"paths":5},"data-006-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side","\u002Fen\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","\u002Fes\u002Fdata\u002Fprivacidad-first-analytics-plausible-agregacion-servidor","\u002Ffr\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","\u002Fit\u002Fdata\u002Fanalytics-privacy-first-plausible-aggregazione-lato-server","\u002Fru\u002Fdata\u002Fprivacy-first-analytics-plausible-serverside-aggregation","\u002Ftr\u002Fdata\u002Fprivacy-first-analytics-plausible-ve-sunucu-tarafi-aggregation",{"_path":14,"_dir":15,"_draft":16,"_partial":16,"_locale":17,"title":18,"description":19,"publishedAt":20,"modifiedAt":20,"category":15,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":2534,"_id":2535,"_source":2536,"_file":2537,"_stem":2538,"_extension":2539},"\u002Ffr\u002Fdata\u002Fanalytique-axee-sur-la-confidentialite","data",false,"","Analytique Privacy-First : Plausible et Agrégation Côté Serveur","Suivi sans cookie, conformité RGPD\u002FKVKK et alternative à GA4 : refondre la mesure utilisateur avec Plausible + architecture d'agrégation côté serveur.","2026-07-26",[22,23,24,25,26],"analytique-confidentialite-stricte","plausible","suivi-sans-cookie","conformite-rgpd","agregation-serveur",8,"Roibase",{"type":30,"children":31,"toc":2525},"root",[32,48,55,69,81,86,92,97,106,615,636,646,890,895,901,912,917,963,976,1452,1478,1733,1738,1744,1752,1777,1785,1813,1821,1844,1852,1870,1878,1901,1923,1929,1948,1961,2212,2228,2234,2259,2264,2407,2417,2485,2498,2508,2514,2519],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37,40,46],{"type":38,"value":39},"text","La limite de « 360 jours de stockage des ID utilisateur » annoncée par GA4 à la mi-2024, couplée à l'obligation du Consent Mode v2 en mars 2024, a confronté les équipes marketing à un dilemme : accepter que le taux de consentement des banneau cookies chute sous les 40 % et perdre l'infrastructure de segmentation construite depuis l'ère UA, ou découvrir comment bâtir une nouvelle stack de mesure fonctionnant sans cookie. Fusionner des outils d'analytique ",{"type":33,"tag":41,"props":42,"children":43},"em",{},[44],{"type":38,"value":45},"privacy-first",{"type":38,"value":47}," comme Plausible avec une architecture d'agrégation côté serveur est devenu la solution technique de ce scénario.",{"type":33,"tag":49,"props":50,"children":52},"h2",{"id":51},"la-barrière-cookies-franchit-60",[53],{"type":38,"value":54},"La Barrière Cookies Franchit 60 %",{"type":33,"tag":34,"props":56,"children":57},{},[58,60,67],{"type":38,"value":59},"Depuis 2017, ITP (Intelligent Tracking Prevention) d'Apple bloque les cookies tiers dans Safari. Chrome a défini Privacy Sandbox comme comportement par défaut au Q4 2024. Firefox maintient la protection contre le suivi activée. Selon le rapport 2025 de Mozilla, l'utilisateur européen moyen clique sur « Refuser » ou ferme le banneau cookies dans 62 % des cas. Le nombre de sessions marquées ",{"type":33,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":38,"value":66},"consent_status=denied",{"type":38,"value":68}," dans les propriétés GA4 B2C s'est stabilisé entre 55 et 65 % à partir du Q4 2024.",{"type":33,"tag":34,"props":70,"children":71},{},[72,74,79],{"type":38,"value":73},"Cela signifie que les pixels client-side classiques (gtag.js, fbq) perdent plus de la moitié du trafic. La fonction « ",{"type":33,"tag":41,"props":75,"children":76},{},[77],{"type":38,"value":78},"modeled conversion",{"type":38,"value":80}," » de GA4 tente de combler ce vide par des estimations de régression plutôt que par des événements réels. Les tests d'incrémentalité montrent que les conversions modélisées dévient de 18 à 22 % en moyenne par rapport aux vraies données (documentation beta Google Marketing Platform 2025).",{"type":33,"tag":34,"props":82,"children":83},{},[84],{"type":38,"value":85},"Le suivi sans cookie repose alors sur deux architectures : la première collecte entièrement côté serveur (GTM serveur, Segment, RudderStack) ; la seconde génère une identité éphémère côté client (sessionStorage\u002FlocalStorage) transmise au serveur. Plausible Analytics emprunte cette deuxième voie, mais l'identité n'est jamais persistée — chaque session reçoit un nouveau hash. À première vue, il semblerait impossible de tracer un parcours utilisateur ; en réalité, l'agrégation côté serveur rend possibles les analyses de cohortes et les mesures de rétention.",{"type":33,"tag":49,"props":87,"children":89},{"id":88},"architecture-plausible-event-stream-via-beacon-post",[90],{"type":38,"value":91},"Architecture Plausible : Event Stream via Beacon POST",{"type":33,"tag":34,"props":93,"children":94},{},[95],{"type":38,"value":96},"Plausible Analytics est une plateforme d'analytique open-source (licence MIT, plausible.io). Le script ne pèse que 1,4 KB (GA4 : 43 KB, Segment : 28 KB) ; il n'écrit aucun cookie ; la conformité RGPD\u002FKVKK\u002FCCPA est garantie par défaut. Fonctionnement :",{"type":33,"tag":34,"props":98,"children":99},{},[100],{"type":33,"tag":101,"props":102,"children":103},"strong",{},[104],{"type":38,"value":105},"Script client :",{"type":33,"tag":107,"props":108,"children":112},"pre",{"className":109,"code":110,"language":111,"meta":17,"style":17},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Implémentation minimale plausible.js\n(function(){\n  const endpoint = 'https:\u002F\u002Fanalytics.example.com\u002Fapi\u002Fevent';\n  const sessionHash = btoa(navigator.userAgent + performance.timing.navigationStart).substring(0,16);\n  \n  function sendEvent(name, props = {}) {\n    navigator.sendBeacon(endpoint, JSON.stringify({\n      n: name,              \u002F\u002F nom de l'événement\n      u: location.href,     \u002F\u002F URL de la page\n      d: document.domain,\n      r: document.referrer,\n      w: window.innerWidth,\n      h: sessionHash,       \u002F\u002F identifiant de session éphémère\n      p: props              \u002F\u002F propriétés personnalisées\n    }));\n  }\n  \n  sendEvent('pageview');\n  \n  \u002F\u002F Suivi des clics\n  document.addEventListener('click', (e) => {\n    if (e.target.matches('[data-track]')) {\n      sendEvent('click', { element: e.target.dataset.track });\n    }\n  });\n})();\n","javascript",[113],{"type":33,"tag":61,"props":114,"children":115},{"__ignoreMap":17},[116,128,149,180,247,256,299,338,351,365,374,383,392,406,420,429,438,446,468,476,485,533,566,588,597,606],{"type":33,"tag":117,"props":118,"children":121},"span",{"class":119,"line":120},"line",1,[122],{"type":33,"tag":117,"props":123,"children":125},{"style":124},"--shiki-default:#6A737D",[126],{"type":38,"value":127},"\u002F\u002F Implémentation minimale plausible.js\n",{"type":33,"tag":117,"props":129,"children":131},{"class":119,"line":130},2,[132,138,144],{"type":33,"tag":117,"props":133,"children":135},{"style":134},"--shiki-default:#E1E4E8",[136],{"type":38,"value":137},"(",{"type":33,"tag":117,"props":139,"children":141},{"style":140},"--shiki-default:#F97583",[142],{"type":38,"value":143},"function",{"type":33,"tag":117,"props":145,"children":146},{"style":134},[147],{"type":38,"value":148},"(){\n",{"type":33,"tag":117,"props":150,"children":152},{"class":119,"line":151},3,[153,158,164,169,175],{"type":33,"tag":117,"props":154,"children":155},{"style":140},[156],{"type":38,"value":157},"  const",{"type":33,"tag":117,"props":159,"children":161},{"style":160},"--shiki-default:#79B8FF",[162],{"type":38,"value":163}," endpoint",{"type":33,"tag":117,"props":165,"children":166},{"style":140},[167],{"type":38,"value":168}," =",{"type":33,"tag":117,"props":170,"children":172},{"style":171},"--shiki-default:#9ECBFF",[173],{"type":38,"value":174}," 'https:\u002F\u002Fanalytics.example.com\u002Fapi\u002Fevent'",{"type":33,"tag":117,"props":176,"children":177},{"style":134},[178],{"type":38,"value":179},";\n",{"type":33,"tag":117,"props":181,"children":183},{"class":119,"line":182},4,[184,188,193,197,203,208,213,218,223,227,232,237,242],{"type":33,"tag":117,"props":185,"children":186},{"style":140},[187],{"type":38,"value":157},{"type":33,"tag":117,"props":189,"children":190},{"style":160},[191],{"type":38,"value":192}," sessionHash",{"type":33,"tag":117,"props":194,"children":195},{"style":140},[196],{"type":38,"value":168},{"type":33,"tag":117,"props":198,"children":200},{"style":199},"--shiki-default:#B392F0",[201],{"type":38,"value":202}," btoa",{"type":33,"tag":117,"props":204,"children":205},{"style":134},[206],{"type":38,"value":207},"(navigator.userAgent ",{"type":33,"tag":117,"props":209,"children":210},{"style":140},[211],{"type":38,"value":212},"+",{"type":33,"tag":117,"props":214,"children":215},{"style":134},[216],{"type":38,"value":217}," performance.timing.navigationStart).",{"type":33,"tag":117,"props":219,"children":220},{"style":199},[221],{"type":38,"value":222},"substring",{"type":33,"tag":117,"props":224,"children":225},{"style":134},[226],{"type":38,"value":137},{"type":33,"tag":117,"props":228,"children":229},{"style":160},[230],{"type":38,"value":231},"0",{"type":33,"tag":117,"props":233,"children":234},{"style":134},[235],{"type":38,"value":236},",",{"type":33,"tag":117,"props":238,"children":239},{"style":160},[240],{"type":38,"value":241},"16",{"type":33,"tag":117,"props":243,"children":244},{"style":134},[245],{"type":38,"value":246},");\n",{"type":33,"tag":117,"props":248,"children":250},{"class":119,"line":249},5,[251],{"type":33,"tag":117,"props":252,"children":253},{"style":134},[254],{"type":38,"value":255},"  \n",{"type":33,"tag":117,"props":257,"children":259},{"class":119,"line":258},6,[260,265,270,274,280,285,290,294],{"type":33,"tag":117,"props":261,"children":262},{"style":140},[263],{"type":38,"value":264},"  function",{"type":33,"tag":117,"props":266,"children":267},{"style":199},[268],{"type":38,"value":269}," sendEvent",{"type":33,"tag":117,"props":271,"children":272},{"style":134},[273],{"type":38,"value":137},{"type":33,"tag":117,"props":275,"children":277},{"style":276},"--shiki-default:#FFAB70",[278],{"type":38,"value":279},"name",{"type":33,"tag":117,"props":281,"children":282},{"style":134},[283],{"type":38,"value":284},", ",{"type":33,"tag":117,"props":286,"children":287},{"style":276},[288],{"type":38,"value":289},"props",{"type":33,"tag":117,"props":291,"children":292},{"style":140},[293],{"type":38,"value":168},{"type":33,"tag":117,"props":295,"children":296},{"style":134},[297],{"type":38,"value":298}," {}) {\n",{"type":33,"tag":117,"props":300,"children":302},{"class":119,"line":301},7,[303,308,313,318,323,328,333],{"type":33,"tag":117,"props":304,"children":305},{"style":134},[306],{"type":38,"value":307},"    navigator.",{"type":33,"tag":117,"props":309,"children":310},{"style":199},[311],{"type":38,"value":312},"sendBeacon",{"type":33,"tag":117,"props":314,"children":315},{"style":134},[316],{"type":38,"value":317},"(endpoint, ",{"type":33,"tag":117,"props":319,"children":320},{"style":160},[321],{"type":38,"value":322},"JSON",{"type":33,"tag":117,"props":324,"children":325},{"style":134},[326],{"type":38,"value":327},".",{"type":33,"tag":117,"props":329,"children":330},{"style":199},[331],{"type":38,"value":332},"stringify",{"type":33,"tag":117,"props":334,"children":335},{"style":134},[336],{"type":38,"value":337},"({\n",{"type":33,"tag":117,"props":339,"children":340},{"class":119,"line":27},[341,346],{"type":33,"tag":117,"props":342,"children":343},{"style":134},[344],{"type":38,"value":345},"      n: name,              ",{"type":33,"tag":117,"props":347,"children":348},{"style":124},[349],{"type":38,"value":350},"\u002F\u002F nom de l'événement\n",{"type":33,"tag":117,"props":352,"children":354},{"class":119,"line":353},9,[355,360],{"type":33,"tag":117,"props":356,"children":357},{"style":134},[358],{"type":38,"value":359},"      u: location.href,     ",{"type":33,"tag":117,"props":361,"children":362},{"style":124},[363],{"type":38,"value":364},"\u002F\u002F URL de la page\n",{"type":33,"tag":117,"props":366,"children":368},{"class":119,"line":367},10,[369],{"type":33,"tag":117,"props":370,"children":371},{"style":134},[372],{"type":38,"value":373},"      d: document.domain,\n",{"type":33,"tag":117,"props":375,"children":377},{"class":119,"line":376},11,[378],{"type":33,"tag":117,"props":379,"children":380},{"style":134},[381],{"type":38,"value":382},"      r: document.referrer,\n",{"type":33,"tag":117,"props":384,"children":386},{"class":119,"line":385},12,[387],{"type":33,"tag":117,"props":388,"children":389},{"style":134},[390],{"type":38,"value":391},"      w: window.innerWidth,\n",{"type":33,"tag":117,"props":393,"children":395},{"class":119,"line":394},13,[396,401],{"type":33,"tag":117,"props":397,"children":398},{"style":134},[399],{"type":38,"value":400},"      h: sessionHash,       ",{"type":33,"tag":117,"props":402,"children":403},{"style":124},[404],{"type":38,"value":405},"\u002F\u002F identifiant de session éphémère\n",{"type":33,"tag":117,"props":407,"children":409},{"class":119,"line":408},14,[410,415],{"type":33,"tag":117,"props":411,"children":412},{"style":134},[413],{"type":38,"value":414},"      p: props              ",{"type":33,"tag":117,"props":416,"children":417},{"style":124},[418],{"type":38,"value":419},"\u002F\u002F propriétés personnalisées\n",{"type":33,"tag":117,"props":421,"children":423},{"class":119,"line":422},15,[424],{"type":33,"tag":117,"props":425,"children":426},{"style":134},[427],{"type":38,"value":428},"    }));\n",{"type":33,"tag":117,"props":430,"children":432},{"class":119,"line":431},16,[433],{"type":33,"tag":117,"props":434,"children":435},{"style":134},[436],{"type":38,"value":437},"  }\n",{"type":33,"tag":117,"props":439,"children":441},{"class":119,"line":440},17,[442],{"type":33,"tag":117,"props":443,"children":444},{"style":134},[445],{"type":38,"value":255},{"type":33,"tag":117,"props":447,"children":449},{"class":119,"line":448},18,[450,455,459,464],{"type":33,"tag":117,"props":451,"children":452},{"style":199},[453],{"type":38,"value":454},"  sendEvent",{"type":33,"tag":117,"props":456,"children":457},{"style":134},[458],{"type":38,"value":137},{"type":33,"tag":117,"props":460,"children":461},{"style":171},[462],{"type":38,"value":463},"'pageview'",{"type":33,"tag":117,"props":465,"children":466},{"style":134},[467],{"type":38,"value":246},{"type":33,"tag":117,"props":469,"children":471},{"class":119,"line":470},19,[472],{"type":33,"tag":117,"props":473,"children":474},{"style":134},[475],{"type":38,"value":255},{"type":33,"tag":117,"props":477,"children":479},{"class":119,"line":478},20,[480],{"type":33,"tag":117,"props":481,"children":482},{"style":124},[483],{"type":38,"value":484},"  \u002F\u002F Suivi des clics\n",{"type":33,"tag":117,"props":486,"children":488},{"class":119,"line":487},21,[489,494,499,503,508,513,518,523,528],{"type":33,"tag":117,"props":490,"children":491},{"style":134},[492],{"type":38,"value":493},"  document.",{"type":33,"tag":117,"props":495,"children":496},{"style":199},[497],{"type":38,"value":498},"addEventListener",{"type":33,"tag":117,"props":500,"children":501},{"style":134},[502],{"type":38,"value":137},{"type":33,"tag":117,"props":504,"children":505},{"style":171},[506],{"type":38,"value":507},"'click'",{"type":33,"tag":117,"props":509,"children":510},{"style":134},[511],{"type":38,"value":512},", (",{"type":33,"tag":117,"props":514,"children":515},{"style":276},[516],{"type":38,"value":517},"e",{"type":33,"tag":117,"props":519,"children":520},{"style":134},[521],{"type":38,"value":522},") ",{"type":33,"tag":117,"props":524,"children":525},{"style":140},[526],{"type":38,"value":527},"=>",{"type":33,"tag":117,"props":529,"children":530},{"style":134},[531],{"type":38,"value":532}," {\n",{"type":33,"tag":117,"props":534,"children":536},{"class":119,"line":535},22,[537,542,547,552,556,561],{"type":33,"tag":117,"props":538,"children":539},{"style":140},[540],{"type":38,"value":541},"    if",{"type":33,"tag":117,"props":543,"children":544},{"style":134},[545],{"type":38,"value":546}," (e.target.",{"type":33,"tag":117,"props":548,"children":549},{"style":199},[550],{"type":38,"value":551},"matches",{"type":33,"tag":117,"props":553,"children":554},{"style":134},[555],{"type":38,"value":137},{"type":33,"tag":117,"props":557,"children":558},{"style":171},[559],{"type":38,"value":560},"'[data-track]'",{"type":33,"tag":117,"props":562,"children":563},{"style":134},[564],{"type":38,"value":565},")) {\n",{"type":33,"tag":117,"props":567,"children":569},{"class":119,"line":568},23,[570,575,579,583],{"type":33,"tag":117,"props":571,"children":572},{"style":199},[573],{"type":38,"value":574},"      sendEvent",{"type":33,"tag":117,"props":576,"children":577},{"style":134},[578],{"type":38,"value":137},{"type":33,"tag":117,"props":580,"children":581},{"style":171},[582],{"type":38,"value":507},{"type":33,"tag":117,"props":584,"children":585},{"style":134},[586],{"type":38,"value":587},", { element: e.target.dataset.track });\n",{"type":33,"tag":117,"props":589,"children":591},{"class":119,"line":590},24,[592],{"type":33,"tag":117,"props":593,"children":594},{"style":134},[595],{"type":38,"value":596},"    }\n",{"type":33,"tag":117,"props":598,"children":600},{"class":119,"line":599},25,[601],{"type":33,"tag":117,"props":602,"children":603},{"style":134},[604],{"type":38,"value":605},"  });\n",{"type":33,"tag":117,"props":607,"children":609},{"class":119,"line":608},26,[610],{"type":33,"tag":117,"props":611,"children":612},{"style":134},[613],{"type":38,"value":614},"})();\n",{"type":33,"tag":34,"props":616,"children":617},{},[618,620,626,628,634],{"type":38,"value":619},"L'API ",{"type":33,"tag":61,"props":621,"children":623},{"className":622},[],[624],{"type":38,"value":625},"navigator.sendBeacon",{"type":38,"value":627}," émet un POST HTTP sans cookie. Le ",{"type":33,"tag":61,"props":629,"children":631},{"className":630},[],[632],{"type":38,"value":633},"sessionHash",{"type":38,"value":635}," est généré côté client et non persévéré (il disparaît à la fermeture de l'onglet). Ce hash relie les pages vues au sein d'une même session, mais n'identifie pas le même utilisateur sur plusieurs jours.",{"type":33,"tag":34,"props":637,"children":638},{},[639,644],{"type":33,"tag":101,"props":640,"children":641},{},[642],{"type":38,"value":643},"Côté serveur (écrit en Elixir\u002FPhoenix) :",{"type":38,"value":645},"\nLes événements reçus sont insérés dans ClickHouse (base de données time-series). ClickHouse est le moteur par défaut dans une installation self-hosted de Plausible ; la version cloud utilise une instance ClickHouse managée. Schéma de la table :",{"type":33,"tag":107,"props":647,"children":651},{"className":648,"code":649,"language":650,"meta":17,"style":17},"language-sql shiki shiki-themes github-dark","CREATE TABLE events (\n  timestamp DateTime,\n  domain String,\n  pathname String,\n  referrer String,\n  session_hash String,\n  event_name String,\n  props Map(String, String),\n  user_agent String,\n  country String,\n  device_type Enum8('desktop'=1, 'mobile'=2, 'tablet'=3)\n) ENGINE = MergeTree()\nPARTITION BY toYYYYMM(timestamp)\nORDER BY (domain, toDate(timestamp), session_hash);\n","sql",[652],{"type":33,"tag":61,"props":653,"children":654},{"__ignoreMap":17},[655,678,696,704,712,720,728,736,744,752,760,824,841,868],{"type":33,"tag":117,"props":656,"children":657},{"class":119,"line":120},[658,663,668,673],{"type":33,"tag":117,"props":659,"children":660},{"style":140},[661],{"type":38,"value":662},"CREATE",{"type":33,"tag":117,"props":664,"children":665},{"style":140},[666],{"type":38,"value":667}," TABLE",{"type":33,"tag":117,"props":669,"children":670},{"style":199},[671],{"type":38,"value":672}," events",{"type":33,"tag":117,"props":674,"children":675},{"style":134},[676],{"type":38,"value":677}," (\n",{"type":33,"tag":117,"props":679,"children":680},{"class":119,"line":130},[681,686,691],{"type":33,"tag":117,"props":682,"children":683},{"style":140},[684],{"type":38,"value":685},"  timestamp",{"type":33,"tag":117,"props":687,"children":688},{"style":140},[689],{"type":38,"value":690}," DateTime",{"type":33,"tag":117,"props":692,"children":693},{"style":134},[694],{"type":38,"value":695},",\n",{"type":33,"tag":117,"props":697,"children":698},{"class":119,"line":151},[699],{"type":33,"tag":117,"props":700,"children":701},{"style":134},[702],{"type":38,"value":703},"  domain String,\n",{"type":33,"tag":117,"props":705,"children":706},{"class":119,"line":182},[707],{"type":33,"tag":117,"props":708,"children":709},{"style":134},[710],{"type":38,"value":711},"  pathname String,\n",{"type":33,"tag":117,"props":713,"children":714},{"class":119,"line":249},[715],{"type":33,"tag":117,"props":716,"children":717},{"style":134},[718],{"type":38,"value":719},"  referrer String,\n",{"type":33,"tag":117,"props":721,"children":722},{"class":119,"line":258},[723],{"type":33,"tag":117,"props":724,"children":725},{"style":134},[726],{"type":38,"value":727},"  session_hash String,\n",{"type":33,"tag":117,"props":729,"children":730},{"class":119,"line":301},[731],{"type":33,"tag":117,"props":732,"children":733},{"style":134},[734],{"type":38,"value":735},"  event_name String,\n",{"type":33,"tag":117,"props":737,"children":738},{"class":119,"line":27},[739],{"type":33,"tag":117,"props":740,"children":741},{"style":134},[742],{"type":38,"value":743},"  props Map(String, String),\n",{"type":33,"tag":117,"props":745,"children":746},{"class":119,"line":353},[747],{"type":33,"tag":117,"props":748,"children":749},{"style":134},[750],{"type":38,"value":751},"  user_agent String,\n",{"type":33,"tag":117,"props":753,"children":754},{"class":119,"line":367},[755],{"type":33,"tag":117,"props":756,"children":757},{"style":134},[758],{"type":38,"value":759},"  country String,\n",{"type":33,"tag":117,"props":761,"children":762},{"class":119,"line":376},[763,768,773,778,783,787,792,796,801,805,810,814,819],{"type":33,"tag":117,"props":764,"children":765},{"style":134},[766],{"type":38,"value":767},"  device_type Enum8(",{"type":33,"tag":117,"props":769,"children":770},{"style":171},[771],{"type":38,"value":772},"'desktop'",{"type":33,"tag":117,"props":774,"children":775},{"style":140},[776],{"type":38,"value":777},"=",{"type":33,"tag":117,"props":779,"children":780},{"style":160},[781],{"type":38,"value":782},"1",{"type":33,"tag":117,"props":784,"children":785},{"style":134},[786],{"type":38,"value":284},{"type":33,"tag":117,"props":788,"children":789},{"style":171},[790],{"type":38,"value":791},"'mobile'",{"type":33,"tag":117,"props":793,"children":794},{"style":140},[795],{"type":38,"value":777},{"type":33,"tag":117,"props":797,"children":798},{"style":160},[799],{"type":38,"value":800},"2",{"type":33,"tag":117,"props":802,"children":803},{"style":134},[804],{"type":38,"value":284},{"type":33,"tag":117,"props":806,"children":807},{"style":171},[808],{"type":38,"value":809},"'tablet'",{"type":33,"tag":117,"props":811,"children":812},{"style":140},[813],{"type":38,"value":777},{"type":33,"tag":117,"props":815,"children":816},{"style":160},[817],{"type":38,"value":818},"3",{"type":33,"tag":117,"props":820,"children":821},{"style":134},[822],{"type":38,"value":823},")\n",{"type":33,"tag":117,"props":825,"children":826},{"class":119,"line":385},[827,832,836],{"type":33,"tag":117,"props":828,"children":829},{"style":134},[830],{"type":38,"value":831},") ENGINE ",{"type":33,"tag":117,"props":833,"children":834},{"style":140},[835],{"type":38,"value":777},{"type":33,"tag":117,"props":837,"children":838},{"style":134},[839],{"type":38,"value":840}," MergeTree()\n",{"type":33,"tag":117,"props":842,"children":843},{"class":119,"line":394},[844,849,854,859,864],{"type":33,"tag":117,"props":845,"children":846},{"style":140},[847],{"type":38,"value":848},"PARTITION",{"type":33,"tag":117,"props":850,"children":851},{"style":140},[852],{"type":38,"value":853}," BY",{"type":33,"tag":117,"props":855,"children":856},{"style":134},[857],{"type":38,"value":858}," toYYYYMM(",{"type":33,"tag":117,"props":860,"children":861},{"style":140},[862],{"type":38,"value":863},"timestamp",{"type":33,"tag":117,"props":865,"children":866},{"style":134},[867],{"type":38,"value":823},{"type":33,"tag":117,"props":869,"children":870},{"class":119,"line":408},[871,876,881,885],{"type":33,"tag":117,"props":872,"children":873},{"style":140},[874],{"type":38,"value":875},"ORDER BY",{"type":33,"tag":117,"props":877,"children":878},{"style":134},[879],{"type":38,"value":880}," (domain, toDate(",{"type":33,"tag":117,"props":882,"children":883},{"style":140},[884],{"type":38,"value":863},{"type":33,"tag":117,"props":886,"children":887},{"style":134},[888],{"type":38,"value":889},"), session_hash);\n",{"type":33,"tag":34,"props":891,"children":892},{},[893],{"type":38,"value":894},"Les requêtes d'agrégation s'exécutent très rapidement dans le moteur MergeTree de ClickHouse : interroger 100 M d'événements pour obtenir « sessions uniques par jour » retourne en 200-400 ms.",{"type":33,"tag":49,"props":896,"children":898},{"id":897},"agrégation-côté-serveur-session-cohorte-rétention",[899],{"type":38,"value":900},"Agrégation Côté Serveur : Session → Cohorte → Rétention",{"type":33,"tag":34,"props":902,"children":903},{},[904,906,911],{"type":38,"value":905},"Le tableau de bord Plausible affiche des « sessions uniques » plutôt que des « visiteurs uniques ». Or, en analyse marketing, une session ne suffit pas : les projections de LTV, l'attribution de campagne et l'analyse par cohorte demandent une identité utilisateur. La clé pour le faire sans cookie : ",{"type":33,"tag":101,"props":907,"children":908},{},[909],{"type":38,"value":910},"résolution d'identité côté serveur + couche d'agrégation",{"type":38,"value":327},{"type":33,"tag":34,"props":913,"children":914},{},[915],{"type":38,"value":916},"Scénario : un site e-commerce collecte des événements Plausible et les exporte vers BigQuery. Lorsqu'un utilisateur se connecte, l'ID utilisateur est envoyé comme propriété personnalisée :",{"type":33,"tag":107,"props":918,"children":920},{"className":109,"code":919,"language":111,"meta":17,"style":17},"\u002F\u002F Page de checkout, après connexion\nplausible('Login', { props: { user_id: '{{user.id}}' } });\n",[921],{"type":33,"tag":61,"props":922,"children":923},{"__ignoreMap":17},[924,932],{"type":33,"tag":117,"props":925,"children":926},{"class":119,"line":120},[927],{"type":33,"tag":117,"props":928,"children":929},{"style":124},[930],{"type":38,"value":931},"\u002F\u002F Page de checkout, après connexion\n",{"type":33,"tag":117,"props":933,"children":934},{"class":119,"line":130},[935,939,943,948,953,958],{"type":33,"tag":117,"props":936,"children":937},{"style":199},[938],{"type":38,"value":23},{"type":33,"tag":117,"props":940,"children":941},{"style":134},[942],{"type":38,"value":137},{"type":33,"tag":117,"props":944,"children":945},{"style":171},[946],{"type":38,"value":947},"'Login'",{"type":33,"tag":117,"props":949,"children":950},{"style":134},[951],{"type":38,"value":952},", { props: { user_id: ",{"type":33,"tag":117,"props":954,"children":955},{"style":171},[956],{"type":38,"value":957},"'{{user.id}}'",{"type":33,"tag":117,"props":959,"children":960},{"style":134},[961],{"type":38,"value":962}," } });\n",{"type":33,"tag":34,"props":964,"children":965},{},[966,968,974],{"type":38,"value":967},"Un job batch quotidien dans BigQuery fusionne les événements Plausible en s'appuyant sur ",{"type":33,"tag":61,"props":969,"children":971},{"className":970},[],[972],{"type":38,"value":973},"user_id",{"type":38,"value":975}," :",{"type":33,"tag":107,"props":977,"children":979},{"className":648,"code":978,"language":650,"meta":17,"style":17},"-- Modèle dbt : user_sessions_daily.sql\nWITH raw_events AS (\n  SELECT\n    timestamp,\n    session_hash,\n    JSON_EXTRACT_SCALAR(props, '$.user_id') AS user_id,\n    pathname,\n    event_name\n  FROM `analytics.plausible_events`\n  WHERE DATE(timestamp) = CURRENT_DATE - 1\n),\nidentified_sessions AS (\n  SELECT\n    session_hash,\n    FIRST_VALUE(user_id IGNORE NULLS) OVER (\n      PARTITION BY session_hash ORDER BY timestamp\n    ) AS resolved_user_id\n  FROM raw_events\n)\nSELECT\n  e.timestamp,\n  e.session_hash,\n  COALESCE(i.resolved_user_id, e.session_hash) AS user_key,\n  e.pathname,\n  e.event_name\nFROM raw_events e\nLEFT JOIN identified_sessions i USING (session_hash);\n",[980],{"type":33,"tag":61,"props":981,"children":982},{"__ignoreMap":17},[983,991,1013,1021,1033,1041,1067,1075,1083,1096,1140,1148,1164,1171,1178,1214,1240,1257,1269,1276,1284,1304,1324,1379,1399,1415,1428],{"type":33,"tag":117,"props":984,"children":985},{"class":119,"line":120},[986],{"type":33,"tag":117,"props":987,"children":988},{"style":124},[989],{"type":38,"value":990},"-- Modèle dbt : user_sessions_daily.sql\n",{"type":33,"tag":117,"props":992,"children":993},{"class":119,"line":130},[994,999,1004,1009],{"type":33,"tag":117,"props":995,"children":996},{"style":140},[997],{"type":38,"value":998},"WITH",{"type":33,"tag":117,"props":1000,"children":1001},{"style":134},[1002],{"type":38,"value":1003}," raw_events ",{"type":33,"tag":117,"props":1005,"children":1006},{"style":140},[1007],{"type":38,"value":1008},"AS",{"type":33,"tag":117,"props":1010,"children":1011},{"style":134},[1012],{"type":38,"value":677},{"type":33,"tag":117,"props":1014,"children":1015},{"class":119,"line":151},[1016],{"type":33,"tag":117,"props":1017,"children":1018},{"style":140},[1019],{"type":38,"value":1020},"  SELECT\n",{"type":33,"tag":117,"props":1022,"children":1023},{"class":119,"line":182},[1024,1029],{"type":33,"tag":117,"props":1025,"children":1026},{"style":140},[1027],{"type":38,"value":1028},"    timestamp",{"type":33,"tag":117,"props":1030,"children":1031},{"style":134},[1032],{"type":38,"value":695},{"type":33,"tag":117,"props":1034,"children":1035},{"class":119,"line":249},[1036],{"type":33,"tag":117,"props":1037,"children":1038},{"style":134},[1039],{"type":38,"value":1040},"    session_hash,\n",{"type":33,"tag":117,"props":1042,"children":1043},{"class":119,"line":258},[1044,1049,1054,1058,1062],{"type":33,"tag":117,"props":1045,"children":1046},{"style":134},[1047],{"type":38,"value":1048},"    JSON_EXTRACT_SCALAR(props, ",{"type":33,"tag":117,"props":1050,"children":1051},{"style":171},[1052],{"type":38,"value":1053},"'$.user_id'",{"type":33,"tag":117,"props":1055,"children":1056},{"style":134},[1057],{"type":38,"value":522},{"type":33,"tag":117,"props":1059,"children":1060},{"style":140},[1061],{"type":38,"value":1008},{"type":33,"tag":117,"props":1063,"children":1064},{"style":134},[1065],{"type":38,"value":1066}," user_id,\n",{"type":33,"tag":117,"props":1068,"children":1069},{"class":119,"line":301},[1070],{"type":33,"tag":117,"props":1071,"children":1072},{"style":134},[1073],{"type":38,"value":1074},"    pathname,\n",{"type":33,"tag":117,"props":1076,"children":1077},{"class":119,"line":27},[1078],{"type":33,"tag":117,"props":1079,"children":1080},{"style":134},[1081],{"type":38,"value":1082},"    event_name\n",{"type":33,"tag":117,"props":1084,"children":1085},{"class":119,"line":353},[1086,1091],{"type":33,"tag":117,"props":1087,"children":1088},{"style":140},[1089],{"type":38,"value":1090},"  FROM",{"type":33,"tag":117,"props":1092,"children":1093},{"style":171},[1094],{"type":38,"value":1095}," `analytics.plausible_events`\n",{"type":33,"tag":117,"props":1097,"children":1098},{"class":119,"line":367},[1099,1104,1109,1113,1117,1121,1125,1130,1135],{"type":33,"tag":117,"props":1100,"children":1101},{"style":140},[1102],{"type":38,"value":1103},"  WHERE",{"type":33,"tag":117,"props":1105,"children":1106},{"style":140},[1107],{"type":38,"value":1108}," DATE",{"type":33,"tag":117,"props":1110,"children":1111},{"style":134},[1112],{"type":38,"value":137},{"type":33,"tag":117,"props":1114,"children":1115},{"style":140},[1116],{"type":38,"value":863},{"type":33,"tag":117,"props":1118,"children":1119},{"style":134},[1120],{"type":38,"value":522},{"type":33,"tag":117,"props":1122,"children":1123},{"style":140},[1124],{"type":38,"value":777},{"type":33,"tag":117,"props":1126,"children":1127},{"style":134},[1128],{"type":38,"value":1129}," CURRENT_DATE ",{"type":33,"tag":117,"props":1131,"children":1132},{"style":140},[1133],{"type":38,"value":1134},"-",{"type":33,"tag":117,"props":1136,"children":1137},{"style":160},[1138],{"type":38,"value":1139}," 1\n",{"type":33,"tag":117,"props":1141,"children":1142},{"class":119,"line":376},[1143],{"type":33,"tag":117,"props":1144,"children":1145},{"style":134},[1146],{"type":38,"value":1147},"),\n",{"type":33,"tag":117,"props":1149,"children":1150},{"class":119,"line":385},[1151,1156,1160],{"type":33,"tag":117,"props":1152,"children":1153},{"style":134},[1154],{"type":38,"value":1155},"identified_sessions ",{"type":33,"tag":117,"props":1157,"children":1158},{"style":140},[1159],{"type":38,"value":1008},{"type":33,"tag":117,"props":1161,"children":1162},{"style":134},[1163],{"type":38,"value":677},{"type":33,"tag":117,"props":1165,"children":1166},{"class":119,"line":394},[1167],{"type":33,"tag":117,"props":1168,"children":1169},{"style":140},[1170],{"type":38,"value":1020},{"type":33,"tag":117,"props":1172,"children":1173},{"class":119,"line":408},[1174],{"type":33,"tag":117,"props":1175,"children":1176},{"style":134},[1177],{"type":38,"value":1040},{"type":33,"tag":117,"props":1179,"children":1180},{"class":119,"line":422},[1181,1186,1191,1196,1201,1205,1210],{"type":33,"tag":117,"props":1182,"children":1183},{"style":160},[1184],{"type":38,"value":1185},"    FIRST_VALUE",{"type":33,"tag":117,"props":1187,"children":1188},{"style":134},[1189],{"type":38,"value":1190},"(user_id ",{"type":33,"tag":117,"props":1192,"children":1193},{"style":140},[1194],{"type":38,"value":1195},"IGNORE",{"type":33,"tag":117,"props":1197,"children":1198},{"style":140},[1199],{"type":38,"value":1200}," NULLS",{"type":33,"tag":117,"props":1202,"children":1203},{"style":134},[1204],{"type":38,"value":522},{"type":33,"tag":117,"props":1206,"children":1207},{"style":140},[1208],{"type":38,"value":1209},"OVER",{"type":33,"tag":117,"props":1211,"children":1212},{"style":134},[1213],{"type":38,"value":677},{"type":33,"tag":117,"props":1215,"children":1216},{"class":119,"line":431},[1217,1222,1226,1231,1235],{"type":33,"tag":117,"props":1218,"children":1219},{"style":140},[1220],{"type":38,"value":1221},"      PARTITION",{"type":33,"tag":117,"props":1223,"children":1224},{"style":140},[1225],{"type":38,"value":853},{"type":33,"tag":117,"props":1227,"children":1228},{"style":134},[1229],{"type":38,"value":1230}," session_hash ",{"type":33,"tag":117,"props":1232,"children":1233},{"style":140},[1234],{"type":38,"value":875},{"type":33,"tag":117,"props":1236,"children":1237},{"style":140},[1238],{"type":38,"value":1239}," timestamp\n",{"type":33,"tag":117,"props":1241,"children":1242},{"class":119,"line":440},[1243,1248,1252],{"type":33,"tag":117,"props":1244,"children":1245},{"style":134},[1246],{"type":38,"value":1247},"    ) ",{"type":33,"tag":117,"props":1249,"children":1250},{"style":140},[1251],{"type":38,"value":1008},{"type":33,"tag":117,"props":1253,"children":1254},{"style":134},[1255],{"type":38,"value":1256}," resolved_user_id\n",{"type":33,"tag":117,"props":1258,"children":1259},{"class":119,"line":448},[1260,1264],{"type":33,"tag":117,"props":1261,"children":1262},{"style":140},[1263],{"type":38,"value":1090},{"type":33,"tag":117,"props":1265,"children":1266},{"style":134},[1267],{"type":38,"value":1268}," raw_events\n",{"type":33,"tag":117,"props":1270,"children":1271},{"class":119,"line":470},[1272],{"type":33,"tag":117,"props":1273,"children":1274},{"style":134},[1275],{"type":38,"value":823},{"type":33,"tag":117,"props":1277,"children":1278},{"class":119,"line":478},[1279],{"type":33,"tag":117,"props":1280,"children":1281},{"style":140},[1282],{"type":38,"value":1283},"SELECT\n",{"type":33,"tag":117,"props":1285,"children":1286},{"class":119,"line":487},[1287,1292,1296,1300],{"type":33,"tag":117,"props":1288,"children":1289},{"style":160},[1290],{"type":38,"value":1291},"  e",{"type":33,"tag":117,"props":1293,"children":1294},{"style":134},[1295],{"type":38,"value":327},{"type":33,"tag":117,"props":1297,"children":1298},{"style":160},[1299],{"type":38,"value":863},{"type":33,"tag":117,"props":1301,"children":1302},{"style":134},[1303],{"type":38,"value":695},{"type":33,"tag":117,"props":1305,"children":1306},{"class":119,"line":535},[1307,1311,1315,1320],{"type":33,"tag":117,"props":1308,"children":1309},{"style":160},[1310],{"type":38,"value":1291},{"type":33,"tag":117,"props":1312,"children":1313},{"style":134},[1314],{"type":38,"value":327},{"type":33,"tag":117,"props":1316,"children":1317},{"style":160},[1318],{"type":38,"value":1319},"session_hash",{"type":33,"tag":117,"props":1321,"children":1322},{"style":134},[1323],{"type":38,"value":695},{"type":33,"tag":117,"props":1325,"children":1326},{"class":119,"line":568},[1327,1332,1336,1341,1345,1350,1354,1358,1362,1366,1370,1374],{"type":33,"tag":117,"props":1328,"children":1329},{"style":160},[1330],{"type":38,"value":1331},"  COALESCE",{"type":33,"tag":117,"props":1333,"children":1334},{"style":134},[1335],{"type":38,"value":137},{"type":33,"tag":117,"props":1337,"children":1338},{"style":160},[1339],{"type":38,"value":1340},"i",{"type":33,"tag":117,"props":1342,"children":1343},{"style":134},[1344],{"type":38,"value":327},{"type":33,"tag":117,"props":1346,"children":1347},{"style":160},[1348],{"type":38,"value":1349},"resolved_user_id",{"type":33,"tag":117,"props":1351,"children":1352},{"style":134},[1353],{"type":38,"value":284},{"type":33,"tag":117,"props":1355,"children":1356},{"style":160},[1357],{"type":38,"value":517},{"type":33,"tag":117,"props":1359,"children":1360},{"style":134},[1361],{"type":38,"value":327},{"type":33,"tag":117,"props":1363,"children":1364},{"style":160},[1365],{"type":38,"value":1319},{"type":33,"tag":117,"props":1367,"children":1368},{"style":134},[1369],{"type":38,"value":522},{"type":33,"tag":117,"props":1371,"children":1372},{"style":140},[1373],{"type":38,"value":1008},{"type":33,"tag":117,"props":1375,"children":1376},{"style":134},[1377],{"type":38,"value":1378}," user_key,\n",{"type":33,"tag":117,"props":1380,"children":1381},{"class":119,"line":590},[1382,1386,1390,1395],{"type":33,"tag":117,"props":1383,"children":1384},{"style":160},[1385],{"type":38,"value":1291},{"type":33,"tag":117,"props":1387,"children":1388},{"style":134},[1389],{"type":38,"value":327},{"type":33,"tag":117,"props":1391,"children":1392},{"style":160},[1393],{"type":38,"value":1394},"pathname",{"type":33,"tag":117,"props":1396,"children":1397},{"style":134},[1398],{"type":38,"value":695},{"type":33,"tag":117,"props":1400,"children":1401},{"class":119,"line":599},[1402,1406,1410],{"type":33,"tag":117,"props":1403,"children":1404},{"style":160},[1405],{"type":38,"value":1291},{"type":33,"tag":117,"props":1407,"children":1408},{"style":134},[1409],{"type":38,"value":327},{"type":33,"tag":117,"props":1411,"children":1412},{"style":160},[1413],{"type":38,"value":1414},"event_name\n",{"type":33,"tag":117,"props":1416,"children":1417},{"class":119,"line":608},[1418,1423],{"type":33,"tag":117,"props":1419,"children":1420},{"style":140},[1421],{"type":38,"value":1422},"FROM",{"type":33,"tag":117,"props":1424,"children":1425},{"style":134},[1426],{"type":38,"value":1427}," raw_events e\n",{"type":33,"tag":117,"props":1429,"children":1431},{"class":119,"line":1430},27,[1432,1437,1442,1447],{"type":33,"tag":117,"props":1433,"children":1434},{"style":140},[1435],{"type":38,"value":1436},"LEFT JOIN",{"type":33,"tag":117,"props":1438,"children":1439},{"style":134},[1440],{"type":38,"value":1441}," identified_sessions i ",{"type":33,"tag":117,"props":1443,"children":1444},{"style":140},[1445],{"type":38,"value":1446},"USING",{"type":33,"tag":117,"props":1448,"children":1449},{"style":134},[1450],{"type":38,"value":1451}," (session_hash);\n",{"type":33,"tag":34,"props":1453,"children":1454},{},[1455,1457,1463,1465,1470,1472,1477],{"type":38,"value":1456},"Dans ce modèle, ",{"type":33,"tag":61,"props":1458,"children":1460},{"className":1459},[],[1461],{"type":38,"value":1462},"user_key",{"type":38,"value":1464}," est soit l'ID utilisateur connecté, soit le ",{"type":33,"tag":61,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":38,"value":1319},{"type":38,"value":1471}," pour les sessions anonymes. Les calculs de rétention peuvent désormais s'appuyer sur ",{"type":33,"tag":61,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":38,"value":1462},{"type":38,"value":975},{"type":33,"tag":107,"props":1479,"children":1481},{"className":648,"code":1480,"language":650,"meta":17,"style":17},"-- Cohorte de rétention 7 jours\nSELECT\n  DATE_TRUNC(first_seen, WEEK) AS cohort_week,\n  COUNT(DISTINCT user_key) AS cohort_size,\n  COUNT(DISTINCT CASE WHEN day_7_active THEN user_key END) AS retained_d7,\n  SAFE_DIVIDE(\n    COUNT(DISTINCT CASE WHEN day_7_active THEN user_key END),\n    COUNT(DISTINCT user_key)\n  ) AS retention_rate\nFROM user_retention_facts\nGROUP BY 1;\n",[1482],{"type":33,"tag":61,"props":1483,"children":1484},{"__ignoreMap":17},[1485,1493,1500,1526,1557,1615,1623,1667,1687,1704,1716],{"type":33,"tag":117,"props":1486,"children":1487},{"class":119,"line":120},[1488],{"type":33,"tag":117,"props":1489,"children":1490},{"style":124},[1491],{"type":38,"value":1492},"-- Cohorte de rétention 7 jours\n",{"type":33,"tag":117,"props":1494,"children":1495},{"class":119,"line":130},[1496],{"type":33,"tag":117,"props":1497,"children":1498},{"style":140},[1499],{"type":38,"value":1283},{"type":33,"tag":117,"props":1501,"children":1502},{"class":119,"line":151},[1503,1508,1513,1517,1521],{"type":33,"tag":117,"props":1504,"children":1505},{"style":134},[1506],{"type":38,"value":1507},"  DATE_TRUNC(first_seen, ",{"type":33,"tag":117,"props":1509,"children":1510},{"style":140},[1511],{"type":38,"value":1512},"WEEK",{"type":33,"tag":117,"props":1514,"children":1515},{"style":134},[1516],{"type":38,"value":522},{"type":33,"tag":117,"props":1518,"children":1519},{"style":140},[1520],{"type":38,"value":1008},{"type":33,"tag":117,"props":1522,"children":1523},{"style":134},[1524],{"type":38,"value":1525}," cohort_week,\n",{"type":33,"tag":117,"props":1527,"children":1528},{"class":119,"line":182},[1529,1534,1538,1543,1548,1552],{"type":33,"tag":117,"props":1530,"children":1531},{"style":160},[1532],{"type":38,"value":1533},"  COUNT",{"type":33,"tag":117,"props":1535,"children":1536},{"style":134},[1537],{"type":38,"value":137},{"type":33,"tag":117,"props":1539,"children":1540},{"style":140},[1541],{"type":38,"value":1542},"DISTINCT",{"type":33,"tag":117,"props":1544,"children":1545},{"style":134},[1546],{"type":38,"value":1547}," user_key) ",{"type":33,"tag":117,"props":1549,"children":1550},{"style":140},[1551],{"type":38,"value":1008},{"type":33,"tag":117,"props":1553,"children":1554},{"style":134},[1555],{"type":38,"value":1556}," cohort_size,\n",{"type":33,"tag":117,"props":1558,"children":1559},{"class":119,"line":249},[1560,1564,1568,1572,1577,1582,1587,1592,1597,1602,1606,1610],{"type":33,"tag":117,"props":1561,"children":1562},{"style":160},[1563],{"type":38,"value":1533},{"type":33,"tag":117,"props":1565,"children":1566},{"style":134},[1567],{"type":38,"value":137},{"type":33,"tag":117,"props":1569,"children":1570},{"style":140},[1571],{"type":38,"value":1542},{"type":33,"tag":117,"props":1573,"children":1574},{"style":140},[1575],{"type":38,"value":1576}," CASE",{"type":33,"tag":117,"props":1578,"children":1579},{"style":140},[1580],{"type":38,"value":1581}," WHEN",{"type":33,"tag":117,"props":1583,"children":1584},{"style":134},[1585],{"type":38,"value":1586}," day_7_active ",{"type":33,"tag":117,"props":1588,"children":1589},{"style":140},[1590],{"type":38,"value":1591},"THEN",{"type":33,"tag":117,"props":1593,"children":1594},{"style":134},[1595],{"type":38,"value":1596}," user_key ",{"type":33,"tag":117,"props":1598,"children":1599},{"style":140},[1600],{"type":38,"value":1601},"END",{"type":33,"tag":117,"props":1603,"children":1604},{"style":134},[1605],{"type":38,"value":522},{"type":33,"tag":117,"props":1607,"children":1608},{"style":140},[1609],{"type":38,"value":1008},{"type":33,"tag":117,"props":1611,"children":1612},{"style":134},[1613],{"type":38,"value":1614}," retained_d7,\n",{"type":33,"tag":117,"props":1616,"children":1617},{"class":119,"line":258},[1618],{"type":33,"tag":117,"props":1619,"children":1620},{"style":134},[1621],{"type":38,"value":1622},"  SAFE_DIVIDE(\n",{"type":33,"tag":117,"props":1624,"children":1625},{"class":119,"line":301},[1626,1631,1635,1639,1643,1647,1651,1655,1659,1663],{"type":33,"tag":117,"props":1627,"children":1628},{"style":160},[1629],{"type":38,"value":1630},"    COUNT",{"type":33,"tag":117,"props":1632,"children":1633},{"style":134},[1634],{"type":38,"value":137},{"type":33,"tag":117,"props":1636,"children":1637},{"style":140},[1638],{"type":38,"value":1542},{"type":33,"tag":117,"props":1640,"children":1641},{"style":140},[1642],{"type":38,"value":1576},{"type":33,"tag":117,"props":1644,"children":1645},{"style":140},[1646],{"type":38,"value":1581},{"type":33,"tag":117,"props":1648,"children":1649},{"style":134},[1650],{"type":38,"value":1586},{"type":33,"tag":117,"props":1652,"children":1653},{"style":140},[1654],{"type":38,"value":1591},{"type":33,"tag":117,"props":1656,"children":1657},{"style":134},[1658],{"type":38,"value":1596},{"type":33,"tag":117,"props":1660,"children":1661},{"style":140},[1662],{"type":38,"value":1601},{"type":33,"tag":117,"props":1664,"children":1665},{"style":134},[1666],{"type":38,"value":1147},{"type":33,"tag":117,"props":1668,"children":1669},{"class":119,"line":27},[1670,1674,1678,1682],{"type":33,"tag":117,"props":1671,"children":1672},{"style":160},[1673],{"type":38,"value":1630},{"type":33,"tag":117,"props":1675,"children":1676},{"style":134},[1677],{"type":38,"value":137},{"type":33,"tag":117,"props":1679,"children":1680},{"style":140},[1681],{"type":38,"value":1542},{"type":33,"tag":117,"props":1683,"children":1684},{"style":134},[1685],{"type":38,"value":1686}," user_key)\n",{"type":33,"tag":117,"props":1688,"children":1689},{"class":119,"line":353},[1690,1695,1699],{"type":33,"tag":117,"props":1691,"children":1692},{"style":134},[1693],{"type":38,"value":1694},"  ) ",{"type":33,"tag":117,"props":1696,"children":1697},{"style":140},[1698],{"type":38,"value":1008},{"type":33,"tag":117,"props":1700,"children":1701},{"style":134},[1702],{"type":38,"value":1703}," retention_rate\n",{"type":33,"tag":117,"props":1705,"children":1706},{"class":119,"line":367},[1707,1711],{"type":33,"tag":117,"props":1708,"children":1709},{"style":140},[1710],{"type":38,"value":1422},{"type":33,"tag":117,"props":1712,"children":1713},{"style":134},[1714],{"type":38,"value":1715}," user_retention_facts\n",{"type":33,"tag":117,"props":1717,"children":1718},{"class":119,"line":376},[1719,1724,1729],{"type":33,"tag":117,"props":1720,"children":1721},{"style":140},[1722],{"type":38,"value":1723},"GROUP BY",{"type":33,"tag":117,"props":1725,"children":1726},{"style":160},[1727],{"type":38,"value":1728}," 1",{"type":33,"tag":117,"props":1730,"children":1731},{"style":134},[1732],{"type":38,"value":179},{"type":33,"tag":34,"props":1734,"children":1735},{},[1736],{"type":38,"value":1737},"Les sessions anonymes (sans connexion) entrent dans cette analyse, mais sont exclues des calculs de LTV long terme — impossible de les suivre au-delà d'une journée. Sur un site où le taux de connexion atteint 30 %, on mesure néanmoins la rétention de 30 % de la cohorte sur une base utilisateur réelle, profondeur équivalente à celle de GA4 sous 35-40 % de consentement, mais sans aucun risque de violation RGPD.",{"type":33,"tag":49,"props":1739,"children":1741},{"id":1740},"comparaison-ga4-conformité-vs-granularité",[1742],{"type":38,"value":1743},"Comparaison GA4 : Conformité vs. Granularité",{"type":33,"tag":34,"props":1745,"children":1746},{},[1747],{"type":33,"tag":101,"props":1748,"children":1749},{},[1750],{"type":38,"value":1751},"Avantages de GA4 :",{"type":33,"tag":1753,"props":1754,"children":1755},"ul",{},[1756,1762,1767,1772],{"type":33,"tag":1757,"props":1758,"children":1759},"li",{},[1760],{"type":38,"value":1761},"User ID + Google Signals permettent le suivi multi-appareils (avec consentement)",{"type":33,"tag":1757,"props":1763,"children":1764},{},[1765],{"type":38,"value":1766},"Export BigQuery natif, schéma stable",{"type":33,"tag":1757,"props":1768,"children":1769},{},[1770],{"type":38,"value":1771},"Rapports d'entonnoir et d'exploration de parcours prêts à l'emploi dans l'interface",{"type":33,"tag":1757,"props":1773,"children":1774},{},[1775],{"type":38,"value":1776},"Intégration Google Ads en un clic",{"type":33,"tag":34,"props":1778,"children":1779},{},[1780],{"type":33,"tag":101,"props":1781,"children":1782},{},[1783],{"type":38,"value":1784},"Inconvénients de GA4 :",{"type":33,"tag":1753,"props":1786,"children":1787},{},[1788,1798,1803,1808],{"type":33,"tag":1757,"props":1789,"children":1790},{},[1791,1793],{"type":38,"value":1792},"Consent Mode v2 obligatoire → données modélisées quand ",{"type":33,"tag":61,"props":1794,"children":1796},{"className":1795},[],[1797],{"type":38,"value":66},{"type":33,"tag":1757,"props":1799,"children":1800},{},[1801],{"type":38,"value":1802},"Stockage d'ID utilisateur 360 jours (réinitialisation après 14 mois)",{"type":33,"tag":1757,"props":1804,"children":1805},{},[1806],{"type":38,"value":1807},"Script de 43 KB (30 fois celui de Plausible)",{"type":33,"tag":1757,"props":1809,"children":1810},{},[1811],{"type":38,"value":1812},"L'export ClickStream requiert GA360 (150 K $ par an minimum)",{"type":33,"tag":34,"props":1814,"children":1815},{},[1816],{"type":33,"tag":101,"props":1817,"children":1818},{},[1819],{"type":38,"value":1820},"Avantages de Plausible + stack serveur :",{"type":33,"tag":1753,"props":1822,"children":1823},{},[1824,1829,1834,1839],{"type":33,"tag":1757,"props":1825,"children":1826},{},[1827],{"type":38,"value":1828},"Aucun cookie → banneau RGPD optionnel (simplification radicale)",{"type":33,"tag":1757,"props":1830,"children":1831},{},[1832],{"type":38,"value":1833},"Propriété des données : raw data sous ton contrôle (ClickHouse, BigQuery, S3)",{"type":33,"tag":1757,"props":1835,"children":1836},{},[1837],{"type":38,"value":1838},"Script ultraléger → impact \u003C5 ms sur le temps de chargement",{"type":33,"tag":1757,"props":1840,"children":1841},{},[1842],{"type":38,"value":1843},"Option self-hosted disponible (données restent en Europe)",{"type":33,"tag":34,"props":1845,"children":1846},{},[1847],{"type":33,"tag":101,"props":1848,"children":1849},{},[1850],{"type":38,"value":1851},"Inconvénients de Plausible :",{"type":33,"tag":1753,"props":1853,"children":1854},{},[1855,1860,1865],{"type":33,"tag":1757,"props":1856,"children":1857},{},[1858],{"type":38,"value":1859},"Pas de suivi multi-appareils (sauf pour utilisateurs connectés)",{"type":33,"tag":1757,"props":1861,"children":1862},{},[1863],{"type":38,"value":1864},"L'analyse d'entonnoir\u002Fparcours demande du SQL personnalisé",{"type":33,"tag":1757,"props":1866,"children":1867},{},[1868],{"type":38,"value":1869},"L'intégration Ads\u002FMeta Meta Conversion API requiert un pipeline custom",{"type":33,"tag":34,"props":1871,"children":1872},{},[1873],{"type":33,"tag":101,"props":1874,"children":1875},{},[1876],{"type":38,"value":1877},"Comparaison des coûts (100 M événements\u002Fmois) :",{"type":33,"tag":1753,"props":1879,"children":1880},{},[1881,1886,1891,1896],{"type":33,"tag":1757,"props":1882,"children":1883},{},[1884],{"type":38,"value":1885},"GA4 standard : gratuit, mais pas d'export BigQuery (GA360 : 150 K $\u002Fan)",{"type":33,"tag":1757,"props":1887,"children":1888},{},[1889],{"type":38,"value":1890},"Plausible Cloud : 200 $\u002Fmois plan Business (limite 200 K pageviews\u002Fmois, self-host au-delà)",{"type":33,"tag":1757,"props":1892,"children":1893},{},[1894],{"type":38,"value":1895},"Plausible self-hosted + ClickHouse (AWS c6g.2xlarge + 500 GB SSD) : ~350 $\u002Fmois",{"type":33,"tag":1757,"props":1897,"children":1898},{},[1899],{"type":38,"value":1900},"Agrégation quotidienne BigQuery : ~80 $\u002Fmois",{"type":33,"tag":34,"props":1902,"children":1903},{},[1904,1909,1911,1916,1918],{"type":33,"tag":101,"props":1905,"children":1906},{},[1907],{"type":38,"value":1908},"Total Plausible stack :",{"type":38,"value":1910}," ~430 $\u002Fmois. ",{"type":33,"tag":101,"props":1912,"children":1913},{},[1914],{"type":38,"value":1915},"GA360 :",{"type":38,"value":1917}," 12,5 K $\u002Fmois. ",{"type":33,"tag":101,"props":1919,"children":1920},{},[1921],{"type":38,"value":1922},"Différence : 30x moins cher.",{"type":33,"tag":49,"props":1924,"children":1926},{"id":1925},"résolution-didentité-probabiliste",[1927],{"type":38,"value":1928},"Résolution d'Identité Probabiliste",{"type":33,"tag":34,"props":1930,"children":1931},{},[1932,1934,1939,1941,1946],{"type":38,"value":1933},"Identifier les utilisateurs non connectés au-delà d'une session emploie la ",{"type":33,"tag":41,"props":1935,"children":1936},{},[1937],{"type":38,"value":1938},"résolution d'identité probabiliste",{"type":38,"value":1940},". Le fingerprinting est interdit (RGPD, Directive ePrivacy) mais l'",{"type":33,"tag":101,"props":1942,"children":1943},{},[1944],{"type":38,"value":1945},"agrégation côté serveur de signaux",{"type":38,"value":1947}," produit un résultat similaire.",{"type":33,"tag":34,"props":1949,"children":1950},{},[1951,1953,1959],{"type":38,"value":1952},"Combinaison : ",{"type":33,"tag":61,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":38,"value":1958},"user_agent + subnet IP + timezone + résolution écran",{"type":38,"value":1960}," génère un hash :",{"type":33,"tag":107,"props":1962,"children":1964},{"className":648,"code":1963,"language":650,"meta":17,"style":17},"-- BigQuery UDF : probabilistic_user_id\nCREATE TEMP FUNCTION probabilistic_user_id(ua STRING, ip STRING, tz STRING, res STRING)\nRETURNS STRING\nAS (\n  TO_BASE64(SHA256(CONCAT(\n    REGEXP_EXTRACT(ua, r'^[^\u002F]+'),  -- famille de navigateur\n    NET.IP_TRUNC(NET.SAFE_IP_FROM_STRING(ip), 24),  -- subnet \u002F24\n    tz,\n    res\n  )))\n);\n\nSELECT\n  timestamp,\n  session_hash,\n  probabilistic_user_id(user_agent, ip_address, timezone, screen_resolution) AS prob_user_id\nFROM plausible_events;\n",[1965],{"type":33,"tag":61,"props":1966,"children":1967},{"__ignoreMap":17},[1968,1976,1998,2011,2022,2040,2063,2117,2125,2133,2141,2148,2157,2164,2175,2183,2200],{"type":33,"tag":117,"props":1969,"children":1970},{"class":119,"line":120},[1971],{"type":33,"tag":117,"props":1972,"children":1973},{"style":124},[1974],{"type":38,"value":1975},"-- BigQuery UDF : probabilistic_user_id\n",{"type":33,"tag":117,"props":1977,"children":1978},{"class":119,"line":130},[1979,1983,1988,1993],{"type":33,"tag":117,"props":1980,"children":1981},{"style":140},[1982],{"type":38,"value":662},{"type":33,"tag":117,"props":1984,"children":1985},{"style":134},[1986],{"type":38,"value":1987}," TEMP ",{"type":33,"tag":117,"props":1989,"children":1990},{"style":140},[1991],{"type":38,"value":1992},"FUNCTION",{"type":33,"tag":117,"props":1994,"children":1995},{"style":134},[1996],{"type":38,"value":1997}," probabilistic_user_id(ua STRING, ip STRING, tz STRING, res STRING)\n",{"type":33,"tag":117,"props":1999,"children":2000},{"class":119,"line":151},[2001,2006],{"type":33,"tag":117,"props":2002,"children":2003},{"style":140},[2004],{"type":38,"value":2005},"RETURNS",{"type":33,"tag":117,"props":2007,"children":2008},{"style":134},[2009],{"type":38,"value":2010}," STRING\n",{"type":33,"tag":117,"props":2012,"children":2013},{"class":119,"line":182},[2014,2018],{"type":33,"tag":117,"props":2015,"children":2016},{"style":140},[2017],{"type":38,"value":1008},{"type":33,"tag":117,"props":2019,"children":2020},{"style":134},[2021],{"type":38,"value":677},{"type":33,"tag":117,"props":2023,"children":2024},{"class":119,"line":249},[2025,2030,2035],{"type":33,"tag":117,"props":2026,"children":2027},{"style":134},[2028],{"type":38,"value":2029},"  TO_BASE64(SHA256(",{"type":33,"tag":117,"props":2031,"children":2032},{"style":160},[2033],{"type":38,"value":2034},"CONCAT",{"type":33,"tag":117,"props":2036,"children":2037},{"style":134},[2038],{"type":38,"value":2039},"(\n",{"type":33,"tag":117,"props":2041,"children":2042},{"class":119,"line":258},[2043,2048,2053,2058],{"type":33,"tag":117,"props":2044,"children":2045},{"style":134},[2046],{"type":38,"value":2047},"    REGEXP_EXTRACT(ua, r",{"type":33,"tag":117,"props":2049,"children":2050},{"style":171},[2051],{"type":38,"value":2052},"'^[^\u002F]+'",{"type":33,"tag":117,"props":2054,"children":2055},{"style":134},[2056],{"type":38,"value":2057},"),  ",{"type":33,"tag":117,"props":2059,"children":2060},{"style":124},[2061],{"type":38,"value":2062},"-- famille de navigateur\n",{"type":33,"tag":117,"props":2064,"children":2065},{"class":119,"line":301},[2066,2071,2075,2080,2084,2089,2093,2098,2103,2108,2112],{"type":33,"tag":117,"props":2067,"children":2068},{"style":160},[2069],{"type":38,"value":2070},"    NET",{"type":33,"tag":117,"props":2072,"children":2073},{"style":134},[2074],{"type":38,"value":327},{"type":33,"tag":117,"props":2076,"children":2077},{"style":160},[2078],{"type":38,"value":2079},"IP_TRUNC",{"type":33,"tag":117,"props":2081,"children":2082},{"style":134},[2083],{"type":38,"value":137},{"type":33,"tag":117,"props":2085,"children":2086},{"style":160},[2087],{"type":38,"value":2088},"NET",{"type":33,"tag":117,"props":2090,"children":2091},{"style":134},[2092],{"type":38,"value":327},{"type":33,"tag":117,"props":2094,"children":2095},{"style":160},[2096],{"type":38,"value":2097},"SAFE_IP_FROM_STRING",{"type":33,"tag":117,"props":2099,"children":2100},{"style":134},[2101],{"type":38,"value":2102},"(ip), ",{"type":33,"tag":117,"props":2104,"children":2105},{"style":160},[2106],{"type":38,"value":2107},"24",{"type":33,"tag":117,"props":2109,"children":2110},{"style":134},[2111],{"type":38,"value":2057},{"type":33,"tag":117,"props":2113,"children":2114},{"style":124},[2115],{"type":38,"value":2116},"-- subnet \u002F24\n",{"type":33,"tag":117,"props":2118,"children":2119},{"class":119,"line":27},[2120],{"type":33,"tag":117,"props":2121,"children":2122},{"style":134},[2123],{"type":38,"value":2124},"    tz,\n",{"type":33,"tag":117,"props":2126,"children":2127},{"class":119,"line":353},[2128],{"type":33,"tag":117,"props":2129,"children":2130},{"style":134},[2131],{"type":38,"value":2132},"    res\n",{"type":33,"tag":117,"props":2134,"children":2135},{"class":119,"line":367},[2136],{"type":33,"tag":117,"props":2137,"children":2138},{"style":134},[2139],{"type":38,"value":2140},"  )))\n",{"type":33,"tag":117,"props":2142,"children":2143},{"class":119,"line":376},[2144],{"type":33,"tag":117,"props":2145,"children":2146},{"style":134},[2147],{"type":38,"value":246},{"type":33,"tag":117,"props":2149,"children":2150},{"class":119,"line":385},[2151],{"type":33,"tag":117,"props":2152,"children":2154},{"emptyLinePlaceholder":2153},true,[2155],{"type":38,"value":2156},"\n",{"type":33,"tag":117,"props":2158,"children":2159},{"class":119,"line":394},[2160],{"type":33,"tag":117,"props":2161,"children":2162},{"style":140},[2163],{"type":38,"value":1283},{"type":33,"tag":117,"props":2165,"children":2166},{"class":119,"line":408},[2167,2171],{"type":33,"tag":117,"props":2168,"children":2169},{"style":140},[2170],{"type":38,"value":685},{"type":33,"tag":117,"props":2172,"children":2173},{"style":134},[2174],{"type":38,"value":695},{"type":33,"tag":117,"props":2176,"children":2177},{"class":119,"line":422},[2178],{"type":33,"tag":117,"props":2179,"children":2180},{"style":134},[2181],{"type":38,"value":2182},"  session_hash,\n",{"type":33,"tag":117,"props":2184,"children":2185},{"class":119,"line":431},[2186,2191,2195],{"type":33,"tag":117,"props":2187,"children":2188},{"style":134},[2189],{"type":38,"value":2190},"  probabilistic_user_id(user_agent, ip_address, timezone, screen_resolution) ",{"type":33,"tag":117,"props":2192,"children":2193},{"style":140},[2194],{"type":38,"value":1008},{"type":33,"tag":117,"props":2196,"children":2197},{"style":134},[2198],{"type":38,"value":2199}," prob_user_id\n",{"type":33,"tag":117,"props":2201,"children":2202},{"class":119,"line":440},[2203,2207],{"type":33,"tag":117,"props":2204,"children":2205},{"style":140},[2206],{"type":38,"value":1422},{"type":33,"tag":117,"props":2208,"children":2209},{"style":134},[2210],{"type":38,"value":2211}," plausible_events;\n",{"type":33,"tag":34,"props":2213,"children":2214},{},[2215,2217,2226],{"type":38,"value":2216},"Cette méthode n'est pas infaillible (collisions probabilistes entre utilisateurs : ~2-4 %), mais, dans le cadre de ",{"type":33,"tag":2218,"props":2219,"children":2223},"a",{"href":2220,"rel":2221},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Ffirstparty",[2222],"nofollow",[2224],{"type":38,"value":2225},"Données First-Party & Architecture de Mesure",{"type":38,"value":2227},", combiner signaux déterministes (user_id) et probabilistes (hash) crée des cohortes « floues ». Ces cohortes affichent une rétention avec une déviation inférieure aux données modélisées de GA4 : tests A\u002FB internes montrent ~8 % de déviation contre 18-22 % pour GA4 modeled.",{"type":33,"tag":49,"props":2229,"children":2231},{"id":2230},"conformité-kvkk-contrats-de-traitement-et-conservation",[2232],{"type":38,"value":2233},"Conformité KVKK : Contrats de Traitement et Conservation",{"type":33,"tag":34,"props":2235,"children":2236},{},[2237,2242,2244,2249,2251,2257],{"type":33,"tag":101,"props":2238,"children":2239},{},[2240],{"type":38,"value":2241},"Article 5 KVKK :",{"type":38,"value":2243}," « Les données personnelles doivent être traitées pour des finalités déterminées, explicites et légitimes. » L'adresse IP + user agent combinés constituent un « identifiant indirect ». Plausible récupère l'IP côté serveur mais ",{"type":33,"tag":101,"props":2245,"children":2246},{},[2247],{"type":38,"value":2248},"ne l'écrit jamais",{"type":38,"value":2250}," dans ClickHouse — seul le champ ",{"type":33,"tag":61,"props":2252,"children":2254},{"className":2253},[],[2255],{"type":38,"value":2256},"country",{"type":38,"value":2258}," (issu d'une recherche GeoIP) est conservé, puis l'IP est supprimée.",{"type":33,"tag":34,"props":2260,"children":2261},{},[2262],{"type":38,"value":2263},"En installation self-hosted, ce flux reste sous ton contrôle :",{"type":33,"tag":107,"props":2265,"children":2269},{"className":2266,"code":2267,"language":2268,"meta":17,"style":17},"language-elixir shiki shiki-themes github-dark","# lib\u002Fplausible\u002Fingestion\u002Fevent.ex (simplifié)\ndefmodule Plausible.Ingestion.Event do\n  def process(conn, params) do\n    ip = get_ip_address(conn)\n    country = GeoIP.lookup(ip) |> Map.get(:country_code)\n    \n    event = %{\n      timestamp: DateTime.utc_now(),\n      domain: params[\"d\"],\n      session_hash: params[\"h\"],\n      country: country,\n      # L'IP est supprimée ici\n    }\n    \n    ClickHouse.insert(\"events\", event)\n  end\nend\n","elixir",[2270],{"type":33,"tag":61,"props":2271,"children":2272},{"__ignoreMap":17},[2273,2281,2289,2297,2305,2313,2321,2329,2337,2345,2353,2361,2369,2376,2383,2391,2399],{"type":33,"tag":117,"props":2274,"children":2275},{"class":119,"line":120},[2276],{"type":33,"tag":117,"props":2277,"children":2278},{},[2279],{"type":38,"value":2280},"# lib\u002Fplausible\u002Fingestion\u002Fevent.ex (simplifié)\n",{"type":33,"tag":117,"props":2282,"children":2283},{"class":119,"line":130},[2284],{"type":33,"tag":117,"props":2285,"children":2286},{},[2287],{"type":38,"value":2288},"defmodule Plausible.Ingestion.Event do\n",{"type":33,"tag":117,"props":2290,"children":2291},{"class":119,"line":151},[2292],{"type":33,"tag":117,"props":2293,"children":2294},{},[2295],{"type":38,"value":2296},"  def process(conn, params) do\n",{"type":33,"tag":117,"props":2298,"children":2299},{"class":119,"line":182},[2300],{"type":33,"tag":117,"props":2301,"children":2302},{},[2303],{"type":38,"value":2304},"    ip = get_ip_address(conn)\n",{"type":33,"tag":117,"props":2306,"children":2307},{"class":119,"line":249},[2308],{"type":33,"tag":117,"props":2309,"children":2310},{},[2311],{"type":38,"value":2312},"    country = GeoIP.lookup(ip) |> Map.get(:country_code)\n",{"type":33,"tag":117,"props":2314,"children":2315},{"class":119,"line":258},[2316],{"type":33,"tag":117,"props":2317,"children":2318},{},[2319],{"type":38,"value":2320},"    \n",{"type":33,"tag":117,"props":2322,"children":2323},{"class":119,"line":301},[2324],{"type":33,"tag":117,"props":2325,"children":2326},{},[2327],{"type":38,"value":2328},"    event = %{\n",{"type":33,"tag":117,"props":2330,"children":2331},{"class":119,"line":27},[2332],{"type":33,"tag":117,"props":2333,"children":2334},{},[2335],{"type":38,"value":2336},"      timestamp: DateTime.utc_now(),\n",{"type":33,"tag":117,"props":2338,"children":2339},{"class":119,"line":353},[2340],{"type":33,"tag":117,"props":2341,"children":2342},{},[2343],{"type":38,"value":2344},"      domain: params[\"d\"],\n",{"type":33,"tag":117,"props":2346,"children":2347},{"class":119,"line":367},[2348],{"type":33,"tag":117,"props":2349,"children":2350},{},[2351],{"type":38,"value":2352},"      session_hash: params[\"h\"],\n",{"type":33,"tag":117,"props":2354,"children":2355},{"class":119,"line":376},[2356],{"type":33,"tag":117,"props":2357,"children":2358},{},[2359],{"type":38,"value":2360},"      country: country,\n",{"type":33,"tag":117,"props":2362,"children":2363},{"class":119,"line":385},[2364],{"type":33,"tag":117,"props":2365,"children":2366},{},[2367],{"type":38,"value":2368},"      # L'IP est supprimée ici\n",{"type":33,"tag":117,"props":2370,"children":2371},{"class":119,"line":394},[2372],{"type":33,"tag":117,"props":2373,"children":2374},{},[2375],{"type":38,"value":596},{"type":33,"tag":117,"props":2377,"children":2378},{"class":119,"line":408},[2379],{"type":33,"tag":117,"props":2380,"children":2381},{},[2382],{"type":38,"value":2320},{"type":33,"tag":117,"props":2384,"children":2385},{"class":119,"line":422},[2386],{"type":33,"tag":117,"props":2387,"children":2388},{},[2389],{"type":38,"value":2390},"    ClickHouse.insert(\"events\", event)\n",{"type":33,"tag":117,"props":2392,"children":2393},{"class":119,"line":431},[2394],{"type":33,"tag":117,"props":2395,"children":2396},{},[2397],{"type":38,"value":2398},"  end\n",{"type":33,"tag":117,"props":2400,"children":2401},{"class":119,"line":440},[2402],{"type":33,"tag":117,"props":2403,"children":2404},{},[2405],{"type":38,"value":2406},"end\n",{"type":33,"tag":34,"props":2408,"children":2409},{},[2410,2415],{"type":33,"tag":101,"props":2411,"children":2412},{},[2413],{"type":38,"value":2414},"Article 7 KVKK :",{"type":38,"value":2416}," « Les données personnelles peuvent être conservées aussi longtemps que la finalité du traitement l'exige. » Rétention analytique typique : 24-36 mois. TTL basé sur partition dans ClickHouse :",{"type":33,"tag":107,"props":2418,"children":2420},{"className":648,"code":2419,"language":650,"meta":17,"style":17},"ALTER TABLE events\nMODIFY TTL toDate(timestamp) + INTERVAL 36 MONTH;\n",[2421],{"type":33,"tag":61,"props":2422,"children":2423},{"__ignoreMap":17},[2424,2441],{"type":33,"tag":117,"props":2425,"children":2426},{"class":119,"line":120},[2427,2432,2436],{"type":33,"tag":117,"props":2428,"children":2429},{"style":140},[2430],{"type":38,"value":2431},"ALTER",{"type":33,"tag":117,"props":2433,"children":2434},{"style":140},[2435],{"type":38,"value":667},{"type":33,"tag":117,"props":2437,"children":2438},{"style":134},[2439],{"type":38,"value":2440}," events\n",{"type":33,"tag":117,"props":2442,"children":2443},{"class":119,"line":130},[2444,2449,2454,2458,2462,2466,2471,2476,2481],{"type":33,"tag":117,"props":2445,"children":2446},{"style":140},[2447],{"type":38,"value":2448},"MODIFY",{"type":33,"tag":117,"props":2450,"children":2451},{"style":134},[2452],{"type":38,"value":2453}," TTL toDate(",{"type":33,"tag":117,"props":2455,"children":2456},{"style":140},[2457],{"type":38,"value":863},{"type":33,"tag":117,"props":2459,"children":2460},{"style":134},[2461],{"type":38,"value":522},{"type":33,"tag":117,"props":2463,"children":2464},{"style":140},[2465],{"type":38,"value":212},{"type":33,"tag":117,"props":2467,"children":2468},{"style":134},[2469],{"type":38,"value":2470}," INTERVAL ",{"type":33,"tag":117,"props":2472,"children":2473},{"style":160},[2474],{"type":38,"value":2475},"36",{"type":33,"tag":117,"props":2477,"children":2478},{"style":140},[2479],{"type":38,"value":2480}," MONTH",{"type":33,"tag":117,"props":2482,"children":2483},{"style":134},[2484],{"type":38,"value":179},{"type":33,"tag":34,"props":2486,"children":2487},{},[2488,2490,2496],{"type":38,"value":2489},"Les partitions se suppriment automatiquement après 36 mois. Dans GA4, les données au niveau utilisateur se réinitialisent après 14 mois (",{"type":33,"tag":61,"props":2491,"children":2493},{"className":2492},[],[2494],{"type":38,"value":2495},"user_pseudo_id",{"type":38,"value":2497},") ; l'export BigQuery peut s'étendre jusqu'à 60 mois, mais cet export requiert GA360 (non disponible sans souscription premium).",{"type":33,"tag":34,"props":2499,"children":2500},{},[2501,2506],{"type":33,"tag":101,"props":2502,"children":2503},{},[2504],{"type":38,"value":2505},"Contrat de Traitement KVKK :",{"type":38,"value":2507}," Avec Plausible Cloud, signer un DPA (Data Processing Agreement) est obligatoire. Plausible héberge en Europe (Hetzner, Allemagne) et fournit un modèle de DPA conforme au RGPD. En self-hosted, tu es le seul « responsable du traitement » ; il n'existe pas de « sous-traitant ».",{"type":33,"tag":49,"props":2509,"children":2511},{"id":2510},"intégration-conversion-api-renvoi-dévénements-côté-serveur",[2512],{"type":38,"value":2513},"Intégration Conversion API : Renvoi d'Événements Côté Serveur",{"type":33,"tag":34,"props":2515,"children":2516},{},[2517],{"type":38,"value":2518},"Transférer les événements Plausible vers Meta\u002FGoogle Ads repose sur un pipeline Webhook. Plaus",{"type":33,"tag":2520,"props":2521,"children":2522},"style",{},[2523],{"type":38,"value":2524},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":17,"searchDepth":151,"depth":151,"links":2526},[2527,2528,2529,2530,2531,2532,2533],{"id":51,"depth":130,"text":54},{"id":88,"depth":130,"text":91},{"id":897,"depth":130,"text":900},{"id":1740,"depth":130,"text":1743},{"id":1925,"depth":130,"text":1928},{"id":2230,"depth":130,"text":2233},{"id":2510,"depth":130,"text":2513},"markdown","content:fr:data:analytique-axee-sur-la-confidentialite.md","content","fr\u002Fdata\u002Fanalytique-axee-sur-la-confidentialite.md","fr\u002Fdata\u002Fanalytique-axee-sur-la-confidentialite","md",1785967483641]