Skip to content
ENTERPRISE Enterprise technology · Engineered for your business Enterprise Software · Managed Servers · Business E-mail · LiteSpeed + CloudLinux · Imunify360 Security · cPanel Control · Network profile up to 3 Gbps on eligible plans
AIOR

Cart Abandonment Rate: How to Measure, Diagnose and Recover Sales

Aior

Administrator

Staff member
Joined
Apr 2, 2023
Messages
929
Reaction score
2
Points
18
Age
41
Location
Turkey
Website
aior.com
Thread owner

Ürünü sepete ekleyip ödeme yapmadan ayrılan ziyaretçi, e-ticaretteki en pahalı kayıplardan biridir: Onu siteye getirmenin maliyeti çoktan ödenmiştir; üstelik ziyaretçi ürünü bulmuş ve satın alma niyetini göstermiştir. Bu rehberde sepet terk oranını (cart abandonment rate) doğru paydayla nasıl hesaplayacağınızı, GA4 ve sipariş veritabanınızla nasıl ölçeceğinizi, terkin nedenlerini nasıl teşhis edeceğinizi ve hatırlatma akışlarını Türkiye'deki ticari elektronik ileti kurallarına uygun biçimde nasıl kuracağınızı anlatıyoruz. Odak noktamız ölçüm, teşhis ve geri kazanım; ödeme adımı tasarımına yalnızca öncelikli düzeltmeler düzeyinde değiniyoruz.

Kıyas noktası: Baymard Institute'un derlediği 50 çalışmanın ortalaması %70,22'dir (listenin son güncellenme tarihi 22 Eylül 2025; 27 Ekim 2026'da kontrol edildi). Bu sayı bir hedef değil, 2006 ile 2025 arasında farklı sektörlerde ve farklı tanımlarla yapılmış ölçümlerin ortalamasıdır; listedeki değerler %55 ile %84,27 arasında değişir. Sizin oranınız trafik kaynaklarınıza, ürün fiyatına, mobil trafik payınıza ve "sepet"i nasıl tanımladığınıza bağlıdır. Anlamlı olan, kendi oranınızın segmentlere göre zaman içindeki değişimidir.

1. Sepet terk oranı nasıl hesaplanır: tanımlar ve formül​

Üç farklı terk türü vardır ve her biri farklı bir sorunu işaret eder:
  • Sepet terki (cart abandonment): En az bir ürün eklenmiş ama siparişe dönüşmemiş sepet. Fiyat karşılaştırma ve "sonra bakarım" davranışını da içerdiği için oran doğal olarak yüksektir.
  • Ödeme adımında terk (checkout abandonment): Ödeme sürecini başlatmış ama tamamlamamış ziyaretçi. Niyet burada daha güçlüdür; yüksek bir oran çoğu zaman beklenmedik maliyetlere, zorunlu üyeliğe, form sorunlarına ya da ödeme hatalarına işaret eder.
  • Gezinme terki (browse abandonment): Ürün sayfasını görüntüleyip sepete bir şey eklemeden ayrılmak. Oran olarak raporlanmaktan çok hatırlatma senaryolarında kullanılır.
Temel formüller:
Code:
Sepet terk oranı           = 1 − (tamamlanan sipariş ÷ oluşturulan sepet)
Ödeme adımında terk oranı  = 1 − (tamamlanan sipariş ÷ başlatılan ödeme)
Formül basittir; sonucu belirleyen, paydanın ve zaman penceresinin nasıl seçildiğidir:
  • Boş sepetleri saymayın. Bazı altyapılar ziyaretçi siteye girer girmez boş bir sepet kaydı açar. Payda yalnızca en az bir ürün içeren sepetlerden oluşmalıdır.
  • Bot ve test trafiğini ayıklayın. Fiyat takip botları ve ekibinizin testleri sepet sayısını şişirir.
  • Sepet birleştirmeyi kaydedin. Misafir sepeti, kullanıcı giriş yaptığında hesabındaki sepetle birleşiyorsa aynı niyet iki kez sayılabilir.
  • Sepetten gelmeyen siparişleri pay tarafına katmayın. Telefonla, pazaryerinden ya da yönetim panelinden girilen siparişler terk oranını olduğundan düşük gösterir.
  • Kohort ve sabit dönüşüm penceresi kullanın. "Bu ayın siparişleri ÷ bu ayın sepetleri" hesabı, ay sonunda açılıp ertesi ay tamamlanan sepetleri yanlış döneme yazar. Belirli bir haftada açılan sepetleri alın, açılıştan sonraki sabit bir süre (örneğin 7 gün) içinde siparişe dönüşenleri sayın ve penceresi dolmamış kohortları rapora almayın.
Varsayımsal bir örnek: Bir haftada en az bir ürün içeren 4.000 sepet açılmış, bunların 1.600'ünde ödeme başlatılmış ve 7 gün içinde 1.040 sipariş oluşmuş olsun. Sepet terk oranı 1 − 1.040 ÷ 4.000 = %74, ödeme adımında terk oranı 1 − 1.040 ÷ 1.600 = %35 olur. İkinci sayı, düzeltilebilir sorunların nerede yoğunlaştığını daha iyi gösterir.

Veritabanından kohort bazlı hesap (tablo ve durum adları örnektir, kendi şemanıza uyarlayın):
SQL:
-- MySQL 8: haftalık kohortlar; sepet açıldıktan sonraki 7 gün içinde sipariş var mı?
SELECT hafta,
       COUNT(*)                                      AS sepet,
       SUM(donustu)                                  AS siparis,
       ROUND(100 * (1 - SUM(donustu) / COUNT(*)), 1) AS terk_orani_yuzde
FROM (
    SELECT YEARWEEK(c.created_at, 3) AS hafta,       -- ISO 8601 haftası
           EXISTS (SELECT 1 FROM orders o
                   WHERE o.cart_id = c.id
                     AND o.status IN ('paid', 'shipped', 'delivered')
                     AND o.created_at < c.created_at + INTERVAL 7 DAY) AS donustu
    FROM carts c
    WHERE EXISTS (SELECT 1 FROM cart_items ci WHERE ci.cart_id = c.id)  -- boş sepet yok
      AND c.is_bot = 0
      AND c.created_at >= '2026-09-07'               -- tam haftalar (pazartesi)
      AND c.created_at <  '2026-10-19'               -- son kohortun 7 günü dolmuş olmalı
) AS k
GROUP BY hafta
ORDER BY hafta;
Aynı sorguyu cihaz türü, trafik kaynağı ve yeni/eski müşteri kırılımıyla çalıştırmak, tek bir ortalamanın sakladığı farkları ortaya çıkarır. Ödeme adımında terk için payda olarak ödeme sayfasına ulaşmış sepetleri kullanın.

2. GA4 ödeme hunisi ile ölçüm ve mağaza verisiyle mutabakat​

GA4'te e-ticaret olayları kendiliğinden toplanmaz; sitenize ya da Google Tag Manager (GTM) kapsayıcınıza eklenmeleri gerekir (Shopify gibi bazı altyapılar bir kısmını kendi pikseliyle gönderir). Huni için gereken olaylar:
OlayNe zaman gönderilirÖnemli parametreler
add_to_cartÜrün sepete eklendiğindecurrency, value, items
view_cartSepet sayfası açıldığındacurrency, value, items
begin_checkoutÖdeme sürecinin ilk adımı yüklendiğindecurrency, value, coupon, items
add_shipping_infoTeslimat bilgisi gönderildiğindeshipping_tier, currency, value, items
add_payment_infoÖdeme bilgisi gönderildiğindepayment_type, currency, value, items
purchaseSipariş kesinleştiğindetransaction_id (zorunlu), value, shipping, tax, items
Google'ın olay referansına göre value, items dizisindeki price × quantity toplamıdır; kargo ve vergi dahil edilmez. value gönderiyorsanız currency de gönderilmelidir. purchase olayındaki transaction_id aynı siparişin iki kez sayılmasını önler ve mağaza veritabanıyla eşleştirmenin anahtarıdır; kendi sipariş numaranızı kullanın. GTM için begin_checkout örneği (yapı ve parametre adları Google'ın referansındaki örnekle aynıdır):
Code:
// Ödeme sayfasının ilk adımı yüklendiğinde, ödeme oturumu başına bir kez
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null }); // önceki ecommerce nesnesini temizle
window.dataLayer.push({
  event: "begin_checkout",
  ecommerce: {
    currency: "TRY",
    value: 1849.80,            // price × quantity toplamı; kargo ve vergi hariç
    items: [
      {
        item_id: "TRM-750-SYH",
        item_name: "Çelik Termos 750 ml",
        item_brand: "Örnek Marka",
        item_category: "Mutfak",
        item_variant: "Siyah",
        price: 649.90,
        quantity: 2
      },
      {
        item_id: "KUP-350-BEJ",
        item_name: "Seyahat Kupası 350 ml",
        item_category: "Mutfak",
        price: 550.00,
        quantity: 1
      }
    ]
  }
});
Bu olaylara e-posta, telefon ya da ad gibi kişiyi tanımlayan bilgi (PII) eklemeyin; Google Analytics'e PII göndermek Google'ın politikalarına aykırıdır. Kurulumu hata ayıklama modunda DebugView ile anlık doğrulayın; verinin raporlara ve keşiflere düşmesi 24 saati bulabilir.

