Core Web Vitals için görselleri optimize edin

Görsellerin Core Web Vitals'ı nasıl etkilediğini ve onları nasıl optimize edeceğinizi öğrenin

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2024-11-27

Görseller Core Web Vitals'ı Nasıl Etkileyebilir?

Görseller bir web sitesinin görsel çekiciliğini artırmada önemli bir rol oynar, ancak aynı zamanda yükleme hızı üzerinde de önemli bir etkiye sahip olabilirler. Core Web Vitals, Google'ın bir web sitesinin user experience'ını ölçmek için kullandığı bir dizi metriktir ve görsel optimizasyonu iyi puanlar elde etmede kritik bir faktördür. Bu makalede, Core Web Vitals için görselleri nasıl optimize edeceğinizi ve web sitenizin yükleme hızını nasıl artıracağınızı tartışacağız.

Core Web Vitals'ı Anlamak

core web vitals all metrics

Görsel optimizasyonuna geçmeden önce, Core Web Vitals'ı kısaca gözden geçirelim. Bunlar, bir web sayfasının yükleme hızını, etkileşimini ve görsel kararlılığını ölçen kullanıcı odaklı metriklerdir. Üç temel metrik şunlardır:

Largest Contentful Paint (LCP): sayfadaki en büyük öğenin yükleme hızını ölçer.
First Input Delay (FID): sayfanın etkileşimli hale gelmesi için geçen süreyi ölçer.
Cumulative Layout Shift (CLS): sayfanın görsel kararlılığını ölçer.

Görseller hangi Core Web Vitals'ı etkileyebilir?

Görsellerin tüm Core Web Vitals'ı etkileyebildiğini öğrenmek sizi şaşırtabilir. Görseller, render sırasında geç bir zamanda indirme kuyruğuna alınırsa veya basitçe çok büyüklerse genellikle yüksek bir LCP puanına neden olur. Görsel boyutları ayarlanmamışsa veya yükleme aşamasında değişirse görseller CLS puanını da etkileyebilir. Ve son olarak, görsel çözümleme ana iş parçacığında çok fazla iş yükü oluşturuyorsa, INP'yi bile etkileyebilirler. Daha yakından bakalım:

Largest Contentful Paint

Core Web Vitals'dan biri olan Largest Contentful Paint (LCP), sayfadaki en büyük öğenin (görsel veya video gibi) kullanıcıya görünür hale gelmesinin ne kadar sürdüğünü ölçer. Bir görsel çok geç kuyruğa alınırsa veya yüklenmesi çok uzun sürerse, sayfanın LCP puanını önemli ölçüde yavaşlatabilir.

Cumulative Layout Shift

Bir diğer Core Web Vital olan Cumulative Layout Shift (CLS), bir sayfadaki içeriğin yüklenirken ne kadar hareket ettiğini ölçer. Görseller, doğru boyutlandırılmadıysa veya sayfa zaten yüklendikten sonra eklendiğinde diğer öğelerin hareket etmesine neden olarak düzen kaymalarına yol açabilir.

First Input Delay ve INP

Son olarak, görseller üçüncü Core Web Vital olan INP'yi de etkileyebilir. INP, bir kullanıcı sayfayla etkileşime geçtikten sonra sayfanın görsel olarak yanıt vermesi için geçen süreyi ölçer. Çözümlenmesi gereken çok fazla büyük görsel varsa, sayfa kullanıcı etkileşimlerine yanıt vermekte gecikerek düşük bir INP puanına yol açabilir.

Adım 1: HTML görsel öğesini hız için optimize edin

Görselleri optimize ederken kontrol edilecek ilk şey tüm görseller için HTML kodudur. Görseller basittir ve tarayıcılar basit görevleri yapmada mükemmeldir. Bu yüzden hilelerden ve akıllı çözümlerden kaçının ve sadece eski güzel HTML görsel etiketi <img> kullanın ve görsellerinizi hızlandırmak için sahip olduğunuz tüm seçenekleri kullanın!
cwv image and attributes

