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
Yapısal Veri Nedir? Yapısal veri, arama motorlarının bir web sitesinin içeriğini daha iyi anlaması için kullanılan kodlama sistemidir. JSON-LD, Microdata gibi formatlarla uygulanır ve siteye ürünler, etkinlikler, işletme bilgileri gibi detaylı bilgilerin anlaşılır şekilde sunulmasını sağlar. Bu, özellikle e-ticaret siteleri için, ürünlerin özelliklerini ve faydalarını doğru aktarmak açısından büyük bir avantaj sunar. SEO açısından yapısal […]
Devamını Oku
Mid Level SEOSite Hızı Nedir? Site hızı, bir web sayfasının ne kadar hızlı yüklendiğini ifade eder.(Site hızının içinde birden fazla faktör vardır. Bunlardan en önemlileri ilk yüklenme süresi ve yüklenme hızıdır.) Bu hız, ziyaretçilerin deneyimini doğrudan etkiler. Yavaş yüklenen bir site, kullanıcıların siteden çıkmasına ve başka sayfaları tercih etmesine neden olabilir. Aynı zamanda, arama motorları site hızını […]
Devamını Oku
Mid Level SEOSEO Analizi Nedir? SEO analizi, bir web sitesinin arama motorlarında gösterdiği performansı artırmak için eksiklerin belirlenmesi için yapılır. Bu analiz, sitenin mevcut durumu hakkında bilgi verir ve hangi alanlarda iyileştirmeler yapılması gerektiğini ortaya koyar. SEO analizi, yol haritası belirlemek ve başarılı bir strateji oluşturmak için vazgeçilmezdir. Çünkü doğru analiz, hangi anahtar kelimelere odaklanacağını, teknik hataların […]
Devamını Oku
Mid Level SEODijital pazarlama dünyasında, kullanıcıların oluşturduğu içerikler (User Generated Content – UGC) önemini giderek artırıyor. UGC, markaların ve ürünlerin tanıtımında kullanıcıların kendi deneyimlerini, görüşlerini ve yaratıcılıklarını paylaştıkları videoları içerir. Peki, UGC videoları dijital pazarlama stratejilerinde neden bu kadar önemlidir? 1. Güvenilirlik ve Samimiyet Kullanıcıların ürettiği içerikler, tüketiciler için markalardan gelen tanıtımlara göre daha güvenilir bir algı […]
Devamını Oku
Performans Pazarlaması