Huni keşfi (funnel exploration): Keşfet (Explore) bölümünde dönüşüm hunisi keşfi şablonunu açın ve adımları begin_checkout, add_shipping_info, add_payment_info ve purchase olarak tanımlayın; sepet terkini de görmek için başa add_to_cart ekleyin. Dikkat edilecekler:
  • Kapalı hunide kullanıcı ilk adımdan girmek zorundadır; açık hunide ("Make open funnel") herhangi bir adımdan girebilir. Sepete bir oturumda ekleyip başka bir oturumda doğrudan ödemeye gelen kullanıcıyı görmek için açık huniyi de inceleyin.
  • Huni sepetleri değil kullanıcıları sayar. GA4'ten çıkan terk oranı kullanıcı bazlıdır; veritabanınızdaki sepet bazlı oranla birebir aynı olmaz.
  • Cihaz kategorisi kırılımı (breakdown) mobil ile masaüstü arasındaki farkı gösterir. GA4 kırılımda kullanıcıyı, kendisi için geçerli olan ilk kırılım değerine atar; bu yüzden ödeme yöntemi gibi yalnızca son adımlarda ortaya çıkan değerlerin analizini ödeme denemeleri kaydınızdan yapmak daha güvenilirdir.
  • "Show elapsed time" adımlar arasındaki ortalama süreyi, "Next action" adımı bırakanların sonraki hareketini gösterir. Bir hunide en fazla 10 adım ve 4 segment kullanılabilir.
Sık yapılan hesap hatası: Raporlardaki "Add to carts" metriği sepet sayısı değil, add_to_cart olayının kaç kez tetiklendiğidir; üç ürünü ayrı ayrı ekleyen kullanıcı üç kez sayılır. "1 − satın alma ÷ sepete ekleme" hesabı bu yüzden terki olduğundan yüksek gösterir. Aynı sorun, sayfa yenilendikçe yeniden tetiklenen begin_checkout için de geçerlidir ("Checkouts" metriği olay sayısıdır); bu olayı ödeme oturumu başına bir kez gönderin.

GA4 ile mağaza neden tutmaz? Çerez rızası vermeyen kullanıcılar (izin modunun temel kurulumunda hiç görünmez, gelişmiş kurulumunda yalnızca çerezsiz pinglerle temsil edilir ve boşluk modellemeyle doldurulabilir), reklam engelleyiciler, bankanın 3D Secure sayfasından mağazaya dönmeyen ve teşekkür sayfası yüklenmeyen ödemeler, cihaz değiştiren müşteriler ve saat dilimi farkları GA4 sayılarını veritabanından ayırır. Pratik kural: Sipariş ve sepet sayısında kaynak veritabanıdır; GA4'ü adımlar arası oranlar ve davranış için kullanın. Her hafta "GA4 satın alma ÷ veritabanı siparişi" oranını kapsama oranı olarak izleyin; bu oran aniden düşerse sorun dönüşümde değil ölçümdedir. Sunucu tarafı gönderim, rıza vermemiş kullanıcıyı ölçmenin yolu değildir. Rızaya bağlı ölçüm, sunucu tarafı etiketleme ve birinci taraf veri seçenekleri için post-cookie dünyasında web analytics: GA4, server-side ve first-party konumuza bakabilirsiniz.

3. Sepeti terk etme nedenleri ve teşhis​

