Pernahkah Anda membuka sebuah website menggunakan ponsel pintar, berniat untuk mengeklik sebuah tautan artikel atau tombol penting, namun tepat sebelum jari Anda menyentuh layar, tampilan visual halaman website tersebut tiba-tiba bergeser melompat turun ke bawah akibat adanya gambar atau iklan banner promosi yang baru selesai dimuat secara mendadak? Akibatnya, Anda tidak sengaja mengeklik iklan tersebut atau melakukan tindakan yang salah. Pengalaman visual melompat yang sangat menyebalkan ini dikenal dalam dunia optimasi performa web dengan istilah Layout Shift (Pergeseran Tata Letak).
Google sangat memedulikan kenyamanan pengalaman visual pengguna saat menjelajahi web. Oleh karena itu, mereka menetapkan metrik Cumulative Layout Shift (CLS) sebagai salah satu pilar penentu utama dalam sertifikasi kesehatan website Core Web Vitals yang memengaruhi peringkat pencarian SEO organik di Google.
Artikel ini akan mengupas tuntas aspek teknis perhitungan CLS serta taktik konkret untuk memperbaikinya hingga bernilai hijau sempurna.
Bagaimana Google Menghitung Skor CLS?
Skor CLS tidak diukur dalam satuan waktu (milidetik) layaknya metrik LCP atau INP, melainkan diukur sebagai indeks angka tanpa satuan berdasarkan rumus matematika yang menghitung stabilitas elemen visual di dalam area layar yang aktif (viewport):
$$\text{Layout Shift Score} = \text{Impact Fraction} \times \text{Distance Fraction}$$
Di mana:
- Impact Fraction (Porsi Dampak): Mengukur seberapa besar porsi area layar viewport yang terdampak oleh elemen yang bergeser tidak stabil tersebut antara dua bingkai visual berturut-turut.
- Distance Fraction (Porsi Jarak): Mengukur jarak pergeseran terjauh yang dialami oleh elemen tidak stabil tersebut dibagi dengan dimensi terbesar layar (lebar atau tinggi).
Contoh Perhitungan Kasus:
Sebuah gambar banner besar yang dimuat terlambat bergeser turun ke bawah dan berdampak pada stabilitas setengah area layar ponsel Anda ($\text{Impact Fraction} = 0.50$). Jarak pergeseran elemen tersebut ke bawah adalah sebesar $15\%$ dari total tinggi layar ($\text{Distance Fraction} = 0.15$). Maka skor kerusakannya adalah:
$$\text{Skor CLS} = 0.50 \times 0.15 = 0.075$$
Standar Ambang Batas Skor CLS Google
Google menetapkan tiga klasifikasi penilaian untuk metrik akumulasi skor CLS website Anda berdasarkan persentil ke-75 dari data kunjungan riil pengguna di lapangan (field data):
- Baik (Hijau): Skor CLS berada di bawah atau sama dengan $0.10$. Tampilan visual dinilai stabil dan nyaman dipandang.
- Membutuhkan Perbaikan (Kuning): Skor CLS berada di antara $0.10$ hingga $0.25$. Ada pergeseran visual yang cukup mengganggu navigasi.
- Buruk (Merah): Skor CLS berada di atas $0.25$. Halaman sangat tidak stabil, melompat-lompat parah, dan rentan merusak navigasi pengguna.
3 Penyebab Utama Nilai CLS Buruk dan Cara Mengatasinya
Berdasarkan audit performa web, berikut adalah tiga faktor teknis utama yang merusak stabilitas skor CLS website Anda beserta solusi kode praktis untuk mengatasinya:
1. Elemen Gambar Tanpa Atribut Dimensi Lebar dan Tinggi
Di masa lalu, menulis gambar di HTML tanpa mencantumkan ukuran lebar (width) dan tinggi (height) adalah hal biasa karena browser akan menghitung ukurannya secara otomatis setelah file gambar selesai terunduh sempurna. Namun pada web modern, kebiasaan buruk ini memicu masalah CLS parah.
Sebelum gambar terunduh, browser menganggap gambar tersebut memiliki tinggi $0\text{ px}$. Ketika gambar selesai diunduh secara asinkron, browser dipaksa menggambar ulang struktur halaman dan mendorong seluruh elemen teks di bawahnya melompat turun secara tiba-tiba.
- Solusi Mutlak: Selalu Cantumkan Atribut Dimensi dan CSS
aspect-ratio. Cantumkan dimensi lebar dan tinggi asli gambar langsung pada tag HTML Anda. Browser modern akan membaca dimensi tersebut untuk memesan ruang kosong (layout placeholder) sebelum file gambar asli selesai diunduh:
<!-- Format HTML yang Benar untuk Mencegah Pergeseran Tata Letak (Anti-CLS) -->
<img src="https://fixproject.net/assets/header-image.jpg"
width="1200"
height="630"
alt="Optimasi Performa Web Vitals"
style="width: 100%; height: auto; aspect-ratio: 1200 / 630;" />
2. Pemuatan Iklan Banner, Widget, atau Iframe Dinamis
Iklan banner promosi dari jaringan pihak ketiga (seperti Google AdSense) biasanya dimuat secara asinkron setelah seluruh halaman web utama selesai dimuat. Jika Anda tidak menyediakan ruang cadangan (placeholder box) khusus di lokasi pemasangan iklan tersebut, kemunculan iklan yang tiba-tiba akan merusak tata letak elemen di sekitarnya secara drastis.
- Solusi: Pesan Ruang Penampung dengan Tinggi Minimum (Min-Height Placeholder). Bungkus area pemasangan iklan dengan elemen
<div>khusus yang telah dikonfigurasi dengan batas tinggi minimum yang setara dengan ukuran dimensi iklan yang akan dimuat:
/* Sediakan kotak penampung iklan dengan ukuran tetap di CSS */
.kotak-iklan-header {
min-width: 300px;
min-height: 250px; /* Pesan ruang setinggi 250px sejak awal */
background-color: #f8f9fa; /* Beri warna latar abu-abu lembut agar estetis */
display: flex;
align-items: center;
justify-content: center;
}
3. Pemuatan Font Web yang Terlambat (FOUT / FOIT)
Penggunaan font kustom eksternal (seperti Google Fonts) sering kali memicu fenomena pergeseran tata letak teks. Ada dua kondisi masalah visual font yang sering terjadi:
- FOIT (Flash of Invisible Text): Teks tidak terlihat sama sekali (kosong) selama beberapa detik hingga file font kustom selesai diunduh, lalu teks muncul secara mendadak.
- FOUT (Flash of Unstyled Text): Browser merender teks menggunakan font sistem cadangan standar (fallback font seperti Times New Roman atau Arial) terlebih dahulu, lalu mengubahnya ke font kustom baru setelah selesai terunduh. Karena ukuran lebar karakter tiap font berbeda, perubahan ini memicu pergeseran garis tata letak teks di layar.
- Solusi: Gunakan Atribut
font-display: swapdan Preload. Instruksikan browser untuk langsung menggunakan font sistem cadangan terlebih dahulu tanpa menyembunyikan teks, dan segera menukarnya (swap) secara halus setelah font kustom siap:
/* Konfigurasi pemuatan font yang aman dari masalah CLS di CSS */
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
src: url('/fonts/inter-regular.woff2') format('woff2');
font-display: swap; /* Tukar font cadangan secara instan tanpa kedipan kosong */
}
FAQ: Tanya Jawab Seputar Optimasi CLS
Apakah pergeseran tata letak yang dipicu oleh tindakan fisik pengguna (seperti klik menu accordion) dihitung sebagai pelanggaran skor CLS oleh Google? Tidak. Google cukup cerdas untuk membedakan antara pergeseran tata letak tidak terduga (unexpected layout shifts) dengan pergeseran tata letak yang memang diinginkan oleh tindakan sadar pengguna (expected layout shifts). Setiap pergeseran tata letak yang terjadi dalam kurun waktu $500\text{ milidetik}$ setelah adanya interaksi fisik input pengguna (seperti klik tombol atau ketik teks) akan diabaikan sepenuhnya dari perhitungan skor akumulasi CLS.
Alat bantu apa saja yang paling direkomendasikan untuk melacak elemen penyebab CLS buruk? Anda dapat menggunakan tiga alat bantu gratis yang sangat andal berikut:
- Google PageSpeed Insights: Memberikan laporan komprehensif mengenai kontributor utama pergeseran tata letak visual di halaman web Anda secara nyata di lapangan.
- Chrome DevTools (Tab Rendering): Aktifkan opsi “Layout Shift Regions”. Setiap kali terjadi pergeseran tata letak saat Anda berselancar di web lokal, area elemen yang bergeser tidak stabil tersebut akan disorot dengan visualisasi warna biru transparan di layar secara real-time.
- WebPageTest.org: Memungkinkan Anda merekam jalannya pemuatan halaman web dalam format video lambat (slow-motion video strip) untuk mendeteksi secara visual elemen mana yang melompat di detik ke berapa.
Apakah penggunaan animasi transisi CSS (seperti mengubah properti top/left) dapat memperburuk skor CLS? Ya, sangat sering terjadi. Menganimasikan posisi elemen menggunakan properti CSS kaku seperti top, bottom, left, right, atau margin akan memaksa browser melakukan kalkulasi ulang tata letak seluruh elemen web (Reflow) pada setiap bingkai animasi, yang dapat memicu pergeseran visual tidak stabil. Untuk membuat animasi transisi responsif yang aman dari masalah CLS, selalu gunakan properti CSS transform (seperti transform: translate(x, y);) karena properti ini diproses langsung di kartu grafis (GPU) tanpa memengaruhi tata letak elemen di sekitarnya.

Tinggalkan Balasan