14.06.2022
Sayfa performansı, yüksek trafik hedefleyen siteler için en önemli konulardan biridir. Bu tarz projelerde sayfa yüklemesini yavaşlatacak her unsurdan kaçınmak gerekiyor.
Lazy load sayfa hızını optimize etmede en çok bilinen yöntemlerden birisi. Bu şekilde sayfa performansına dikkat etmenin sitenize olan kimi faydaları şöyle:
1. Kullanıcı siteye giriş yaptığında baştan sona tüm içerikler yerine sadece görünen alanın görselleri yükleneceği için, sayfa daha hızlı açılır.
2. Kullanıcı girişi ve sadece sayfada gözükmesi gereken içeriklerin yüklenmesi, sayfadaki daha hızlı yüklenmesine yardımcı olur. Bu sayede kullanıcı deneyimini olumlu yönde etkiler.
3. Sayfa hızlı açıldığı ve trafik yoğunluğu az olduğu için, kullanıcının aradığı bilgiye erişimi daha hızlı olur. Bu da yine daha iyi bir kullanıcı deneyimi demektir.
4. Google botları kullanıcı deneyimini göz önünde bulundurarak sayfanızı aramalarda daha görünür kılar.
Aslında sayfa performansını lazy load’a başvurmadan da arttırabileceğiniz çeşitli yollar var. Bu yollar CDN kullanımından kodları daha optimize yazmaya ve çağırmaya, görsel formatından font yüklemelerine kadar birçok konuyu kapsıyor. Google’ın fast load times adıyla derlediği makalesinde bunların hepsini görebilirsiniz.
Lazy load ile birlikte SEO uyumluluğu sağlamanın birçok yolu var. Bunlardan bazılarını aşağıdaki şekilde derledim:
1- Görsellere lazy loading özelliği tanımlamak artık tüm browser’lar tarafından destekleniyor. Benzer şekilde <iframe> elementine de lazy özelliği vermek mümkün (ben bu satırları yazarken her browser desteklemiyordu). Bu şekilde ekstra bir kod gerektirmeden browser üzeriden lazy load işlemi kolaylıkla gerçekleştiriliyor.
<img width="400" height="300" src="article.jpg"
alt="..." loading="lazy">
<iframe loading="lazy">
Görselin width ve height’ını önceden belirtmiş olmak, ufak ama önemli bir faktör olarak öne çıkıyor. Normalde browser görseli çağırana kadar boyutlarını bilmemiş oluyor. Ama inline olarak spesifik tanımlamalar yapılması halinde, browser sayfayı yüklerken boyutu da bildiği için yapıyı daha hızlı oluşturuyor. Bu da süreden kazanmak demek aslında.
2- Video’ları embed olarak dışarıdan çağırarak sayfanın ilk yükleme anındaki yükünü azaltabilirsiniz. Benzer şekilde video thumbler’ına placeholder olarak daha düşük boyutta görsel ekleyebilirsiniz.
3- Interection observer api ile sayfadaki içeriklerin ne zaman nasıl render’lanacağını belirleyebilirsiniz. Aslında bu api ile, aşağıda yine değineceğim gibi, sadece görsellerin değil section veya div gibi alanların ve menülerin dahi ne zaman ne hızda yükleneceğini belirlemek mümkün.
Örneğin aşağıdaki örnekte, ekran, lazy load özelliği vermek istediğimiz #scrollArea alanına 20px yaklaşınca yüklemeye başlasın ve 1 saniye sürsün dedik.
let options = {
root: document.querySelector('#scrollArea'),
rootMargin: '20px',
threshold: 1.0
}
let observer = new IntersectionObserver(callback,
options);
Benzer şekilde, alan görünür olduğunda çeşitli event’ler kullanabilir, class’lar ekleyebilirsiniz. DOMContentLoaded kullanarak sayfadaki tüm görsel, metin gibi elementleri seçerek lazy-load özelliği verebilirsiniz. Böylece her bir element ile tek tek ilgilenmek gerekmeyecek.
Aşağıdaki örnekte de kısaca, api devreye girdiğinde lazyImage’ın dosya kaynağı değişsin, ‘lazy’ class’ı kalksın dedik.
if ("IntersectionObserver" in window) {
let lazyImageObserver = new IntersectionObserver(
function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.remove("lazy");
}
});
4- Eğer Twitter gibi çok sayıda içeriğin veya başlığın akacağı bir sayfa tasarlıyorsanız, yine intersection observer ile continuous scroll özelliği kazandırabilirsiniz. Bunun için, ilk verdiğim örnekteki gibi, her bir yazının ne zaman yüklemeye başlayacağını belirlemek gerekiyor. Bu şekilde browser akış sırasında sadece tek bir alandaki yazı ve görseli yüklemeye çalışacak. Ancak böyle bir yapıda Google’ın aşağılarda kalan içerikleri index’lemediğini de belirtmek gerek.
5- Code splitting de denen, HTML, CSS ve JavaScript dosyalarını olabildiğince ayrı parçalara bölerek sadece gerektiği yerlerde çağırabilirsiniz. Defer özelliği çağırılarak scriptlerin yüklemesi sırasında HTML yüklemesinin beklememesini sağlayabilirsiniz. Burada dokümantasyonun karışma ihtimalini göze alarak dikkat etmekte ve aynı kodu birden fazla dokümanda tekrar kullanmamakta fayda var. Chrome ekibinin bu konuyla ilgili geliştirdiği koda ve makaleye bakmak faydalı olacaktır.
try { var scripts = [{{{scripts}}}], src,
pendingScripts = [], firstScript = document.scripts[0];
//polyfil checks and loads here
if (typeof IntersectionObserver === "undefined" ||
IntersectionObserver.toString().
indexOf("[native code]") === -1) {
scripts.unshift(
"js/libs/polyfil/intersection-observer.js"
);
}
// Watch scripts load in IE
function stateChange() {
// Execute as many scripts in order as we can
var pendingScript;
while (pendingScripts[0] && pendingScripts[0]
.readyState == 'loaded') {
pendingScript = pendingScripts.shift();
// avoid future loading events from this script
// (eg, if src changes)
pendingScript.onreadystatechange = null;
// can't just appendChild
// old IE bug if element isn't closed
firstScript.parentNode.insertBefore(pendingScript,
firstScript);
}
console.log("scripts should be loaded now"); }
// loop through our script urls
while (src = scripts.shift()) {
if ('async' in firstScript) {
// modern browsers
script = document.createElement('script');
script.async = true;
script.src = src; document.body.appendChild(script);
} else if (firstScript.readyState) {
// IE<10
// create a script and add it to our todo pile
script = document.createElement('script');
pendingScripts.push(script);
// listen for state changes
script.onreadystatechange = stateChange;
// must set src AFTER adding onreadystatechange
// else we’ll miss the loaded event for cached scripts
script.src = src;
} else {
// fall back to defer
document.write(
'<script src="' + src + '" defer></' + 'script>'
);
}
}
}
catch (error) { alert(error);
}
6- History api, yukarıda bahsettiğim continuous scroll özelliğine benzeyen bir başka yol. Bu api ile URL’i herhangi bir sunucu işlemi yapmadan değiştirebiliyorsunuz. Üç parametreden oluşan api’de durum, isim ve URL belirtiliyor.
var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");
Browser ilgili yere geldiğinde api üzerinden o alanın URL’ine ulaşarak onu adres çubuğuna çağırıyor. Aynı zamanda bu api ile AJAX kullanarak sunucu üzerinden ilgili sayfanın HTML’i çekilebiliyor.
Tüm bu yöntemlere ek olarak, CMS’lerin sunduğu çeşitli plugin’ler, görselleri sıkıştırma gibi şeyler yaparak sizin herhangi bir müdahalenize gerek kalmadan sayfa performansını arttıracak değişiklikler yapıyor. Bu plugin’ler genellikle tek bir ekranda ayarlama yapmaya yetecek kadar basit ara yüzde oluyor. Ancak ek ücretli olabilmesi ve sadece tek bir platform destekleyebildiği için, site taşırken uğraştırıcı olması gibi handikaplar da var.
Perfist Blog
Benzer Yazılar
Google Ads kampanyalarınızın hedef URL’lerini düzenli olarak kontrol etmek, reklam bütçenizi korumanın en etkili yollarından biridir. Çünkü kırık veya yönlendirmeyen sayfalar, reklam tıklamalarını boşa harcar, kalite puanını düşürür ve dönüşüm oranlarınızı etkiler. Bu yazıda, Google Ads hedef URL verilerini otomatik olarak Google Sheets’e aktaran, ardından bu URL’lerin çalışıp çalışmadığını kontrol eden ve eğer sorun tespit […]
Devamını Oku
Senior Level Performans PazarlamasıGEO (Generative Engine Optimization) Nedir? GEO, yapay zekâ tabanlı arama motorlarında içeriğin daha görünür olması için yapılan optimizasyon çalışmalarıdır. Amacı, yapay zekâların verdiği cevaplarda içeriğin daha sık önerilmesini sağlamaktır. Klasik arama motoru sıralamalarından farklı olarak, yapay zekâ modellerinin içerik okuma ve anlamlandırma biçimine göre içerik üretilir. GEO ve SEO Arasındaki Farklar SEO, Google gibi arama […]
Devamını Oku
Mid Level SEOAnswer Engine Optimization, arama motorlarının ötesinde yapay zekâ destekli yanıt motorlarına içerik uyarlama sürecidir. Kullanıcıların sorularına en net ve doğru yanıtı vermeyi amaçlar. Bu sayede içerikler yalnızca Google’da değil, aynı zamanda ChatGPT, Perplexity gibi yapay zekâ platformlarında da öne çıkar. Geleneksel SEO, web sitelerinin arama motoru sonuç sayfalarında görünürlüğünü artırmaya odaklanır. AEO ise içeriklerin doğrudan […]
Devamını Oku
Mid Level SEOGoogle Analytics 4’te oturumun ne olduğu, oturum sürelerinin neden önemli olduğu, hangi oturum metriklerinin bulunduğu ve bu ayarların nasıl yapılandırılacağını açıklayacağız. GA4’te Oturum Nedir? Oturum, bir kullanıcının web siteniz veya mobil uygulamanızla belirli bir zaman aralığında gerçekleştirdiği tüm etkileşimlerin bütünüdür. Kullanıcı sitenize geldiğinde bir oturum başlar ve belirli bir süre boyunca etkileşim olmazsa (örneğin […]
Devamını Oku
Beginner Level Web/App Analitiği