İyi bir başlangıç noktası, Baymard'ın ABD'li çevrim içi alışverişçilerle yaptığı ve 2026'da güncellediği ankettir. Katılımcıların %42'si son üç ay içinde bir sepeti "sadece bakıyordum / almaya hazır değildim" diyerek bırakmış. Baymard bu grubu ayırdıktan sonra kalan nedenleri şöyle sıralıyor (birden fazla neden işaretlenebildiği için toplam 100'ü aşar):
NedenOran
Ek maliyetler çok yüksek (kargo, vergi, ücretler)%40
Teslimat çok yavaş%20
Kart bilgilerim konusunda siteye güvenmedim%19
Site hesap oluşturmamı istedi%18
Ödeme süreci çok uzun / karmaşık%17
Sitede hata oluştu / site çöktü%17
İade koşulları tatmin edici değildi%13
Toplam tutarı baştan göremedim / hesaplayamadım%12
Kredi kartım reddedildi%10
Yeterli ödeme yöntemi yoktu%9
Bu bir ABD verisidir; Türkiye'de taksit, kapıda ödeme, havale/EFT ve ücretsiz kargo eşiği gibi alışkanlıklar dağılımı değiştirebilir. Kendi sitenizde doğrulamak için şu kontrolleri yapın:
  • Beklenmedik maliyet: Huni en çok hangi adımda kayıp veriyor? Kargo ücreti ilk kez ödeme adımında görünüyorsa kayıp genellikle orada toplanır. 6563 sayılı Kanun'un 4. maddesi, siparişin onaylanması aşamasında ve ödeme bilgileri girilmeden önce ödenecek toplam bedel dahil sözleşme şartlarının açıkça görülmesini zaten ister; iyi uygulama bu bilgiyi sepete kadar öne çekmektir.
  • Zorunlu üyelik: Misafir olarak devam etme seçeneği yoksa ya da giriş ekranında gözden kaçıyorsa, giriş ekranındaki çıkış oranına bakın.
  • Teslimat belirsizliği: "2-5 iş günü" ifadesi kullanıcıya hesap yaptırır. Tahmini teslim tarihi gösterip göstermediğinizi ve bu tarihin ne kadar tuttuğunu kontrol edin.
  • Ödeme hataları: Ödeme kuruluşunuzun ya da bankanızın sanal POS'unun döndürdüğü hata kodlarını kaydedin ve sağlayıcının belgesine göre üç gruba ayırın: müşterinin düzeltebileceği hatalar (yanlış CVC, son kullanma tarihi, yetersiz limit, internet alışverişine kapalı kart), yeniden denenebilecek teknik hatalar (zaman aşımı, bankaya ulaşılamaması) ve kesin retler (sahtekârlık şüphesi, kayıp ya da çalıntı kart). 3D Secure adımını ayrıca izleyin: Doğrulama sayfasına gidip dönmeyen kullanıcıların oranı kendi başına bir göstergedir.
  • 3D Secure dönüşünde oturum kaybı: Bilinen bir teknik tuzak, bankanın doğrulama sayfasının mağazaya POST ile dönmesidir. SameSite=Lax ya da Strict olarak işaretlenmiş oturum çerezi bu siteler arası POST isteğinde tarayıcı tarafından gönderilmez; dönüş adresi oturuma güveniyorsa sepet "kaybolur" ve ödeme yarım kalır. Dönüşü oturum çerezine değil, ödeme sağlayıcısının işlem kimliğine ve imza doğrulamasına dayandırın.
  • Güven: Kanun'un 3. maddesinin istediği tanıtıcı bilgilerin (unvan, adres, iletişim gibi) kolay ulaşılır olması, tanınan ödeme kuruluşları, açık iade koşulları ve ödeme sayfasında gereksiz üçüncü taraf betiklerinin bulunmaması güveni etkiler.
  • Hata ve hız: Ödeme sayfalarındaki JavaScript hatalarını ve sunucu yanıt sürelerini ayrı izleyin; Core Web Vitals değerlerini ödeme şablonları için ayrıca raporlayın. Form doğrulama hatalarını (hangi alan, hangi hata) olay olarak kaydedin.
Nicel veriyi nitel bilgiyle tamamlayın: ödeme sayfasından çıkışta tek soruluk bir anket ("Bugün sizi ne durdurdu?"), müşteri hizmetlerine gelen ödeme şikâyetleri ve küçük ölçekli kullanılabilirlik testleri. Oturum kaydı (session recording) ve ısı haritası araçlarını yalnızca rıza veren kullanıcılarda çalıştırın; kart, adres ve telefon alanlarını maskeleyin.

4. Sepet terk oranını düşürmek: öncelik sırasıyla düzeltmeler​

Ödeme adımının ayrıntılı tasarımını Checkout UX alt forumuna bırakıyoruz; burada etkisi yüksek, uygulaması görece kolay maddeleri sıralıyoruz:
  1. Toplam maliyeti erken gösterin: Kargo ücretini ve ücretsiz kargo eşiğine kalan tutarı ürün sayfasında ve sepette gösterin; sepette il ya da posta kodu seçimiyle kargo hesaplatın. Ödeme adımında yeni bir kalem belirmemelidir.
  2. Misafir ödeme: Üye olmadan devam etme seçeneğini en görünür seçenek yapın ve hesap oluşturmayı sipariş onayı adımına bırakın; Baymard bu iki konuda ayrı yönergeler yayımlıyor.
  3. Teslim tarihi: Kargo hızı ("1-3 iş günü") yerine tahmini teslim tarihi ("Perşembe kapınızda") gösterin; tabii tutabileceğiniz bir tarihse.
  4. Ödeme seçenekleri: Kart, taksit, havale/EFT, kapıda ödeme ve dijital cüzdan seçeneklerinden hedef kitlenizin beklediklerini sunun; taksit tablosunu ürün sayfasında gösterin. Taksit sayısı üst sınırları ürün kategorisine göre düzenlemelerle belirlenir ve değişebilir; tabloyu elle yazmak yerine ödeme kuruluşunuzdan dinamik alın.
  5. Anlaşılır hata mesajları: Hatanın hangi alanda olduğunu ve nasıl düzeltileceğini alanın yanında söyleyin; hatadan sonra girilmiş bilgileri silmeyin. Ödeme reddinde "işlem başarısız" yerine hatanın grubuna uygun bir yönlendirme verin, örneğin "Kartınız internet alışverişine kapalı olabilir; bankanızın uygulamasından açıp tekrar deneyin." Kanun, veri girişindeki hataların belirlenmesi ve düzeltilmesine yarayan teknik araçlar hakkında bilgi verilmesini de ister (m.3/1-ç).
  6. Formu kısaltın: Baymard'ın ölçümüne göre ABD'deki ortalama ödeme akışı varsayılan olarak 23,48 form öğesi gösteriyor; testlerine göre 12-14 öğe yetebiliyor. Fatura adresini teslimat adresiyle aynı varsayın, vergi dairesi ve vergi numarası alanlarını yalnızca kurumsal fatura seçildiğinde gösterin.

5. Terk edilen sepeti geri kazanma: e-posta, SMS, push ve WhatsApp​

Kanal seçimi​

KanalÖn koşulGüçlü yanıDikkat edilecekler
E-postaE-posta adresi ve e-posta kanalı için geçerli onayDüşük maliyet; sepet içeriğini eksiksiz gösterirGönderim servisi sizin yerinize İYS kontrolü yapmak zorunda değildir; onay filtresi sizin sisteminizde olmalı
SMSTelefon numarası ve mesaj kanalı için geçerli onayHızlı okunurİleti başına maliyet; kısa metinde MERSİS numarası ve ret yolu bulunmalı
Web push / uygulama bildirimiTarayıcının ya da işletim sisteminin bildirim izniE-posta adresi gerektirmezİzin isteğinin zamanlaması; ticari içerikli bildirimin hukuki niteliğini hukukçunuza sorun
WhatsAppWhatsApp Business Platform ve alıcının WhatsApp için verdiği onay (Meta politikası)Yüksek görünürlük; müşteri yanıt verebilirİhtiyatlı yorumla mesaj kanalı onayı da gerekir; işletmenin başlattığı iletiler onaylı şablon ister ve ücretlendirilir
Meta'nın WhatsApp Business Messaging Policy metni, bir kişiyle ancak telefon numarasını size vermiş ve WhatsApp üzerinden ileti almaya onay vermişse iletişim kurabileceğinizi ve her türlü ileti almama (opt-out) talebine uymanız gerektiğini açıkça yazar.

Zamanlama ve içerik​

Aşağıdaki sıra kanıtlanmış bir kural değil, kendi verinizle test edeceğiniz bir başlangıç noktasıdır:
  1. Son sepet hareketinden 30-60 dakika sonra: Hizmet tonunda, indirimsiz bir hatırlatma. Sepetteki ürünler ve güncel fiyatları, toplam tutar, tek tıkla sepete dönüş düğmesi, kargo ve iade özeti, yardım kanalı.
  2. Yaklaşık 24 saat sonra: Tereddütleri yanıtlayan bir ileti: teslim tarihi, taksit seçenekleri, iade koşulları, ürün yorumları.
  3. İsteğe bağlı, 48-72 saat sonra: Stok ya da fiyat değişikliği bildirimi veya kontrol grubuyla test edilmiş bir teşvik.
Durdurma koşulları: herhangi bir kanaldan verilmiş sipariş, sepetin boşaltılması, ret bildirimi ve ürünün tükenmesi. Aynı kişiye belirli bir dönemde (örneğin 14 gün) tek bir akış gönderin, SMS'i gece saatlerinde göndermeyin. Konu satırı ne olduğunu açıkça söylesin ("Sepetinizdeki ürünler"); yanıltıcı aciliyet ("son 5 dakika!") güveni zedeler.

Aday sepetleri bulan sorgu​

Özel yazılımlı bir mağazada hatırlatma işi, birkaç dakikada bir çalışan bir zamanlanmış görevle (cron ya da kuyruk işçisi) yürütülebilir. Onay filtresini ve kontrol grubu atamasını sorgunun içine koymak, sonradan unutulmalarını önler:
SQL:
-- MySQL 8: 60 dakikadır hareketsiz, siparişe dönüşmemiş, e-posta onayı olan sepetler
SELECT c.id AS cart_id,
       c.email,
       SUM(ci.quantity * ci.unit_price) AS sepet_tutari,
       CASE WHEN MOD(CRC32(LOWER(c.email)), 100) < 10
            THEN 'kontrol' ELSE 'gonder' END AS grup      -- %10 kontrol grubu
FROM carts c
JOIN cart_items ci        ON ci.cart_id = c.id
JOIN marketing_consents m ON m.email   = c.email
                         AND m.channel = 'EPOSTA'
                         AND m.status  = 'ONAY'            -- İYS ile senkron güncel durum
WHERE c.email IS NOT NULL
  AND c.updated_at <  NOW() - INTERVAL 60 MINUTE
  AND c.updated_at >= NOW() - INTERVAL 3 DAY
  AND NOT EXISTS (SELECT 1 FROM orders o WHERE o.cart_id = c.id)
  AND NOT EXISTS (SELECT 1 FROM orders o2                  -- başka sepetten sipariş var mı?
                  WHERE o2.email = c.email
                    AND o2.created_at >= c.created_at)
  AND NOT EXISTS (SELECT 1 FROM cart_reminders r           -- bu adım işlendi mi?
                  WHERE r.cart_id = c.id AND r.step = 1)
GROUP BY c.id, c.email, c.updated_at
HAVING sepet_tutari > 0
ORDER BY c.updated_at
LIMIT 500;
İki grubu da cart_reminders tablosuna yazın; ileti yalnızca "gonder" grubuna gider. (cart_id, step) üzerindeki tekil indeks, aynı adımın iki kez gönderilmesini engeller. Sonraki adımlar için aynı mantığı bir önceki adımın gönderim zamanına göre kurun. Göndermeden hemen önce onayı ve sipariş durumunu yeniden kontrol edin; sorgu ile gönderim arasında müşteri sipariş vermiş ya da ret bildirmiş olabilir.

İmzalı ve süreli sepete dönüş bağlantısı​

Sepete dönüş bağlantısı (cart-restore link) sepeti geri yüklemeli, kullanıcıya oturum açtırmamalıdır; e-posta yönlendirilebilir ya da başkasının eline geçebilir. Shopify da kendi kurtarma bağlantısı için, bağlantıya sahip herkesin ödemeye devam edebileceğini belirtir. İmzalı ve süreli bir bağlantı örneği:
PHP:
<?php
// Sepete dönüş bağlantısı: yalnızca sepeti geri yükler, oturum açmaz.
const RESTORE_TTL = 72 * 3600; // 72 saat

function b64url(string $raw): string
{
    return rtrim(strtr(base64_encode($raw), '+/', '-_'), '=');
}

function restore_link(int $cartId, int $step, string $key): string
{
    $exp = time() + RESTORE_TTL;
    $sig = b64url(hash_hmac('sha256', "$cartId.$step.$exp", $key, true));
    return "https://magaza.example/sepet/geri-yukle?c=$cartId&s=$step&e=$exp&sig=$sig";
}

function verify_restore(array $q, string $key): ?int
{
    foreach (['c', 's', 'e', 'sig'] as $k) {
        if (!isset($q[$k]) || !is_string($q[$k])) {
            return null;
        }
    }
    if (!ctype_digit($q['c']) || !ctype_digit($q['s']) || !ctype_digit($q['e'])) {
        return null;
    }
    $expected = b64url(hash_hmac('sha256', "{$q['c']}.{$q['s']}.{$q['e']}", $key, true));
    if (!hash_equals($expected, $q['sig']) || (int) $q['e'] < time()) {
        return null; // geçersiz ya da süresi dolmuş: bilgilendirme sayfasına yönlendirin
    }
    return (int) $q['c'];
}

// Kullanım: $cartId = verify_restore($_GET, getenv('CART_LINK_KEY'));
Anahtarı ortam değişkeninde tutun; anahtarı değiştirirken eskisini bağlantı ömrü boyunca kabul etmeye devam edin. Bağlantıya e-posta adresi gibi kişisel veri koymayın; adres çubuğundaki veri analitik araçlarına ve yönlendiren (referrer) başlığına sızabilir. Süresi dolmuş bağlantıda boş bir sepet yerine kısa bir açıklama gösterin; sepet zaten siparişe dönmüşse sipariş durumu sayfasına yönlendirin. Ölçüm için bağlantıya utm_source=eposta&utm_medium=eposta&utm_campaign=sepet_hatirlatma gibi kişisel veri içermeyen parametreler ekleyin. Bağlantıdaki s parametresi hangi hatırlatmanın tıklandığını gösterir ve imzaya dahil olduğu için değiştirilemez.

Teşvikler ve kupon istismarı​

  • İlk iletide indirim vermek, sepeti bırakan herkese indirim vermek demektir. Müşteriler zamanla indirimi beklemek için sepeti bırakmayı öğrenebilir.
  • Herkese aynı kodu göndermek, kodun kupon paylaşım sitelerine düşmesine yol açar. Sepete ve e-posta adresine bağlı, tek kullanımlık ve kısa süreli kodlar üretin; asgari sepet tutarı ve indirimli ürünleri hariç tutma kuralı koyun; aynı kişiye belirli bir dönemde bir kez verin.
  • Marj eşiğini sepet bazında hesaplayın. Düşük marjlı sepetlerde indirim yerine ücretsiz kargo eşiğine kalan tutarı hatırlatmak gibi parasal olmayan teşvikleri deneyin.
  • Teşvikin gerçek etkisini yalnızca kontrol grubuyla ölçebilirsiniz (8. bölüm).

6. Türkiye'de hukuki çerçeve: ticari ileti onayı, İYS ve KVKK​

Bu bölüm genel bilgilendirme amaçlıdır, hukuki görüş değildir; akışınızı yayına almadan önce bir hukukçuya inceletin.
  • Önceden onay: 6563 sayılı Elektronik Ticaretin Düzenlenmesi Hakkında Kanun'un 6. maddesine göre ticari elektronik iletiler alıcılara ancak önceden onayları alınarak gönderilebilir; esnaf ve tacir alıcılar için ayrı bir istisna vardır. Ticari İletişim ve Ticari Elektronik İletiler Hakkında Yönetmelik'e göre ticari elektronik ileti göndermek isteyen gerçek ve tüzel kişiler İleti Yönetim Sistemi'ne (İYS) kaydolur ve İYS'de onayı bulunmayan alıcılara ticari elektronik ileti gönderilemez (m.5).
  • Onay gerektirmeyen bildirimler ve sınırı: Yönetmeliğin 6/2 maddesi; devam eden abonelik veya üyelik, tahsilat, borç hatırlatma, bilgi güncelleme, satın alma ve teslimat gibi durumlara ilişkin bildirimlerde önceden onay aranmayacağını, ancak bu bildirimlerde hiçbir mal veya hizmetin özendirilemeyeceğini ya da tanıtımının yapılamayacağını söyler.
  • Sepet hatırlatması hangi tarafta? Tamamlanmamış bir sepeti hatırlatıp satın almaya çağıran ileti ürünleri özendirdiği için bu istisnaya güvenmek risklidir. İhtiyatlı yaklaşım, sepet hatırlatmasını ticari elektronik ileti saymak ve yalnızca o kanal için İYS'de geçerli onayı olan alıcılara göndermektir. Sipariş onayı, ödeme hatası bildirimi ve kargo takibi gibi işlem iletilerini (transactional) ayrı bir akışta, pazarlama içeriği eklemeden gönderin.
  • Onayı doğru almak: Onay metninde olumlu irade beyanı önceden seçilmiş olamaz (m.7/8); onay, mal veya hizmetin teminine ön şart yapılamaz (m.7/9); onay istemek için alıcıya ticari elektronik ileti gönderilemez (m.7/4). İYS dışında alınan onaylar üç iş günü içinde İYS'ye kaydedilir, kaydedilmeyenler geçersiz sayılır (m.7/11-12). Elektronik ortamda alınan onayın bilgisi, ret imkânıyla birlikte 24 saat içinde alıcıya iletilir; İYS üzerinden alınan onaylarda bu kural uygulanmaz (m.7/3). Ödeme sayfasında e-posta ve SMS için ayrı ve işaretsiz kutular kullanın.
  • İletinin içeriği: E-postanın başlığında ya da içeriğinde tacirler için MERSİS numarası ve ticaret unvanı, SMS içeriğinde MERSİS numarası yer alır; iletide en az bir erişilebilir iletişim bilgisi bulunur. İletinin niteliği içerikten açıkça anlaşılmıyorsa "tanıtım", "kampanya" ya da "bilgilendirme" gibi bir ibare SMS'in başında, e-postanın konu satırında belirtilir (m.8/2-6). İletide indirim varsa bu açıkça yazılır; geçerlilik süresi ve koşulları ayrı bir URL ya da müşteri hizmetleri numarası gibi kolay ulaşılabilir bir yolla sunulur (m.8/7-8).
  • Ret: Her iletide, iletinin geldiği kanaldan kolay ve ücretsiz kullanılabilen bir ret yolu bulunur (m.9/3-4). Ret talebinden sonra gönderim üç iş günü içinde durdurulur (Kanun m.8/3, Yönetmelik m.10) ve size iletilen ret bildirimleri üç iş günü içinde İYS'ye bildirilir (m.9/6).
  • E-postaya özgü durum: SMS'te aracı hizmet sağlayıcı gönderimden önce İYS'de onay kontrolü yapmakla yükümlüdür (m.11/7); e-posta yoluyla gönderilen iletilerde bu aracı yükümlülükleri uygulanmaz (m.17/A). Yani e-posta servis sağlayıcınız sizin yerinize kontrol etmek zorunda değildir; onay filtresi sizin sisteminizde olmalıdır.
  • Kayıt ve ispat: Onay kayıtları onayın geçerliliğinin sona erdiği tarihten, diğer kayıtlar kayıt tarihinden itibaren üç yıl saklanır (m.13). İYS dışında alınan onaylarda ispat yükü hizmet sağlayıcıdadır (m.7/10).
  • İYS'de eşikler: iys.org.tr'deki bilgiye göre (27 Ekim 2026'da kontrol edildi) mevzuatın zorunlu kıldığı işlevler Temel Hizmetler kapsamında tüm hizmet sağlayıcılar için ücretsizdir ve web arayüzünden elle yapılır. API ile otomatik senkronizasyon isteyen ve onaylı adres sayısı 250.000'in altında olan hizmet sağlayıcılar bunu yetkili bir entegratör üzerinden yapar; adres sayısı (onaylı telefon ve e-posta sayılarından büyük olanı) 25.000'e kadar olan paketler ücretsiz, üstü yıllık ücretlidir. Güncel tabloyu iys.org.tr'den kontrol edin.
  • Yaptırım: Onaysız ileti Kanun'un 12. maddesine göre idari para cezası gerektirir; bir defada birden fazla kişiye gönderilmişse ceza on katına kadar artırılabilir. Tutarlar her yıl güncellendiği için güncel değeri kontrol edin.
KVKK: E-posta adresi, telefon ve sepet içeriği kişisel veridir; sepet hatırlatması için veri işlediğinizi aydınlatma metninde açıklayın (6698 sayılı KVKK m.10). Bazı eklentiler e-posta alanına yazılan adresi form gönderilmeden kaydeder; bunu yapıyorsanız aydınlatma metninde belirtin ve onayı olmayan bu adreslere hatırlatma göndermeyin. Kişisel Verileri Koruma Kurumu'nun Çerez Uygulamaları Hakkında Rehberi (Temmuz 2025) çerezleri amaçlarına göre ayırır: Sepet ve oturum gibi hizmet için kesinlikle gerekli çerezlerle reklam ve davranışsal izleme amaçlı çerezler aynı hukuki sebebe dayanmaz. Reklam amaçlı izleme ve oturum kaydı için açık rızaya dayanın, birinci taraf analitiğin durumunu rehber ve hukukçunuzla netleştirin. Yurt dışında barındırılan e-posta ya da SMS servisleri kullanıyorsanız KVKK'nın yurt dışına aktarım kurallarını (m.9) da kontrol edin.

AB'deki müşteriler: GDPR ile birlikte her ülkenin ePrivacy düzenlemesi uygulanır. Bazı ülkeler mevcut müşterilere benzer ürünler için "soft opt-in" istisnası tanısa da sepeti terk eden kişinin bu kapsama girip girmediği ülkeden ülkeye farklı yorumlanır. Çerçevelerin karşılaştırması için uyum çerçeveleri (ISO 27001, SOC 2, GDPR, KVKK) konumuza bakabilirsiniz.

7. Platform notları: Shopify, WooCommerce ve özel yazılım​

  • Shopify: Shopify bir ödemeyi, müşteri e-posta bilgisini verdikten sonra on dakikadan uzun süre tamamlanmadan kalırsa terk edilmiş (abandoned checkout) sayar. Otomatik e-postalar Shopify Messaging uygulamasının Automations bölümünden yönetilir; Orders > Abandoned checkouts listesinden tek bir müşteriye elle kurtarma bağlantısı da gönderilebilir. Shopify'ın 19 Mayıs 2026 tarihli duyurusuna göre aynı bölümde terk edilmiş sepet, terk edilmiş ödeme ve gezinme terki için hazır SMS şablonları da var. Türkiye'deki alıcılar için mağaza panelindeki pazarlama onayının İYS kaydının yerini tutmadığını varsayın ve onayları İYS ile senkronize edin.
  • WooCommerce: Misafir ödeme, WooCommerce > Ayarlar > Hesaplar ve Gizlilik (Accounts & Privacy) altındaki bir seçenekle açılır (güncel belgede "Enable guest checkout"; etiket sürüme göre değişebilir). Sepet hatırlatma genellikle bir eklentiyle kurulur: örneğin Woo'nun geliştirdiği ücretli AutomateWoo (belirlenen aralıklarla e-posta, Twilio hesabıyla SMS) ya da wordpress.org'daki Cart Abandonment Recovery for WooCommerce (Brainstorm Force). İkincisi, adresi ödeme sayfasında yazıldığı anda yakaladığını belirtir; bunu KVKK açısından değerlendirin. WooCommerce'in "Ödeme bekleniyor" (pending payment) ve "Başarısız" (failed) durumundaki siparişleri de ödeme adımında terk için değerli bir veri kaynağıdır; WooCommerce belgeleri bekleyen siparişleri ödenmemiş ya da terk edilmiş siparişler olarak tanımlar.
  • Özel yazılım: Ödeme sürecini e-posta alanıyla başlatın ve adım gönderildiğinde sepeti adresle ilişkilendirin; onay durumunu İYS ile senkron tutulan bir tablodan okuyun; gönderimleri (cart_id, step) anahtarıyla tekilleştirin; sipariş oluştuğunda bekleyen hatırlatma işlerini iptal eden bir olay (webhook) kullanın; ret bağlantısını kanal bazında işleyip İYS'ye bildirin; gönderim, tıklama ve sipariş kayıtlarını kontrol grubu bilgisiyle saklayın.
  • Türkiye'deki hazır altyapılar: Kiralık bir e-ticaret altyapısı kullanıyorsanız sağlayıcınıza üç soru sorun: Sepet hatırlatma modülü var mı, onayları İYS ile senkronize ediyor mu, kontrol grubu ayırmaya izin veriyor mu?

8. Geri kazanımı dürüst ölçmek: kontrol grubu (holdout)​

Hatırlatmadan sonra gelen her sipariş hatırlatma sayesinde gelmiş değildir. Sepeti bırakanların bir kısmı zaten geri dönecekti; son tıklama raporu bu siparişleri de kampanyaya yazar. Artımlı (incremental) etkiyi görmek için:
  1. Uygun sepetlerin sabit bir payını (örneğin %10) müşteri düzeyinde rastgele kontrol grubuna ayırın. Aynı kişi her zaman aynı grupta kalmalıdır; yukarıdaki sorguda e-posta adresinin hash'i bunu sağlar.
  2. Kontrol grubu hiçbir hatırlatma almaz, ama aynı uygunluk kurallarıyla kaydedilir.
  3. İki grubun dönüşümünü aynı pencerede (örneğin terkten sonraki 7 gün) ve aynı sipariş tanımıyla ölçün; sepet başına geliri de hesaplayın.
  4. Artımlı sipariş = (gönderilen grubun dönüşüm oranı − kontrol grubunun dönüşüm oranı) × gönderilen gruptaki sepet sayısı. Gelir için aynı hesabı sepet başına gelirle yapın; indirim tutarlarını ve SMS maliyetini düşün.
Varsayımsal bir örnek: Gönderilen grupta 9.000 sepetten 1.170'i (%13), kontrol grubunda 1.000 sepetten 90'ı (%9) siparişe dönmüş olsun. Son tıklama raporu 1.170 "kurtarılmış" sipariş gösterir; artımlı etki ise (0,13 − 0,09) × 9.000 = 360 siparişte kalır, yani raporlanan sayının yaklaşık üçte biri. Kontrol grubu küçük olduğunda belirsizlik büyüktür: Bu örnekte farkın %95 güven aralığı yaklaşık 2,1 ile 5,9 puan arasıdır, yani artımlı sipariş sayısı kabaca 190 ile 530 arasında bir yerdedir. Sonuçları tam haftalar üzerinden ve yeterli hacim biriktiğinde değerlendirin; teşvik denemelerini de aynı düzenle test edin.

9. Sık yapılan hatalar​

HataSonuçDoğrusu
Baymard ortalamasını hedef almakFarklı yılların ve tanımların ortalaması sizin için anlamsız bir çıta olurKendi oranınızı segmentlere ayırıp eğilimini izleyin
Boş sepetleri ve botları paydaya katmakTerk oranı yapay olarak yükselirEn az bir ürün içeren, bot dışı sepetleri sayın
"1 − satın alma ÷ sepete ekleme" hesabıSepete ekleme olayları sepet sayısı değildir; terk olduğundan yüksek görünürSepet kaydı ya da kullanıcı bazlı huni kullanın
GA4'ü sipariş sayısının kaynağı saymakRıza, engelleyici ve yönlendirme kayıpları sayıları düşürürSipariş sayısında veritabanı, adım oranlarında GA4; kapsama oranını izleyin
Onay filtresi olmadan hatırlatma göndermek6563 sayılı Kanun ve İYS kurallarına aykırılık, idari para cezası riskiSorguda İYS ile senkron onay tablosuna bağlanın; göndermeden önce yeniden kontrol edin
Herkese aynı indirim koduKod paylaşılır, müşteriler indirimi beklemeyi öğrenirTek kullanımlık, sepete bağlı, kısa süreli kod; önce teşviksiz ileti
Oturum açan sepet bağlantısıYönlendirilen bir e-postayla hesaba erişilebilirYalnızca sepeti geri yükleyen, imzalı ve süreli bağlantı
Sipariş verene hatırlatma gitmesiMüşteri rahatsız olur, ret oranı artarSipariş kontrolünü e-posta düzeyinde yapın; siparişte bekleyen işleri iptal edin
Kurtarılan geliri son tıklamayla ölçmekZaten gelecek siparişler kampanyaya yazılırKontrol grubuyla artımlı etkiyi ölçün
Ödeme hatalarını tek bir "başarısız" etiketinde toplamakHangi hatanın düzeltilebilir olduğu görünmezSağlayıcı kodlarını kaydedip gruplayın

Sık sorulan sorular​

Normal bir sepet terk oranı nedir?
Baymard'ın derlediği 50 çalışmanın ortalaması %70,22, değerlerin aralığı %55 ile %84,27'dir. Bu çalışmalar farklı yılları, sektörleri ve tanımları kapsadığı için sitenizle doğrudan kıyaslanamaz. Kendi oranınızı aynı tanımla, cihaz ve trafik kaynağına göre ayırarak izleyin ve değişimine bakın.

Hatırlatma iletilerinde indirim olmalı mı?
Varsayılan olarak hayır. İlk ileti hizmet amaçlı olsun; teşviki yalnızca kontrol grubuyla ölçebildiğiniz bir testte, tek kullanımlık ve süreli kodlarla deneyin. İndirim, zaten geri dönecek müşteriye de verilir ve doğrudan marjdan yer.

Kaç hatırlatma göndermeliyim?
Bir ile üç arası makul bir başlangıçtır; doğru sayıyı ölçüm belirler. Her ek iletinin artımlı siparişini ret ve şikâyet oranıyla birlikte değerlendirin; sipariş, ret ya da stok tükenmesi durumunda akışı durdurun.

Türkiye'de sepet hatırlatma e-postası için onay gerekir mi?
İhtiyatlı yorum, evet. Yönetmelik satın alma ve teslimat gibi durumlara ilişkin bildirimleri onaydan muaf tutar, ancak bu bildirimlerde mal veya hizmet özendirilemez; tamamlanmamış sepeti hatırlatan ileti bu sınırı aşabilir. Yalnızca o kanal için İYS'de geçerli onayı olan alıcılara gönderin ve akışınızı bir hukukçuya inceletin.

GA4 neden mağazamdan farklı sayı gösteriyor?
GA4 olayları ve kullanıcıları sayar, mağazanız ise sepetleri ve siparişleri. Rıza vermeyen kullanıcılar, reklam engelleyiciler, 3D Secure dönüşünde yüklenmeyen teşekkür sayfaları, cihaz değiştiren müşteriler ve saat dilimi farkları da eklenince fark kaçınılmazdır. Sipariş sayısında veritabanını esas alın, GA4'ü adım oranları için kullanın ve iki kaynak arasındaki kapsama oranını izleyin.

Misafir kullanıcının e-posta adresini nasıl alırım?
Misafir ödemenin ilk alanı e-posta olsun ve adım gönderildiğinde sepeti bu adresle ilişkilendirin. Pazarlama onayını aynı ekranda, işaretsiz ve ayrı bir kutuyla isteyin; onay yoksa adresi yalnızca siparişle ilgili işlem iletileri için kullanın.

Sonuç ve sonraki adımlar​

Sepet terk oranını düşürmenin yolu tek bir hatırlatma e-postasından değil, doğru ölçümden geçer: hangi adımda kaç sepet kaybettiğinizi bilmeden yapılan her düzeltme tahmindir, kontrol grubu olmadan ölçülen her "kurtarılan gelir" iyimser bir rakamdır. Sonraki adımlar:
  1. Sepet ve sipariş tablolarınızdan kohort bazlı sepet terk ve ödeme adımında terk oranlarını çıkarın; cihaz ve trafik kaynağına göre ayırın.
  2. GA4 e-ticaret olaylarını DebugView ile doğrulayın, ödeme hunisini kurun ve kapsama oranını haftalık izlemeye başlayın.
  3. Ödeme hata kodlarını kaydedip gruplayın; kaybın en yoğun olduğu iki nedeni düzeltin.
  4. Onay filtreli, kontrol gruplu bir hatırlatma akışı kurun; İYS senkronunu ve ret yollarını uçtan uca test edin.
  5. Her ay artımlı geliri, ret oranını ve kapsama oranını birlikte gözden geçirin.
Sepet terkini tek seferlik bir kampanya yerine sürekli bir iyileştirme döngüsünün parçası olarak ele almak için markayı bozmayan conversion optimizasyonu konumuz süreç tarafını anlatıyor. Sepet ve ödeme optimizasyonu, İYS uyumlu hatırlatma altyapısı ya da ödeme entegrasyonu için destek arıyorsanız AIOR'un e-ticaret hizmetlerine göz atabilirsiniz. Kendi huni verinizle ilgili sorularınızı bu konuya yazabilirsiniz.

A shopper who adds a product to the cart and leaves without paying is one of the most expensive losses in e-commerce: you have already paid to bring them in, they found the product, and they showed intent to buy. This guide explains how to calculate your cart abandonment rate with the right denominator, how to measure it in GA4 and reconcile it with your order database, how to diagnose why carts are abandoned, and how to set up recovery messages that work and comply with the commercial messaging rules in Türkiye. The focus is measurement, diagnosis and recovery; checkout design is covered only at the level of priority fixes.

The benchmark: Baymard Institute's list of 50 studies averages 70.22% (the list was last updated on 22 September 2025; checked on 27 October 2026). Treat it as an average of studies, not a target: the studies span 2006 to 2025, different industries and different definitions, and the listed values range from 55% to 84.27%. Your own rate depends on your traffic sources, price points, mobile share and how you define a cart. What matters is how your rate moves over time, segment by segment.

1. Definitions and the cart abandonment rate formula​

There are three kinds of abandonment, and each points to a different problem:
  • Cart abandonment: a cart with at least one item that never becomes an order. Because it includes price comparison and "save it for later" behavior, this rate is naturally high.
  • Checkout abandonment: a visitor who started checkout but did not finish it. Intent is stronger here, so a high rate usually points to unexpected costs, forced account creation, form problems or payment failures.
  • Browse abandonment: viewing a product page and leaving without adding anything to the cart. It is used more as a trigger for reminders than as a reported rate.
The basic formulas:
Code:
Cart abandonment rate      = 1 − (completed orders ÷ carts created)
Checkout abandonment rate  = 1 − (completed orders ÷ checkouts started)
The formula is simple; the result depends on how you choose the denominator and the time window:
  • Do not count empty carts. Some platforms create an empty cart record as soon as a visitor lands. The denominator should contain only carts with at least one item.
  • Filter out bots and test traffic. Price-monitoring bots and your own team's test orders inflate the cart count.
  • Record cart merges. If a guest cart merges with the account cart when the shopper logs in, the same intent can be counted twice.
  • Keep orders that did not come from a cart out of the numerator. Phone orders, marketplace orders and orders entered in the admin panel make abandonment look lower than it is.
  • Use cohorts and a fixed conversion window. "This month's orders ÷ this month's carts" credits carts opened at the end of the month and completed the next month to the wrong period. Take the carts opened in a given week, count those that turned into an order within a fixed time after creation (for example 7 days), and leave out cohorts whose window has not closed yet.
A hypothetical example: in one week, 4,000 carts with at least one item are created, 1,600 of them start checkout and 1,040 orders follow within 7 days. The cart abandonment rate is 1 − 1,040 ÷ 4,000 = 74% and the checkout abandonment rate is 1 − 1,040 ÷ 1,600 = 35%. The second number shows much better where the fixable problems are.

A cohort-based calculation from the database (table and status names are examples; adapt them to your schema):
SQL:
-- MySQL 8: weekly cohorts; did the cart become an order within 7 days of creation?
SELECT week,
       COUNT(*)                                        AS carts,
       SUM(converted)                                  AS orders,
       ROUND(100 * (1 - SUM(converted) / COUNT(*)), 1) AS abandonment_pct
FROM (
    SELECT YEARWEEK(c.created_at, 3) AS week,          -- ISO 8601 week
           EXISTS (SELECT 1 FROM orders o
                   WHERE o.cart_id = c.id
                     AND o.status IN ('paid', 'shipped', 'delivered')
                     AND o.created_at < c.created_at + INTERVAL 7 DAY) AS converted
    FROM carts c
    WHERE EXISTS (SELECT 1 FROM cart_items ci WHERE ci.cart_id = c.id)  -- no empty carts
      AND c.is_bot = 0
      AND c.created_at >= '2026-09-07'                 -- whole weeks (Monday)
      AND c.created_at <  '2026-10-19'                 -- last cohort's 7 days must be over
) AS k
GROUP BY week
ORDER BY week;
Running the same query split by device type, traffic source and new versus returning customers shows the differences a single average hides. For checkout abandonment, use carts that reached the checkout page as the denominator.

2. Measuring with a GA4 checkout funnel and reconciling with store data​

GA4 does not collect ecommerce events on its own; you add them to your site or to your Google Tag Manager (GTM) container (some platforms, such as Shopify, send part of them through their own pixel). The events the funnel needs:
EventWhen to send itKey parameters
add_to_cartAn item is added to the cartcurrency, value, items
view_cartThe cart page is viewedcurrency, value, items
begin_checkoutThe first checkout step loadscurrency, value, coupon, items
add_shipping_infoShipping details are submittedshipping_tier, currency, value, items
add_payment_infoPayment details are submittedpayment_type, currency, value, items
purchaseThe order is confirmedtransaction_id (required), value, shipping, tax, items
According to Google's event reference, value is the sum of price × quantity across the items array and excludes shipping and tax; if you send value, you must also send currency. The transaction_id on purchase prevents the same order from being counted twice and is your key for matching GA4 with the order database, so use your own order number. A GTM example for begin_checkout (the structure and parameter names follow the example in Google's reference):
Code:
// When the first checkout step loads, once per checkout session
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ ecommerce: null }); // clear the previous ecommerce object
window.dataLayer.push({
  event: "begin_checkout",
  ecommerce: {
    currency: "EUR",
    value: 68.80,              // sum of price × quantity; no shipping or tax
    items: [
      {
        item_id: "FLS-750-BLK",
        item_name: "Steel Vacuum Flask 750 ml",
        item_brand: "Example Brand",
        item_category: "Kitchen",
        item_variant: "Black",
        price: 24.90,
        quantity: 2
      },
      {
        item_id: "MUG-350-SND",
        item_name: "Travel Mug 350 ml",
        item_category: "Kitchen",
        price: 19.00,
        quantity: 1
      }
    ]
  }
});
Do not add personally identifiable information (PII) such as e-mail addresses, phone numbers or names to these events; sending PII to Google Analytics violates Google's policies. Check the setup in real time with DebugView in debug mode; data can take up to 24 hours to appear in reports and explorations.

