E-posta listesi büyütmenin klasik yolu, siteye giren herkese aynı kutuyu göstermektir: Bültenimize kayıt olun, %10 indirim kazanın. Bu kutu yıllardır çalışıyor ama her yıl biraz daha az çalışıyor, çünkü kullanıcı teklifin ne olduğunu daha kutuyu görmeden biliyor. Çarkıfelek modülü aynı işi farklı bir psikolojiyle yapar: ödülün ne olacağı, kullanıcı formu doldurup çarkı çevirene kadar belirsizdir. Bu belirsizlik, formu doldurma eylemini bir maliyetten bir oyuna çevirir.

Oyunlaştırmanın klasik pop-up'a göre farkı

Klasik pop-up'ta kullanıcı bir takas yapar: e-posta adresi karşılığında bilinen bir indirim. Çarkıfelekte takas değil, çekiliş yapar. Fark küçük görünür ama iki somut sonucu vardır. Birincisi, ödül havuzunu farklılaştırabilirsiniz: herkese %10 vermek yerine çoğunluğa %5, azınlığa %30 verirsiniz; ortalama indirim maliyetiniz düşerken vitrindeki en yüksek ödül daha çekici görünür. İkincisi, kullanıcı formu doldurduktan sonra sonucu görmek için sayfada kalır.

KriterKlasik e-posta pop-up'ıÇarkıfelek modülü
Kullanıcıya sunulan teklifSabit ve baştan bilinen (ör. %10)Değişken; sonuç çark dönene kadar belli değil
EtkileşimTek adım: yaz ve kapatForm + yaklaşık 4,5 saniyelik çark animasyonu
Ödül çeşitliliğiTek kupon4-8 dilim, her dilimin kendi etiketi ve kupon kodu
Maliyet kontrolüHerkese aynı indirimDilim başına olasılık ağırlığı; yüksek indirim düşük ağırlık
Kapatıldıktan sonraGenelde tamamen kaybolurKöşede küçük bir buton kalır, kullanıcı isterse tekrar açar
Tekrar katılım engeliÇoğunlukla sadece çerezÇerez + sunucuda e-posta bazlı tekillik kontrolü
Toplanan veriE-postaAd soyad, e-posta, telefon (opsiyonel), kazanılan ödül, sayfa adresi, izin kayıtları

Oyunlaştırmanın bedava olmadığını da söylemek gerekir. Çark, siteye ilk kez giren kullanıcının önüne çıkan bir engeldir; yanlış kurgulanırsa satın alma niyeti yüksek bir ziyaretçiyi de yolundan çevirir. Bu yüzden aşağıdaki tetikleme ve mobil bölümleri, ödül ayarlarından daha önemlidir.

Çark mekaniği: sonucu kim belirliyor?

Bu, çarkıfelek modüllerinde en çok merak edilen ve en az açıklanan konu. STools Çarkıfelek modülünde sonuç tarayıcıda değil, sunucuda belirlenir. Kullanıcı formu gönderdiğinde tarayıcı /api/spin-wheel/spin uç noktasına istek atar; sunucu aktif dilimlerin olasılık ağırlıklarını toplar, bu toplam üzerinden ağırlıklı bir çekiliş yapar ve kazanan dilimin sırasını döner. Tarayıcıdaki animasyon, dönen sonucun üzerinde durmak için hesaplanır: yaklaşık beş tam tur atar ve easeOutCubic yavaşlamasıyla kazanan dilimin üzerinde durur.

Bunun iki pratik sonucu var. Birincisi, kullanıcı tarafında JavaScript ile oynayarak sonucu değiştirmek mümkün değildir; ödül dağılımınız sunucudaki ağırlıklara sadık kalır. İkincisi, animasyon bir yanılsama değil, alınmış kararın görselleştirilmesidir. Sektörde neredeyse tüm ciddi uygulamalar böyle çalışır; aksi hâlde kimse dağıttığı indirim bütçesini öngöremezdi.

Ödül dağılımını ayarlamak

