Kümülatif Düzen Kayması (CLS)

Kümülatif Düzen Kayması’nın neyi ölçtüğü, puanın nasıl hesaplandığı (etki oranı × mesafe oranı), oturum pencereleri, eşikler, yaygın nedenler ve bunları düzeltme ve hata ayıklama yöntemleri.

İlk yayın tarihi: 26 Haz 2026 · Son güncelleme: 9 Ağu 2026 · Advanced
Diller

Kümülatif Düzen Kayması (CLS), görsel kararlılığı ölçen Core Web Vital metriğidir: sayfa kullanılırken görünür içeriğin ne kadar beklenmedik biçimde hareket ettiğini ölçer. Birimsiz bir puandır (her kayma için etki oranı × mesafe oranı) ve Haziran 2021’den bu yana sayfa ömrü boyunca oluşan kaymaların toplamı değil, en büyük oturum penceresindeki kaymaların toplamıdır. Saha verisinin 75. yüzdelik diliminde ≤ 0,1 iyi, 0,1–0,25 iyileştirilmesi gereken, > 0,25 ise kötü kabul edilir. Yaygın nedenler; boyutları belirtilmemiş görseller, reklamlar, iframe’ler ve yerleştirilmiş içerikler, web fontları ve görünüm alanının üst bölümüne eklenen içeriktir. Alanı width/height veya aspect-ratio ile ayırarak, font-display ayarını düzenleyerek ve transform ile animasyon yaparak bunları düzeltin. Lighthouse, sayfayla etkileşime girmediği veya tüm sayfa yaşam döngüsünü çalıştırmadığı için çoğu zaman sıfıra yakın sonuç verir; Google’ın sıralamada kullandığı veri saha verisidir (CrUX).

TL;DR — CLS, görsel kararlılık için Core Web Vital’dır. Her kaymanın puanı impact fraction × distance fraction’dır; metriğin kendisi, kaymalar arasındaki aralık ≤ 1 saniye ve pencere ≤ 5 saniye olacak şekilde, en büyük session window’dur — Haziran 2021’den önceki gibi yaşam boyu toplam değildir. İyi değer ≤ 0,1, iyileştirme gerekir değeri ≤ 0,25, kötü değer > 0,25’tir; saha verisinin 75. yüzdelik diliminde ölçülür. Yalnızca görünüm alanında görünen kaymalar sayılır; ayrık bir girdiden sonraki 500 ms içindeki kaymalar hariçtir (kaydırma hariç). Nedenler boyutu belirtilmemiş görseller/videolar/reklamlar/iframe’ler/embed’ler, web fontları ve mevcut içeriğin üstüne eklenen içeriktir; çözümler alan ayırmak, font-display/size-adjust kullanmak ve yalnızca transform ile animasyon yapmaktır. Kaçınılacak tuzak: Lighthouse (laboratuvar) çoğu zaman 0’a yakın okur; çünkü sayfayla etkileşime girmez veya tüm yaşam döngüsünü çalıştırmaz — Google’ın gerçekten ölçtüğü şey saha verisidir (CrUX).

CLS neyi ölçer

Google bunu şöyle ifade eder: “Cumulative Layout Shift (CLS) is a stable Core Web Vital metric. It’s an important, user-centric metric for measuring visual stability because it helps quantify how often users experience unexpected layout shifts.” Buradaki kilit sözcük beklenmediktir: kullanıcının bir eylemi nedeniyle değil, kendiliğinden hareket eden içerik.

Core Web Vitals üçlüsünde Largest Contentful Paint (yükleme) ve Interaction to Next Paint (yanıt verebilirlik) ile birlikte yer alır. LCP ve INP milisaniye cinsinden ölçülürken CLS istisnadır: birimsiz oran puanıdır. Bu insanları sürekli şaşırtır. CLS’nin 0,05 olması 50 ms değildir; hiç zaman birimi yoktur.

Formül: etki × mesafe

Google bunu kayma başına şöyle tanımlar:

layout shift score = impact fraction × distance fraction
  • Impact fraction, “measures how unstable elements impact the viewport area between two frames” — hareket eden öğelerin önce ve sonra kapladığı birleşik görünür alanın, görünüm alanına oranıdır.
  • Distance fraction, “the greatest horizontal or vertical distance any unstable element has moved in the frame divided by the viewport’s largest dimension (width or height, whichever is greater).”

Her iki boyut da bağımsız olarak önemlidir. Ekranın çoğu boyunca ilerleyen küçük bir öğe ile yalnızca biraz kıpırdayan büyük bir öğenin puanları çok farklı olabilir. web.dev’in hesaplama örneğinde 0.75 impact fraction ve 0.25 distance fraction, 0.1875 layout shift puanı verir.