Funnel exploration: In Explore, open the funnel exploration template and define the steps as begin_checkout, add_shipping_info, add_payment_info and purchase; add add_to_cart at the start to see cart abandonment too. Things to watch:
  • In a closed funnel, users must enter at the first step; in an open funnel ("Make open funnel") they can enter at any step. Look at the open funnel as well to see users who added to cart in one session and came straight to checkout in another.
  • The funnel counts users, not carts. The abandonment rate you get from GA4 is user-based and will not match the cart-based rate in your database.
  • A device category breakdown shows the gap between mobile and desktop. GA4 attributes a user to the first instance of the breakdown value that applies to them, so values that only appear in late steps, such as payment method, are better analyzed from your payment attempts log.
  • "Show elapsed time" gives the average time between steps, and "Next action" shows what people did after leaving a step. A funnel can have up to 10 steps and 4 segments.
A common calculation error: the "Add to carts" metric in reports is not a count of carts but the number of times add_to_cart fired; a user who adds three products separately is counted three times. "1 − purchases ÷ add to carts" therefore overstates abandonment. The same applies to begin_checkout firing again on every page reload (the "Checkouts" metric is an event count), so send it once per checkout session.

Why GA4 and your store disagree: users who decline cookie consent (invisible with basic consent mode; with advanced consent mode represented only by cookieless pings, with the gap possibly filled by modeling), ad blockers, payments where the shopper never returns from the bank's 3-D Secure page so the thank-you page never loads, customers switching devices, and time zone differences all separate GA4 numbers from the database. A practical rule: the database is the source of truth for cart and order counts; use GA4 for step-to-step ratios and behavior. Track "GA4 purchases ÷ database orders" every week as a coverage ratio; if it suddenly drops, the problem is in measurement, not conversion. Server-side sending is not a way to measure users who declined consent. For consent-aware measurement, server-side tagging and first-party data options, see our thread Web analytics in the post-cookie world: GA4, server-side, and first-party.

