Özet: Lazy loading (tembel yükleme), sayfadaki görsellerin ve içeriklerin kullanıcı onları görüntüleme alanına kaydırdığında yüklenmesi tekniğidir. Doğru uygulandığında sayfa performansını önemli ölçüde artırır. Ancak yanlış uygulandığında Googlebot'un içeriği görememe riski doğurur. Bu rehber, SEO uyumlu lazy loading stratejilerini kapsamlı olarak ele almaktadır.
Modern web sayfaları onlarca görsel, video ve dinamik içerik barındırır. Tüm bu kaynakları sayfa ilk yüklendiğinde indirmek, hem sayfa hızını dramatik biçimde yavaşlatır hem de kullanıcının asla görmeyeceği içerikler için bant genişliği harcar. Lazy loading, bu sorunu çözmek için geliştirilmiş etkili bir performans tekniğidir.
Lazy Loading Nasıl Çalışır?
Lazy loading tekniğinde, sayfanın başlangıçta yalnızca görünür alandaki (viewport) kaynakları yüklenir. Kullanıcı sayfada aşağı kaydırdıkça, yeni görünür alana giren kaynaklar dinamik olarak yüklenir.
İki Temel Yöntem
- Native lazy loading: Tarayıcının yerleşik lazy loading desteği.
<img loading="lazy">niteliği ile kullanılır. - JavaScript tabanlı lazy loading: Intersection Observer API veya üçüncü parti kütüphaneler ile özel uygulanır.
Native Lazy Loading
Modern tarayıcıların büyük çoğunluğu loading niteliğini destekler:
<!-- Lazy load — viewport dışındaki görseller -->
<img src="gorsel.jpg" loading="lazy" alt="Açıklama" width="800" height="600">
<!-- Eager load — LCP görseli veya ilk görünür alan -->
<img src="hero.jpg" loading="eager" alt="Ana görsel" width="1200" height="600">
<!-- iframe lazy loading -->
<iframe src="video.html" loading="lazy"></iframe>
Native Lazy Loading Avantajları
- Ek JavaScript gerektirmez.
- Tarayıcı, kaynağı ne zaman yükleyeceğine akıllıca karar verir.
- Googlebot tarafından tam desteklenir.
- Performans etkisi minimumdur.
JavaScript Tabanlı Lazy Loading
Intersection Observer API, bir elemanın görünür alana girip girmediğini verimli şekilde izler:
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img);
}
});
});
document.querySelectorAll('img[data-src]').forEach(img => {
observer.observe(img);
});
Bu yöntemde görseller başlangıçta data-src niteliğinde tutulur ve görünür alana girdiklerinde src niteliğine aktarılır.
Lazy Loading ve SEO: Googlebot Davranışı
Googlebot, sayfaları render ederken belirli bir viewport boyutu kullanır ve sayfada kaydırma yapmaz. Bu, lazy loading ile yüklenen ancak ilk viewport dışında kalan içeriklerin potansiyel olarak görülmeme riski taşıdığı anlamına gelir.
Googlebot'un Gördükleri ve Görmedikleri
- Native lazy loading: Googlebot bunu tanır ve görselleri yükler. SEO açısından güvenlidir.
- Intersection Observer: Googlebot, Intersection Observer'ı destekler. Ancak kaydırma yapmadığı için viewport dışındaki içeriklerin tetiklenmesi garanti değildir.
- Scroll event tabanlı yöntemler: Googlebot kaydırma yapmadığı için bu yöntemlerle yüklenen içerik görülmez.
SEO Uyumlu Lazy Loading Kuralları
- Kural 1: İlk görünür alandaki (above the fold) görsellere lazy loading uygulamayın — LCP'yi olumsuz etkiler.
- Kural 2: LCP görseline
loading="eager"veyafetchpriority="high"ekleyin. - Kural 3: Native lazy loading tercih edin —
<img loading="lazy">Googlebot tarafından desteklenir. - Kural 4: Tüm görsellere
widthveheightekleyin — CLS'yi önler. - Kural 5: Metin içeriğini asla lazy load etmeyin — Googlebot göremeyebilir.
- Kural 6:
noscriptfallback düşünün — JavaScript devre dışıysa da görseller görünsün.
Lazy Loading Performans Etkisi
- Sayfa yükleme hızı: İlk yüklemede aktarılan veri miktarını önemli ölçüde azaltır.
- Bant genişliği tasarrufu: Kullanıcının görmediği görseller yüklenmez.
- Core Web Vitals etkisi: LCP'yi iyileştirebilir (ilk görsel alanı hariç tutulduğunda) ancak yanlış kullanımda kötüleştirebilir.
Sıkça Sorulan Sorular
Tüm görsellere lazy loading uygulamalı mıyım?
Hayır. İlk görünür alandaki görseller (hero, logo, LCP öğesi) eager yüklenmelidir. Yalnızca viewport dışındaki görsellere lazy loading uygulanmalıdır.
Lazy loading CLS'ye neden olur mu?
Görsellere width ve height nitelikleri verilmezse evet. Boyut belirtildiğinde tarayıcı görselin alanını önceden ayırır ve düzen kayması olmaz.
Video içerikleri lazy load edebilir miyim?
Evet. <iframe loading="lazy"> ile YouTube veya Vimeo embed'lerini lazy load edebilirsiniz.
Sonuç
Lazy loading, modern web performansının vazgeçilmez bir parçasıdır. Native lazy loading tercih ederek, ilk görünür alanı hariç tutarak ve tüm görsellere boyut belirterek hem performansı artırabilir hem de SEO uyumluluğunu koruyabilirsiniz. VixSEO ile sayfa performansınızı ve Core Web Vitals metriklerinizi düzenli olarak izleyin.