Her dilimin bir olasılık ağırlığı vardır. Ağırlıkların toplamının 100 olma zorunluluğu yoktur; sunucu ağırlığı toplam ağırlığa böler. Yani 3, 3 ve 4 ağırlıklı üç dilim ile 30, 30 ve 40 ağırlıklı üç dilim aynı sonucu verir. Modül kurulduğunda gelen varsayılan sekiz dilimli set, ağırlık toplamı 100 olacak şekilde hazırlanmıştır, dolayısıyla ağırlıklar doğrudan yüzdeye karşılık gelir:

Dilim etiketiAğırlıkGerçekleşen olasılıkVarsayılan kupon kodu
%5 İndirim20%20INDIRIM5
%10 İndirim20%20INDIRIM10
%20 İndirim15%15INDIRIM20
Kargo Bedava12%12KARGOBEDAVA
%15 İndirim10%10INDIRIM15
%30 İndirim10%10INDIRIM30
3 Ay Hediye8%8HEDIYE3AY
6 Ay Hediye5%5HEDIYE6AY

Bu tabloyu kendi marj yapınıza göre yeniden kurmanız gerekir. İşe ortalama indirim maliyetini hesaplayarak başlayın: her dilimin indirim oranını olasılığıyla çarpıp toplayın. Yukarıdaki sette yalnızca yüzdesel indirim dilimlerini alırsak ortalama yaklaşık %11'e denk gelir. Eğer brüt marjınız %25 ise bu katlanılabilir; %18 ise en yüksek dilimin ağırlığını düşürmeniz gerekir. Kargo bedava gibi sabit maliyetli dilimler, sepet ortalamanız yükseldikçe yüzdesel indirimden daha ucuza gelir.

Bir dilimi geçici olarak kaldıracaksanız silmek yerine pasife alın; pasif dilimler ne çizilir ne de çekilişe girer, ama geçmiş katılım kayıtlarının bağlantısı korunur. Dilim sayısını 4 ile 8 arasında tutmak görsel olarak da doğrudur: 8'in üzerinde etiketler okunamayacak kadar küçülür.

Tetikleme stratejisi: süre, exit-intent ve kaydırma

Pop-up'ın ne zaman açılacağı, hangi ödülü verdiğinizden daha çok fark yaratır. Üç yaygın strateji var:

  • Süre tabanlı: Sayfa yüklendikten X saniye sonra açılır. Uygulaması en basit ve en öngörülebilir olanıdır; süreyi çok kısa tutarsanız kullanıcı içeriği görmeden engellenmiş olur.
  • Çıkış niyeti (exit-intent): İmleç tarayıcının üst kenarına doğru hızla çıktığında tetiklenir. Masaüstünde zarif çalışır, ancak mobilde imleç kavramı olmadığı için karşılığı yoktur; mobil için yine süre veya kaydırma kullanılır.
  • Kaydırma tabanlı: Kullanıcı sayfanın belirli bir yüzdesine indiğinde açılır. İlgi göstermiş kullanıcıyı yakalar ama kısa sayfalarda hiç tetiklenmeyebilir.

STools Çarkıfelek modülü bugün süre tabanlı tetikleme + kalıcı köşe butonu kombinasyonunu kullanır. Varsayılan gecikme 5.000 milisaniyedir ve panelden değiştirilebilir. Davranış şu şekilde işler:

  1. Ziyaretçi siteye ilk kez girdiğinde, ayarlanan gecikme sonunda pop-up otomatik açılır.
  2. Kullanıcı çarkı çevirmeden kapatırsa, bir yıllık stools_sw_seen çerezi yazılır ve pop-up bir daha kendiliğinden açılmaz. Bunun yerine sağ alt veya sol alt köşede küçük bir çark butonu kalır; isteyen oradan açar.
  3. Kullanıcı çarkı çevirip ödül kazanırsa, stools_sw_done çerezi varsayılan olarak 30 gün süreyle yazılır. Bu süre boyunca köşe butonuna basıldığında form değil, kazanılan ödül ve kupon kodu ekranı açılır.