3. Diagnosing why carts are abandoned​

A good starting point is Baymard's survey of US online shoppers, updated in 2026, in which 42% of respondents said they had abandoned a cart in the last three months because "I was just browsing / not ready to buy". After setting that group aside, Baymard lists the remaining reasons as follows (respondents could pick more than one, so the total exceeds 100):
ReasonShare
Extra costs too high (shipping, tax, fees)40%
Delivery was too slow20%
I didn't trust the site with my credit card information19%
The site wanted me to create an account18%
Too long / complicated checkout process17%
Website had errors / crashed17%
Returns policy wasn't satisfactory13%
I couldn't see / calculate total order cost up-front12%
The credit card was declined10%
There weren't enough payment methods9%
This is US data. In Türkiye, installment plans (taksit), cash on delivery, bank transfer and free-shipping thresholds can shift the picture. To check your own site:
  • Unexpected costs: Which step loses the most people? If shipping first appears at checkout, the loss usually concentrates there. In Türkiye, Article 4 of Law No. 6563 already requires that, at order confirmation and before payment details are entered, the contract terms including the total amount payable are clearly visible; good practice moves this information forward to the cart.
  • Forced account creation: If there is no guest option, or it is easy to miss on the login screen, look at the exit rate on that screen.
  • Delivery uncertainty: "2-5 business days" makes the shopper do the math. Check whether you show an estimated delivery date and how often you meet it.
  • Payment failures: Log the error codes returned by your payment provider or your bank's virtual POS and, using the provider's documentation, sort them into three groups: errors the customer can fix (wrong CVC, expiry date, insufficient limit, card blocked for online purchases), technical errors worth retrying (timeouts, bank unreachable) and hard declines (suspected fraud, lost or stolen card). Track the 3-D Secure step separately: the share of users who go to the verification page and never come back is an indicator on its own.
  • Session loss on the 3-D Secure return: a well-known technical trap is that the bank's verification page returns to the store with a POST. A session cookie marked SameSite=Lax or Strict is not sent by the browser on that cross-site POST, so if the return URL relies on the session, the cart "disappears" and the payment is left half done. Base the return on the payment provider's transaction ID and signature verification, not on the session cookie.
  • Trust: Easy-to-find identifying information (in Türkiye, Article 3 of Law No. 6563 requires it; think legal name, address and contact details), recognized payment providers, a clear returns policy and no unnecessary third-party scripts on the checkout page all affect trust.
  • Errors and speed: Monitor JavaScript errors and server response times on checkout pages separately, and report Core Web Vitals for the checkout templates on their own. Log form validation errors (which field, which error) as events.
