Çıkış niyeti (exit intent) teknolojisi, kullanıcıların bir web sitesini kapatma niyetini tespit etmek için tasarlanmış bir dizi sinyali izler. Ancak standart uygulama genellikle fareye dayalı olduğundan, mobil cihazlarda etkisiz kalmaktadır. Peki, farklı cihaz türlerine nasıl uyum sağlanır ve kullanıcı deneyimine zarar vermeden nasıl optimize edilir?
Fareye dayalı sinyal: Standart yaklaşımdaki temel sorun
En yaygın kullanılan çıkış niyeti komut dosyaları, fare imlecinin sayfanın en üstünden çıkmasını izler. İmleç tarayıcı sekme çubuğuna veya kapatma düğmesine doğru hareket ettiğinde, sistem kullanıcının siteyi terk etme niyetini algılar ve bir açılır pencere sunar. Bu yöntem masaüstü cihazlarda oldukça başarılıdır.
Ancak mobil cihazlarda fare olmadığı için bu sinyal hiçbir zaman tetiklenmez. Sonuç olarak, birçok sitenin mobil trafiğinin önemli bir kısmı (çoğu zaman %50’nin üzerinde) bu çıkış niyeti deneyiminden hiçbir şekilde faydalanmaz. Kullanıcılar test edilirken masaüstünde çalışan sistem, mobilde sessiz kalır — ve bu durum çoğu geliştirici tarafından fark edilmez.
Dokunmatik cihazlar için alternatif sinyaller
Mobil cihazlarda fare olmadığı için, farklı davranışsal sinyalleri izlemek gerekir:
- Hızlı yukarı kaydırma hareketi: Kullanıcının ekranı hızla yukarı kaydırarak adres çubuğuna erişmeye çalışması, siteyi terk etme niyetinin bir göstergesi olabilir.
- Etkinlik eksikliği (idle süresi): Uzun süreli hareketsizlik, kullanıcının ilgisini kaybettiğinin veya başka bir sayfaya geçme niyetinde olduğunun bir sinyalidir.
Bu sinyaller masaüstündeki kadar net değildir, bu nedenle eşik değerlerin dikkatlice ayarlanması gerekir. Örneğin, birden fazla sinyalin birleşimiyle çıkış niyeti algılanabilir ve bu sinyaller tek bir yardımcı fonksiyon aracılığıyla yönetilebilir.
function exitIntent(callback, { sensitivity = 20, // Sayfanın en üstünden kaç piksel uzaklıktaki hareketin "terk" olarak algılanacağı
mobileScrollDelta = 60, // Hızlı yukarı kaydırmanın tetikleyici eşiği (piksel olarak)
idle = 0, // Hareketsizlik süresi (milisaniye olarak, 0 kapalı demektir)
once = true, // Sadece bir kez tetiklenip durdurulsun mu?
} = {}) {
let fired = false;
let lastY = window.scrollY;
let idleTimer;
function teardown() {
document.removeEventListener("mouseout", onMouseOut);
window.removeEventListener("scroll", onScroll);
clearTimeout(idleTimer);
}
const trigger = () => {
if (fired) return;
if (once) fired = true;
teardown();
callback();
};
const onMouseOut = (e) => {
if (!e.relatedTarget && e.clientY <= sensitivity) trigger();
};
const resetIdle = () => {
clearTimeout(idleTimer);
idleTimer = setTimeout(trigger, idle);
};
const onScroll = () => {
const y = window.scrollY;
if (lastY - y > mobileScrollDelta) trigger(); // Hızlı yukarı kaydırma
lastY = y;
if (idle) resetIdle();
};
document.addEventListener("mouseout", onMouseOut);
window.addEventListener("scroll", onScroll, { passive: true });
if (idle) resetIdle();
return teardown;
}Bu yardımcı fonksiyon, ab-test-helpers adlı bağımsız bir kütüphanede yer almaktadır ve A/B testleri için optimize edilmiştir.
Aynı kullanıcıya tekrar sormamak: Tek seferlik tetikleme
Bir açılır pencerenin her sayfada yeniden görünmesi, kullanıcı deneyimini olumsuz etkileyebilir ve aslında kullanıcıyı siteyi terk etmeye itebilir. Bu nedenle, çıkış niyeti algılama sisteminin birden fazla kez tetiklenmemesi ve kullanıcının reddettiği bir öneriyi sürekli olarak sunmaması önemlidir.
function allowOncePerDays(key, days = 7) {
const name = `fc_${key}`;
try {
const until = Number(localStorage.getItem(name) || 0);
if (Date.now() < until) return false;
localStorage.setItem(name, String(Date.now() + days * 864e5));
return true;
} catch (e) {
return true; // Depolama engelliyse, engellemeyi kaldır
}
}
exitIntent(() => {
if (sessionStorage.getItem("exit_dismissed") === "1") return;
if (!allowOncePerDays("exit_offer", 14)) return;
showOverlay();
}, { idle: 20000 });Bu kod parçası, kullanıcıya 14 gün boyunca sadece bir kez çıkış niyeti önerisi sunar ve kapatma işlemi gerçekleştiğinde exit_dismissed değişkenini ayarlar.
Erişilebilirlik standartlarına uygunluk
Çıkış niyetiyle tetiklenen açılır pencereler, birer diyalog kutusu olarak kabul edilir. Bu nedenle aşağıdaki erişilebilirlik standartlarına uymak gerekir:
- Odak kilidi: Klavye kullanıcıları için pencere içinde odakın kilitlenmesi ve kapatıldığında odakın eski konumuna dönmesi.
- Escape tuşu desteği: Kullanıcıların ESC tuşuna basarak pencereyi kapatabilmesi.
- ARIA rolleri: Ekran okuyucular için uygun rol ve özelliklerin tanımlanması.
Bu standartlara uyulmaması durumunda, klavye kullanıcıları pencereye hapsolabilir veya sayfa içindeki konumlarını kaybedebilir.
Sadece gösterimden öteye geçmek: Niyeti ölçmek
Birçok sistemde, çıkış niyeti sadece açılır pencerenin görüntülenmesiyle ölçülür. Ancak daha doğru bir yaklaşım, niyetin algılanmasını ayrı bir olay olarak kaydetmektir. Bu şekilde, kontrol grubu da dahil olmak üzere tüm kullanıcıların çıkış niyeti davranışları analiz edilebilir ve pop-up gösteriminin gerçek etkinliği ölçülebilir.
Özet: Tüm platformlarda çalışan bir çıkış niyeti stratejisi
Etkili bir çıkış niyeti sistemi oluşturmak için aşağıdaki adımlar izlenmelidir:
- Çoklu sinyal algılama: Masaüstü için fare hareketi, mobil için kaydırma ve hareketsizlik sinyallerini birleştirmek.
- Tek seferlik tetikleme: Aynı kullanıcıya sürekli olarak sorulmamak için oturum ve yerel depolama kullanmak.
- Erişilebilir diyaloglar: Klavye kullanıcıları için odak kilidi ve uygun ARIA özellikleri sağlamak.
- Niyet ölçümü: Açılır pencere gösteriminden bağımsız olarak niyetin algılanmasını kaydetmek.
Bu yaklaşımlar benimsendiğinde, çıkış niyeti sistemi sadece masaüstü kullanıcılarında değil, mobil cihazlarda da etkili bir şekilde çalışacaktır. Unutmayın: kullanıcı deneyimini iyileştirmek için tasarlanan her sistem, aslında kullanıcıyı kaybetmekten kaçınmayı hedeflemelidir.
Yapay zeka özeti
Mobil cihazlarda çıkış niyeti algılama sistemleri neden çalışmaz? Fareye dayalı olmayan sinyallerle tüm platformlarda etkili bir strateji geliştirin.