Amaç, aynı kullanıcıyı defalarca rahatsız etmemek ve kodunu kaybeden kullanıcının koda geri ulaşabilmesidir; kazanılan sonuç tarayıcının localStorage alanında da saklandığı için sekme kapatılıp açıldığında kod kaybolmaz. Gecikme süresini seçerken tek kural yeterli: ziyaretçi, pop-up açılmadan önce ne sattığınızı anlayabilmeli. Ana sayfada 5-7 saniye genelde dengelidir; ürün detay sayfasında satın alma niyeti yüksek olduğu için süreyi uzatmak ya da hiç göstermemek daha mantıklıdır.

Mobil davranış

Mobil, çarkıfelek modüllerinin battığı yerdir. Masaüstü için tasarlanmış geniş bir modal, 390 piksel genişliğinde bir ekrana sığmadığında ya taşar ya da kapatma butonu görünmez olur. Modülün stil dosyası üç kırılımla çalışır:

Ekran genişliğiYerleşimÇark boyutu
769 piksel ve üzeriSolda form, sağda çark; yan yana340 piksel
481-768 pikselAlt alta; form üstte, çark altta260 piksel
480 piksel ve altıAlt alta; başlık ve onay metinleri küçültülür220 piksel

Mobilde formun çarkın üstüne alınması bilinçli bir tercihtir: kullanıcı ekranı kaydırmadan önce ne yapması gerektiğini görür, çark ise aşağıda ödülü hatırlatır. Modal yüksekliği ekranın %90'ı ile sınırlanır ve içerik uzun gelirse modalın kendi içinde kayar; sayfanın arkası kaymaz. Köşe butonu küçük ekranlarda 44x44 piksele iner, bu da dokunmatik hedefler için tavsiye edilen asgari ölçüyle uyumludur.

Mobilde ayrıca arama motoru tarafını da düşünmek gerekir. Google, arama sonucundan gelen kullanıcının karşısına içeriği kapatan araya girici pencerelerin çıkmasını olumsuz bir sayfa deneyimi sinyali olarak değerlendirdiğini belgelerinde açıkça yazıyor. Yasal zorunluluk taşıyan bildirimler (çerez izni, yaş doğrulama) bunun dışında tutuluyor, ancak pazarlama amaçlı pop-up'lar değil. Pratik çıkarım: mobilde gecikmeyi kısa tutmayın, kapatma butonunu belirgin bırakın ve arama trafiğinin yoğun olduğu giriş sayfalarında çarkı daha muhafazakâr ayarlayın.

Kupon kodu üretimi ve tek kullanım kontrolü

Burada net olmak gerekiyor: modül her kullanıcı için rastgele ve benzersiz bir kupon kodu üretmez. Her dilim için bir kupon kodu tanımlarsınız (ör. KARGOBEDAVA) ve o dilimi kazanan herkes aynı kodu görür. Kodu üreten ve kullanım kurallarını uygulayan taraf, sizin e-ticaret altyapınızdır.

Bu, sanıldığından daha sağlam bir kurgudur: kuponun kaç kez kullanılabileceği, hangi tutarın üzerinde geçerli olacağı ve ne zaman süreceği zaten altyapının indirim motorunun işidir. Yapmanız gereken, dilim kodlarını altyapınızda oluştururken kullanım limitlerini doğru ayarlamak:

  • Toplam kullanım limiti koyun. Bu, kodun sosyal medyada paylaşılması hâlinde kaybınızı sınırlar. Kampanya boyunca beklediğiniz katılım sayısına yakın bir üst sınır makul bir başlangıçtır.
  • Müşteri başına tek kullanım seçeneğini açın. Shopify ve benzeri altyapılarda indirim kodu ayarlarında bu seçenek bulunur; aynı müşterinin kodu tekrar tekrar kullanmasını engeller.
  • Asgari sepet tutarı tanımlayın. Kargo bedava dilimleri için bu neredeyse zorunludur, aksi hâlde düşük tutarlı siparişlerde kargo maliyeti marjı yer.
  • Geçerlilik süresi verin. Kuponun süresi, çerez süresiyle (varsayılan 30 gün) uyumlu olmalı; kullanıcı köşe butonundan koduna hâlâ ulaşabilirken kodun sistemde ölmüş olması destek yükü yaratır.