Complement the numbers with qualitative input: a one-question exit survey on the checkout page ("What stopped you today?"), payment complaints reaching customer service, and small-scale usability tests. Run session recording and heatmap tools only for users who consented, and mask card, address and phone fields.

4. How to reduce cart abandonment: fixes in priority order​

Detailed checkout design belongs in the Checkout UX sub-forum; here are the fixes with high impact and relatively low effort:
  1. Show the total cost early: Show the shipping fee and the amount left to reach free shipping on the product page and in the cart, and let shoppers estimate shipping in the cart by city or postcode. No new line item should appear at checkout.
  2. Guest checkout: Make "continue as guest" the most prominent option and move account creation to the order confirmation step; Baymard publishes separate guidelines on both points.
  3. Delivery date: Show an estimated delivery date ("arrives Thursday") instead of a shipping speed ("1-3 business days"), as long as it is a date you can keep.
  4. Payment options: Offer what your audience expects from cards, installments, bank transfer, cash on delivery and digital wallets, and show the installment table on the product page. In Türkiye, the maximum number of installments is set by regulation per product category and can change, so pull the table dynamically from your payment provider instead of hard-coding it.
  5. Clear error messages: Say which field has the error and how to fix it, right next to the field, and never wipe data the shopper already entered. When a payment is declined, replace "transaction failed" with guidance that matches the error group, for example "Your card may be blocked for online purchases; enable it in your bank's app and try again." Turkish law also requires information on the technical means for identifying and correcting input errors (Law No. 6563, Art. 3(1)(ç)).
  6. Shorten the form: Baymard measured that the average US checkout shows 23.48 form elements by default, while its testing found 12-14 elements can be enough. Default the billing address to the shipping address, and show tax office and tax number fields only when the shopper chooses a corporate invoice.