Src özniteliği

Görselin URL'sini belirtir. Bu özellik, tarayıcıya görseli nerede bulacağını söylediği için çok önemlidir.

Width ve height özniteliği

Görselin piksel cinsinden genişliğini ve yüksekliğini belirtir. Bu özellikler, görselin sayfada doğru şekilde render edilmesi için önemlidir, çünkü görsel kapsayıcısının boyutunu ve görselin içine nasıl sığacağını tanımlarlar.

Alt özniteliği

Görsel görüntülenemezse alternatif metni belirtir. Bu, erişilebilirlik açısından önemlidir, çünkü görme engelli kullanıcıların görselin ne hakkında olduğunu anlamalarına yardımcı olur. Ayrıca arama motoru optimizasyonu (SEO) için de önemlidir, çünkü arama motorları görselin içeriğini anlamak için alt metnini kullanır.

Loading özniteliği (lazy loading)

Tarayıcının görseli nasıl yüklemesi gerektiğini belirtir (lazy, eager veya auto). Bu özellik, sayfa performansını artırmak için önemlidir, çünkü görsellerin asenkron olarak ve yalnızca ihtiyaç duyulduğunda yüklenmesine olanak tanır.

Srcset özniteliği

Tarayıcının cihazın ekran boyutuna ve çözünürlüğüne göre en iyi görsel kaynağını seçmesini sağlayan, virgülle ayrılmış görsel kaynakları ve boyutları listesini belirtir. Bu özellik, duyarlı tasarım için önemlidir, çünkü kullanıcıların cihazlarından bağımsız olarak mümkün olan en iyi görsel kalitesini almalarını sağlar.

Sizes özniteliği

Görüntü alanı boyutuna göre kullanılacak görsel kaynağının boyutlarını belirtir. Bu özellik, farklı cihazlarda ve ekran boyutlarında doğru görsel boyutunun yüklenmesini sağlamak için srcset ile birlikte çalışarak sayfanın genel performansını artırır.

Decoding özniteliği

Tarayıcının görseli nasıl çözmesi gerektiğini belirtir (async, sync veya auto). Bu özellik de sayfa performansını artırmak için önemlidir, çünkü tarayıcının görselin çözümlenmesini sayfanın geri kalanının render edilmesine göre önceliklendirmesine veya önceliğini düşürmesine olanak tanır.

Fetchpriority özniteliği

Fetchpriority özniteliği, bir kaynağın sayfadaki diğer kaynaklara göre indirme önceliğini belirtir. Priority özniteliği üç değerden birini alabilir: "high", "medium" veya "low". Yüksek öncelikli bir kaynak, orta veya düşük öncelikli kaynaklardan önce yüklenir. Orta öncelikli bir kaynak, düşük öncelikli kaynaklardan önce yüklenir. Aynı önceliğe sahip kaynaklar, HTML'de göründükleri sırayla yüklenir.

Adım 2: Görselin mümkün olduğunca erken indirme kuyruğuna alındığından emin olun

HTML'yi optimize ettikten sonra yapılacak ikinci şey, görsel planlamasına bakmaktır. Birçok durumda, görsellerin LCP metriğini etkilemesi söz konusu olduğunda en büyük darboğaz geç planlamadır. Bir tarayıcı, render sürecinin erken aşamasında LCP öğesini indirme şansına sahip olursa, görsel tarayıcıya mümkün olan en erken zamanda hazır olacak ve tarayıcı bu öğeyi render sürecinin erken aşamasında boyamaya başlayabilecektir.

Kulağa basit geliyor değil mi? Peki, görselin mümkün olduğunca erken indirme kuyruğuna alındığından nasıl emin oluruz.

LCP öğesini önceden yükleyin

Erken indirmeyi sağlamanın en etkili yolu görseli önceden yüklemektir. Görseli önceden yüklemek, <head> öğesinin başında basit bir etiketle yapılır. Örneğin:

<link rel="preload" as="image" href="image.jpg">