Modül tarafında kötüye kullanımı sınırlayan iki mekanizma vardır. Birincisi, kazanan kullanıcının tarayıcısına yazılan çerez. İkincisi ve daha önemlisi, sunucudaki e-posta kontrolüdür: aynı yapılandırma için daha önce kayıt açılmış bir e-posta adresiyle tekrar çevrilmek istendiğinde istek reddedilir ve kullanıcıya bu e-posta ile daha önce çevrildiği bildirilir. Yani kullanıcı çerezlerini silse veya gizli sekme açsa bile, aynı e-posta adresiyle ikinci ödülü alamaz. Farklı bir e-posta adresi girmesini engelleyen bir mekanizma yoktur; bu, ödül değerini abartmamak için iyi bir gerekçedir.

E-posta izni, KVKK ve ticari elektronik ileti

Çarkıfelek bir veri toplama aracıdır ve Türkiye'de bu iki ayrı hukuki başlığa dokunur: kişisel verilerin işlenmesi (KVKK) ve ticari elektronik ileti gönderimi (6563 sayılı kanun ve ilgili yönetmelik). Bunları tek bir onay kutusuna sıkıştırmak yaygın ama hatalı bir pratiktir; ikisi farklı amaçlara hizmet eder ve ayrı ayrı alınmalıdır.

Modül tam da bu yüzden iki ayrı onay kutusunu destekler ve her ikisinin metnini panelden yazmanıza izin verir:

  • KVKK aydınlatma onayı: Hangi verinin (ad soyad, e-posta, telefon) hangi amaçla işlendiğini ve saklandığını anlatan metin.
  • Ticari elektronik ileti izni: Tanıtım, kampanya ve reklam amaçlı e-posta, SMS veya WhatsApp gönderimine ayrıca verilen izin.

Katılım kaydedilirken bu iki kutunun durumu ayrı alanlarda saklanır. Buna ek olarak IP adresi, tarayıcı bilgisi (user agent), formun doldurulduğu sayfanın adresi ve zaman damgası da kayda geçer. Bu, ileride bir itiraz gelirse iznin ne zaman ve nereden verildiğini gösterebilmeniz için gerekli olan asgari kanıt setidir.

Uygulamada dikkat edilmesi gereken üç nokta var. Birincisi, onay kutuları varsayılan olarak işaretsiz gelmelidir; modül bunu böyle uygular, siz de metni değiştirirken bu davranışı bozmayın. İkincisi, ticari ileti onayı çarka katılmanın şartı hâline getirilmemelidir; kullanıcı ödülü izin vermeden de alabilmelidir. Üçüncüsü, topladığınız izinlerin İleti Yönetim Sistemi (İYS) tarafındaki yükümlülüğü ayrıca yerine getirilmelidir. İYS'ye kayıt, saklama ve gönderim öncesi ret kontrolü süreçleri mevzuatla belirlenmiştir; güncel süre ve usul için iys.org.tr üzerindeki resmî yönlendirmeleri esas alın. Modül izni toplar ve kanıtıyla saklar; İYS'ye yükleme ve gönderim öncesi kontrol sizin e-posta veya SMS gönderim altyapınızın sorumluluğundadır.

Son olarak silme talebi: kullanıcı verisinin silinmesini isterse ilgili katılım kaydını kaldırmanız gerekir. Bu kaydın kaldırılması, kullanıcının o e-posta ile tekrar çark çevirebilmesi anlamına gelir; bu, tercih edilen davranış olmasa da yasal yükümlülük önce gelir.

Sayfa hızına etkisi