5. Abandoned cart recovery: e-mail, SMS, push and WhatsApp​

Choosing channels​

ChannelPrerequisiteStrengthWatch out for
E-mailAn e-mail address and valid consent for the e-mail channelLow cost; shows the full cart contentsYour sending service is not obliged to check İYS for you; the consent filter must live in your system
SMSA phone number and valid consent for the message channelRead quicklyPer-message cost; the short text must include the MERSİS number and an opt-out route
Web push / app notificationNotification permission from the browser or operating systemNo e-mail address neededTiming of the permission prompt; ask your lawyer about the legal status of commercial notifications
WhatsAppWhatsApp Business Platform and the recipient's opt-in for WhatsApp (Meta policy)High visibility; customers can replyUnder a cautious reading, message-channel consent is needed as well; business-initiated messages require approved templates and are charged
Meta's WhatsApp Business Messaging Policy states that you may only contact people who have given you their phone number and opted in to receive messages from you on WhatsApp, and that you must respect every opt-out request.

Timing and content​

The sequence below is not a proven rule; it is a starting point to test with your own data:
  1. 30-60 minutes after the last cart activity: a service-style reminder without a discount. The items with current prices, the total, a one-click "back to cart" button, a shipping and returns summary, and a help channel.
  2. About 24 hours later: a message that answers doubts: delivery date, installment options, returns policy, product reviews.
  3. Optional, 48-72 hours later: a stock or price change notice, or an incentive that has been tested against a holdout group.
Stop conditions: an order through any channel, an emptied cart, an opt-out, or the product selling out. Send one sequence per person within a given period (for example 14 days), and do not send SMS at night. The subject line should say plainly what the message is ("The items in your cart"); fake urgency ("last 5 minutes!") erodes trust.

A query that finds candidate carts​

In a custom store, reminders can run from a scheduled job (cron or a queue worker) every few minutes. Putting the consent filter and the holdout assignment inside the query keeps them from being forgotten later:
SQL:
-- MySQL 8: carts idle for 60 minutes, not ordered, with e-mail consent
SELECT c.id AS cart_id,
       c.email,
       SUM(ci.quantity * ci.unit_price) AS cart_total,
       CASE WHEN MOD(CRC32(LOWER(c.email)), 100) < 10
            THEN 'holdout' ELSE 'send' END AS grp           -- 10% holdout group
FROM carts c
JOIN cart_items ci        ON ci.cart_id = c.id
JOIN marketing_consents m ON m.email   = c.email
                         AND m.channel = 'EPOSTA'
                         AND m.status  = 'ONAY'              -- current state, synced with İYS
WHERE c.email IS NOT NULL
  AND c.updated_at <  NOW() - INTERVAL 60 MINUTE
  AND c.updated_at >= NOW() - INTERVAL 3 DAY
  AND NOT EXISTS (SELECT 1 FROM orders o WHERE o.cart_id = c.id)
  AND NOT EXISTS (SELECT 1 FROM orders o2                    -- ordered from another cart?
                  WHERE o2.email = c.email
                    AND o2.created_at >= c.created_at)
  AND NOT EXISTS (SELECT 1 FROM cart_reminders r             -- step already processed?
                  WHERE r.cart_id = c.id AND r.step = 1)
GROUP BY c.id, c.email, c.updated_at
HAVING cart_total > 0
ORDER BY c.updated_at
LIMIT 500;
Write both groups to the cart_reminders table; only the "send" group gets a message. A unique index on (cart_id, step) stops the same step from going out twice. Build later steps the same way, keyed on when the previous step was sent. Re-check consent and order status right before sending, because the customer may have ordered or opted out between the query and the send.

A signed, expiring cart-restore link​

The cart-restore link should restore the cart, not log the user in: e-mails get forwarded and can end up with someone else. Shopify, too, notes about its own recovery link that anyone with the link can continue that checkout. An example of a signed link with an expiry:
PHP:
<?php
// Cart-restore link: restores the cart only, never logs the user in.
const RESTORE_TTL = 72 * 3600; // 72 hours

function b64url(string $raw): string
{
    return rtrim(strtr(base64_encode($raw), '+/', '-_'), '=');
}

function restore_link(int $cartId, int $step, string $key): string
{
    $exp = time() + RESTORE_TTL;
    $sig = b64url(hash_hmac('sha256', "$cartId.$step.$exp", $key, true));
    return "https://shop.example/cart/restore?c=$cartId&s=$step&e=$exp&sig=$sig";
}

function verify_restore(array $q, string $key): ?int
{
    foreach (['c', 's', 'e', 'sig'] as $k) {
        if (!isset($q[$k]) || !is_string($q[$k])) {
            return null;
        }
    }
    if (!ctype_digit($q['c']) || !ctype_digit($q['s']) || !ctype_digit($q['e'])) {
        return null;
    }
    $expected = b64url(hash_hmac('sha256', "{$q['c']}.{$q['s']}.{$q['e']}", $key, true));
    if (!hash_equals($expected, $q['sig']) || (int) $q['e'] < time()) {
        return null; // invalid or expired: send the visitor to an explanation page
    }
    return (int) $q['c'];
}

// Usage: $cartId = verify_restore($_GET, getenv('CART_LINK_KEY'));
Keep the key in an environment variable, and when you rotate it, keep accepting the old key for the lifetime of the links. Do not put personal data such as the e-mail address in the link; anything in the address bar can leak to analytics tools and the Referer header. For an expired link, show a short explanation instead of an empty cart, and if the cart has already become an order, redirect to the order status page. For measurement, add parameters without personal data, such as utm_source=email&utm_medium=email&utm_campaign=cart_reminder. The link's s parameter tells you which reminder was clicked, and because it is part of the signature it cannot be altered.

Incentives and coupon abuse​

  • A discount in the first message is a discount for everyone who abandons. Over time, customers can learn to leave the cart and wait for the code.
  • Sending everyone the same code gets it onto coupon-sharing sites. Generate single-use, short-lived codes bound to the cart and the e-mail address; set a minimum basket value, exclude already discounted items, and give a code to the same person only once in a given period.
  • Calculate the margin floor per cart. For low-margin carts, try non-monetary incentives, such as reminding the shopper how much is left to reach free shipping.
  • You can only measure the real effect of an incentive with a holdout group (section 8).

6. The legal side in Türkiye: consent for commercial messages, İYS and KVKK​

This section is general information, not legal advice; have a lawyer review your flow before it goes live.
  • Prior consent: Under Article 6 of Law No. 6563 on the Regulation of Electronic Commerce, commercial electronic messages (ticari elektronik ileti) may be sent only with the recipient's prior consent (önceden onay); there is a separate exception for tradespeople and merchants as recipients. Under the Regulation on Commercial Communication and Commercial Electronic Messages, anyone who wants to send commercial electronic messages registers with the Message Management System (İleti Yönetim Sistemi, İYS), and no commercial electronic message may be sent to recipients without consent recorded in İYS (Art. 5).
  • Notifications that need no consent, and their limit: Article 6(2) of the Regulation says prior consent is not required for notifications about an ongoing subscription or membership, collection, debt reminders, information updates, purchase and delivery and similar situations, but that such notifications may not promote or advertise any goods or services.
  • Which side is a cart reminder on? A message that reminds the shopper of an unfinished cart and invites them to buy promotes the products, so relying on that exception is risky. The cautious approach is to treat cart reminders as commercial electronic messages and send them only to recipients with valid consent for that channel in İYS. Send transactional messages such as order confirmations, payment failure notices and shipment tracking in a separate flow, without marketing content.
  • Collecting consent correctly: The positive statement of consent may not be pre-selected (Art. 7(8)); consent may not be made a precondition for supplying goods or services (Art. 7(9)); and you may not ask for consent by sending a commercial electronic message (Art. 7(4)). Consents collected outside İYS must be registered in İYS within three business days, and unregistered consents are invalid (Art. 7(11)-(12)). When consent is collected electronically, confirmation must reach the recipient within 24 hours together with an opt-out option; this does not apply to consents collected through İYS (Art. 7(3)). Use separate, unticked boxes for e-mail and SMS at checkout.
  • Message content: For merchants, the e-mail header or body includes the MERSİS number and trade name, and the SMS text includes the MERSİS number; every message includes at least one accessible contact detail. If the nature of the message is not obvious from its content, a label such as "tanıtım" (promotion), "kampanya" (campaign) or "bilgilendirme" (information) goes at the start of an SMS or in the e-mail subject line (Art. 8(2)-(6)). If the message contains a discount, it must say so clearly, and the validity period and conditions must be easy to reach, for example through a dedicated URL or a customer service number (Art. 8(7)-(8)).
  • Opt-out: Every message includes an easy, free opt-out route through the same channel the message came from (Art. 9(3)-(4)). After an opt-out, sending must stop within three business days (Law Art. 8(3), Regulation Art. 10), and opt-outs you receive must be reported to İYS within three business days (Art. 9(6)).
  • The e-mail exception: For SMS, the intermediary service provider must check consent in İYS before sending (Art. 11(7)); these intermediary obligations do not apply to messages sent by e-mail (Art. 17/A). In other words, your e-mail service provider is not obliged to check for you; the consent filter must be in your own system.
  • Records and proof: Consent records are kept for three years after the consent stops being valid, and other records for three years from the date of the record (Art. 13). For consents collected outside İYS, the burden of proof is on the service provider (Art. 7(10)).
  • İYS thresholds: According to iys.org.tr (checked on 27 October 2026), the functions the law requires are free for all service providers under Basic Services and are done by hand through the web interface. Service providers that want automated API synchronization and have fewer than 250,000 approved addresses must go through an authorized integrator; packages for up to 25,000 addresses (the larger of approved phone numbers and e-mail addresses) are free, and larger tiers carry an annual fee. Check the current table on iys.org.tr.
  • Sanctions: Sending without consent leads to an administrative fine under Article 12 of the Law, and the fine can be increased up to tenfold when a message goes to more than one person at once. The amounts are updated every year, so check the current figures.
