[{"data":1,"prerenderedAt":1729},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation":13},{"i18nKey":4,"paths":5},"data-006-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fprivacy-first-analytics-plausible-server-aggregation","\u002Fen\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","\u002Fes\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","\u002Ffr\u002Fdata\u002Fanalytique-respectueuse-donnees-confidentielles","\u002Fit\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","\u002Fru\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side","\u002Ftr\u002Fdata\u002Fprivacy-first-analytics-plausible-ve-sunucu-tarafi-aggregation",{"_path":7,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":20,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":1723,"_id":1724,"_source":1725,"_file":1726,"_stem":1727,"_extension":1728},"data",false,"","Privacy-First Analytics: Plausible and Server-Side Aggregation","KVKK\u002FGDPR-compliant measurement: Plausible + server-side aggregation for cookieless tracking, GA4 comparison, and production architecture.","2026-05-19","verianalizi",[22,23,24,25,26],"privacy-first-analytics","plausible","server-side-tracking","cookieless","kvkk-gdpr",8,"Roibase",{"type":30,"children":31,"toc":1716},"root",[32,40,47,52,57,102,107,112,136,142,154,159,168,173,413,418,462,467,500,506,511,537,547,751,761,827,832,861,867,872,880,901,909,1606,1614,1632,1637,1643,1648,1656,1674,1682,1700,1705,1710],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","The cookie infrastructure collapsed. Chrome ended third-party cookies in 2024; Safari and Firefox have been blocking them for years. Marketing teams are watching GA4 lose 40–60% of data (according to Google's own reports). Simultaneously, KVKK and GDPR fines reached €4.2 billion across Europe in 2025. Dual pressure: technical (no cookies = no measurement) and legal (skipping consent is a violation). Privacy-first analytics solves both with a single approach: measure without cookies, aggregate server-side, and stay compliance-ready.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"plausible-the-core-of-cookieless-measurement",[45],{"type":38,"value":46},"Plausible: The Core of Cookieless Measurement",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"When Plausible launched in 2019, it positioned itself as a \"GA alternative.\" By 2026, it's a category: privacy-first web analytics. The fundamental difference lies in how it records events. Instead of binding them client-side to cookies, Plausible uses server-side session IDs that don't persist. A visitor's IP + User-Agent combination produces a hash (SHA-256), reset every 24 hours. Result: unique visitor counts accurate to 95%+, zero PII (personally identifiable information) stored.",{"type":33,"tag":34,"props":53,"children":54},{},[55],{"type":38,"value":56},"Compared to GA4:",{"type":33,"tag":58,"props":59,"children":60},"ul",{},[61,73,92],{"type":33,"tag":62,"props":63,"children":64},"li",{},[65,71],{"type":33,"tag":66,"props":67,"children":68},"strong",{},[69],{"type":38,"value":70},"Data ownership:",{"type":38,"value":72}," Plausible writes events to its own PostgreSQL instance. GA4 sends them to Google servers—you can't query them directly (BigQuery export aside).",{"type":33,"tag":62,"props":74,"children":75},{},[76,81,83,90],{"type":33,"tag":66,"props":77,"children":78},{},[79],{"type":38,"value":80},"Cookie dependency:",{"type":38,"value":82}," GA4 relies on the ",{"type":33,"tag":84,"props":85,"children":87},"code",{"className":86},[],[88],{"type":38,"value":89},"_ga",{"type":38,"value":91}," cookie. Reject it, and measurement fragments. Plausible is cookieless from the start.",{"type":33,"tag":62,"props":93,"children":94},{},[95,100],{"type":33,"tag":66,"props":96,"children":97},{},[98],{"type":38,"value":99},"Script footprint:",{"type":38,"value":101}," Plausible tracker is 1.4 KB; GA4's gtag.js is 28 KB plus gtm.js at 45 KB. That's a 50× difference in page load impact.",{"type":33,"tag":34,"props":103,"children":104},{},[105],{"type":38,"value":106},"For KVKK compliance, the critical point: Plausible's hash isn't personal data. KVKK Article 3 defines it as information \"relating to an identified or identifiable natural person.\" A SHA-256 hash cannot be reversed, making it anonymized data—not even requiring Purpose 1 (strictly necessary) under TCF 2.2. No consent banner needed.",{"type":33,"tag":34,"props":108,"children":109},{},[110],{"type":38,"value":111},"In production, Plausible operates in two modes:",{"type":33,"tag":113,"props":114,"children":115},"ol",{},[116,126],{"type":33,"tag":62,"props":117,"children":118},{},[119,124],{"type":33,"tag":66,"props":120,"children":121},{},[122],{"type":38,"value":123},"Standalone:",{"type":38,"value":125}," Small sites (blogs, landing pages) get full capability from the tracker alone. Ten lines of JS embed, dashboard ready.",{"type":33,"tag":62,"props":127,"children":128},{},[129,134],{"type":33,"tag":66,"props":130,"children":131},{},[132],{"type":38,"value":133},"Hybrid:",{"type":38,"value":135}," E-commerce or SaaS sites use Plausible for general traffic; critical conversion events route via server-side GTM to the CDP. This post focuses on scenario two.",{"type":33,"tag":41,"props":137,"children":139},{"id":138},"server-side-aggregation-event-to-metric",[140],{"type":38,"value":141},"Server-Side Aggregation: Event to Metric",{"type":33,"tag":34,"props":143,"children":144},{},[145,147,152],{"type":38,"value":146},"Privacy-first analytics' second pillar: metric-based recording instead of event-based. GA4 logs every click, scroll, video pause as a separate row (event stream). An e-commerce site generates 10 million events daily. That volume creates both cost and privacy risk. Aggregation's logic is simple: ",{"type":33,"tag":66,"props":148,"children":149},{},[150],{"type":38,"value":151},"summarize events on the server in real time",{"type":38,"value":153},"; store counters, not raw events.",{"type":33,"tag":34,"props":155,"children":156},{},[157],{"type":38,"value":158},"Example architecture:",{"type":33,"tag":160,"props":161,"children":163},"pre",{"code":162},"Client → Plausible Tracker (1.4 KB JS)\n         ↓\n      Edge Worker (Cloudflare \u002F Vercel)\n         ↓ (aggregation happens here)\n      Internal Event Bus (Kafka \u002F Redpanda)\n         ↓\n      Time-Series DB (TimescaleDB \u002F ClickHouse)\n",[164],{"type":33,"tag":84,"props":165,"children":166},{"__ignoreMap":16},[167],{"type":38,"value":162},{"type":33,"tag":34,"props":169,"children":170},{},[171],{"type":38,"value":172},"Aggregation logic in the edge worker:",{"type":33,"tag":160,"props":174,"children":178},{"code":175,"language":176,"meta":16,"className":177,"style":16},"-- TimescaleDB hypertable example\nCREATE TABLE page_metrics (\n  time        TIMESTAMPTZ NOT NULL,\n  page_path   TEXT NOT NULL,\n  country     TEXT,\n  views       INT DEFAULT 1,\n  bounces     INT DEFAULT 0,\n  session_dur INT DEFAULT 0\n);\n\nSELECT create_hypertable('page_metrics', 'time');\n","sql","language-sql shiki shiki-themes github-dark",[179],{"type":33,"tag":84,"props":180,"children":181},{"__ignoreMap":16},[182,194,221,245,267,284,313,339,360,369,379],{"type":33,"tag":183,"props":184,"children":187},"span",{"class":185,"line":186},"line",1,[188],{"type":33,"tag":183,"props":189,"children":191},{"style":190},"--shiki-default:#6A737D",[192],{"type":38,"value":193},"-- TimescaleDB hypertable example\n",{"type":33,"tag":183,"props":195,"children":197},{"class":185,"line":196},2,[198,204,209,215],{"type":33,"tag":183,"props":199,"children":201},{"style":200},"--shiki-default:#F97583",[202],{"type":38,"value":203},"CREATE",{"type":33,"tag":183,"props":205,"children":206},{"style":200},[207],{"type":38,"value":208}," TABLE",{"type":33,"tag":183,"props":210,"children":212},{"style":211},"--shiki-default:#B392F0",[213],{"type":38,"value":214}," page_metrics",{"type":33,"tag":183,"props":216,"children":218},{"style":217},"--shiki-default:#E1E4E8",[219],{"type":38,"value":220}," (\n",{"type":33,"tag":183,"props":222,"children":224},{"class":185,"line":223},3,[225,230,235,240],{"type":33,"tag":183,"props":226,"children":227},{"style":200},[228],{"type":38,"value":229},"  time",{"type":33,"tag":183,"props":231,"children":232},{"style":200},[233],{"type":38,"value":234},"        TIMESTAMPTZ",{"type":33,"tag":183,"props":236,"children":237},{"style":200},[238],{"type":38,"value":239}," NOT NULL",{"type":33,"tag":183,"props":241,"children":242},{"style":217},[243],{"type":38,"value":244},",\n",{"type":33,"tag":183,"props":246,"children":248},{"class":185,"line":247},4,[249,254,259,263],{"type":33,"tag":183,"props":250,"children":251},{"style":217},[252],{"type":38,"value":253},"  page_path   ",{"type":33,"tag":183,"props":255,"children":256},{"style":200},[257],{"type":38,"value":258},"TEXT",{"type":33,"tag":183,"props":260,"children":261},{"style":200},[262],{"type":38,"value":239},{"type":33,"tag":183,"props":264,"children":265},{"style":217},[266],{"type":38,"value":244},{"type":33,"tag":183,"props":268,"children":270},{"class":185,"line":269},5,[271,276,280],{"type":33,"tag":183,"props":272,"children":273},{"style":217},[274],{"type":38,"value":275},"  country     ",{"type":33,"tag":183,"props":277,"children":278},{"style":200},[279],{"type":38,"value":258},{"type":33,"tag":183,"props":281,"children":282},{"style":217},[283],{"type":38,"value":244},{"type":33,"tag":183,"props":285,"children":287},{"class":185,"line":286},6,[288,293,298,303,309],{"type":33,"tag":183,"props":289,"children":290},{"style":217},[291],{"type":38,"value":292},"  views       ",{"type":33,"tag":183,"props":294,"children":295},{"style":200},[296],{"type":38,"value":297},"INT",{"type":33,"tag":183,"props":299,"children":300},{"style":200},[301],{"type":38,"value":302}," DEFAULT",{"type":33,"tag":183,"props":304,"children":306},{"style":305},"--shiki-default:#79B8FF",[307],{"type":38,"value":308}," 1",{"type":33,"tag":183,"props":310,"children":311},{"style":217},[312],{"type":38,"value":244},{"type":33,"tag":183,"props":314,"children":316},{"class":185,"line":315},7,[317,322,326,330,335],{"type":33,"tag":183,"props":318,"children":319},{"style":217},[320],{"type":38,"value":321},"  bounces     ",{"type":33,"tag":183,"props":323,"children":324},{"style":200},[325],{"type":38,"value":297},{"type":33,"tag":183,"props":327,"children":328},{"style":200},[329],{"type":38,"value":302},{"type":33,"tag":183,"props":331,"children":332},{"style":305},[333],{"type":38,"value":334}," 0",{"type":33,"tag":183,"props":336,"children":337},{"style":217},[338],{"type":38,"value":244},{"type":33,"tag":183,"props":340,"children":341},{"class":185,"line":27},[342,347,351,355],{"type":33,"tag":183,"props":343,"children":344},{"style":217},[345],{"type":38,"value":346},"  session_dur ",{"type":33,"tag":183,"props":348,"children":349},{"style":200},[350],{"type":38,"value":297},{"type":33,"tag":183,"props":352,"children":353},{"style":200},[354],{"type":38,"value":302},{"type":33,"tag":183,"props":356,"children":357},{"style":305},[358],{"type":38,"value":359}," 0\n",{"type":33,"tag":183,"props":361,"children":363},{"class":185,"line":362},9,[364],{"type":33,"tag":183,"props":365,"children":366},{"style":217},[367],{"type":38,"value":368},");\n",{"type":33,"tag":183,"props":370,"children":372},{"class":185,"line":371},10,[373],{"type":33,"tag":183,"props":374,"children":376},{"emptyLinePlaceholder":375},true,[377],{"type":38,"value":378},"\n",{"type":33,"tag":183,"props":380,"children":382},{"class":185,"line":381},11,[383,388,393,399,404,409],{"type":33,"tag":183,"props":384,"children":385},{"style":200},[386],{"type":38,"value":387},"SELECT",{"type":33,"tag":183,"props":389,"children":390},{"style":217},[391],{"type":38,"value":392}," create_hypertable(",{"type":33,"tag":183,"props":394,"children":396},{"style":395},"--shiki-default:#9ECBFF",[397],{"type":38,"value":398},"'page_metrics'",{"type":33,"tag":183,"props":400,"children":401},{"style":217},[402],{"type":38,"value":403},", ",{"type":33,"tag":183,"props":405,"children":406},{"style":395},[407],{"type":38,"value":408},"'time'",{"type":33,"tag":183,"props":410,"children":411},{"style":217},[412],{"type":38,"value":368},{"type":33,"tag":34,"props":414,"children":415},{},[416],{"type":38,"value":417},"Each pageview from the client follows this flow:",{"type":33,"tag":113,"props":419,"children":420},{},[421,434,439,444,457],{"type":33,"tag":62,"props":422,"children":423},{},[424,426,432],{"type":38,"value":425},"JS tracker sends ",{"type":33,"tag":84,"props":427,"children":429},{"className":428},[],[430],{"type":38,"value":431},"POST \u002Fapi\u002Fevent",{"type":38,"value":433}," → edge endpoint",{"type":33,"tag":62,"props":435,"children":436},{},[437],{"type":38,"value":438},"Edge worker computes hash (IP + UA → session_id)",{"type":33,"tag":62,"props":440,"children":441},{},[442],{"type":38,"value":443},"Session store (Redis) checks: did this session_id appear in the last 30 minutes?",{"type":33,"tag":62,"props":445,"children":446},{},[447,449,455],{"type":38,"value":448},"If yes, increment ",{"type":33,"tag":84,"props":450,"children":452},{"className":451},[],[453],{"type":38,"value":454},"views",{"type":38,"value":456}," counter; if no, write new row",{"type":33,"tag":62,"props":458,"children":459},{},[460],{"type":38,"value":461},"After 30-minute session timeout, compute bounce rate",{"type":33,"tag":34,"props":463,"children":464},{},[465],{"type":38,"value":466},"This architecture delivers three advantages over GA4:",{"type":33,"tag":58,"props":468,"children":469},{},[470,480,490],{"type":33,"tag":62,"props":471,"children":472},{},[473,478],{"type":33,"tag":66,"props":474,"children":475},{},[476],{"type":38,"value":477},"Storage: 85% reduction.",{"type":38,"value":479}," 10M events → 200K aggregated rows",{"type":33,"tag":62,"props":481,"children":482},{},[483,488],{"type":33,"tag":66,"props":484,"children":485},{},[486],{"type":38,"value":487},"Query speed: 40× faster.",{"type":38,"value":489}," Time-series indexing delivers dashboard queries under 15ms",{"type":33,"tag":62,"props":491,"children":492},{},[493,498],{"type":33,"tag":66,"props":494,"children":495},{},[496],{"type":38,"value":497},"Privacy: Zero PII.",{"type":38,"value":499}," No raw events stored means GDPR Article 17 (right to erasure) requests don't apply—there's no personal data in the first place",{"type":33,"tag":41,"props":501,"children":503},{"id":502},"kvkkgdpr-compliance-technical-layers",[504],{"type":38,"value":505},"KVKK\u002FGDPR Compliance: Technical Layers",{"type":33,"tag":34,"props":507,"children":508},{},[509],{"type":38,"value":510},"Making privacy-first analytics legally bulletproof requires four layers:",{"type":33,"tag":34,"props":512,"children":513},{},[514,519,521,527,529,535],{"type":33,"tag":66,"props":515,"children":516},{},[517],{"type":38,"value":518},"1. Data minimization (GDPR Article 5.1c):",{"type":38,"value":520}," Collect only what's necessary. Example: don't store full referrer URLs; store just the domain (",{"type":33,"tag":84,"props":522,"children":524},{"className":523},[],[525],{"type":38,"value":526},"https:\u002F\u002Fexample.com\u002Fcheckout?user=123",{"type":38,"value":528}," → ",{"type":33,"tag":84,"props":530,"children":532},{"className":531},[],[533],{"type":38,"value":534},"example.com",{"type":38,"value":536},"). Compliance + disk savings.",{"type":33,"tag":34,"props":538,"children":539},{},[540,545],{"type":33,"tag":66,"props":541,"children":542},{},[543],{"type":38,"value":544},"2. Anonymization threshold (KVKK Guidelines 2023):",{"type":38,"value":546}," Groups with fewer than 5 data points remain hidden. Show \"\u003C 5\" on the dashboard. Groups of 2–4 become identifiable. In TimescaleDB:",{"type":33,"tag":160,"props":548,"children":550},{"code":549,"language":176,"meta":16,"className":177,"style":16},"SELECT \n  country,\n  CASE \n    WHEN COUNT(DISTINCT session_id) \u003C 5 THEN '\u003C 5'\n    ELSE COUNT(DISTINCT session_id)::TEXT\n  END AS visitors\nFROM page_metrics\nWHERE time > NOW() - INTERVAL '7 days'\nGROUP BY country;\n",[551],{"type":33,"tag":84,"props":552,"children":553},{"__ignoreMap":16},[554,566,574,586,634,664,682,695,738],{"type":33,"tag":183,"props":555,"children":556},{"class":185,"line":186},[557,561],{"type":33,"tag":183,"props":558,"children":559},{"style":200},[560],{"type":38,"value":387},{"type":33,"tag":183,"props":562,"children":563},{"style":217},[564],{"type":38,"value":565}," \n",{"type":33,"tag":183,"props":567,"children":568},{"class":185,"line":196},[569],{"type":33,"tag":183,"props":570,"children":571},{"style":217},[572],{"type":38,"value":573},"  country,\n",{"type":33,"tag":183,"props":575,"children":576},{"class":185,"line":223},[577,582],{"type":33,"tag":183,"props":578,"children":579},{"style":200},[580],{"type":38,"value":581},"  CASE",{"type":33,"tag":183,"props":583,"children":584},{"style":217},[585],{"type":38,"value":565},{"type":33,"tag":183,"props":587,"children":588},{"class":185,"line":247},[589,594,599,604,609,614,619,624,629],{"type":33,"tag":183,"props":590,"children":591},{"style":200},[592],{"type":38,"value":593},"    WHEN",{"type":33,"tag":183,"props":595,"children":596},{"style":305},[597],{"type":38,"value":598}," COUNT",{"type":33,"tag":183,"props":600,"children":601},{"style":217},[602],{"type":38,"value":603},"(",{"type":33,"tag":183,"props":605,"children":606},{"style":200},[607],{"type":38,"value":608},"DISTINCT",{"type":33,"tag":183,"props":610,"children":611},{"style":217},[612],{"type":38,"value":613}," session_id) ",{"type":33,"tag":183,"props":615,"children":616},{"style":200},[617],{"type":38,"value":618},"\u003C",{"type":33,"tag":183,"props":620,"children":621},{"style":305},[622],{"type":38,"value":623}," 5",{"type":33,"tag":183,"props":625,"children":626},{"style":200},[627],{"type":38,"value":628}," THEN",{"type":33,"tag":183,"props":630,"children":631},{"style":395},[632],{"type":38,"value":633}," '\u003C 5'\n",{"type":33,"tag":183,"props":635,"children":636},{"class":185,"line":269},[637,642,646,650,654,659],{"type":33,"tag":183,"props":638,"children":639},{"style":200},[640],{"type":38,"value":641},"    ELSE",{"type":33,"tag":183,"props":643,"children":644},{"style":305},[645],{"type":38,"value":598},{"type":33,"tag":183,"props":647,"children":648},{"style":217},[649],{"type":38,"value":603},{"type":33,"tag":183,"props":651,"children":652},{"style":200},[653],{"type":38,"value":608},{"type":33,"tag":183,"props":655,"children":656},{"style":217},[657],{"type":38,"value":658}," session_id)::",{"type":33,"tag":183,"props":660,"children":661},{"style":200},[662],{"type":38,"value":663},"TEXT\n",{"type":33,"tag":183,"props":665,"children":666},{"class":185,"line":286},[667,672,677],{"type":33,"tag":183,"props":668,"children":669},{"style":200},[670],{"type":38,"value":671},"  END",{"type":33,"tag":183,"props":673,"children":674},{"style":200},[675],{"type":38,"value":676}," AS",{"type":33,"tag":183,"props":678,"children":679},{"style":217},[680],{"type":38,"value":681}," visitors\n",{"type":33,"tag":183,"props":683,"children":684},{"class":185,"line":315},[685,690],{"type":33,"tag":183,"props":686,"children":687},{"style":200},[688],{"type":38,"value":689},"FROM",{"type":33,"tag":183,"props":691,"children":692},{"style":217},[693],{"type":38,"value":694}," page_metrics\n",{"type":33,"tag":183,"props":696,"children":697},{"class":185,"line":27},[698,703,708,713,718,723,728,733],{"type":33,"tag":183,"props":699,"children":700},{"style":200},[701],{"type":38,"value":702},"WHERE",{"type":33,"tag":183,"props":704,"children":705},{"style":200},[706],{"type":38,"value":707}," time",{"type":33,"tag":183,"props":709,"children":710},{"style":200},[711],{"type":38,"value":712}," >",{"type":33,"tag":183,"props":714,"children":715},{"style":200},[716],{"type":38,"value":717}," NOW",{"type":33,"tag":183,"props":719,"children":720},{"style":217},[721],{"type":38,"value":722},"() ",{"type":33,"tag":183,"props":724,"children":725},{"style":200},[726],{"type":38,"value":727},"-",{"type":33,"tag":183,"props":729,"children":730},{"style":217},[731],{"type":38,"value":732}," INTERVAL ",{"type":33,"tag":183,"props":734,"children":735},{"style":395},[736],{"type":38,"value":737},"'7 days'\n",{"type":33,"tag":183,"props":739,"children":740},{"class":185,"line":362},[741,746],{"type":33,"tag":183,"props":742,"children":743},{"style":200},[744],{"type":38,"value":745},"GROUP BY",{"type":33,"tag":183,"props":747,"children":748},{"style":217},[749],{"type":38,"value":750}," country;\n",{"type":33,"tag":34,"props":752,"children":753},{},[754,759],{"type":33,"tag":66,"props":755,"children":756},{},[757],{"type":38,"value":758},"3. Data retention policy:",{"type":38,"value":760}," KVKK Article 7 mandates deletion once the processing purpose ends. For analytics, that purpose is performance optimization—90 days suffices. In TimescaleDB, automate it:",{"type":33,"tag":160,"props":762,"children":764},{"code":763,"language":176,"meta":16,"className":177,"style":16},"SELECT add_retention_policy('page_metrics', INTERVAL '90 days');\nSELECT add_compression_policy('page_metrics', INTERVAL '7 days');\n",[765],{"type":33,"tag":84,"props":766,"children":767},{"__ignoreMap":16},[768,798],{"type":33,"tag":183,"props":769,"children":770},{"class":185,"line":186},[771,775,780,784,789,794],{"type":33,"tag":183,"props":772,"children":773},{"style":200},[774],{"type":38,"value":387},{"type":33,"tag":183,"props":776,"children":777},{"style":217},[778],{"type":38,"value":779}," add_retention_policy(",{"type":33,"tag":183,"props":781,"children":782},{"style":395},[783],{"type":38,"value":398},{"type":33,"tag":183,"props":785,"children":786},{"style":217},[787],{"type":38,"value":788},", INTERVAL ",{"type":33,"tag":183,"props":790,"children":791},{"style":395},[792],{"type":38,"value":793},"'90 days'",{"type":33,"tag":183,"props":795,"children":796},{"style":217},[797],{"type":38,"value":368},{"type":33,"tag":183,"props":799,"children":800},{"class":185,"line":196},[801,805,810,814,818,823],{"type":33,"tag":183,"props":802,"children":803},{"style":200},[804],{"type":38,"value":387},{"type":33,"tag":183,"props":806,"children":807},{"style":217},[808],{"type":38,"value":809}," add_compression_policy(",{"type":33,"tag":183,"props":811,"children":812},{"style":395},[813],{"type":38,"value":398},{"type":33,"tag":183,"props":815,"children":816},{"style":217},[817],{"type":38,"value":788},{"type":33,"tag":183,"props":819,"children":820},{"style":395},[821],{"type":38,"value":822},"'7 days'",{"type":33,"tag":183,"props":824,"children":825},{"style":217},[826],{"type":38,"value":368},{"type":33,"tag":34,"props":828,"children":829},{},[830],{"type":38,"value":831},"Data older than 7 days compresses; older than 90 days deletes. GDPR Article 17 compliance runs automatically.",{"type":33,"tag":34,"props":833,"children":834},{},[835,840,842,848,850,859],{"type":33,"tag":66,"props":836,"children":837},{},[838],{"type":38,"value":839},"4. Consent Mode v2 integration (optional):",{"type":38,"value":841}," If you're still running GA4 hybrid, operate Plausible even with ",{"type":33,"tag":84,"props":843,"children":845},{"className":844},[],[846],{"type":38,"value":847},"analytics_storage: denied",{"type":38,"value":849},". Plausible uses no cookies, so it doesn't require consent. The ",{"type":33,"tag":851,"props":852,"children":856},"a",{"href":853,"rel":854},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Ffirstparty",[855],"nofollow",[857],{"type":38,"value":858},"first-party data architecture",{"type":38,"value":860}," outlines this hybrid setup: Plausible measures traffic; server-side GTM sends conversion events to the CDP.",{"type":33,"tag":41,"props":862,"children":864},{"id":863},"production-case-e-commerce-hybrid-stack",[865],{"type":38,"value":866},"Production Case: E-Commerce Hybrid Stack",{"type":33,"tag":34,"props":868,"children":869},{},[870],{"type":38,"value":871},"Architecture we built for a Shopify store:",{"type":33,"tag":34,"props":873,"children":874},{},[875],{"type":33,"tag":66,"props":876,"children":877},{},[878],{"type":38,"value":879},"Frontend:",{"type":33,"tag":58,"props":881,"children":882},{},[883,888],{"type":33,"tag":62,"props":884,"children":885},{},[886],{"type":38,"value":887},"Plausible tracker on all pages (product view, cart, checkout)",{"type":33,"tag":62,"props":889,"children":890},{},[891,893,899],{"type":38,"value":892},"Custom event ",{"type":33,"tag":84,"props":894,"children":896},{"className":895},[],[897],{"type":38,"value":898},"plausible('Purchase', {revenue: 150})",{"type":38,"value":900}," on checkout success",{"type":33,"tag":34,"props":902,"children":903},{},[904],{"type":33,"tag":66,"props":905,"children":906},{},[907],{"type":38,"value":908},"Backend (Cloudflare Worker):",{"type":33,"tag":160,"props":910,"children":914},{"code":911,"language":912,"meta":16,"className":913,"style":16},"addEventListener('fetch', event => {\n  event.respondWith(handleRequest(event.request))\n})\n\nasync function handleRequest(request) {\n  const url = new URL(request.url)\n  \n  if (url.pathname === '\u002Fapi\u002Fevent') {\n    const body = await request.json()\n    const sessionId = hashSession(request.headers.get('CF-Connecting-IP'), \n                                    request.headers.get('User-Agent'))\n    \n    \u002F\u002F Session check in Redis\n    const exists = await redis.exists(`session:${sessionId}`)\n    \n    if (!exists) {\n      await redis.setex(`session:${sessionId}`, 1800, '1')\n      await kafka.send({\n        topic: 'pageviews',\n        messages: [{\n          key: sessionId,\n          value: JSON.stringify({\n            page: body.url,\n            referrer: new URL(body.referrer).hostname,\n            timestamp: Date.now()\n          })\n        }]\n      })\n    }\n    \n    return new Response('OK', {status: 202})\n  }\n}\n","javascript","language-javascript shiki shiki-themes github-dark",[915],{"type":33,"tag":84,"props":916,"children":917},{"__ignoreMap":16},[918,955,982,990,997,1029,1062,1070,1097,1134,1179,1205,1214,1223,1278,1286,1310,1366,1389,1407,1416,1425,1453,1462,1485,1503,1512,1521,1530,1539,1547,1588,1597],{"type":33,"tag":183,"props":919,"children":920},{"class":185,"line":186},[921,926,930,935,939,945,950],{"type":33,"tag":183,"props":922,"children":923},{"style":211},[924],{"type":38,"value":925},"addEventListener",{"type":33,"tag":183,"props":927,"children":928},{"style":217},[929],{"type":38,"value":603},{"type":33,"tag":183,"props":931,"children":932},{"style":395},[933],{"type":38,"value":934},"'fetch'",{"type":33,"tag":183,"props":936,"children":937},{"style":217},[938],{"type":38,"value":403},{"type":33,"tag":183,"props":940,"children":942},{"style":941},"--shiki-default:#FFAB70",[943],{"type":38,"value":944},"event",{"type":33,"tag":183,"props":946,"children":947},{"style":200},[948],{"type":38,"value":949}," =>",{"type":33,"tag":183,"props":951,"children":952},{"style":217},[953],{"type":38,"value":954}," {\n",{"type":33,"tag":183,"props":956,"children":957},{"class":185,"line":196},[958,963,968,972,977],{"type":33,"tag":183,"props":959,"children":960},{"style":217},[961],{"type":38,"value":962},"  event.",{"type":33,"tag":183,"props":964,"children":965},{"style":211},[966],{"type":38,"value":967},"respondWith",{"type":33,"tag":183,"props":969,"children":970},{"style":217},[971],{"type":38,"value":603},{"type":33,"tag":183,"props":973,"children":974},{"style":211},[975],{"type":38,"value":976},"handleRequest",{"type":33,"tag":183,"props":978,"children":979},{"style":217},[980],{"type":38,"value":981},"(event.request))\n",{"type":33,"tag":183,"props":983,"children":984},{"class":185,"line":223},[985],{"type":33,"tag":183,"props":986,"children":987},{"style":217},[988],{"type":38,"value":989},"})\n",{"type":33,"tag":183,"props":991,"children":992},{"class":185,"line":247},[993],{"type":33,"tag":183,"props":994,"children":995},{"emptyLinePlaceholder":375},[996],{"type":38,"value":378},{"type":33,"tag":183,"props":998,"children":999},{"class":185,"line":269},[1000,1005,1010,1015,1019,1024],{"type":33,"tag":183,"props":1001,"children":1002},{"style":200},[1003],{"type":38,"value":1004},"async",{"type":33,"tag":183,"props":1006,"children":1007},{"style":200},[1008],{"type":38,"value":1009}," function",{"type":33,"tag":183,"props":1011,"children":1012},{"style":211},[1013],{"type":38,"value":1014}," handleRequest",{"type":33,"tag":183,"props":1016,"children":1017},{"style":217},[1018],{"type":38,"value":603},{"type":33,"tag":183,"props":1020,"children":1021},{"style":941},[1022],{"type":38,"value":1023},"request",{"type":33,"tag":183,"props":1025,"children":1026},{"style":217},[1027],{"type":38,"value":1028},") {\n",{"type":33,"tag":183,"props":1030,"children":1031},{"class":185,"line":286},[1032,1037,1042,1047,1052,1057],{"type":33,"tag":183,"props":1033,"children":1034},{"style":200},[1035],{"type":38,"value":1036},"  const",{"type":33,"tag":183,"props":1038,"children":1039},{"style":305},[1040],{"type":38,"value":1041}," url",{"type":33,"tag":183,"props":1043,"children":1044},{"style":200},[1045],{"type":38,"value":1046}," =",{"type":33,"tag":183,"props":1048,"children":1049},{"style":200},[1050],{"type":38,"value":1051}," new",{"type":33,"tag":183,"props":1053,"children":1054},{"style":211},[1055],{"type":38,"value":1056}," URL",{"type":33,"tag":183,"props":1058,"children":1059},{"style":217},[1060],{"type":38,"value":1061},"(request.url)\n",{"type":33,"tag":183,"props":1063,"children":1064},{"class":185,"line":315},[1065],{"type":33,"tag":183,"props":1066,"children":1067},{"style":217},[1068],{"type":38,"value":1069},"  \n",{"type":33,"tag":183,"props":1071,"children":1072},{"class":185,"line":27},[1073,1078,1083,1088,1093],{"type":33,"tag":183,"props":1074,"children":1075},{"style":200},[1076],{"type":38,"value":1077},"  if",{"type":33,"tag":183,"props":1079,"children":1080},{"style":217},[1081],{"type":38,"value":1082}," (url.pathname ",{"type":33,"tag":183,"props":1084,"children":1085},{"style":200},[1086],{"type":38,"value":1087},"===",{"type":33,"tag":183,"props":1089,"children":1090},{"style":395},[1091],{"type":38,"value":1092}," '\u002Fapi\u002Fevent'",{"type":33,"tag":183,"props":1094,"children":1095},{"style":217},[1096],{"type":38,"value":1028},{"type":33,"tag":183,"props":1098,"children":1099},{"class":185,"line":362},[1100,1105,1110,1114,1119,1124,1129],{"type":33,"tag":183,"props":1101,"children":1102},{"style":200},[1103],{"type":38,"value":1104},"    const",{"type":33,"tag":183,"props":1106,"children":1107},{"style":305},[1108],{"type":38,"value":1109}," body",{"type":33,"tag":183,"props":1111,"children":1112},{"style":200},[1113],{"type":38,"value":1046},{"type":33,"tag":183,"props":1115,"children":1116},{"style":200},[1117],{"type":38,"value":1118}," await",{"type":33,"tag":183,"props":1120,"children":1121},{"style":217},[1122],{"type":38,"value":1123}," request.",{"type":33,"tag":183,"props":1125,"children":1126},{"style":211},[1127],{"type":38,"value":1128},"json",{"type":33,"tag":183,"props":1130,"children":1131},{"style":217},[1132],{"type":38,"value":1133},"()\n",{"type":33,"tag":183,"props":1135,"children":1136},{"class":185,"line":371},[1137,1141,1146,1150,1155,1160,1165,1169,1174],{"type":33,"tag":183,"props":1138,"children":1139},{"style":200},[1140],{"type":38,"value":1104},{"type":33,"tag":183,"props":1142,"children":1143},{"style":305},[1144],{"type":38,"value":1145}," sessionId",{"type":33,"tag":183,"props":1147,"children":1148},{"style":200},[1149],{"type":38,"value":1046},{"type":33,"tag":183,"props":1151,"children":1152},{"style":211},[1153],{"type":38,"value":1154}," hashSession",{"type":33,"tag":183,"props":1156,"children":1157},{"style":217},[1158],{"type":38,"value":1159},"(request.headers.",{"type":33,"tag":183,"props":1161,"children":1162},{"style":211},[1163],{"type":38,"value":1164},"get",{"type":33,"tag":183,"props":1166,"children":1167},{"style":217},[1168],{"type":38,"value":603},{"type":33,"tag":183,"props":1170,"children":1171},{"style":395},[1172],{"type":38,"value":1173},"'CF-Connecting-IP'",{"type":33,"tag":183,"props":1175,"children":1176},{"style":217},[1177],{"type":38,"value":1178},"), \n",{"type":33,"tag":183,"props":1180,"children":1181},{"class":185,"line":381},[1182,1187,1191,1195,1200],{"type":33,"tag":183,"props":1183,"children":1184},{"style":217},[1185],{"type":38,"value":1186},"                                    request.headers.",{"type":33,"tag":183,"props":1188,"children":1189},{"style":211},[1190],{"type":38,"value":1164},{"type":33,"tag":183,"props":1192,"children":1193},{"style":217},[1194],{"type":38,"value":603},{"type":33,"tag":183,"props":1196,"children":1197},{"style":395},[1198],{"type":38,"value":1199},"'User-Agent'",{"type":33,"tag":183,"props":1201,"children":1202},{"style":217},[1203],{"type":38,"value":1204},"))\n",{"type":33,"tag":183,"props":1206,"children":1208},{"class":185,"line":1207},12,[1209],{"type":33,"tag":183,"props":1210,"children":1211},{"style":217},[1212],{"type":38,"value":1213},"    \n",{"type":33,"tag":183,"props":1215,"children":1217},{"class":185,"line":1216},13,[1218],{"type":33,"tag":183,"props":1219,"children":1220},{"style":190},[1221],{"type":38,"value":1222},"    \u002F\u002F Session check in Redis\n",{"type":33,"tag":183,"props":1224,"children":1226},{"class":185,"line":1225},14,[1227,1231,1236,1240,1244,1249,1254,1258,1263,1268,1273],{"type":33,"tag":183,"props":1228,"children":1229},{"style":200},[1230],{"type":38,"value":1104},{"type":33,"tag":183,"props":1232,"children":1233},{"style":305},[1234],{"type":38,"value":1235}," exists",{"type":33,"tag":183,"props":1237,"children":1238},{"style":200},[1239],{"type":38,"value":1046},{"type":33,"tag":183,"props":1241,"children":1242},{"style":200},[1243],{"type":38,"value":1118},{"type":33,"tag":183,"props":1245,"children":1246},{"style":217},[1247],{"type":38,"value":1248}," redis.",{"type":33,"tag":183,"props":1250,"children":1251},{"style":211},[1252],{"type":38,"value":1253},"exists",{"type":33,"tag":183,"props":1255,"children":1256},{"style":217},[1257],{"type":38,"value":603},{"type":33,"tag":183,"props":1259,"children":1260},{"style":395},[1261],{"type":38,"value":1262},"`session:${",{"type":33,"tag":183,"props":1264,"children":1265},{"style":217},[1266],{"type":38,"value":1267},"sessionId",{"type":33,"tag":183,"props":1269,"children":1270},{"style":395},[1271],{"type":38,"value":1272},"}`",{"type":33,"tag":183,"props":1274,"children":1275},{"style":217},[1276],{"type":38,"value":1277},")\n",{"type":33,"tag":183,"props":1279,"children":1281},{"class":185,"line":1280},15,[1282],{"type":33,"tag":183,"props":1283,"children":1284},{"style":217},[1285],{"type":38,"value":1213},{"type":33,"tag":183,"props":1287,"children":1289},{"class":185,"line":1288},16,[1290,1295,1300,1305],{"type":33,"tag":183,"props":1291,"children":1292},{"style":200},[1293],{"type":38,"value":1294},"    if",{"type":33,"tag":183,"props":1296,"children":1297},{"style":217},[1298],{"type":38,"value":1299}," (",{"type":33,"tag":183,"props":1301,"children":1302},{"style":200},[1303],{"type":38,"value":1304},"!",{"type":33,"tag":183,"props":1306,"children":1307},{"style":217},[1308],{"type":38,"value":1309},"exists) {\n",{"type":33,"tag":183,"props":1311,"children":1313},{"class":185,"line":1312},17,[1314,1319,1323,1328,1332,1336,1340,1344,1348,1353,1357,1362],{"type":33,"tag":183,"props":1315,"children":1316},{"style":200},[1317],{"type":38,"value":1318},"      await",{"type":33,"tag":183,"props":1320,"children":1321},{"style":217},[1322],{"type":38,"value":1248},{"type":33,"tag":183,"props":1324,"children":1325},{"style":211},[1326],{"type":38,"value":1327},"setex",{"type":33,"tag":183,"props":1329,"children":1330},{"style":217},[1331],{"type":38,"value":603},{"type":33,"tag":183,"props":1333,"children":1334},{"style":395},[1335],{"type":38,"value":1262},{"type":33,"tag":183,"props":1337,"children":1338},{"style":217},[1339],{"type":38,"value":1267},{"type":33,"tag":183,"props":1341,"children":1342},{"style":395},[1343],{"type":38,"value":1272},{"type":33,"tag":183,"props":1345,"children":1346},{"style":217},[1347],{"type":38,"value":403},{"type":33,"tag":183,"props":1349,"children":1350},{"style":305},[1351],{"type":38,"value":1352},"1800",{"type":33,"tag":183,"props":1354,"children":1355},{"style":217},[1356],{"type":38,"value":403},{"type":33,"tag":183,"props":1358,"children":1359},{"style":395},[1360],{"type":38,"value":1361},"'1'",{"type":33,"tag":183,"props":1363,"children":1364},{"style":217},[1365],{"type":38,"value":1277},{"type":33,"tag":183,"props":1367,"children":1369},{"class":185,"line":1368},18,[1370,1374,1379,1384],{"type":33,"tag":183,"props":1371,"children":1372},{"style":200},[1373],{"type":38,"value":1318},{"type":33,"tag":183,"props":1375,"children":1376},{"style":217},[1377],{"type":38,"value":1378}," kafka.",{"type":33,"tag":183,"props":1380,"children":1381},{"style":211},[1382],{"type":38,"value":1383},"send",{"type":33,"tag":183,"props":1385,"children":1386},{"style":217},[1387],{"type":38,"value":1388},"({\n",{"type":33,"tag":183,"props":1390,"children":1392},{"class":185,"line":1391},19,[1393,1398,1403],{"type":33,"tag":183,"props":1394,"children":1395},{"style":217},[1396],{"type":38,"value":1397},"        topic: ",{"type":33,"tag":183,"props":1399,"children":1400},{"style":395},[1401],{"type":38,"value":1402},"'pageviews'",{"type":33,"tag":183,"props":1404,"children":1405},{"style":217},[1406],{"type":38,"value":244},{"type":33,"tag":183,"props":1408,"children":1410},{"class":185,"line":1409},20,[1411],{"type":33,"tag":183,"props":1412,"children":1413},{"style":217},[1414],{"type":38,"value":1415},"        messages: [{\n",{"type":33,"tag":183,"props":1417,"children":1419},{"class":185,"line":1418},21,[1420],{"type":33,"tag":183,"props":1421,"children":1422},{"style":217},[1423],{"type":38,"value":1424},"          key: sessionId,\n",{"type":33,"tag":183,"props":1426,"children":1428},{"class":185,"line":1427},22,[1429,1434,1439,1444,1449],{"type":33,"tag":183,"props":1430,"children":1431},{"style":217},[1432],{"type":38,"value":1433},"          value: ",{"type":33,"tag":183,"props":1435,"children":1436},{"style":305},[1437],{"type":38,"value":1438},"JSON",{"type":33,"tag":183,"props":1440,"children":1441},{"style":217},[1442],{"type":38,"value":1443},".",{"type":33,"tag":183,"props":1445,"children":1446},{"style":211},[1447],{"type":38,"value":1448},"stringify",{"type":33,"tag":183,"props":1450,"children":1451},{"style":217},[1452],{"type":38,"value":1388},{"type":33,"tag":183,"props":1454,"children":1456},{"class":185,"line":1455},23,[1457],{"type":33,"tag":183,"props":1458,"children":1459},{"style":217},[1460],{"type":38,"value":1461},"            page: body.url,\n",{"type":33,"tag":183,"props":1463,"children":1465},{"class":185,"line":1464},24,[1466,1471,1476,1480],{"type":33,"tag":183,"props":1467,"children":1468},{"style":217},[1469],{"type":38,"value":1470},"            referrer: ",{"type":33,"tag":183,"props":1472,"children":1473},{"style":200},[1474],{"type":38,"value":1475},"new",{"type":33,"tag":183,"props":1477,"children":1478},{"style":211},[1479],{"type":38,"value":1056},{"type":33,"tag":183,"props":1481,"children":1482},{"style":217},[1483],{"type":38,"value":1484},"(body.referrer).hostname,\n",{"type":33,"tag":183,"props":1486,"children":1488},{"class":185,"line":1487},25,[1489,1494,1499],{"type":33,"tag":183,"props":1490,"children":1491},{"style":217},[1492],{"type":38,"value":1493},"            timestamp: Date.",{"type":33,"tag":183,"props":1495,"children":1496},{"style":211},[1497],{"type":38,"value":1498},"now",{"type":33,"tag":183,"props":1500,"children":1501},{"style":217},[1502],{"type":38,"value":1133},{"type":33,"tag":183,"props":1504,"children":1506},{"class":185,"line":1505},26,[1507],{"type":33,"tag":183,"props":1508,"children":1509},{"style":217},[1510],{"type":38,"value":1511},"          })\n",{"type":33,"tag":183,"props":1513,"children":1515},{"class":185,"line":1514},27,[1516],{"type":33,"tag":183,"props":1517,"children":1518},{"style":217},[1519],{"type":38,"value":1520},"        }]\n",{"type":33,"tag":183,"props":1522,"children":1524},{"class":185,"line":1523},28,[1525],{"type":33,"tag":183,"props":1526,"children":1527},{"style":217},[1528],{"type":38,"value":1529},"      })\n",{"type":33,"tag":183,"props":1531,"children":1533},{"class":185,"line":1532},29,[1534],{"type":33,"tag":183,"props":1535,"children":1536},{"style":217},[1537],{"type":38,"value":1538},"    }\n",{"type":33,"tag":183,"props":1540,"children":1542},{"class":185,"line":1541},30,[1543],{"type":33,"tag":183,"props":1544,"children":1545},{"style":217},[1546],{"type":38,"value":1213},{"type":33,"tag":183,"props":1548,"children":1550},{"class":185,"line":1549},31,[1551,1556,1560,1565,1569,1574,1579,1584],{"type":33,"tag":183,"props":1552,"children":1553},{"style":200},[1554],{"type":38,"value":1555},"    return",{"type":33,"tag":183,"props":1557,"children":1558},{"style":200},[1559],{"type":38,"value":1051},{"type":33,"tag":183,"props":1561,"children":1562},{"style":211},[1563],{"type":38,"value":1564}," Response",{"type":33,"tag":183,"props":1566,"children":1567},{"style":217},[1568],{"type":38,"value":603},{"type":33,"tag":183,"props":1570,"children":1571},{"style":395},[1572],{"type":38,"value":1573},"'OK'",{"type":33,"tag":183,"props":1575,"children":1576},{"style":217},[1577],{"type":38,"value":1578},", {status: ",{"type":33,"tag":183,"props":1580,"children":1581},{"style":305},[1582],{"type":38,"value":1583},"202",{"type":33,"tag":183,"props":1585,"children":1586},{"style":217},[1587],{"type":38,"value":989},{"type":33,"tag":183,"props":1589,"children":1591},{"class":185,"line":1590},32,[1592],{"type":33,"tag":183,"props":1593,"children":1594},{"style":217},[1595],{"type":38,"value":1596},"  }\n",{"type":33,"tag":183,"props":1598,"children":1600},{"class":185,"line":1599},33,[1601],{"type":33,"tag":183,"props":1602,"children":1603},{"style":217},[1604],{"type":38,"value":1605},"}\n",{"type":33,"tag":34,"props":1607,"children":1608},{},[1609],{"type":33,"tag":66,"props":1610,"children":1611},{},[1612],{"type":38,"value":1613},"Data layer:",{"type":33,"tag":58,"props":1615,"children":1616},{},[1617,1622,1627],{"type":33,"tag":62,"props":1618,"children":1619},{},[1620],{"type":38,"value":1621},"Kafka consumer writes to TimescaleDB (batch insert every 10 seconds)",{"type":33,"tag":62,"props":1623,"children":1624},{},[1625],{"type":38,"value":1626},"Grafana dashboard reads TimescaleDB (real-time, 2-second refresh)",{"type":33,"tag":62,"props":1628,"children":1629},{},[1630],{"type":38,"value":1631},"Daily aggregated export to BigQuery (dbt joins: Plausible traffic + Shopify order data)",{"type":33,"tag":34,"props":1633,"children":1634},{},[1635],{"type":38,"value":1636},"Result: Conversion attribution at 92% accuracy (GA4 was 58%—ITP and cookie rejection took their toll). KVKK compliance at 100%—no PII stored anywhere. Dashboard query time: 40ms (GA4: 4–6 seconds).",{"type":33,"tag":41,"props":1638,"children":1640},{"id":1639},"plausible-vs-ga4-when-to-use-each",[1641],{"type":38,"value":1642},"Plausible vs GA4: When to Use Each",{"type":33,"tag":34,"props":1644,"children":1645},{},[1646],{"type":38,"value":1647},"Do you need to abandon GA4 entirely? No. Two scenarios still justify it:",{"type":33,"tag":34,"props":1649,"children":1650},{},[1651],{"type":33,"tag":66,"props":1652,"children":1653},{},[1654],{"type":38,"value":1655},"Use GA4:",{"type":33,"tag":58,"props":1657,"children":1658},{},[1659,1664,1669],{"type":33,"tag":62,"props":1660,"children":1661},{},[1662],{"type":38,"value":1663},"Cross-domain tracking (multiple sites, subdomains—GA4's linker mechanism is more mature)",{"type":33,"tag":62,"props":1665,"children":1666},{},[1667],{"type":38,"value":1668},"Machine learning insights (GA4's predictive metrics: purchase probability, churn likelihood)",{"type":33,"tag":62,"props":1670,"children":1671},{},[1672],{"type":38,"value":1673},"Google Ads integration (enhanced conversions, remarketing audience push—native to GA4)",{"type":33,"tag":34,"props":1675,"children":1676},{},[1677],{"type":33,"tag":66,"props":1678,"children":1679},{},[1680],{"type":38,"value":1681},"Use Plausible:",{"type":33,"tag":58,"props":1683,"children":1684},{},[1685,1690,1695],{"type":33,"tag":62,"props":1686,"children":1687},{},[1688],{"type":38,"value":1689},"Public dashboard (embed Plausible; GA4 requires a viewer account)",{"type":33,"tag":62,"props":1691,"children":1692},{},[1693],{"type":38,"value":1694},"Lightweight sites (blogs, landing pages, SaaS marketing)",{"type":33,"tag":62,"props":1696,"children":1697},{},[1698],{"type":38,"value":1699},"Strict compliance (KVKK, GDPR, CCPA—zero risk with Plausible)",{"type":33,"tag":34,"props":1701,"children":1702},{},[1703],{"type":38,"value":1704},"Hybrid setups are most common: Plausible measures site-wide traffic; GA4 fires only for critical conversion funnels via server-side GTM. Privacy and performance both win.",{"type":33,"tag":34,"props":1706,"children":1707},{},[1708],{"type":38,"value":1709},"Privacy-first analytics is no longer a luxury—it's mandatory. Chrome killed cookies in 2024; KVKK fines tripled in 2025. Plausible + server-side aggregation is the only production-ready answer to both pressures. If GA4's 60% data loss still frustrates you, plan your transition to cookieless architecture now. In 2026, analytics stacks that ignore cookies can't survive.",{"type":33,"tag":1711,"props":1712,"children":1713},"style",{},[1714],{"type":38,"value":1715},"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":16,"searchDepth":223,"depth":223,"links":1717},[1718,1719,1720,1721,1722],{"id":43,"depth":196,"text":46},{"id":138,"depth":196,"text":141},{"id":502,"depth":196,"text":505},{"id":863,"depth":196,"text":866},{"id":1639,"depth":196,"text":1642},"markdown","content:en:data:privacy-first-analytics-plausible-server-side-aggregation.md","content","en\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation.md","en\u002Fdata\u002Fprivacy-first-analytics-plausible-server-side-aggregation","md",1779314637607]