Pop-up modülleri hız konusunda kötü bir üne sahiptir ve bunun sebebi genellikle şudur: birçok araç jQuery gibi bir kütüphaneyi, ardından kendi paketini, ardından bir font dosyasını yükler ve bunların hepsi ana iş parçacığında olur. STools Çarkıfelek modülünün ölçülebilir profili şöyle:

  • Harici bağımlılık yok. Script saf JavaScript ile yazılmıştır; jQuery, animasyon kütüphanesi veya çizim kütüphanesi yüklemez. Çark, tarayıcının yerleşik canvas API'siyle çizilir.
  • Dosya boyutu: Sıkıştırılmamış hâlde JavaScript yaklaşık 23 KB, stil dosyası yaklaşık 10 KB. Sunucu gzip veya brotli ile servis ettiğinde bu boyutlar önemli ölçüde düşer.
  • Stil dosyası gecikmeli yüklenir. CSS sayfanın head etiketine HTML'in içinde değil, script çalıştıktan sonra JavaScript ile eklenir. Bu, ilk boyamayı engelleyen (render-blocking) bir istek oluşturmaz.
  • Çark yalnızca pop-up açılırken çizilir. Canvas elemanı sayfa yüklenirken değil, pop-up oluşturulduğu anda yaratılır. Kullanıcı pop-up'ı hiç açmazsa çizim maliyeti hiç oluşmaz.
  • Düzen kayması (CLS) üretmez. Hem modal hem de köşe butonu position: fixed ile konumlanır ve sayfa akışının dışındadır; açıldıklarında mevcut içeriği itmezler.
  • Animasyon requestAnimationFrame ile çalışır. Sabit aralıklı zamanlayıcı yerine tarayıcının kare döngüsü kullanılır; sekme arka plana alındığında animasyon boşa CPU harcamaz.

Buna rağmen, script etiketini sayfaya eklerken defer veya async kullanmanız önerilir. Modül zaten DOMContentLoaded beklediği için erken çalıştırılmasının bir faydası yoktur. Shopify tarafında tema dosyalarına script eklerken hız etkisini toplu olarak değerlendirmek isterseniz Shopify mağaza hızlandırma rehberi bu konuyu ayrıntılı ele alıyor.

A/B test ve ölçümleme

Dürüst olmak gerekirse modül, ziyaretçileri kendiliğinden iki gruba bölen yerleşik bir A/B test motoru içermez. Bu, doğru kurgulandığında engel değil: çarkıfelek gibi düşük frekanslı bir etkileşimde eş zamanlı bölünmüş test zaten güvenilir sonuç vermek için çok uzun süre gerektirir. Bunun yerine dönemsel test yöntemi işinizi görür.

Yöntem şu: tek bir değişkeni değiştirin, iki eşit ve karşılaştırılabilir dönem çalıştırın. Hafta içi ile hafta sonu dengesi bozulmasın diye dönemleri tam hafta katı seçin ve kampanya dönemlerini test dönemi olarak kullanmayın. Katılımlar zaman damgasıyla saklandığı için dönemleri sonradan ayırmak kolaydır. Test etmeye değer değişkenler, etki büyüklüğüne göre:

  1. Açılma gecikmesi. 3 saniye ile 8 saniye arasındaki fark, ödül setindeki değişikliklerden daha büyük etki yaratır.
  2. Başlık metni. Ödülü mü yoksa oyunu mu vurguladığınız (ör. hediyeni kazan ile çarkı çevir arasındaki fark) katılım oranını doğrudan etkiler.
  3. Dilim sayısı ve en yüksek ödül. 6 dilim ile 8 dilim, ya da vitrindeki en yüksek dilimin %20 mi %30 mu olduğu.
  4. Telefon alanının varlığı. Telefon zorunlu değildir; kullanıcıların ne kadarının yine de doldurduğunu ölçmek WhatsApp tarafındaki kampanyalar için değerli bir veridir.

Ölçeceğiniz metrikler ikiye ayrılır. Modülün kendi kayıtlarından çıkanlar: toplam katılım sayısı, hangi sayfalardan katılındığı, dilim bazında dağılımın beklenen ağırlıklara uyup uymadığı, ticari ileti onay oranı ve telefon doldurma oranı. Altyapı tarafından çıkanlar: dağıtılan kupon kodlarının kaç siparişte kullanıldığı, bu siparişlerin ortalama sepet tutarı ve kupon kullanan müşterilerin tekrar satın alma oranı.