KVKK: E-mail addresses, phone numbers and cart contents are personal data; explain in your privacy notice (aydınlatma metni) that you process data for cart reminders (Law No. 6698 on the Protection of Personal Data, KVKK, Art. 10). Some plugins save the address typed into the e-mail field before the form is submitted; if you do this, say so in the privacy notice and do not send reminders to those addresses without consent. The Personal Data Protection Authority's Guide on Cookie Practices (Çerez Uygulamaları Hakkında Rehber, July 2025) groups cookies by purpose: cookies strictly necessary for the service, such as cart and session cookies, do not rest on the same legal basis as advertising and behavioral tracking cookies. Rely on explicit consent (açık rıza) for advertising-related tracking and session recording, and settle the status of first-party analytics with the guide and your lawyer. If you use e-mail or SMS services hosted abroad, check KVKK's rules on cross-border transfers (Art. 9) as well.

Customers in the EU: the GDPR applies together with each country's ePrivacy rules. Some countries allow a "soft opt-in" for marketing similar products to existing customers, but whether a shopper who abandoned a cart falls under it is interpreted differently from country to country. For what each framework actually asks of you, see our thread on compliance frameworks (ISO 27001, SOC 2, GDPR, KVKK).

7. Platform notes: Shopify, WooCommerce and custom stores​

  • Shopify: Shopify treats a checkout as abandoned when it stays incomplete for more than ten minutes after the customer has provided their e-mail. Automatic e-mails are managed in the Automations section of the Shopify Messaging app, and from Orders > Abandoned checkouts you can also send a recovery link to a single customer by hand. According to Shopify's changelog of 19 May 2026, the same section now has ready-made SMS templates for abandoned carts, abandoned checkouts and browse abandonment. For recipients in Türkiye, assume that the marketing consent field in the store admin does not replace İYS registration, and synchronize consents with İYS.
  • WooCommerce: Guest checkout is enabled with an option under WooCommerce > Settings > Accounts & Privacy ("Enable guest checkout" in the current documentation; the label may differ between versions). Cart reminders are usually set up with a plugin, for example Woo's paid AutomateWoo (e-mails at intervals you set, SMS through a Twilio account) or Cart Abandonment Recovery for WooCommerce by Brainstorm Force on wordpress.org. The latter says it captures the address as soon as it is typed on the checkout page; assess that under KVKK and the GDPR. Orders in "Pending payment" and "Failed" status are also a valuable data source for checkout abandonment; the WooCommerce documentation describes pending orders as unpaid or abandoned.
  • Custom stores: Start checkout with the e-mail field and link the cart to the address when that step is submitted; read consent status from a table kept in sync with İYS; deduplicate sends on the (cart_id, step) key; use an order event (webhook) to cancel pending reminder jobs; process opt-out links per channel and report them to İYS; and store send, click and order records together with the holdout flag.
  • Hosted platforms in Türkiye: If you rent an e-commerce platform, ask your provider three questions: Is there a cart reminder module? Does it synchronize consents with İYS? Can it hold out a control group?

8. Measuring recovery honestly with a holdout group​

Not every order that arrives after a reminder arrives because of it. Some of the people who left their cart were coming back anyway, and a last-click report credits those orders to the campaign too. To see the incremental effect:
  1. Randomly assign a fixed share of eligible carts (for example 10%) to a holdout group at the customer level. The same person must always land in the same group; in the query above, the hash of the e-mail address does that.
  2. The holdout group receives no reminders but is logged with the same eligibility rules.
  3. Measure both groups' conversion in the same window (for example 7 days after abandonment) with the same order definition, and calculate revenue per cart as well.
  4. Incremental orders = (conversion rate of the send group − conversion rate of the holdout group) × number of carts in the send group. Do the same with revenue per cart for revenue, then subtract discounts and SMS costs.
A hypothetical example: in the send group 1,170 of 9,000 carts (13%) convert, in the holdout group 90 of 1,000 (9%). A last-click report shows 1,170 "recovered" orders; the incremental effect is (0.13 − 0.09) × 9,000 = 360 orders, roughly a third of the reported number. With a small holdout group the uncertainty is large: here the 95% confidence interval for the difference runs from about 2.1 to 5.9 percentage points, so the incremental orders lie somewhere between roughly 190 and 530. Evaluate results over whole weeks once enough volume has built up, and test incentives with the same setup.

9. Common mistakes​

MistakeConsequenceBetter approach
Using the Baymard average as a targetAn average of different years and definitions becomes a meaningless bar for your storeSegment your own rate and follow its trend
Counting empty carts and bots in the denominatorAbandonment looks artificially highCount non-bot carts with at least one item
Calculating "1 − purchases ÷ add to carts"Add-to-cart events are not carts; abandonment looks higher than it isUse cart records or a user-based funnel
Treating GA4 as the source of order countsConsent, blockers and redirect losses lower the numbersDatabase for order counts, GA4 for step ratios; track the coverage ratio
Sending reminders without a consent filterBreach of Law No. 6563 and İYS rules, risk of administrative finesJoin a consent table synced with İYS in the query; re-check before sending
One discount code for everyoneThe code gets shared; customers learn to wait for the discountSingle-use, cart-bound, short-lived codes; first message without an incentive
A restore link that logs the user inA forwarded e-mail can give access to the accountA signed, expiring link that only restores the cart
Reminding people who already orderedAnnoyed customers and more opt-outsCheck orders at the e-mail level; cancel pending jobs when an order arrives
Measuring recovered revenue by last clickOrders that would have happened anyway get credited to the campaignMeasure the incremental effect with a holdout group
Lumping payment errors under one "failed" labelYou cannot see which errors are fixableLog provider codes and group them

Frequently asked questions​

What is a normal cart abandonment rate?
The 50 studies Baymard collects average 70.22%, with values from 55% to 84.27%. Because they cover different years, industries and definitions, you cannot compare them directly with your store. Track your own rate with one definition, split by device and traffic source, and watch how it changes.

Should abandoned cart e-mails include a discount?
Not by default. Keep the first message service-oriented, and try incentives only in a test you can measure against a holdout group, with single-use, expiring codes. A discount also goes to customers who would have come back anyway, and it comes straight out of your margin.

How many reminders should I send?
One to three is a reasonable start; measurement decides the right number. Judge each extra message by its incremental orders together with its opt-out and complaint rates, and stop the sequence on an order, an opt-out or a sold-out product.

Do I need consent for cart e-mails in Türkiye?
Under a cautious reading, yes. The Regulation exempts notifications about purchases, deliveries and similar situations from consent, but those notifications may not promote goods or services, and a message about an unfinished cart can cross that line. Send only to recipients with valid consent for that channel in İYS, and have a lawyer review the flow.

Why does GA4 show a different number than my store?
GA4 counts events and users; your store counts carts and orders. Add users who decline consent, ad blockers, thank-you pages that never load after 3-D Secure, customers who switch devices and time zone differences, and a gap is unavoidable. Use the database for order counts, GA4 for step ratios, and track the coverage ratio between the two.

How do I get a guest shopper's e-mail address?
Make e-mail the first field of guest checkout and link the cart to that address when the step is submitted. Ask for marketing consent on the same screen with a separate, unticked box; without consent, use the address only for transactional messages about the order.

Conclusion and next steps​

Lowering cart abandonment starts with correct measurement, not with a reminder e-mail: every fix made without knowing how many carts you lose at which step is a guess, and every "recovered revenue" figure measured without a holdout group is an optimistic one. Next steps:
  1. Pull cohort-based cart and checkout abandonment rates from your cart and order tables, split by device and traffic source.
  2. Verify your GA4 ecommerce events in DebugView, build the checkout funnel, and start tracking the coverage ratio every week.
  3. Log and group your payment error codes, then fix the two causes where you lose the most.
  4. Set up a consent-filtered reminder flow with a holdout group, and test the İYS sync and opt-out routes end to end.
  5. Every month, review incremental revenue, opt-out rate and coverage ratio together.
To treat cart abandonment as part of a continuous improvement cycle instead of a one-off campaign, our thread on conversion optimisation that doesn't break the brand covers the process side. If you need help with cart and checkout optimization, an İYS-compliant reminder setup or payment integration, take a look at AIOR's e-commerce services. Questions about your own funnel data are welcome in this thread.
 
Last edited:

Forum statistics

Threads
925
Messages
932
Members
26
Latest member
Jessicawatson

Members online

No members online now.

Featured content

AIOR
AIOR TECHNOLOGY

Get a quote for all your needs

Hosting · Domain · Servers · Design · Software · Engineering · Industry Solutions

Get a quote

24/7 Support · Quick response

Back
Top