Bu basit etiket tarayıcıya "image.jpg" dosyasına yakında ihtiyacımız olacağını söyleyecek ve tarayıcı bu dosyayı hemen indirmeye başlayacaktır.

LCP öğesini eager olarak yükleyin

LCP öğesini asla lazy loading ile yüklememelisiniz. LCP öğesini lazy loading ile yüklerseniz, JavaScript tabanlı lazy loading sayfa hızı için özellikle kötüdür! JavaScript tabanlı lazy loading, <img> etiketinizi yeniden yazmak için bir betiğe dayanır. Genellikle img, JavaScript tarafından src özniteliğine yeniden yazılan bir data-src özniteliğine sahip olacaktır. Bunun sorunu 2 yönlüdür
1. Tarayıcının önceden yükleme tarayıcısı data-src özniteliğini tanımaz ve öğeyi erken indirme için proaktif olarak tetiklemez.
2. JS tabanlı lazy loading, bir JavaScript'in yüklenmesini ve çalıştırılmasını beklemesi gerekir. Bu genellikle render sürecinde nispeten geç gerçekleşir. Bu, görselde daha da büyük bir gecikmeye neden olur.

Bu sorunu tamamen önlemek için LCP öğesinin her zaman eager olarak yüklendiğinden emin olun. 'Eager' herhangi bir görsel için varsayılan olduğundan, yalnızca görselin lazy loading ile yüklenmediğinden emin olmanız gerekir. Bunu, yerel 'loading="lazy" özniteliğini' kaldırarak veya bir optimizasyon eklentisi kullanıyorsanız bir görsel için lazy loading'i nasıl atlayacağınıza dair belgeleri kontrol ederek yapın!

Yüksek fetchpriority kullanın

Herhangi bir nedenle LCP öğesini önceden yükleyemiyorsanız, en azından öğenin fetchpriority özniteliğinin high olarak ayarlandığından emin olun. Bu, tarayıcıya görselin sayfa için önemli olduğunu ima edecek ve tarayıcı onu yüksek öncelikle indirecektir. Lütfen fetchpriority="high" kullanmanın genellikle bir görseli önceden yüklemek kadar verimli olmadığını unutmayın!

JavaScript tabanlı lazy loading'den kaçının

LCP öğesini asla lazy loading ile yüklememelisiniz. LCP öğesini lazy loading ile yüklerseniz, JavaScript tabanlı lazy loading sayfa hızı için özellikle kötüdür! JavaScript tabanlı lazy loading, <img> etiketinizi yeniden yazmak için bir betiğe dayanır. Genellikle img, JavaScript tarafından src özniteliğine yeniden yazılan bir data-src özniteliğine sahip olacaktır. Bunun sorunu 2 yönlüdür
1. Tarayıcının önceden yükleme tarayıcısı data-src özniteliğini tanımaz ve öğeyi erken indirme için proaktif olarak tetiklemez.
2. JS tabanlı lazy loading, bir JavaScript'in yüklenmesini ve çalıştırılmasını beklemesi gerekir. Bu genellikle render sürecinde nispeten geç gerçekleşir. Bu, görselde daha da büyük bir gecikmeye neden olur.

Adım 3: Görselin mümkün olduğunca hızlı indirildiğinden emin olun

Yapılacak üçüncü şey, olması gerekenden daha büyük görsellere değerli ağ kaynaklarını harcamadığınızdan emin olmaktır. Bunu duyarlı görseller kullanarak, sıkıştırma kullanarak ve yeni ve daha hızlı görsel formatları kullanarak yapabilirsiniz

Duyarlı görseller

