Maskot beruang kutub NordBastion berdiri di sebuah mimbar batu Nordik berukir, sebuah dashboard holografik cyan besar melayang di atasnya menampilkan bar chart, sebuah grafik garis yang menanjak, dan sebuah cincin donut dengan satu aksen amber, serta satu aliran titik cyan bercahaya yang tidak putus mengalir dari sebuah jendela melengkung yang diterangi aurora melewati dashboard menuju sebuah pintu brankas berukir rune, dengan rak server di belakangnya
Cara · Analitik·18 menit baca · 40 menit praktik langsung

Anda memasang satu skrip untuk mengawasi pembaca Anda.
Ia balas mengawasi, dan melaporkannya ke tempat lain.

Analitik adalah tag pihak ketiga terakhir yang masih dipertahankan kebanyakan orang, dan inilah satu-satunya yang melihat segalanya: setiap halaman, setiap pembaca, setiap jam, pada sistem yang bukan milik Anda dan tidak dapat Anda audit. Enam langkah untuk menggantinya dengan penghitung milik Anda sendiri — Umami, Plausible Community Edition, Matomo, atau tidak lebih dari log server — yang berjalan di sebuah mesin Nordik yang disewa tanpa dokumen identitas. Tanpa cookie secara default, tidak ada banner yang perlu diperdebatkan, tidak ada perpindahan data pembaca Anda ke negara ketiga. Mulai dari $3.90 per bulan. Diuji di Debian 12.

Enam langkah
  1. 01

    Pilih

    Empat alat, satu tabel yang jujur

  2. 02

    Sediakan

    Satu subdomain, tiga port

  3. 03

    Deploy

    Compose, Caddy, login pertama

  4. 04

    Instrumentasi

    Satu tag, dan jalur pihak pertama

  5. 05

    Patuhi

    Dua hukum, bukan satu

  6. 06

    Simpan

    Retensi, backup, log yang terlupakan

Sebelum mulai · Apa itu tag ini

Ini bukan penghitung. Ini adalah baris pelaporan.

Menghitung pengunjung benar-benar bermanfaat, dan tidak ada yang mencurigakan dalam menginginkannya. Anda perlu tahu apakah penulisan ulang itu membantu, artikel mana yang benar-benar dituntaskan pembaca, referrer mana yang mengirim pembaca sungguhan dan bukan sekadar bounce, dan apakah deploy tadi malam diam-diam merusak checkout di satu browser tertentu. Setiap pertanyaan itu terjawab oleh sebuah tabel page view, dan masing-masing adalah alasan yang sah untuk mengukur.

Yang layak dilihat secara langsung adalah kesepakatan yang hampir semua orang terima begitu saja untuk mendapatkan jawaban-jawaban itu. Tag analitik standar adalah sepotong kode, ditulis oleh sebuah perusahaan periklanan, yang Anda pasang di setiap halaman situs Anda dan Anda perintahkan untuk berjalan di browser pembaca Anda. Kode itu membaca alamat halaman, referrer, layar, bahasa, perangkat; kode itu menyetel atau membaca sebuah pengidentifikasi pada perangkat; kode itu mengirim semua itu ke sebuah sistem yang tidak dapat Anda periksa, di sebuah negara yang aturannya bukan Anda yang pilih; dan kode itu menyerahkan berkas hasilnya kepada sebuah perusahaan yang pendapatannya berasal dari mengetahui apa yang orang-orang lakukan. Pemilik situs mendapatkan sebuah dashboard. Dashboard itu adalah separuh yang lebih kecil dari transaksi ini.

Tagihannya datang dalam empat cicilan, dan hanya satu yang terlihat jelas. Ada banner persetujuan, yang hampir sepenuhnya ada karena tag yang satu ini, yang membuat Anda kehilangan sebagian pengunjung yang bisa diukur sejak pintu masuk, dan yang kemudian Anda bayar ke vendor kedua untuk mengelolanya. Ada pertanyaan transfer data, karena data pembaca Anda pergi ke sebuah negara ketiga dan pada akhirnya seseorang harus menuliskan mengapa itu sah secara hukum. Ada data itu sendiri, yaitu data pembaca Anda, dalam sebuah database yang tidak dapat Anda kueri kecuali lewat laporan yang ditawarkan kepada Anda. Dan ada ketergantungan: produk itu dihentikan, diganti nama, atau direstrukturisasi menurut jadwal orang lain, dan terakhir kali itu terjadi, pengukuran-pengukuran lama pun ikut lenyap.

Self-hosting menghapus keempat masalah itu sekaligus, dan ini bukan pekerjaan besar. Perangkat lunaknya sudah matang, gratis, dan tanpa kejutan; mesinnya hanya beberapa dolar sebulan; pekerjaannya hanya satu malam. Yang Anda dapatkan kembali adalah sebuah tabel yang Anda miliki sendiri, di atas hardware dalam jurisdiksi yang Anda pilih sendiri, tanpa pihak ketiga yang perlu diungkapkan dan — untuk kebanyakan konfigurasi — tanpa banner yang perlu diperdebatkan. Empat cara untuk mengetahui berapa banyak orang membaca situs Anda, dan berapa biaya masing-masing:

Properti Tag analitik gratis yang besar itu SaaS analitik yang mengutamakan privasi Perangkat lunak yang sama, VPS Anda sendiri
Siapa yang memegang tabel data pembacaPerusahaan periklananVendor, berdasarkan kontrakAnda, di disk
Banner persetujuan diperlukanYa, dalam praktiknya selaluBiasanya tidakBiasanya tidak — lihat langkah 05
Data keluar dari EEAYa, sesuai desainBergantung pada vendorHanya jika Anda memilih mesin di luar itu
Pihak ketiga yang harus diungkapkanSetidaknya satu, ditambah subprosesor-nyaSatu prosesorTidak ada
Diblokir oleh daftar filterBesarBerdasarkan hostname, sering kaliJarang, begitu sudah menjadi pihak pertama
Data mentah tersedia bagi AndaTidak — hanya laporanLewat API, selama Anda membayarIni adalah database Anda
Biaya bulanan pada 100k page viewNihil dalam bentuk uangPuluhan dolar, naik seiring traffic$3.90–$7.90, flat
Pilih ini jikaAnda memerlukan integrasi platform iklan dan menerima sisanyaAnda menginginkan etikanya tanpa menjalankan apa punData pembacanya milik Anda, begitu juga tabelnya

Kolom ketiga adalah jawaban yang sungguhan, bukan argumen tandingan yang lemah (straw man): sebuah vendor hosting yang mengutamakan privasi menghapus sebagian besar masalah yang sama bagi orang-orang yang memang seharusnya tidak menjalankan server sendiri, dan membayar salah satu dari mereka adalah hasil yang lebih baik daripada tetap memakai tag iklan. Panduan ini ditujukan untuk kasus di mana Anda sudah menyewa sebuah mesin, atau memang berencana melakukannya.

Langkah 01 · Pilih

Empat alat. Database yang menentukan biayanya.

