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.
Plausible: The Core of Cookieless Measurement
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.
Compared to GA4:
- Data ownership: Plausible writes events to its own PostgreSQL instance. GA4 sends them to Google servers—you can't query them directly (BigQuery export aside).
- Cookie dependency: GA4 relies on the
_gacookie. Reject it, and measurement fragments. Plausible is cookieless from the start. - Script footprint: 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.
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.
In production, Plausible operates in two modes:
- Standalone: Small sites (blogs, landing pages) get full capability from the tracker alone. Ten lines of JS embed, dashboard ready.
- Hybrid: 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.
Server-Side Aggregation: Event to Metric
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: summarize events on the server in real time; store counters, not raw events.
Example architecture:
Client → Plausible Tracker (1.4 KB JS)
↓
Edge Worker (Cloudflare / Vercel)
↓ (aggregation happens here)
Internal Event Bus (Kafka / Redpanda)
↓
Time-Series DB (TimescaleDB / ClickHouse)
Aggregation logic in the edge worker:
-- TimescaleDB hypertable example
CREATE TABLE page_metrics (
time TIMESTAMPTZ NOT NULL,
page_path TEXT NOT NULL,
country TEXT,
views INT DEFAULT 1,
bounces INT DEFAULT 0,
session_dur INT DEFAULT 0
);
SELECT create_hypertable('page_metrics', 'time');
Each pageview from the client follows this flow:
- JS tracker sends
POST /api/event→ edge endpoint - Edge worker computes hash (IP + UA → session_id)
- Session store (Redis) checks: did this session_id appear in the last 30 minutes?
- If yes, increment
viewscounter; if no, write new row - After 30-minute session timeout, compute bounce rate
This architecture delivers three advantages over GA4:
- Storage: 85% reduction. 10M events → 200K aggregated rows
- Query speed: 40× faster. Time-series indexing delivers dashboard queries under 15ms
- Privacy: Zero PII. No raw events stored means GDPR Article 17 (right to erasure) requests don't apply—there's no personal data in the first place
KVKK/GDPR Compliance: Technical Layers
Making privacy-first analytics legally bulletproof requires four layers:
1. Data minimization (GDPR Article 5.1c): Collect only what's necessary. Example: don't store full referrer URLs; store just the domain (https://example.com/checkout?user=123 → example.com). Compliance + disk savings.
2. Anonymization threshold (KVKK Guidelines 2023): Groups with fewer than 5 data points remain hidden. Show "< 5" on the dashboard. Groups of 2–4 become identifiable. In TimescaleDB:
SELECT
country,
CASE
WHEN COUNT(DISTINCT session_id) < 5 THEN '< 5'
ELSE COUNT(DISTINCT session_id)::TEXT
END AS visitors
FROM page_metrics
WHERE time > NOW() - INTERVAL '7 days'
GROUP BY country;
3. Data retention policy: KVKK Article 7 mandates deletion once the processing purpose ends. For analytics, that purpose is performance optimization—90 days suffices. In TimescaleDB, automate it:
SELECT add_retention_policy('page_metrics', INTERVAL '90 days');
SELECT add_compression_policy('page_metrics', INTERVAL '7 days');
Data older than 7 days compresses; older than 90 days deletes. GDPR Article 17 compliance runs automatically.
4. Consent Mode v2 integration (optional): If you're still running GA4 hybrid, operate Plausible even with analytics_storage: denied. Plausible uses no cookies, so it doesn't require consent. The first-party data architecture outlines this hybrid setup: Plausible measures traffic; server-side GTM sends conversion events to the CDP.
Production Case: E-Commerce Hybrid Stack
Architecture we built for a Shopify store:
Frontend:
- Plausible tracker on all pages (product view, cart, checkout)
- Custom event
plausible('Purchase', {revenue: 150})on checkout success
Backend (Cloudflare Worker):
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
if (url.pathname === '/api/event') {
const body = await request.json()
const sessionId = hashSession(request.headers.get('CF-Connecting-IP'),
request.headers.get('User-Agent'))
// Session check in Redis
const exists = await redis.exists(`session:${sessionId}`)
if (!exists) {
await redis.setex(`session:${sessionId}`, 1800, '1')
await kafka.send({
topic: 'pageviews',
messages: [{
key: sessionId,
value: JSON.stringify({
page: body.url,
referrer: new URL(body.referrer).hostname,
timestamp: Date.now()
})
}]
})
}
return new Response('OK', {status: 202})
}
}
Data layer:
- Kafka consumer writes to TimescaleDB (batch insert every 10 seconds)
- Grafana dashboard reads TimescaleDB (real-time, 2-second refresh)
- Daily aggregated export to BigQuery (dbt joins: Plausible traffic + Shopify order data)
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).
Plausible vs GA4: When to Use Each
Do you need to abandon GA4 entirely? No. Two scenarios still justify it:
Use GA4:
- Cross-domain tracking (multiple sites, subdomains—GA4's linker mechanism is more mature)
- Machine learning insights (GA4's predictive metrics: purchase probability, churn likelihood)
- Google Ads integration (enhanced conversions, remarketing audience push—native to GA4)
Use Plausible:
- Public dashboard (embed Plausible; GA4 requires a viewer account)
- Lightweight sites (blogs, landing pages, SaaS marketing)
- Strict compliance (KVKK, GDPR, CCPA—zero risk with Plausible)
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.
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.