LCP ile ilgili en yaygın sorunlardan biri, 1920x1200px boyutunda tam boyutlu bir masaüstü 'hero görseli'ni, görseli yaklaşık 360x225'te render eden bir mobil cihaza göndermektir. Bu, görselin olması gerekenden yaklaşık 28 kat daha büyük olduğu anlamına gelir (elbette, daha yüksek DPI'da görseller gönderebilirsiniz, o zaman tam boyutlu görsel 7 kat daha büyük olur!)!
İşte burada duyarlı görseller devreye girer! Duyarlı görseller, farklı görüntü alanlarına bir görselin farklı sürümlerini gönderir. Bu, gereksiz bayt gönderilmediğinden emin olmak için mobil tarayıcıya küçük bir görsel, tablete biraz daha büyük bir görsel ve masaüstüne tam boyutlu bir görsel gönderebileceğimiz anlamına gelir!

Görsel Sıkıştırma

Görsel sıkıştırma, görsel kalitesinin çoğunu korurken bir görselin dosya boyutunu küçültmenize olanak tanır. Gereksiz veya alakasız verileri ortadan kaldıran çeşitli teknikler içerir. Çoğu modern CMS sistemi, görseller kütüphaneye yüklendiğinde görsel sıkıştırması uygular. Ancak kütüphaneyi atlarsanız veya kendi özel çözümünüzü kullanırsanız, görsellerin doğru sıkıştırma seviyesine sahip olduğunu her zaman kontrol edin!

Yeni ve daha hızlı görsel formatları

jpg web avif

Görseller genellikle bir web sayfasındaki en büyük kaynaklardan biridir ve optimize edilmediklerinde sayfanın yükleme hızını önemli ölçüde yavaşlatabilirler. WebP ve AVIF formatları gibi daha yeni ve daha hızlı görsel formatları, kalitelerinden ödün vermeden görsellerin dosya boyutunu küçültmeye yardımcı olabilir. Bu, daha hızlı yüklenebilecekleri anlamına gelir ve bu da sayfanın yükleme hızını artırabilir.

Adım 4: Düzen kaymasını ortadan kaldırın!