Keempat alat ini bukan empat varian dari hal yang sama. Perbedaannya terletak pada media apa yang mereka gunakan untuk menyimpan data, dan satu pilihan itu saja yang menentukan jejak memori, pertumbuhan disk, risiko upgrade, dan kedalaman laporannya. Baca kolom penyimpanan dahulu dan kolom fitur setelahnya; itulah urutan sebenarnya bagaimana keputusan ini dibuat.

Alat Stack dan penyimpanan Tier yang masuk akal Pilih ini untuk
UmamiAplikasi Node + PostgreSQL atau MySQL. Dua container.Sentinel · $3.90Jawaban standarnya. Ringan, mudah dibaca, tanpa cookie, multi-situs, berlisensi MIT.
Plausible Community EditionAplikasi Elixir + PostgreSQL + ClickHouse. Empat container.Garrison · $7.90Goal, funnel, dan dashboard publik; kueri cepat pada volume tinggi.
MatomoAplikasi PHP + MariaDB, ditambah tugas pengarsipan terjadwal.Garrison · $7.90Paritas fitur dengan petahana — segmen, kohort, e-commerce, impor log.
GoAccessSatu binary yang membaca access log web server. Tanpa database.Apa pun yang sudah Anda jalankanTanpa JavaScript sama sekali — situs statis, dokumentasi, API.

Umami adalah pilihan pertama yang layak diambil kecuali Anda memiliki alasan untuk tidak memilihnya. Alat ini adalah aplikasi Node yang berjalan di atas satu database relasional, cukup puas dengan satu gigabyte memori, skemanya hanya segelintir tabel yang bisa Anda kueri sendiri, dan laporannya mencakup apa yang kebanyakan orang buka dashboard untuk lihat: halaman, referrer, negara, perangkat, ditambah custom event kapan pun Anda mau. Alat ini tanpa cookie secara default, dan tidak meminta Anda mengonfigurasi apa pun untuk itu.

Plausible Community Edition adalah versi yang dapat di-self-hosting dari produk yang biasanya di-hosting oleh penyedianya, dan komponen tambahannya adalah ClickHouse — sebuah penyimpanan kolom yang membuat kueri agregat atas puluhan juta baris terasa instan, dan yang akan memakai memori sebanyak yang Anda izinkan. Itu adalah pertukaran yang wajar di atas beberapa juta kunjungan bulanan, dan pertukaran yang aneh di bawahnya. Baca ketentuan lisensi proyek ini sebelum Anda men-deploy: edisi komunitas ini dimaksudkan untuk menjalankan analitik Anda sendiri, bukan untuk dijual kembali sebagai layanan.

Matomo adalah satu-satunya dari keempat alat ini yang benar-benar menggantikan petahana, fitur demi fitur, dan kejujuran pernyataan itu berlaku dua arah: Anda mendapatkan segmen, funnel, kohort, atribusi e-commerce, heatmap melalui plugin, dan kemampuan mengimpor log server Anda sendiri, tetapi Anda juga mendapatkan aplikasi PHP besar yang tabel mentahnya tumbuh cepat dan laporannya dihitung terlebih dahulu oleh tugas pengarsipan yang harus Anda jadwalkan sendiri. Dua hal tetap membuatnya layak dipertimbangkan: alat ini dapat dikonfigurasi agar tidak memasang cookie sama sekali, dan konfigurasi pengukuran audiens dari alat ini pernah muncul di daftar resmi yang dipublikasikan regulator untuk alat yang dikecualikan dari persyaratan persetujuan — periksa daftar yang berlaku saat ini, bukan sekadar tulisan blog, tetapi ini tetap keunggulan nyata di atas kertas.

GoAccess adalah opsi yang tidak disarankan siapa pun, tetapi seharusnya dipilih oleh beberapa orang. Alat ini membaca log akses yang sudah ditulis oleh web server Anda dan menampilkannya sebagai laporan terminal atau satu halaman HTML mandiri. Tidak ada yang berjalan di browser, tidak ada yang disimpan di perangkat, dan tidak ada pertanyaan persetujuan yang perlu dijawab karena tidak ada pengumpulan data di luar permintaan itu sendiri. Yang Anda korbankan adalah segala sesuatu yang terjadi di dalam halaman itu dan segala harapan untuk menghitung orang, bukan sekadar permintaan. Untuk situs dokumentasi atau blog statis, itu sering merupakan pertukaran yang wajar — dan alat ini berpadu baik dengan salah satu alat lain, bukan menggantikannya.

Keputusannya dalam satu kalimat

Jika Anda tidak bisa menyebutkan fitur spesifik yang Anda perlukan dari Plausible atau Matomo, maka yang Anda perlukan adalah Umami. Deploy dalam dua puluh menit, jalankan selama satu bulan, dan biarkan hal yang tidak bisa Anda jawab sendiri yang menentukan apakah Anda perlu berpindah. Bermigrasi nanti hanya akan mengorbankan riwayat data dan tidak ada lagi selainnya, dan riwayat yang hilang itu hanya satu bulan.

Langkah 02 · Siapkan

Satu mesin, satu nama. Tetapkan namanya dahulu.

Pesan VPS-nya dan pilih bastion berdasarkan di mana pembaca Anda berada dan di mana Anda ingin data itu disimpan — Stockholm, Helsinki, Oslo, atau Reykjavík semuanya berada di dalam EEA, dan itulah intinya. Lalu jalankan tahap pengerasan jam pertama sebelum hal lain apa pun menyentuh mesin itu: SSH hanya dengan key, port yang dipindahkan, firewall default-deny, dan upgrade otomatis tanpa pengawasan. Ini adalah empat puluh menit yang sama untuk setiap panduan dalam seri ini, dan ini bukan hal opsional pada sebuah mesin yang akan menyimpan data pembaca seseorang selama satu tahun.

Lalu tetapkan hostname-nya, karena hostname itu sudah tertanam dalam potongan kode pelacakan di setiap halaman dari setiap situs yang Anda ukur, dan mengubahnya nanti berarti mengedit semuanya sementara nama lama masih menerima hit. Ada dua bentuk yang berhasil. Sebuah subdomain khusus dari situs yang Anda ukur — reverse proxy di mesin analitik menjawab untuk nama itu, dan ini adalah hal paling sederhana yang berhasil. Atau sebuah nama netral pada domainnya sendiri, jika satu instance akan melayani beberapa situs yang tidak berhubungan dan Anda lebih memilih agar source code masing-masing situs tidak mengungkap situs yang lain. Buat rekamannya dan biarkan itu bisa di-resolve sebelum Anda melanjutkan: proxy akan meminta sertifikat dari sebuah certificate authority saat pertama kali dijalankan, dan otoritas itu memeriksa namanya dari luar.

dig +short stats.example.com          # must return the VPS address before you deploy
ufw default deny incoming
ufw allow 47222/tcp                  # administrative SSH, moved off 22
ufw allow 80/tcp                     # ACME challenge and the redirect to 443
ufw allow 443/tcp                    # the dashboard and the collection endpoint
ufw enable && ufw status numbered

