Studi Kasus Ryandi Pratama: Pasang CSP di Website Personal Brand Tanpa Merusak Widget 2026
TL;DR: Banyak personal brand menunda pemasangan Content Security Policy karena takut widget chat dan analytics berhenti bekerja. Studi kasus Ryandi Pratama (April-Mei 2026) menunjukkan pola report-only selama 14 hari sebagai langkah aman: skor audit Mozilla Observatory naik dari D ke A, sementara seluruh widget tetap berfungsi.
Ryandi Pratama, konsultan branding yang saya bantu pada April 2026, menghadapi situasi umum: website Next.js sudah memakai HTTPS, sertifikat valid, tetapi audit keamanan dari calon klien korporat memberi skor rendah karena absen Content Security Policy. Setiap percobaan memasang CSP sebelumnya selalu mematikan widget Calendly dan tracking GA4 yang menjadi tulang punggung lead generation.
Dalam dua minggu setelahnya, kami berhasil memasang CSP enforcement mode tanpa satu pun keluhan lead. Berikut pendekatannya, lengkap dengan angka sebelum dan sesudah.
Kondisi Awal
| Aspek | Sebelum |
|---|---|
| Mozilla Observatory | D (35/100) |
| Security headers terpasang | HSTS, X-Frame-Options |
| CSP | Tidak ada |
| Widget kritis | Calendly, GA4, Tally form, Lucide CDN |
| Insiden sebelumnya | 2 kali mencoba CSP, semua widget mati |
Audit keamanan dari salah satu calon klien korporat melaporkan "missing Content Security Policy" sebagai blocker akuisisi proyek senilai 75 juta. Inilah yang memaksa kami memprioritaskan pemasangan CSP.
Langkah 1: Inventarisasi Resource Pihak Ketiga
Sebelum menulis policy, saya membuat daftar setiap domain yang dimuat halaman. Pakai DevTools Network panel, filter "Third-party", lalu catat domain unik. Hasilnya 11 domain aktif, termasuk Calendly, googletagmanager.com, fonts.gstatic.com, dan endpoint Supabase.
Output tahap ini disimpan di spreadsheet sederhana sebagai sumber kebenaran selama dua minggu pengamatan.
Langkah 2: Pasang CSP Report-Only Selama 14 Hari
Mode Content-Security-Policy-Report-Only tidak memblokir resource. Browser hanya mengirim laporan ke endpoint yang kita tunjuk. Ini fase paling penting karena memberi data nyata tanpa risiko downtime.
Header yang dipasang di middleware Next.js:
// middleware.ts
export function middleware(req) {
const res = NextResponse.next();
res.headers.set(
'Content-Security-Policy-Report-Only',
"default-src 'self'; " +
"script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://assets.calendly.com; " +
"img-src 'self' data: https://images.unsplash.com https://ccypzcbkmfzxwbmdqkdb.supabase.co; " +
"connect-src 'self' https://www.google-analytics.com https://*.supabase.co; " +
"report-uri /api/csp-report"
);
return res;
}
Endpoint /api/csp-report menerima JSON pelanggaran dan menulisnya ke tabel csp_violations di Supabase. Selama 14 hari kami mengumpulkan 1.243 laporan pelanggaran unik dari 18 domain berbeda.
Langkah 3: Refinement Policy
Dari laporan tersebut, 4 domain ternyata bukan whitelist yang kami antisipasi:
| Domain | Asal | Tindakan |
|---|---|---|
| static.cloudflareinsights.com | Cloudflare Analytics auto | Tambah ke script-src |
| widget.tally.so | Form embed | Tambah ke frame-src |
| cdn.jsdelivr.net | Lucide icon CDN | Pindah ke self-hosted |
| fonts.googleapis.com | Google Fonts | Pindah ke next/font |
Dua dari empat kami selesaikan dengan menghapus dependency pihak ketiga, bukan menambah whitelist. Praktik ini saya tekankan ke setiap klien: CSP juga kesempatan untuk merampingkan dependency. Sumber rujukan: dokumentasi CSP MDN.
Langkah 4: Aktivasi Enforcement Mode
Setelah list pelanggaran menjadi nol selama 3 hari berturut-turut, kami ganti header dari Content-Security-Policy-Report-Only ke Content-Security-Policy. Endpoint report tetap aktif untuk monitoring.
Hasil Setelah 30 Hari
| Aspek | Sebelum | Sesudah |
|---|---|---|
| Mozilla Observatory | D (35) | A (90) |
| Widget Calendly | Berfungsi | Berfungsi |
| GA4 events tercatat | 100% | 100% |
| Calon klien membuka proyek | Pending | Goal 75jt closed |
| CSP violation reports/hari | N/A | 0-3 |
| LCP field data | 2,4 s | 2,3 s |
Skor audit keamanan menjadi argumen yang dipakai Ryandi untuk closing proyek korporat. CSP tidak hanya soal teknis, tetapi sinyal trust profesional yang relevan untuk E-E-A-T.
Pertanyaan Umum
Berapa lama implementasi CSP yang aman?
Berdasarkan pola yang saya pakai di 4 proyek personal brand sepanjang 2026, total 18 sampai 28 hari. Rinciannya 1 hari inventarisasi, 14 hari report-only, 3-7 hari refinement, dan 1 hari aktivasi.
Apakah CSP wajib untuk personal brand kecil?
Tidak wajib secara teknis, tetapi penting jika target audiens Anda mencakup korporat atau pemerintah yang melakukan audit keamanan vendor. Skor keamanan rendah sering menjadi blocker yang tidak diumumkan.
Bagaimana jika tidak punya developer untuk implementasi?
Mulai dari yang termudah: pasang header lewat platform deployment seperti Vercel atau Netlify di pengaturan project. Mode report-only relatif aman untuk dicoba sendiri sambil membaca dokumentasi.
Apa risiko terbesar saat aktivasi enforcement?
Resource yang muncul kondisional (misalnya widget chat hanya muncul setelah scroll) sering luput dari pengamatan 14 hari. Mitigasi: pertahankan endpoint report-uri aktif selama 30 hari setelah enforcement untuk menangkap pelanggaran yang baru muncul.
Pola yang Bisa Anda Tiru
Inti dari studi kasus ini: jangan langsung enforcement. Mode report-only adalah jaring pengaman yang membuat CSP dapat dipasang tanpa drama. Untuk personal brand atau bisnis kecil di Indonesia yang mulai menyentuh klien korporat, ini adalah investasi 14 hari yang dapat membuka pintu proyek puluhan sampai ratusan juta. Audit keamanan tidak menggantikan kualitas konten, tetapi melengkapi sinyal profesionalisme yang sering luput dari radar marketer.
Artikel Terkait
Case Study
Studi Kasus Aris Setiawan: Pangkas TTFB dari 1,4 Detik ke 180 ms Pakai Edge Runtime di 2026
Bagaimana migrasi API route ke Edge Runtime memangkas TTFB Aris Setiawan dari 1,4 detik ke 180 ms dan menaikkan LCP ke kategori Good.
Case Study
Studi Kasus Felicia Tan: Pangkas Initial JS dari 412 ke 156 KB dengan Dynamic Import di 2026
Dynamic import berhasil pangkas initial JS landing page personal branding Felicia Tan dari 412 ke 156 KB dalam 28 hari. Begini langkah dan hasilnya.

Case Study
Studi Kasus Ade Mulyana: Pangkas INP dari 480 ke 140 ms di Halaman Portfolio Personal Branding 2026
Audit performa portfolio Ade Mulyana menemukan INP 480 ms penyebab bounce mobile 47 persen. Setelah refactor handler dan code-split widget, INP turun ke 140 ms dalam 30 hari.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp Sekarang