One shift scores the visible area affected multiplied by the farthest movement relative to the viewport. Kaynak: web.dev

Three cards form the equation. Impact fraction is 0.75: the visible viewport area affected between two frames. Distance fraction is 0.25: the farthest movement divided by the viewport's largest dimension. Multiplying them produces a unitless individual layout-shift score of 0.1875. CLS ultimately keeps the largest session-window total, not a lifetime sum of every shift.

© Patrick Stox LLC · CC BY 4.0 ·

Oturum pencereleri: herkesin yanlış anladığı bölüm

CLS hakkında en sık yanlış söylenen ve özellikle akılda kalmasını istediğim gerçek şudur. CLS, sayfanın yaşamı boyunca oluşan tüm kaymaların toplamı değildir. Eskiden böyleydi — bu durum Haziran 2021’de değişti.

Bugünkü tanım şöyledir: “CLS measures the largest burst of layout shift scores for every unexpected layout shift that occurs during the entire lifecycle of a page.” Böyle bir kümelenme, oturum penceresi olarak adlandırılır: “one or more individual layout shifts occur in rapid succession with less than 1-second in between each shift and a maximum of 5 seconds for the total window duration.” CLS, bu pencerelerin en büyüğünün puanıdır; toplam veya ortalama değildir. Evidence for this claim CLS uses the largest session window of unexpected layout shifts, with gaps under one second and a maximum five-second window; recent discrete input can exclude a shift. Scope: Current CLS session-window and recent-input rules. Confidence: high · Verified: web.dev: Cumulative Layout Shift

Değişikliğin nedeni neydi? Eski, her şeyi toplayan tanım uzun ömürlü sayfaları sessizce cezalandırıyordu. Tek sayfalı bir uygulama veya sonsuz kaydırmalı akış, her bir kayma küçük ve aralıklı olsa bile yalnızca daha uzun süre var olarak daha fazla CLS biriktiriyordu. Chrome Speed Metrics ekibi süreyi cezalandırmamak için azami session window’a geçti ve ortalama yerine maksimumu seçti; böylece küçük, ikincil bir kaymayı düzeltmek puanı daha kötü yapmıyordu. Değişiklik yayıldığında hiçbir kaynak daha kötü puan almadı, çoğunda değişiklik olmadı ve yavaş arayüzlü ya da sonsuz kaydırmalı sayfaların bir bölümü iyileşti. Hâlâ “tüm kaymaların toplamı” diyen eski bir yazı okursanız güncel değildir.

Neler sayılır — neler sayılmaz

Gerçekte puanınıza neyin girdiğini üç istisna belirler:

  • Görünüm alanının dışındaki kaymalar sayılmaz. Yalnızca mevcut görünüm alanında görünen içerikteki kaymalar puanlanır. Kullanıcının hiç kaydırmadığı uzun bir sayfanın alt bölümündeki kaymanın etkisi yoktur. Pratikte bu, görünüm alanındaki kaymaları düzeltmenin sayfanın çok aşağısındaki kaymaların peşine düşmekten neredeyse her zaman daha yüksek yatırım getirisi sağladığı anlamına gelir.
  • Kullanıcının başlattığı kaymalara 500 ms tolerans tanınır. “Layout shifts that occur within 500 milliseconds of user input will have the hadRecentInput flag set, so they can be excluded from calculations.” Google’a göre, kullanıcı etkileşimlerine yanıt olarak gerçekleşen kaymalar “that occur in response to user interactions… are generally fine, as long as the shift occurs close enough to the interaction that the relationship is clear to the user.” Bir akordeonu açmak veya menüyü genişletmek beklenen hareketlerdir; bu nedenle hesaba katılmazlar.
  • Ancak kaydırma muafiyet sağlamaz. 500 ms’lik istisna yalnızca dokunma, tıklama ve tuşa basma gibi ayrık olaylar için geçerlidir. Kaydırma ve parmaklarla yakınlaştırma gibi sürekli hareketler istisna penceresini tetiklemez. Kullanıcı kaydırırken içerik yer değiştirirse bu yine hesaba katılır. Bu ayrım birçok kaynakta yanlış aktarılır; doğru uyguladığınızdan emin olun. Evidence for this claim A layout shift occurring within 500 milliseconds of a qualifying recent user input has hadRecentInput set and is excluded from CLS. Scope: field and lab Confidence: high · Verified: Cumulative Layout Shift (CLS)

Eşikler ve puanın kaynağı