Yüklenirken boyut değiştiren görseller düzen kaymasına neden olacaktır. Bu kadar basit. Görsellerin düzen kaymasına neden olmasının 3 ana nedeni vardır (aslında çok daha fazlası var ama bu 3'ü en yaygın olanlarıdır)

1. Eksik görsel boyutları

Görsel boyutları, görselin width özniteliği ve height özniteliğidir. Width veya height özniteliği ayarlanmamışsa tarayıcı, render sırasında görsel için ne kadar alan ayıracağını bilemez ve eksik boyut için 0 piksel ayırır.

Bu, width ve height ayarlanmamış bir görselin 0x0 piksel olarak render edileceği ve ardından görsel yüklenip çözümlendiğinde tarayıcının görsel için doğru miktarda alan kullanmak üzere düzeni yeniden hesaplayacağı anlamına gelir.

2. Stil sorunları

Genellikle görsellerin görüntü alanından daha büyük olması basit bir CSS hilesiyle önlenir

img{
   max-width:100%;   height:auto;
}

Bu harika bir hiledir ve kullanmalısınız. Ne yazık ki, düzen kaymasına neden olan bu hilenin varyantlarını düzenli olarak görüyorum. Örneğin width:auto ekleyerek:

img{
   max-width:100%;   height:auto;
   width:auto;
}

Bu, herhangi bir görselin auto genişlik ve yükseklikle render edilmesini sağlayacaktır. Bu genellikle tarayıcının görsel indirilmeden önce görseli 0x0px olarak render edeceği anlamına gelir

3. Yer tutucular

Bazı JavaScript tabanlı lazy loading betikleri yer tutucular kullanır. Yukarıda bahsedilen max-width:100% ve height:auto gibi bir CSS hilesi kullanıyorsanız, kare yer tutucunun otomatik yüksekliği görselin height özniteliğiyle eşleşmeyecektir. Temelde görsel önce kare yer tutucu ile 720x720'de render edilecek ve son görsel indirildikten sonra 720*180'de render edilecektir

<img 
  src="1x1placeholder.png" 
  data-src="hero.png" 
  width="720" 
  height="180"
  style="height:auto;max-width:100%"
>


Adım 5: Ana iş parçacığını koruyun

Bir sonraki dikkat edilmesi gereken şey, aynı anda çok fazla görselin ana iş parçacığında çözümlenmemesini sağlamaktır. Genellikle bu bir sorun olmayacaktır, ancak ürün listeleme sayfalarında (bazen 500 kadar görselin kaynaklar için yarıştığı!) bunu birçok kez gördüm.

Hile, tüm görsellere decoding="async" ekleyerek bu görsellerin ayrı bir iş parçacığında çözümlenebilmesini sağlamaktır. Ayrıca, ekranın altındaki ve gizli tüm görsellere loading="lazy" ekleyerek bu kadar çok görselin aynı anda çözümlenmesinden kaçınmaya çalışın.

Adım 6: Her görsel için doğru stratejiyi seçin!

Son ve bazen en önemli adım, önemli görselleri önceliklendirmek ve önemsiz görsellerin önceliğini düşürmektir!

LCP öğesi için görsel stratejileri

LCP öğesi genellikle en önemli görsel öğedir. Bu yüzden bunu gerçekten önceliklendirmemiz gerekiyor."

  1. Görseli sayfanın head bölümünün başında şu kodla önceden yükleyin: <link rel="preload" as="image" href="path-to-img.png">
  2. Tarayıcıya bu görselin lazy loading ile yüklenmemesi gerektiğini loading="eager" ayarlayarak veya loading özniteliğini atlayarak belirtin
  3. Tarayıcıya bu görselin yüksek öncelikle indirilmesi gerektiğini fetchpriority="high" kullanarak ima edin (görseli önceden yüklüyorsanız bu kısmı atlayabilirsiniz)
  4. Bu öğe o kadar önemli olduğu için ana iş parçacığında çözmek istediğimizden decoding="sync" ayarlayın

Logolar ve diğer görünür (LCP olmayan) görseller için görsel stratejisi

Görünür görseller sayfa yükleme sırasında oldukça erken yüklenmelidir, ancak tercihen LCP öğesinden sonra. Bunu LCP öğesini önceden yükleyerek başarabiliriz. Bu, görünür görsellere doğal, doğru indirme sıralarını verecektir.

  1. Tarayıcıya bu görselin lazy loading ile yüklenmemesi gerektiğini loading="eager" ayarlayarak veya loading özniteliğini atlayarak belirtin
  2. Bu öğe güvenle ana iş parçacığı dışında çözümlenebileceğinden decoding="async" ayarlayın!

Ekranın altındaki görseller için görsel stratejisi

Ekranın altındaki tüm görseller lazy loading ile yüklenmelidir. Bu kadar basit! İstisna yoktur!

  1. Tarayıcıya bu görselin lazy loading ile yüklenmesi gerektiğini loading="lazy" ayarlayarak belirtin
  2. Bu öğe güvenle ana iş parçacığı dışında çözümlenebileceğinden decoding="async" ayarlayın!

Arka plan görsellerinden kaçının

Arka plan görselleri kullanıyorsanız yeniden düşünmeniz gerekiyor. Arka plan görselleri lazy loading ile yüklenemez ve decoding özelliğini kontrol edemezsiniz ve fetchpriority ayarlayamazsınız. Arka plan görselleri genellikle duyarlı değildir ve bu muhtemelen size çok fazla bant genişliğine mal olacaktır. Ancak en önemlisi, arka plan görselleri genellikle tarayıcı CSS dosyalarını indirdikten sonra keşfedilir. Bu, bir görsel indirmesini tetiklemek için neredeyse hiçbir zaman doğru zaman değildir!

Normal görsellerin arka plan görselleri gibi davranmasını sağlamak için CSS object-fit:cover ile birlikte normal görsel etiketlerini kullanabilirsiniz!

Secure your Q3 Metrics.

Do not let technical debt derail your Core Web Vitals. I provide the strategy, the code, and the verification to pass Google's assessment.

Start the Engagement >>

  • Strategic Planning
  • Code Implementation
  • Verification & Testing
Core Web Vitals için görselleri optimize edinCore Web Vitals Core Web Vitals için görselleri optimize edin