Asıl bakmanız gereken sayı ikinci gruptadır. Bin katılım toplayıp hiç kupon kullandırmayan bir çark, yalnızca liste büyütmüş olur; bu da değerlidir ama gelir yaratmaz. Kupon kullanım oranınız düşükse sorun genellikle ödül seviyesinde değil, kuponun hatırlatılmamasındadır. Bu noktada e-posta veya WhatsApp ile yapılan hatırlatma akışları devreye girer; terk edilen sepet kurtarma yaklaşımı burada da birebir çalışır.

Hangi altyapılarda çalışır?

Modül dört altyapıda aynı ortak script ile çalışır; platforma özel ayrı bir sürüm yoktur, tek fark scriptin panele nereden ekleneceğidir.

AltyapıScript nereye eklenirNot
IkasPanelin özel script / tema kodu alanıOrtak spin-wheel scripti
ShopifyTema dosyası veya özel script alanıOrtak spin-wheel scripti
TicimaxYönetim panelindeki özel kod alanıOrtak spin-wheel scripti
T-SoftPanelin özel kod alanıOrtak spin-wheel scripti

Yapılandırma, scripte parametre olarak gömülmez. Script açıldığında ayarları API'den ister ve sunucu, isteğin geldiği alan adını (referer) kullanarak hangi mağazanın ayarlarının döneceğine karar verir. Bu yüzden aynı script etiketi her müşteride birebir aynıdır; mağaza kimliği, anahtar veya token gömmeniz gerekmez. Aynı kontrol, modülün o mağaza için aktif olup olmadığını da doğrular: modül aktif değilse API isteği reddedilir ve çark hiç görünmez.

Hangi altyapıyı kullanacağınıza henüz karar vermediyseniz Ikas mı Shopify mı karşılaştırması modül uyumluluğu tarafında da yol gösterir.

Sık yapılan hatalar

  • Herkesi kazandırmak ama hepsine aynı şeyi vermek. Sekiz dilimin sekizi de %10 indirimse oyun bitmiştir; kullanıcı ikinci ziyaretinde bunu fark eder ve güven kaybedersiniz.
  • Kazanılamayan dilim koymak. Ağırlığı sıfıra yakın bir büyük ödül, katılım artırmaz; sadece hiç dağıtılmayan bir dilim yaratır. Vitrindeki en yüksek ödül gerçekten kazanılabilir olmalı.
  • Kupon kodunu altyapıda oluşturmayı unutmak. Dilime INDIRIM30 yazıp bu kodu mağazada tanımlamazsanız kullanıcı kazandığı kuponu ödeme adımında kullanamaz. Bu, doğrudan müşteri hizmetleri yüküne dönüşür.
  • Kupon süresi ile çerez süresini uyumsuz bırakmak. 30 günlük çerezle 7 günlük kupon, iki hafta sonra köşe butonuna basan kullanıcıya ölü bir kod gösterir.
  • Ürün detay ve ödeme sayfalarında da göstermek. Satın alma niyeti oluşmuş kullanıcıyı çark ekranına çekmek, dönüşümü artırmaz; süreci böler.
  • Ticari ileti onayını zorunlu yapmak. Hem hukuken sorunlu hem de katılımı düşürür.
  • Toplanan listeyi hiç kullanmamak. En sık görülen hata bu. Liste, ilk gönderim yapılana kadar hiçbir işe yaramaz.

Çarkıfeleği tek başına bir dönüşüm aracı değil, veri toplama katmanı olarak düşünmek en sağlıklısı. Topladığı e-posta ve telefon, sepet hatırlatma ve kampanya duyurusu akışlarının girdisidir. Aynı mantıkla site içi deneyimin diğer parçalarını da güçlendirmek isterseniz site içi arama optimizasyonu ve ürün yorumlarının dönüşüme etkisi yazıları, çarkın topladığı trafiği satışa çevirme tarafında tamamlayıcı olur.