Saya ingat betul, sekitar dua tahun lalu, waktu pertama kali Google mulai gencar bahas Core Web Vitals, saya langsung panik. Khususnya soal LCP atau Largest Contentful Paint. Skor situs saya merah menyala, kayak lampu peringatan di dashboard mobil waktu oli mau habis. Padahal, saya sudah merasa semua sudah optimal. Gambar sudah dikompres, CSS sudah minimalis. Tapi kenapa nilai LCP lambat terus?

Awalnya saya kira, ini cuma soal ukuran gambar atau jumlah JavaScript yang banyak. Ternyata, oh ternyata, masalahnya jauh lebih kompleks dari itu. Banyak detail kecil yang sering kita abaikan, tapi dampaknya ke LCP itu fatal. Ini bukan cuma teori dari dokumentasi Google, tapi hasil ngoprek dan coba-coba di situs saya sendiri sampai begadang berhari-hari.
Asumsi Awal yang Sering Salah Soal LCP Lambat
Kebanyakan tutorial di luar sana sering fokus ke hal-hal dasar yang memang penting, tapi kadang kurang menggali akar masalah. Misalnya, ‘kompres gambar’. Oke, itu wajib. Tapi, apakah kamu tahu kalau format gambar itu juga pengaruh? Atau, apakah gambar LCP kamu di-load dengan loading="lazy"? Kalau iya, itu salah satu penyebab LCP lambat yang sering terlewat.
Waktu pertama kali saya audit situs saya, saya menemukan gambar hero di bagian atas halaman menggunakan loading="lazy". Logikanya, biar cepat, kan? Tapi justru itu yang bikin LCP jadi lama. Browser harus menunggu sampai gambar itu masuk viewport baru dia mulai di-load. Padahal, gambar hero itu konten terbesar pertama yang harus muncul. Harusnya di-preload, bukan di-lazyload.
Kesalahan lain yang sering saya lihat adalah fokus cuma ke total ukuran file CSS atau JavaScript. Padahal, yang lebih krusial itu seberapa banyak CSS atau JS yang render-blocking. Artinya, browser harus selesai memproses file-file itu dulu sebelum bisa menampilkan konten apa pun di halaman. Kalau ada satu baris kode di file CSS yang tidak relevan dengan tampilan awal tapi tetap dibaca browser, itu sudah menunda LCP.
Saya pernah punya kasus di mana LCP situs saya tiba-tiba anjlok, dari hijau ke kuning. Setelah saya telusuri, ternyata ada plugin baru yang saya instal menambahkan sebaris CSS untuk icon media sosial di bagian footer. Lucunya, baris CSS itu ditaruh di <head>, bukan di-defer. Efeknya, semua proses rendering terhenti sejenak hanya untuk membaca CSS icon yang bahkan belum terlihat di layar. Detail kecil yang bikin pusing tujuh keliling.
Detail Kecil yang Bikin LCP Terjun Bebas (dan Sering Diabaikan)
Kalau kamu sudah kompres gambar, sudah minify CSS/JS, tapi LCP masih lambat, coba perhatikan hal-hal ini. Ini yang sering tidak disebut di panduan-panduan umum, tapi krusial banget.
Font Loading yang Bikin LCP Jadi Drama
Ini salah satu biang kerok LCP lambat yang paling sering saya temui. Font kustom, apalagi dari Google Fonts atau Typekit, bisa jadi mimpi buruk kalau tidak ditangani dengan benar. Browser harus mengunduh font tersebut sebelum bisa menampilkan teks. Kalau font-nya besar atau koneksi lambat, teks di halaman akan kosong sementara atau muncul dengan font default dulu (FOIT – Flash of Invisible Text atau FOUT – Flash of Unstyled Text) sebelum diganti.
Solusinya? Pakai font-display: swap; di CSS kamu. Ini memberitahu browser untuk menampilkan teks dengan font default dulu, lalu ‘menukar’nya dengan font kustom setelah selesai diunduh. Jadi, konten tetap terlihat, tidak ada jeda kosong. Atau lebih baik lagi, preload font-font kritikal yang dipakai di bagian atas halaman. Dengan begitu, browser tahu harus mengunduh font itu duluan.
Prioritas Resource yang Salah Sasaran
Browser itu cerdas, tapi kita juga harus membantunya. Kalau ada banyak resource yang harus di-load (gambar, CSS, JS, font), browser akan mencoba menebak mana yang paling penting. Tapi seringkali tebakannya salah, terutama untuk LCP. Kita bisa memberitahu browser mana yang harus diprioritaskan.
Misalnya, pakai <link rel="preload" as="image" href="/path/to/hero-image.jpg"> untuk gambar utama di hero section. Atau <link rel="preload" as="style" href="/path/to/critical.css"> untuk CSS yang benar-benar dibutuhkan untuk tampilan awal. Ini akan memaksa browser untuk mengunduh resource tersebut lebih awal, sehingga elemen LCP bisa muncul lebih cepat.
Tapi kan sudah pakai CDN, kenapa LCP masih merah?
Pertanyaan ini sering muncul. CDN (Content Delivery Network) memang membantu mempercepat pengiriman aset statis dengan menyimpannya di server yang lebih dekat dengan pengguna. Ini bagus untuk kecepatan keseluruhan. Tapi, CDN tidak akan menyelesaikan masalah LCP lambat kalau akar masalahnya ada di cara aset itu di-load atau di-render oleh browser.
Misalnya, CDN tidak akan memperbaiki gambar hero yang di-lazyload. CDN juga tidak akan membantu kalau ada JavaScript yang render-blocking di bagian atas halaman. CDN itu seperti jalan tol. Kalau mobilnya mogok atau supirnya salah jalan, jalan tol sebagus apapun tidak akan banyak membantu. Jadi, CDN itu penting, tapi bukan solusi tunggal untuk LCP.
Waktu Saya Mati Kutu Karena LCP di Mobile Beda Jauh
Ini pengalaman yang bikin saya frustrasi. Skor LCP di desktop sudah hijau royo-royo, tapi pas cek di mobile, merah lagi. Bingung, dong? Padahal code-nya sama. Setelah saya teliti, ternyata ada beberapa hal yang bikin LCP di mobile lebih sensitif.
Pertama, ukuran layar. Elemen LCP di desktop mungkin gambar hero besar. Tapi di mobile, bisa jadi itu adalah judul artikel atau paragraf pertama. Kalau font-nya terlalu besar atau ada CSS yang bikin teks itu butuh waktu untuk muncul, LCP di mobile jadi lambat.
Kedua, koneksi internet. Pengguna mobile seringkali pakai koneksi yang tidak stabil atau lambat (misalnya 3G). Kalau ada banyak request ke server atau file yang terlalu besar, di mobile akan terasa jauh lebih lambat. Ini juga yang bikin kita harus ekstra hati-hati dengan JavaScript yang terlalu berat atau gambar yang tidak responsif.
Saya pernah mendapati kasus di mana sebuah banner iklan pihak ketiga, yang di desktop tidak terlalu mengganggu LCP, justru menjadi elemen LCP di mobile. Karena ukuran layar mobile lebih kecil, banner itu jadi mendominasi viewport awal. Dan karena itu script pihak ketiga, saya tidak punya kontrol penuh untuk mengoptimalkannya. Akhirnya, saya harus berkompromi dengan menempatkan banner itu di posisi yang tidak langsung terlihat di mobile.
Prioritas mana dulu nih, LCP atau CLS?
Ini pertanyaan bagus. Core Web Vitals itu ada tiga: LCP, FID (First Input Delay), dan CLS (Cumulative Layout Shift). Semuanya penting. Tapi kalau harus pilih prioritas, fokus pada LCP dulu. Kenapa? Karena LCP itu soal kecepatan persepsi. Pengguna akan merasakan situs kamu ‘cepat’ kalau konten utamanya cepat muncul.
CLS memang bikin jengkel kalau tiba-tiba ada elemen yang geser, tapi itu masalah pengalaman setelah halaman mulai dimuat. FID soal interaktivitas, juga setelah halaman mulai dimuat. LCP adalah kesan pertama. Kalau kesan pertama sudah buruk, pengguna cenderung langsung pergi. Jadi, bereskan LCP dulu, baru kemudian perhatikan CLS dan FID. Untuk lebih memahami Core Web Vitals, baca juga: Apa Itu Core Web Vitals Dan Mengapa Penting Untuk Seo.
Bukan Cuma Perbaikan Teknis, Ada Logika di Baliknya
Mengatasi LCP lambat itu bukan cuma soal checklist teknis. Ini soal memahami bagaimana browser bekerja, bagaimana pengguna berinteraksi, dan bagaimana konten kamu disajikan. Ini soal berpikir strategis.
Misalnya, pertimbangkan arsitektur CSS kamu. Apakah kamu pakai CSS-in-JS yang mungkin menambahkan overhead? Atau apakah kamu sudah memecah CSS menjadi ‘critical CSS’ yang di-inline di <head> untuk tampilan awal, dan sisanya di-load secara asynchronous? Ini butuh pemahaman lebih dalam, bukan cuma asal minify.
Saya juga belajar banyak dari melihat bagaimana situs-situs besar menangani LCP mereka. Mereka tidak asal pasang plugin caching atau CDN. Mereka punya strategi jelas tentang prioritas resource, optimasi gambar responsif, dan penanganan font. Mereka bahkan kadang rela mengorbankan sedikit estetika demi kecepatan. Ini trade-off yang sering kita lupakan.
Salah satu trik yang sering saya pakai adalah menggunakan ‘placeholder’ untuk gambar atau video yang akan menjadi elemen LCP. Jadi, sebelum gambar aslinya selesai diunduh, ada semacam gambar buram atau warna solid yang mengisi ruang tersebut. Ini memberikan ilusi bahwa konten sudah mulai dimuat, mengurangi persepsi LCP lambat, meskipun proses unduh masih berjalan di belakang layar. Ini teknik yang sering dipakai oleh platform media sosial besar.
Penting juga untuk selalu memantau LCP secara berkala, bukan cuma sekali perbaikan. Algoritma Google terus berkembang, begitu juga standar performa. Plugin baru, update tema, atau bahkan perubahan kecil di konten bisa saja mempengaruhi LCP kamu. Gunakan tools seperti Google PageSpeed Insights atau Lighthouse untuk terus memantau dan mendapatkan rekomendasi yang relevan.
Waktu saya menulis artikel ini, saya teringat lagi momen-momen frustrasi debugging LCP. Tapi dari situ saya belajar banyak. Ini bukan cuma soal angka di tools, tapi soal pengalaman nyata pengguna. Dan itu yang paling penting.
Saya menyalakan laptop, dan mulai dari langkah pertama yang tadi saya tulis.