“To provide a good user experience, sites should strive to have a CLS score of 0.1 or less,” Bu değer, “the 75th percentile of page loads, segmented across mobile and desktop devices.” temel alınarak ölçülür. Aralıkların tamamı şöyledir: Evidence for this claim CLS is good at 0.1 or less and poor above 0.25, assessed at the 75th percentile of page loads. Scope: Current web.dev CLS field thresholds. Confidence: high · Verified: web.dev: Cumulative Layout Shift

  • İyi: ≤ 0,1
  • İyileştirme gerekiyor: 0,1–0,25
  • Kötü: > 0,25
Evidence for this claim CLS is good at 0.1 or less and poor above 0.25, assessed at the 75th percentile of page loads. Scope: Current web.dev CLS field thresholds. Confidence: high · Verified: web.dev: Cumulative Layout Shift

0,1 eşiği keyfî değildir. Google’ın kullanıcı araştırması, “levels of shift from 0.15 and higher were consistently perceived as disruptive, while shifts of 0.1 and lower were noticeable but not excessively disruptive.” sonucuna ulaşmıştır. Üçüncü taraf yerleştirmeleri (reklamlar ve sosyal içerikler) çok sık kaymaya yol açtığından, daha katı bir sınırın gerçek web ortamında uygulanması zor olacaktı; 0,1 değerinin seçilmesinde bu da etkili oldu.

“Saha verisinin 75. yüzdelik dilimi” kısmı kritik önemdedir; bu da bizi en büyük ölçüm tuzağına getirir.

Laboratuvar ve saha: sayılar neden uyuşmaz

Çoğu kişinin yanıldığı yer burasıdır. Lighthouse ve diğer laboratuvar araçları genellikle 0,0’a yakın CLS bildirirken saha verisi — ve Google — çok daha kötü bir sonuç gösterebilir. Fark, araçlardan birinin dürüst olmamasından değil kapsamdan kaynaklanır. Laboratuvar çalıştırması tek ve kısa, betiklenmiş bir sayfa yüklemesidir: kaydırmaz, tıklamaz ve beklemez; bu nedenle yalnızca ilk yükleme kaymalarını yakalar. Saha verisi (CrUX), kayan bir pencere boyunca çok sayıda kullanıcı, cihaz ve gezinmedeki gerçek ziyaretleri birleştirir; CLS sayfanın tüm yaşam döngüsü üzerinden tanımlanır — menülerin açılması, kullanıcı kaydırırken tembel içeriğin yüklenmesi, geç gelen reklamların dolması ve oturum ne kadar sürerse sürsün. Kısa bir laboratuvar çalışması bunların çoğunu yapısal olarak göremez.

Pratik kural şudur: belirli bir kaymayı ayıklamak için laboratuvar verisini, gerçek puanınızı bilmek için saha verisini kullanın. Google, PageSpeed Insights ve Search Console’da sunulan Chrome User Experience Report (CrUX) saha verisine göre sıralama yapar. Lighthouse 0,0 okurken PageSpeed Insights 0,18 gösteriyorsa gerçek kullanıcılarınızı yansıtan sayı olarak saha sonucunu kabul edin; sonra sayfayla gerçek ziyaretçi gibi etkileşime girerek kaymayı laboratuvarda yeniden üretin. Bilinmesi gereken iki kapsam farkı daha var: Lighthouse dahil çoğu araç iframe layout shift’lerini üst belgenin puanına taşımaz; CrUX bunları yansıtabilir. Layout Instability API üzerine kurulu RUM da aynı iframe kör noktasını taşır; bu nedenle kendi izleme veriniz, ilk taraf ilişkilendirmeniz CrUX’tan daha iyi görünürken onun daha kötü görünen sayısını yeterince açıklamayabilir.

Yaygın nedenler

Bunları gördüğüm sıklığa göre kabaca sıralarsam:

  1. Boyutları olmayan görseller ve videolar. Ayrılmış yükseklik olmayınca medya yüklenirken altındaki her şey sıçrar.
  2. Ayrılmış alanı olmayan reklamlar, embed’ler ve iframe’ler. Reklam ağları dinamik boyutlar sunar; embed’ler yüklenmeden önce yüksekliklerini bildirmez.
  3. Mevcut içeriğin üstüne dinamik olarak eklenen içerik. Cookie banner’ları, bildirim çubukları, “related” bileşenleri ve geç yüklenen promosyonlar; ekranda olanı aşağı iten her şey.
  4. Web fontları (FOIT/FOUT). Özel font yedek fontun yerini alınca metrikleri farklıysa metin yeniden akar.
  5. Layout tetikleyen özelliklerle animasyon. top, left, margin, box-shadow veya box-sizing animasyonu tarayıcıyı her karede sayfayı yeniden yerleştirmeye zorlar.

Çözümler