Tiga port, dan tidak ada yang lain. Database tidak boleh dipublikasikan: ia hidup di jaringan Docker internal, hanya bisa dijangkau oleh container aplikasi dan tidak oleh siapa pun di internet. Inilah cara paling umum sebuah mesin analitik self-hosted berakhir muncul dalam hasil scan — sebuah port PostgreSQL atau MySQL yang terikat ke alamat publik karena sebuah file Compose dari sebuah tutorial memiliki pemetaan port di dalamnya yang sebenarnya ada untuk keperluan pengembangan lokal.

Soal ukuran, tahan diri dari godaan untuk membeli terlalu besar. Sebuah Sentinel — 2 vCPU, 4 GB, 120 GB NVMe, $3.90 per bulan — sudah cukup menjalankan Umami plus Postgres dengan ruang lebih, dan akan menampung data event selama bertahun-tahun untuk situs dengan page view bulanan berjumlah enam digit. Naik ke Garrison — 4 vCPU, 8 GB, 240 GB — jika Anda memilih Plausible, karena ClickHouse lebih nyaman di sana, atau Matomo, karena tugas pengarsipannya membutuhkan lebih banyak core. Bandwidth tidak terbatas di setiap tier, dan traffic analitik hanyalah kesalahan pembulatan dibandingkan itu: setiap hit hanya beberapa ratus byte.

Langkah 03 · Deploy

Dua container dan satu proxy. Lalu tutup pintunya.

Deployment referensi di bawah ini menggunakan Umami, karena inilah yang seharusnya dijalankan sebagian besar pembaca dan karena bentuknya bisa digeneralisasi: sebuah container aplikasi, sebuah container database yang bisa dijangkau olehnya dan tidak oleh siapa pun yang lain, dan sebuah reverse proxy yang memegang sertifikatnya. Plausible dan Matomo berbeda dalam jumlah container dan nama variabelnya, bukan dalam strukturnya — ambil file Compose resmi mereka dan terapkan tiga aturan yang sama.

Tiga aturan, diurutkan berdasarkan seberapa besar biaya yang harus Anda tanggung jika diabaikan. Kunci setiap image ke tag yang pasti, jangan pernah ke tag yang mengambang: sebuah stack analitik yang diam-diam menarik versi major baru saat reboot yang tidak berhubungan adalah sebuah migrasi skema yang tidak Anda jadwalkan. Hasilkan secret aplikasi dari sumber acak yang sungguhan dan simpan itu — secret itu mengenkripsi data sesi, dan mengubahnya nanti paling-paling akan membuat semua orang logout. Jangan publikasikan port database apa pun: kedua container itu berbagi satu jaringan dan itulah seluruh kontrol akses yang mereka butuhkan.

mkdir -p /srv/analytics && cd /srv/analytics
openssl rand -base64 32 > .app_secret      # keep this file; back it up with the database
openssl rand -base64 24 > .db_password
chmod 600 .app_secret .db_password

File Compose-nya. Dua service, satu jaringan privat, satu named volume untuk database, dan tidak satu pun port yang dipublikasikan — proxy adalah satu-satunya yang berbicara dengan dunia luar:

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-v2.x.y   # an exact tag, never :latest
    environment:
      DATABASE_URL: postgresql://umami:CHANGE_ME@db:5432/umami
      APP_SECRET:   CHANGE_ME                                # the openssl output above
    depends_on: [db]
    restart: unless-stopped
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB:       umami
      POSTGRES_USER:     umami
      POSTGRES_PASSWORD: CHANGE_ME
    volumes:
      - umami-db:/var/lib/postgresql/data
    restart: unless-stopped
volumes:
  umami-db:

Caddy adalah jalan tersingkat untuk mendapatkan setup TLS yang benar di sini: dua baris konfigurasi, sertifikat yang diperoleh dan diperbarui tanpa cron job, dan default modern yang tidak perlu Anda riset sendiri. Jika Anda sudah menjalankan nginx di mesin ini, tetap gunakan nginx — yang dibutuhkan adalah proxy di depan, bukan proxy yang satu ini secara spesifik. Bagaimanapun caranya, aplikasi analitik tidak boleh menjadi yang mendengarkan langsung di port 443.

# Caddyfile — Caddy runs as a third service in the same Compose project, so
# "umami" resolves on the internal network. It is the only service that
# publishes ports (80 and 443).
stats.example.com {
    encode zstd gzip
    reverse_proxy umami:3000
}

Jalankan stack-nya, lalu segera lakukan satu hal yang benar-benar mendesak waktu. docker compose up -d, tunggu migrasi selesai, dan buka dashboard-nya. Setiap alat ini dilengkapi baik akun administrator default yang terdokumentasi, maupun layar registrasi pertama yang terbuka bebas, dan hostname-nya sudah menjadi pengetahuan publik sejak detik sertifikatnya diterbitkan, karena log transparansi sertifikat bersifat publik dan terus-menerus dipindai. Ubah kata sandi default dan tutup registrasi dalam hitungan menit setelah pemuatan pertama yang berhasil, bukan besok.

docker compose up -d
docker compose logs -f umami          # wait for the schema migration to finish
docker compose ps                     # both services healthy, no published ports listed
ss -tlnp | grep -E ':(5432|3306)'     # must print nothing at all
Lima menit yang menentukan siapa pemilik instance ini

Umami dilengkapi sebuah akun administrator terdokumentasi yang kata sandinya sama untuk setiap instalasi di seluruh dunia. Pengunjung pertama Plausible menjadi pemiliknya kecuali registrasi dimatikan di environment-nya. Matomo menuntun pengunjung pertama melalui sebuah installer yang membuat superuser. Dalam ketiga kasus itu, jendela waktu antara "sertifikatnya sudah ada" dan "Anda sudah login" adalah jendela waktu di mana orang lain bisa login sebagai gantinya — dan mereka tidak perlu menebak hostname-nya, karena itu sudah dipublikasikan untuk mereka. Login-lah lebih dulu, ubah kredensialnya, lalu atur saklar registrasi ke tertutup dan muat ulang halaman untuk memastikan perubahan itu berhasil.

Langkah 04 · Instrumentasi

Satu tag. Lalu tentukan domain siapa tempatnya berada.

Daftarkan situsnya di dashboard, salin pengidentifikasi yang diberikan, dan pasang satu tag skrip yang ditangguhkan di templat — di head atau di akhir body, tidak terlalu penting di mana, tetapi harus tetap ditangguhkan agar tidak pernah memperlambat halaman. Inilah seluruh integrasinya. Tidak ada tag manager, tidak ada container, tidak ada data layer, dan tidak ada pengkabelan consent-mode, dan ketiadaan itulah sebagian besar alasan Anda datang ke sini.

<script defer src="https://stats.example.com/script.js"
        data-website-id="00000000-0000-0000-0000-000000000000"></script>

Muat sebuah halaman situs, lalu lihat dashboard-nya: hit itu seharusnya sudah muncul dalam hitungan detik. Jika tidak, console browser dan tab network menjawabnya dalam waktu kurang dari satu menit — dua mode kegagalan yang mungkin adalah pengidentifikasi yang salah ketik, yang menghasilkan permintaan yang diterima tetapi dibuang, dan permintaan yang sama sekali tidak pernah terkirim, yang berarti sebuah ekstensi telah memakannya. Kecualikan traffic Anda sendiri sebelum Anda mulai membaca angka-angkanya, atau reload halaman Anda sendiri akan menjadi referrer teratas Anda selama seminggu.

