Analisis Pengunjung Tanpa Cookie: Solusi Privacy-First dengan SHA-256 IP Hashing
Cara melacak statistik pengunjung secara unik tanpa melanggar privasi (GDPR) menggunakan hashing IP dengan salt harian di SvelteKit.
Table of Contents
- Analisis Pengunjung Tanpa Cookie: Solusi Privacy-First dengan SHA-256 IP Hashing
- Konsep Analitik Privacy-First
- Langkah Implementasi di SvelteKit
- 1. Perhitungan Hash Pengenal Unik
- 2. Merekam Kunjungan di Load Function Server
- 3. Visualisasi Data pada Dashboard Admin
- Mengapa Solusi Ini Sepenuhnya Patuh Privasi (GDPR)?
- Kesimpulan
Ketika membangun website portofolio pribadi, kita pasti penasaran dengan berapa banyak orang yang mengunjungi situs kita, halaman mana saja yang paling populer, dan dari mana asal rujukan mereka. Solusi instan untuk kebutuhan ini biasanya adalah memasang Google Analytics atau Plausible.
Namun, di era kesadaran privasi data saat ini, menyematkan skrip pelacak pihak ketiga memiliki beberapa konsekuensi negatif:
- Cookie Consent Banners: Anda terpaksa menampilkan banner cookie pop-up yang mengganggu keindahan estetika minimalis web Anda untuk memenuhi kepatuhan regulasi GDPR/CCPA.
- Performa Turun: Skrip pelacak eksternal memblokir pemuatan halaman utama dan menurunkan skor performa Lighthouse Anda.
- Pemblokir Iklan (Ad-blockers): Banyak browser modern (seperti Brave atau Safari) secara otomatis memblokir Google Analytics, sehingga data kunjungan Anda tidak akurat.
Untuk mengatasi masalah ini pada proyek Personal Website & Headless CMS ini, saya memutuskan untuk mengimplementasikan sistem analitik internal yang mandiri, ringan, dan tanpa menggunakan cookie pelacak (cookie-free).
Konsep Analitik Privacy-First
Bagaimana kita bisa menghitung jumlah pengunjung unik harian tanpa memasang file cookie pengenal pada komputer mereka? Jawabannya adalah menggunakan teknik SHA-256 IP Hashing dengan Salt Harian.
Alurnya adalah sebagai berikut:
- Saat pengunjung meminta halaman, kita mengambil alamat IP mereka dan informasi User-Agent browser.
- Kita membuat sebuah salt rahasia acak yang berputar setiap hari (berdasarkan tanggal hari ini).
- Kita menggabungkan alamat IP + User-Agent + Salt Harian, lalu menghitung hash SHA-256 dari string tersebut.
- Hash hasil kalkulasi ini disimpan sebagai string pengenal sesi pengunjung hari itu.
- Karena salt berubah setiap hari, kita tidak dapat melacak kembali alamat IP yang sama di hari esok. Ini memastikan data alamat IP asli terenkripsi secara satu arah (one-way hash) dan tidak disimpan di database.
Langkah Implementasi di SvelteKit
Kita membuat sistem analitik ini bekerja secara otomatis di belakang layar menggunakan middleware atau penanganan event rute server SvelteKit.
1. Perhitungan Hash Pengenal Unik
Berikut adalah fungsi utilitas untuk menghasilkan hash sesi pengunjung harian pada server:
import { createHash } from 'crypto';
export function generateVisitorHash(ip: string, userAgent: string, secretSalt: string): string {
// Dapatkan format tanggal hari ini untuk salt harian
const todayStr = new Date().toISOString().split('T')[0];
// Gabungkan IP, User-Agent, Salt, dan Tanggal Hari Ini
const rawString = `${ip}-${userAgent}-${secretSalt}-${todayStr}`;
// Buat hash SHA-256
return createHash('sha256').update(rawString).digest('hex');
}2. Merekam Kunjungan di Load Function Server
Di SvelteKit, kita bisa menaruh logika penulisan data analitik pada penanganan rute global atau di load function server halaman publik (+page.server.ts):
import { db } from '$lib/server/db';
import { pageViews } from '$lib/server/db/schema';
import { generateVisitorHash } from '$lib/server/analytics';
export const load = async ({ request, getClientAddress }) => {
try {
const ip = getClientAddress();
const userAgent = request.headers.get('user-agent') || 'unknown';
const referrer = request.headers.get('referer') || 'direct';
const url = new URL(request.url);
// Salt rahasia tersimpan di environment variables (.env)
const secretSalt = process.env.ANALYTICS_SALT || 'default_super_secret_salt';
const ipHash = generateVisitorHash(ip, userAgent, secretSalt);
// Simpan ke database sqlite Turso secara non-blocking
await db.insert(pageViews).values({
path: url.pathname,
referrer: referrer,
userAgent: userAgent,
ipHash: ipHash,
createdAt: new Date()
});
} catch (error) {
console.error("Gagal mencatat data analitik pengunjung:", error);
}
};3. Visualisasi Data pada Dashboard Admin
Pada dashboard CMS, kita dapat mengelompokkan data kunjungan berdasarkan ipHash untuk menghitung pengunjung unik harian (Unique Visitors) dengan query SQL yang sangat sederhana:
SELECT
path,
COUNT(id) as total_views,
COUNT(DISTINCT ip_hash) as unique_visitors
FROM page_views
GROUP BY path;Mengapa Solusi Ini Sepenuhnya Patuh Privasi (GDPR)?
Regulasi GDPR mengkategorikan alamat IP sebagai data personal sensitif yang tidak boleh disimpan tanpa persetujuan eksplisit. Dengan skema hashing ini:
- Tidak ada alamat IP yang disimpan: Alamat IP langsung diubah menjadi hash satu arah di memori server dan tidak pernah menyentuh harddisk database.
- Tidak ada pelacakan lintas hari: Karena salt berputar harian, hash pengunjung pada hari Senin akan sangat berbeda dengan pengunjung yang sama di hari Selasa, mencegah pelacakan profil jangka panjang (user profiling).
- Tanpa Cookie: Pengunjung tidak perlu mengklik tombol "Terima Semua Cookie" saat mengunjungi situs Anda.
Kesimpulan
Membangun analitik internal berbasis SHA-256 IP Hashing di SvelteKit memberikan kontrol penuh atas data Anda, mempercepat performa halaman karena terbebas dari library eksternal yang lambat, serta menghormati privasi para pembaca dengan seutuhnya. Sebuah kemenangan mutlak untuk portofolio pribadi Anda.