Her çözüm nedenini yansıtır:

  • Görseller/videolar — alan ayırın. Tarayıcının en-boy oranını hesaplayıp kutu için yer ayırabilmesi amacıyla width ve height özniteliklerini ayarlayın; duyarlı davranış için bunları img { height: auto; width: 100%; } ile birlikte kullanın veya CSS aspect-ratio özelliğinden yararlanın. Çoğu sitede en fazla etki sağlayan CLS düzeltmesi budur.
  • Reklamlar/yerleştirmeler/iframe’ler — bunlar için de alan ayırın. Kapsayıcıda min-height veya aspect-ratio kullanın. Google Publisher Tag’in reklam alanlarına ilişkin yönlendirmesi nettir: “Setting a fixed height and width directly on the ad slot div is the most effective way to do this.” Birden fazla boyutu destekleyen alanlarda yapılandırılmış en büyük boyut için yer ayırın. Kalan kaymaların görünüm alanının dışında gerçekleşmesi için geç yüklenen içeriği daha aşağıya yerleştirin.
  • Dinamik içerik — belge akışına sonradan eklemeyin. Nihai boyutla eşleşen bir yer tutucu ayırın veya içeriği akışa eklemek yerine mevcut içeriğin üzerine bindirin. İskelet yükleyiciler yalnızca nihai boyutlarla tam olarak eşleşirlerse yardımcı olur; gerçek içerikten birkaç piksel kısa bir iskelet bile kaymaya yol açar. Beklenmedik eklemeler yerine kullanıcı tarafından tetiklenen yüklemeleri (“Load more”) tercih edin.
  • Fontlar — metrikleri eşleştirin. font-display: optional, fiilen sıfır CLS riski taşıyan tek değerdir; swap görünmez metni azaltır ancak font değiştirilirken kaymaya yol açabilir. Daha da iyisi, yedek fontu web fontuyla aynı boyutlara getirmek ve geçişi sorunsuz kılmak için CSS metrik geçersiz kılmalarını — size-adjust, ascent-override, descent-override, line-gap-override — kullanın. Kritik fontları önceden yükleyin.
  • Animasyonlar — yalnızca transform kullanın. top/left/margin yerine transform (translate, scale, rotate) ile animasyon uygulayın. Transform tabanlı animasyonlar birleştirme aşamasında işlenir ve düzen hesaplamasını tetiklemez; dolayısıyla hiçbir öğeyi kaydırmaz.

CLS sıralamalara nasıl dahil olur (oranı koruyun)

CLS, Google’ın page experience sinyalindeki girdilerden biridir. Google, Core Web Vitals’ın sıralama sistemlerinin kullandığı şeyler olduğunu söylüyor; ancak güncel Arama belgeleri kesin bir CLS ağırlığı, eşitlik bozma kuralı veya sıralama garantisi yayımlamıyor. Bu yüzden “eşitlik bozucudur” dahil belirli mekanizmaları belgelenmiş gerçek değil, işe yarayan bir yaklaşık açıklama olarak ele alın. Core Web Vitals hakkında yazdığım her şeyde tavsiyem şu: “iyi” bandına girin ve ilerleyin. Çoğu site 0,08’i 0,02’ye indirmekten anlamlı bir sıralama veya iş kazanımı görmez; tek bir puan da gelir ya da dönüşüm sonucunu nadiren tek başına açıklar. CLS temel eşiği geçme meselesidir — eşiği aşmak istersiniz ama LCP, INP veya açıkçası asıl içeriğiniz pahasına SEO programınızın merkezine dönüşmemelidir.

Kafa karışıklığını ciddi biçimde azaltan iki operasyon notu:

  • CrUX yaklaşık 28 gün geriden gelir. 28 günlük kayan bir pencere kullandığından, bugün yayımladığınız bir düzeltme PageSpeed Insights veya Search Console’a haftalar boyunca tam olarak yansımaz. Ertesi sabah sayı değişmediğinde paniğe kapılmayın.
  • İlişkilendirilen öğe çoğu zaman kök neden değildir. Layout Shift Attribution API hangi öğenin hareket ettiğini söyler; ancak web.dev’in belirttiği gibi, “it’s possible that these elements are only indirectly related to the ‘root cause’ of layout instability.” Sıçrayan metin çoğu zaman üstündeki, boyutları belirtilmemiş bir görselin geç yüklenmesinden etkilenen öğedir; belirtiyi değil nedeni düzeltin. Sorunu zaman damgasından tetikleyiciye uzanan bir döngü olarak inceleyin: kaymanın başlangıç zamanını not edin, ardından aynı zaman aralığında başka nelerin değiştiğini — bir ağ isteğinin tamamlanması, görsel veya fontun yüklenmesi, yeniden boyutlandırma ya da sınıf/stil değişikliği — kontrol edin. İlişkilendirilen düğümü bu tetikleyiciyle eşleştirene kadar onu kanıt değil, ipucu olarak değerlendirin.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.