Sekarang keputusan yang layak dipikirkan. Potongan kode di atas membuat permintaan ke sebuah hostname yang bukan milik situs itu sendiri, dan sebagian pengunjung Anda menjalankan perangkat lunak yang memblokir permintaan semacam itu berdasarkan pola. Daftar-daftar itu menangkap nama file yang sudah dikenal — apa pun yang berakhiran nama skrip milik vendornya sendiri — dan domain hosting yang sudah dikenal, terlepas dari server mana yang dituju. Perbaikannya memiliki dua bagian: ganti nama file skrip dan endpoint pengumpulan data menjadi sesuatu yang bukan nama pelacak, yang didukung oleh semua alat ini, dan sajikan keduanya dari origin situs itu sendiri lewat sebuah path yang diteruskan oleh proxy yang sudah Anda miliki. Dengan begitu, tidak ada lagi permintaan pihak ketiga yang tersisa untuk diblokir.

# On the site's own web server — the two paths the tracker needs, first-party:
example.com {
    handle /p/s.js      { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
    handle /p/collect   { reverse_proxy https://stats.example.com { header_up Host stats.example.com } }
    # ... the rest of the site
}

Dua detail yang membuat ini benar-benar berfungsi, bukan berfungsi separuh-separuh. Proxy harus meneruskan alamat pengunjung dalam sebuah header yang dipercaya oleh aplikasi analitiknya sesuai konfigurasi, atau setiap hit akan dikaitkan dengan web server Anda sendiri dan laporan negaranya akan menjadi satu batang tunggal. Dan si pelacak harus diberi tahu ke mana harus mengirim datanya, yang merupakan sebuah atribut data pada tag skrip di ketiga alat tersebut — mengganti nama file tanpa mengarahkan ulang endpoint-nya hanya akan memberi Anda sebuah skrip yang termuat tetapi tidak melapor ke mana pun.

Itu juga adalah akhir yang jujur dari cerita pengukuran ini. Seorang pengunjung dengan JavaScript yang dimatikan, atau dengan daftar filter ketat plus aturan kosmetik pihak pertama, tidak akan terhitung, dan tidak ada jumlah teknik apa pun yang perlu dihabiskan untuk mengejar mereka — filter di tingkat jaringan adalah sebuah preferensi yang sudah dinyatakan, dan respons yang sopan adalah log server, yang menghitung mereka tanpa mengumpulkan apa pun yang ekstra. Event dan single-page application adalah separuh lain dari instrumentasi: setiap alat menyediakan sebuah fungsi kecil untuk custom event, dan masing-masing membutuhkan panggilan eksplisit pada setiap perubahan rute, karena sebuah framework yang mengganti tampilan tanpa navigasi tidak menghasilkan page load apa pun untuk diperhatikan oleh skrip.

Langkah 05 · Patuhi

Dua hukum, bukan satu. Kebanyakan internet mencampuradukkan keduanya.

Alasan orang tidak bisa sepakat soal apakah analitik memerlukan banner adalah karena mereka sebenarnya memperdebatkan dua aturan yang berbeda seolah keduanya adalah satu aturan yang sama. Pisahkan keduanya dan jawabannya menjadi jelas. Pasal 5(3) Direktif ePrivacy — yang telah dituangkan ke dalam hukum nasional di setiap Negara Anggota, dan yang sebenarnya menjadi sumber dari banner cookie — menyatakan bahwa menyimpan informasi ke, atau memperoleh akses ke informasi yang sudah tersimpan di, perangkat terminal seorang pelanggan memerlukan persetujuan mereka, kecuali jika itu benar-benar diperlukan untuk menyediakan layanan yang secara eksplisit mereka minta. Perhatikan apa yang tidak dikatakan pasal ini: pasal ini tidak menyebut cookie, dan tidak menyebut data pribadi. Pasal ini menjangkau localStorage, menjangkau device fingerprinting, dan berlaku bahkan pada sebuah nilai yang tidak mengidentifikasi siapa pun.

GDPR adalah aturan kedua dan mengatur pertanyaan yang berbeda: apa yang boleh Anda lakukan dengan data pribadi setelah Anda memilikinya. Aturan ini berlaku bagi analitik Anda terlepas dari apakah Anda menyimpan sesuatu di perangkat atau tidak, karena sebuah permintaan web menyertakan alamat IP, dan Pengadilan Uni Eropa telah memutuskan dalam perkara Breyer (C-582/14) bahwa alamat IP dapat menjadi data pribadi di tangan operator situs web. Jadi kedua aturan ini saling bertumpuk: 5(3) menanyakan apakah Anda menulis ke perangkat, GDPR menanyakan apa yang Anda lakukan dengan apa yang diterima.

Server analitik tanpa cookie dibangun untuk menjawab keduanya secara sempit. Server ini tidak menyimpan apa pun di perangkat — tidak ada cookie, tidak ada entri localStorage, tidak ada pengidentifikasi apa pun — yang membuat 5(3) tidak berlaku, karena tidak ada penyimpanan dan tidak ada akses ke penyimpanan. Dan server ini mengambil alamat IP yang mau tidak mau diterimanya, menggabungkannya dengan user agent dan situsnya serta sebuah salt rahasia yang dirotasi setiap hari, melakukan hash pada hasilnya, menyimpan hash-nya dan membuang alamatnya. Hash tersebut memungkinkan alat ini membedakan dua pengunjung dalam satu hari yang sama dan berhenti berguna begitu salt-nya dirotasi, yang justru menjadi alasan mengapa orang yang sama besok dihitung sebagai pengunjung baru. Pemrosesan ini nyata, dan ukurannya kira-kira seminimal mungkin sebuah pemrosesan bisa jadi.

Yang tersisa adalah sebuah dasar hukum untuk operasi yang sempit itu, dan dalam praktiknya operator bersandar pada kepentingan yang sah (legitimate interests) berdasarkan Pasal 6(1)(f), yang didokumentasikan dengan sebuah penilaian pengimbangan yang singkat karena faktanya sederhana: tidak ada profiling, tidak ada pembagian data, tidak ada pelacakan lintas situs, sebuah pseudonim yang mati setiap hari, sebuah periode retensi yang jelas. Beberapa otoritas pengawas telah melangkah lebih jauh dan menerbitkan kriteria yang membuat pengukuran audiens yang benar-benar terbatas dikecualikan sepenuhnya dari persyaratan persetujuan — kriteria itu berbeda-beda tiap negara, kriteria itu terus diperbarui, dan yang penting bagi Anda adalah kriteria negara Anda sendiri. Ini bukan nasihat hukum. Ini adalah peta tentang instrumen mana yang berlaku, sehingga nasihat yang Anda ambil nantinya bisa membahas situasi Anda sendiri, bukan sekadar bentuk umum dari masalah ini.

Pertanyaannya Tag analitik ad-tech Tanpa cookie, self-hosted di EEA
Menulis ke perangkat pengunjung?Ya — sehingga persetujuan Pasal 5(3) berlakuTidak — 5(3) tidak terpicu
Pengidentifikasi permanen disimpan?Berbulan-bulan hingga bertahun-tahun, lintas situsHash yang diberi salt dan kedaluwarsa setiap hari
Transfer ke negara ketiga yang perlu didokumentasikan?Ya, dengan mekanisme transfer yang harus dijagaTidak ada — mesinnya berada di EEA
Prosesor yang harus disebutkan dan dikontrakVendor dan subprosesornyaPenyedia hosting Anda, untuk hardware-nya, dan tidak ada pihak lain
Siapa yang bisa menjawab permintaan akses subjek dataAnda, lewat ekspor apa pun yang tersediaAnda, dengan SQL — dan sering kali tidak ada apa pun untuk dikembalikan

Satu baris lagi layak masuk ke berkas ini, karena inilah argumen senyap untuk melakukan semua ini. Keabsahan mengirim data pengunjung Eropa ke sebuah layanan analitik asal AS telah diperkarakan selama satu dekade: Pengadilan Uni Eropa membatalkan kerangka transfer sebelumnya dalam perkara Schrems II (C-311/18) pada 2020, beberapa otoritas pengawas nasional memutuskan menentang tag analitik standar atas dasar itu pada 2022 — Austria pada Januari, Prancis pada Februari, Italia pada Juni, disusul oleh yang lain — dan sebuah keputusan kecukupan (adequacy decision) baru, EU-US Data Privacy Framework, memulihkan jalur transfer pada Juli 2023 dan kini sedang digugat juga. Anda tidak perlu memiliki pendapat tentang bagaimana ini akan berakhir. Sebuah mesin di Helsinki menghapus persoalan ini dari berkas Anda secara permanen, dan itu lebih berharga daripada sekadar benar tentang keadaan terkininya.

Langkah 06 · Jaga

Retensi, backup, upgrade. Dan log yang Anda lupakan.

Tentukan periode retensi pada hari pertama, selagi itu masih sekadar angka abstrak dan bukan setahun data yang sudah membuat Anda terikat secara emosional. Setiap alat ini dapat menghapus event mentah secara terjadwal dan tetap menyimpan ringkasan yang sudah digulung; dua belas bulan detail sudah lebih dari cukup untuk hampir semua keperluan, dan itu berarti jawaban jujur untuk "berapa lama Anda menyimpannya" adalah sebuah angka, bukan "selamanya". Ini juga menyelesaikan masalah disk sebelum masalah itu mulai muncul, yang paling penting bagi Matomo, karena tabel mentahnya adalah yang paling cepat tumbuh.

Cadangkan database ke tempat yang bukan mesin ini dan enkripsi datanya saat keluar — panduan backup membahasnya secara lengkap, dan versi singkatnya adalah dump harian yang di-pipe ke repositori append-only di mesin kedua, idealnya di jurisdiksi kedua. Cadangkan juga secret aplikasi bersamanya: database yang bisa Anda pulihkan tetapi secret yang tidak bisa dipulihkan hanya akan menghasilkan dashboard yang tidak bisa dimasuki siapa pun. Lalu pulihkan sekali ke VPS uji coba, dengan sengaja, sebelum Anda benar-benar membutuhkannya.

docker compose exec -T db pg_dump -U umami umami | zstd -q -o /srv/backup/umami-$(date -u +%F).sql.zst
restic -r sftp:backup@bastion-2:/srv/repo backup /srv/backup /srv/analytics/.app_secret
restic -r sftp:backup@bastion-2:/srv/repo forget --keep-daily 7 --keep-weekly 8 --prune

Upgrade layak mendapat perhatian sedikit lebih dibanding sekadar menaikkan versi container biasa, karena aplikasi-aplikasi ini memiliki skema sendiri. Baca release notes untuk setiap versi major yang Anda lewati, buat backup dahulu, bukan sesudahnya, lalu ubah tag yang terkunci dan jalankan stack-nya sambil mengawasi log-nya — sebuah migrasi yang gagal di tengah jalan masih bisa dipulihkan dari dump tadi malam, dan akan sangat tidak menyenangkan tanpa itu. Tidak ada alasan untuk berada di rilis terbaru pada minggu rilis itu muncul, dan ada alasan bagus untuk tidak melakukannya.

Log yang menggagalkan seluruh usaha ini

Anda baru saja men-deploy sebuah stack yang secara sengaja tidak pernah menyimpan alamat IP. Dua meter dari situ, reverse proxy Anda sedang menulis alamat IP lengkap setiap pengunjung ke dalam sebuah access log, dalam plain text, dan menyimpannya selama yang ditentukan oleh rotasi default — baik di mesin analitik maupun di web server di depan situs Anda yang sesungguhnya. Log itu adalah kumpulan data yang lebih besar dan lebih sensitif daripada database analitik Anda, itu adalah sebuah operasi pemrosesan yang harus Anda pertanggungjawabkan, dan hampir tidak ada yang mengingatnya. Tentukan untuk apa log itu digunakan: jika hanya untuk debugging, potong atau samarkan oktet terakhirnya dalam format log dan rotasi secara agresif; jika Anda ingin menggunakannya untuk pengukuran berbasis log, nyatakan itu dalam kebijakan Anda dan berikan periode retensi yang sungguhan. Yang tidak boleh Anda lakukan adalah membiarkannya pada pengaturan default sambil menyatakan situs Anda tidak mengumpulkan alamat IP.

Terakhir, keterbatasan yang layak diakui secara terbuka, karena penghitung self-hosted bukan versi yang secara ketat lebih baik dari apa yang Anda singkirkan. Anda kehilangan identitas lintas perangkat dan lintas hari, sehingga pengunjung yang kembali berarti sesuatu yang lebih sempit dari sebelumnya. Anda kehilangan integrasi dengan platform iklan, yang penting jika Anda membeli traffic dan tidak relevan jika tidak — data search console adalah produk yang berbeda dan tidak terpengaruh. Anda menanggung tugas upgrade dan backup, sebuah biaya nyata yang berulang dan terukur dalam banyaknya malam yang harus Anda habiskan. Dan mesin itu sendiri menjadi sesuatu yang layak dilindungi: ia menyimpan data pembaca Anda, ia berada di internet publik, dan checklist pengerasan ditambah jalur privat ke dashboard adalah dua hal yang membuatnya tetap aman dan tidak menarik perhatian.

Catatan lapangan · Enam jebakan

Enam cara ini bisa salah. Dua di antaranya senyap.

Jebakan 01 · Fatal

Kata sandi default yang semua orang tahu

Salah satu dari alat-alat ini mengirimkan kredensial administrator yang sama pada setiap instalasi di seluruh dunia; alat-alat lainnya menyerahkan kepemilikan kepada siapa pun yang mendaftar lebih dulu. Hostname-nya dipublikasikan di log transparansi sertifikat pada detik TLS-nya berfungsi. Masuklah, ubah kredensialnya, tutup registrasi — dalam lima menit pertama, bukan besok.

Jebakan 02 · Fatal

Port database dari tutorial

File Compose yang ditulis untuk laptop mempublikasikan port 5432 atau 3306 agar penulisnya bisa terhubung dari GUI. Salin file itu ke mesin publik, dan tabel data pembaca hanya berjarak satu tebakan kata sandi. Container aplikasi menjangkau database lewat jaringan internal; tidak ada yang perlu dipublikasikan kecuali proxy-nya.

Jebakan 03 · Legal

Mengasumsikan self-hosted berarti dikecualikan

Memindahkan perangkat lunak itu ke mesin Anda sendiri menjawab pertanyaan soal transfer data dan pertanyaan soal prosesor. Itu tidak menjawab Pasal 5(3) jika Anda kemudian mengaktifkan sebuah fitur yang menulis ke perangkat, dan itu juga tidak menuliskan kebijakan privasi Anda untuk Anda. Pengecualian itu adalah sifat dari konfigurasinya, bukan dari hosting-nya.

Jebakan 04 · Senyap

Setiap pengunjung berasal dari negara yang sama

Reverse proxy yang tidak meneruskan alamat klien membuat setiap hit terlihat seolah berasal dari proxy itu sendiri. Dashboard terisi penuh, totalnya terlihat benar, dan kolom geografi serta keunikan diam-diam menjadi fiksi. Periksa rincian negara pada hari pertama, bukan pada tinjauan kuartalan.

Jebakan 05 · Senyap

Log akses yang masih Anda simpan

Stack ini dipilih karena tidak pernah menyimpan alamat IP. Proxy di depannya justru menyimpan semuanya dalam plain text secara default, begitu juga web server di depan situs Anda yang sesungguhnya. Sembunyikan (mask) atau rotasi log itu secara sengaja, dan jelaskan itu dalam kebijakan Anda — atau berhentilah mengklaim bahwa Anda tidak mengumpulkannya.

Jebakan 06 · Terhindarkan

Mengejar angka lama

Total yang baru tidak akan cocok dengan yang lama, dan tidak ada konfigurasi apa pun yang bisa membuatnya cocok. Aturan penghitungan yang berbeda, porsi yang terblokir berbeda, dan tidak ada banner yang menyaring sampelnya. Habiskan dua minggu untuk mempelajari rasio Anda sendiri, lalu perlakukan angka baru itu sebagai baseline dan berhenti mencocokkan dua definisi yang berbeda.

FAQ · Analitik self-hosted

Pertanyaan, dijawab.

Sebelas pertanyaan yang muncul saat melakukan ini — dimulai dari satu pertanyaan yang selalu dijawab salah oleh semua orang, ke dua arah sekaligus.

Apakah saya benar-benar bisa menghilangkan banner cookie jika self-hosting?

Sering kali ya, dan alasannya lebih tepat daripada sekadar "self-hosted itu aman". Ada dua aturan terpisah yang berlaku di sini. Pasal 5(3) Direktif ePrivacy — yang biasa disebut orang sebagai hukum cookie — mewajibkan persetujuan untuk menyimpan informasi ke, atau membaca informasi dari, perangkat seorang pengunjung, kecuali jika itu benar-benar diperlukan untuk layanan yang memang diminta pengunjung tersebut. Ini berlaku untuk cookie, tetapi juga untuk localStorage, sessionStorage, dan apa pun lain yang Anda tinggalkan di perangkat, dan ini berlaku terlepas dari apakah datanya bersifat pribadi atau tidak. Sebuah alat yang tidak menulis apa pun ke perangkat sederhananya tidak memicu aturan ini. GDPR adalah aturan kedua dan aturan ini tidak lantas hilang: Anda tetap menerima alamat IP dan string user-agent pada setiap permintaan, dan alamat IP adalah data pribadi di tangan operator situs web (Pengadilan Uni Eropa, perkara Breyer, C-582/14). Yang dilakukan oleh server analitik tanpa cookie adalah melakukan hash pada IP itu dengan salt yang dirotasi setiap hari lalu membuang alamatnya, sehingga yang tersimpan di database adalah sebuah pseudonim per-hari, per-situs, bukan seorang individu. Itu adalah operasi pemrosesan yang sempit dan terdokumentasi dengan baik, yang oleh kebanyakan operator disandarkan pada kepentingan yang sah (legitimate interests), dan beberapa otoritas pengawas telah menerbitkan kriteria yang membuat pengukuran audiens murni dikecualikan dari persyaratan persetujuan. Ini adalah posisi yang bisa dipertahankan, bukan kata sakti: tuliskan apa yang Anda kumpulkan, mengapa, dan untuk berapa lama, dan bacalah panduan dari regulator Anda sendiri, bukan halaman landing sebuah vendor. Tidak ada satu pun di halaman ini yang merupakan nasihat hukum.

Yang mana yang sebaiknya saya pilih jika saya tidak ingin memikirkannya?

Umami. Ini adalah satu aplikasi Node dan satu database PostgreSQL, nyaman di dalam 1 GB memori, dashboard-nya mudah dipahami pada kunjungan pertama, tanpa cookie langsung dari awal, dan satu instance dengan senang hati melayani semua situs yang Anda miliki. Untuk sebagian besar orang yang menggantikan Google Analytics pada sebuah blog, situs dokumentasi, toko, atau situs perusahaan, ini adalah jawaban yang tepat, dan ketiga alat lainnya adalah perdebatan yang tidak perlu Anda lakukan. Pilih Plausible Community Edition sebagai gantinya jika Anda menginginkan funnel, goal pendapatan, dan cerita dashboard publik yang lebih kuat, serta bersedia menjalankan ClickHouse untuk itu. Pilih Matomo jika Anda benar-benar memerlukan kumpulan fitur Google Analytics — segmen, kohort, laporan custom, atribusi e-commerce, impor log mentah — dan menerima bahwa Anda akan menjalankan sebuah aplikasi PHP besar dengan tugas pengarsipan terjadwal. Pilih GoAccess jika Anda tidak menginginkan JavaScript apa pun di halaman sama sekali.

Mengapa angkanya tidak cocok dengan Google Analytics?

Karena keduanya menghitung hal yang berbeda, dan celahnya berjalan ke dua arah sekaligus. Ke atas: Google Analytics di balik banner persetujuan hanya melihat pengunjung yang menekan terima, yang di Eropa biasanya hanya separuh dari mereka, sementara penghitung tanpa cookie dan tanpa banner melihat semua orang. Ke atas lagi: endpoint baru Anda berada di domain Anda sendiri dan tidak masuk dalam daftar filter yang membuang permintaan ke pelacak yang sudah dikenal. Ke bawah: hash yang dirotasi harian tidak dapat mengenali orang yang sama besok, sehingga pembaca yang berkunjung pada Senin dan Kamis dihitung sebagai dua pengunjung, bukan satu pengunjung yang kembali — sesi disatukan hanya dalam satu hari yang sama dan tidak pernah lintas hari atau lintas perangkat. Ke bawah lagi: kebanyakan alat self-hosted dilengkapi filter bot yang konservatif dan tanpa inflasi ala Discover. Saran praktisnya adalah berhenti mencocokkan angka. Jalankan keduanya selama dua minggu untuk mempelajari rasio Anda sendiri, tulis di catatan tempel, lalu hapus tag Google dan gunakan angka baru sebagai baseline yang memang sudah seharusnya. Yang penting untuk pengambilan keputusan adalah bentuk tren serta peringkat relatif halaman dan sumber, dan keduanya tetap utuh setelah perpindahan ini.

Apakah pemblokir iklan akan memblokir instance saya sendiri juga?

Sebagian, dan ini layak dipahami secara pasti bagaimana caranya, karena mekanismenya lebih sederhana daripada yang orang kira. Daftar filter besar bekerja berdasarkan pola: hostname dari layanan-layanan yang di-hosting, dan sekumpulan nama file dan path yang sudah terkenal — sebuah permintaan untuk sesuatu yang berakhiran plausible.js, umami.js, atau matomo.php tetap bisa dikenali tidak peduli ke server mana permintaan itu ditujukan. Pindahkan perangkat lunaknya ke stats.example.com dengan nama file bawaan, dan Anda akan tetap kehilangan sebagian audiens yang paham teknis. Ada dua perbaikan yang jujur dan keduanya bisa digabungkan. Ganti nama skrip dan endpoint pengumpulan data menjadi sesuatu yang bukan nama pelacak — setiap alat ini memungkinkan Anda melakukannya, dan itu hanya butuh satu baris konfigurasi. Sajikan keduanya dari origin yang sama dengan situsnya sendiri, lewat sebuah path di domain utama Anda yang diteruskan oleh reverse proxy, sehingga tidak ada lagi permintaan pihak ketiga yang tersisa untuk diblokir. Dengan menggabungkan keduanya, Anda memulihkan sebagian besar kehilangan tersebut. Anda tidak akan memulihkan semuanya, dan Anda seharusnya tidak menginginkannya: seorang pengunjung yang menjalankan daftar filter ketat plus JavaScript yang dimatikan telah membuat sebuah pilihan, dan respons yang benar untuk itu adalah log server, bukan perlombaan senjata.

Apakah mem-proxy skrip melalui domain saya sendiri termasuk dark pattern?

Ini pertanyaan yang layak diajukan, dan jawabannya bergantung pada apa yang sebenarnya dilindungi oleh pemblokir itu. Sebuah daftar filter memiliki satu alat yang kasar dan dua target yang sangat berbeda: jaringan ad-tech yang mengikuti seseorang di sepuluh ribu situs dan membangun sebuah profil, serta penghitung yang hanya memberi tahu satu pemilik situs bahwa halaman dokumentasinya dibaca empat ratus kali kemarin. Memblokir yang pertama adalah seseorang yang membela diri dari pengawasan. Memblokir yang kedua adalah kerusakan sampingan dari sebuah aturan yang tidak bisa membedakan keduanya. Menyajikan penghitung Anda sendiri dari domain Anda sendiri bukanlah menyelundupkan pelacak melewati sebuah pertahanan; itu adalah menghilangkan permintaan pihak ketiga yang seharusnya memang tidak pernah ada, dan kunjungan yang sama tetap menghasilkan satu baris di access log Anda terlepas dari itu. Titik di mana ini berhenti bisa dipertahankan adalah begitu hal yang Anda proxy-kan bukan lagi hal yang dijelaskan di sini — jika Anda menambahkan pengidentifikasi lintas situs, fingerprinting, atau sebuah pipeline ke platform iklan, maka pemblokir itu benar dan proxy-nya adalah kebohongan. Ujinya sederhana dan layak Anda terapkan pada diri sendiri sekali: bisakah Anda menerbitkan sebuah halaman yang menjelaskan secara tepat apa yang dikumpulkan endpoint ini, dan pembaca hanya akan mengangkat bahu? Jika ya, silakan proxy-kan. Jika tidak, masalahnya bukan pada proxy-nya.

Seberapa besar VPS-nya sebenarnya perlu?

Lebih kecil dari yang Anda khawatirkan, dengan satu pengecualian. Umami adalah sebuah proses Node dan database Postgres: penggunaannya stabil di bawah 1 GB memori untuk situs normal dan database-nya tumbuh kira-kira sebesar satu baris teks per pageview, sehingga sebuah Sentinel — 2 vCPU, 4 GB, 120 GB NVMe, $3.90 per bulan — memiliki ruang lega untuk bertahun-tahun. GoAccess adalah kesalahan pembulatan belaka. Matomo berada di tengah-tengah: PHP dan MariaDB tidak terlalu menuntut sampai tugas pengarsipannya berjalan, itulah lonjakan CPU yang harus Anda perhitungkan ukurannya, dan tabel mentahnya tumbuh lebih cepat daripada yang lain karena ia menyimpan lebih banyak per hit. Pengecualiannya adalah Plausible Community Edition, dan alasannya adalah ClickHouse, bukan Plausible itu sendiri: sebuah penyimpanan kolom dibangun untuk menukar memori dengan kecepatan kueri dan akan memakai sendiri apa pun yang Anda biarkan tersedia. Ia berjalan dengan 4 GB jika Anda membatasi cache-nya dalam konfigurasi bawaan, dan nyaman di 8 GB — itulah sebabnya tier Garrison di $7.90 adalah batas bawah yang masuk akal untuk yang satu ini. Dalam setiap kasus, angka yang pada akhirnya memaksa upgrade adalah disk, bukan memori, dan langkah 06 adalah cara Anda menghentikannya.

Bisakah satu instance mengukur beberapa situs yang berbeda?

Ya, dan itu adalah cara normal untuk menjalankan alat-alat ini. Ketiga alat JavaScript itu bersifat multi-situs dari desainnya: Anda mendaftarkan setiap domain di dashboard, masing-masing mendapat pengidentifikasinya sendiri, dan endpoint skrip yang sama menerima hit untuk semuanya sekaligus tetap menjaga laporannya terpisah. Satu mesin, satu sertifikat, satu backup, satu upgrade — dua puluh situs. Dua hal yang perlu diingat saat daftarnya bertambah panjang. Laporan dipisahkan per situs, jadi jika Anda mengelola situs untuk klien, gunakan izin pengguna dan tim milik alat itu sendiri daripada menyerahkan akun administrator kepada semua orang, dan periksa apa implikasinya sebuah instance yang dipakai bersama sebelum Anda menyetujuinya dalam sebuah kontrak: Anda menjadi pihak yang memegang data pengunjung mereka. Dan endpoint pelacakan adalah sebuah nama yang dipakai bersama, yang berarti domain yang melayaninya muncul di source code setiap situs dalam daftar itu — sebuah fakta yang layak disebutkan kepada klien yang kompetitornya membaca source halaman, dan sebuah alasan untuk memilih jalur pihak pertama dari langkah 04.

Apakah saya benar-benar perlu JavaScript? Bagaimana dengan menganalisis log server?

Untuk sebagian besar situs, log saja sudah cukup, dan ini adalah pengukuran paling jujur yang tersedia: log tidak mengumpulkan apa pun yang ekstra, karena baris-barisnya sudah ada dengan sendirinya. GoAccess membaca access log web server dan menghasilkan laporan terminal atau dashboard HTML mandiri — halaman teratas, referrer, kode status, bandwidth, waktu respons, user agent — untuk situs statis, kumpulan dokumentasi, atau API, itu sudah mencakup sebagian besar hal yang akan diberitahukan oleh sebuah tag skrip. Dua keterbatasan menentukan apakah ini cukup bagi Anda. Log tidak bisa melihat apa yang terjadi di dalam halaman: tidak ada scroll depth, tidak ada klik tautan keluar, tidak ada event tombol, tidak ada perubahan rute single-page-application, karena tidak satu pun dari itu menyentuh server. Dan log menghitung permintaan, bukan orang, sehingga Anda bergantung pada nasib caching dan populasi bot yang sekarang menjadi mayoritas dari traffic mentah — penyaringan adalah tugas pemeliharaan permanen, bukan langkah pengaturan sekali jadi. Ada juga jebakan privasi dari arah yang berlawanan dengan yang Anda kira, dan langkah 06 membahasnya: log yang Anda analisis menyimpan alamat IP lengkap, yang merupakan data pribadi lebih banyak daripada yang disimpan oleh alat JavaScript yang Anda tolak.

Bisakah saya mengimpor riwayat Google Analytics saya?

Secara realistis, tidak, dan merencanakan seputar itu lebih baik daripada melawannya. Matomo adalah satu-satunya dari keempat alat ini dengan cerita impor yang cukup serius, dan bahkan di situ pun jalur praktisnya adalah mengimpor log web server Anda sendiri dan menggunakan tooling migrasi untuk instance Matomo lama, bukan transfer bersih dari laporan Google yang sudah diproses. Umami dan Plausible Community Edition bisa menerima bulk load lewat API mereka jika Anda siap menulis mapping-nya sendiri, tetapi Anda akan menciptakan sesi dan pengunjung dari data ekspor yang sudah teragregasi, dan hasilnya adalah grafik yang terlihat kontinu tetapi tidak sebanding di titik sambungannya. Yang benar-benar berhasil: ekspor laporan yang Anda pedulikan dari Google sebelum propertinya hilang — total bulanan, halaman teratas, sumber teratas, jumlah konversi — sebagai CSV, simpan itu di tempat yang sama dengan catatan Anda yang lain, dan mulai alat baru sebagai baseline segar pada tanggal yang Anda catat. Anda akan memeriksa ekspor lama itu dua kali di tahun pertama dan tidak pernah lagi setelahnya, dan bagaimanapun setiap angka di dalamnya diukur dengan definisi yang berbeda.

Apa sebenarnya yang harus saya tuliskan dalam kebijakan privasi?

Lebih pendek dari yang Anda kira, dan justru itulah intinya — satu paragraf yang bisa Anda pertahankan mengungguli satu halaman yang Anda salin dari tempat lain. Jelaskan apa alat itu dan bahwa Anda menjalankannya sendiri; sebutkan lokasi server dan operator hukumnya, karena bisa mengatakan "di sebuah mesin yang kami sewa di Finlandia" adalah manfaat utama dari melakukan semua ini. Jelaskan apa yang direkam per kunjungan: halaman, referrer, negara, perangkat dan keluarga browser, serta sebuah pengidentifikasi pseudonim yang diturunkan dari alamat IP dan user agent dengan salt yang berubah setiap hari, yang dari situ alamat IP asli tidak dapat dipulihkan. Jelaskan apa yang tidak direkam: tidak ada cookie, tidak ada pengidentifikasi lintas situs, tidak ada profil, tidak ada data yang dijual atau dibagikan. Nyatakan dasar hukum yang Anda andalkan dan periode retensinya, dan pastikan angka yang Anda tulis adalah angka yang sesuai dengan konfigurasi alat tersebut. Jika reverse proxy Anda menyimpan access log, itu adalah operasi pemrosesan terpisah dengan retensinya sendiri — sebutkan itu, karena itulah yang paling sering dilupakan orang. Lalu jaga agar paragraf itu tetap sinkron dengan konfigurasi sebenarnya: sebuah kebijakan yang menggambarkan pengaturan yang Anda miliki dua tahun lalu lebih buruk daripada kebijakan yang samar-samar.

Mengapa hosting-nya penting untuk sebuah mesin yang hanya menyimpan page view?

Karena "hanya page view" meremehkan apa sebenarnya sebuah database analitik itu. Diagregasi selama satu tahun, itu adalah data pembaca situs Anda: halaman mana, dalam urutan apa, dari negara mana, pada jam berapa, datang dari tautan mana — dan bagi penerbit kecil atau toko niche, itu adalah rencana bisnis dan daftar sumber sekaligus dalam satu tabel. Secara jurisdiksi, ini juga persis jenis data yang diminta pihak lawan kepada penyedia layanan, bukan kepada Anda. Dua sifat mengikuti dari sini. Di mana mesin itu berada menentukan proses hukum mana yang bisa menjangkaunya: mesin di Stockholm, Helsinki, Oslo, atau Reykjavík berada di dalam EEA, yang menghapus sepenuhnya persoalan transfer internasional dari berkas kepatuhan Anda, dan berada di dalam empat rezim konstitusional dengan tradisi kebebasan pers yang kuat. Dan nama siapa yang tercantum pada akun menentukan apa yang diungkapkan oleh akun itu sendiri: di NordBastion tidak ada dokumen identitas, tidak ada nama resmi, dan tidak ada kartu, invoice-nya dilunasi dengan Monero atau Bitcoin, dan mesin yang menyimpan data pembaca Anda bukan sebuah baris di suatu database pelanggan di suatu tempat dengan paspor Anda terlampir padanya. Panduan jurisdiksi membahas secara detail landasan hukum masing-masing dari keempat negara tersebut.

Dapatkan mesinnya

Data pembaca Anda, di sebuah mesin di EEA yang tidak terdaftar atas nama Anda.

Sentinel — 2 vCPU, 4 GB, dan 120 GB NVMe seharga $3.90 per bulan, di Helsinki, Stockholm, Oslo, atau Reykjavík — menjalankan Umami dan database-nya dengan ruang lebih untuk data bertahun-tahun. Naik ke Garrison di $7.90 jika Anda memilih Plausible atau Matomo. Tidak ada email saat mendaftar, tidak ada dokumen identitas, tidak ada kartu, dan tidak ada pihak ketiga yang menyimpan daftar semua orang yang pernah membaca situs Anda.

Terakhir ditinjau · 2026-10-12 · Sumber · Dokumentasi Umami, Plausible Community Edition, Matomo, dan GoAccess; Direktif ePrivacy 2002/58/EC Pasal 5(3); Regulasi (EU) 2016/679; putusan Pengadilan Uni Eropa dalam perkara Breyer (C-582/14) dan Schrems II (C-311/18); keputusan kecukupan EU-US Data Privacy Framework bulan Juli 2023 · Kadence · tahunan

Hosting privat, dibangun di Utara.