E-ticarette sepet terki konuşulurken çoğu zaman kargo ücreti, fiyat karşılaştırma ve kararsızlık sayılır. Bunlar gerçek nedenler. Ama projelerimizde sık gördüğümüz bir grup daha var: kullanıcı satın almak istiyor, site buna izin vermiyor. Yavaş açılan ödeme sayfası, sessizce başarısız olan bir istek, mobilde kapanmayan klavye... Bu yazıda sepet terkinin teknik kaynaklı kısmını nasıl ayırt ettiğimizi anlatıyoruz.
Önce terki doğru tanımlayın
Sepete ürün eklenip siparişin tamamlanmaması tek bir olay değil. Sepet, adres, kargo ve ödeme adımlarının her biri ayrı bir hunidir ve her adımda kaybın nedeni farklıdır. İlk iş her adımı bir olay olarak kaydetmek: cart_viewed, checkout_started, shipping_selected, payment_submitted, order_completed. Elinizde yalnızca tek bir "terk oranı" varsa kaybın nerede olduğunu bilemezsiniz.
Teknik kayıp nasıl görünür
Davranışsal terk ile teknik terk farklı izler bırakır. Kararsız kullanıcı sayfada bekler, geri döner, başka ürüne bakar. Teknik sorunla karşılaşan kullanıcı ise genellikle aynı adımı tekrar tekrar dener, sonra ayrılır. Şu işaretlere bakıyoruz:
- Aynı oturumda aynı butona kısa aralıklarla birden fazla tıklama.
- Ödeme adımında 4xx ve 5xx dönen isteklerin oturum bazında dökümü.
- Belirli bir tarayıcı, işletim sistemi veya ekran genişliğinde belirgin biçimde düşük tamamlama oranı.
- İstemci tarafı JavaScript hatalarının sepet ve ödeme sayfalarında yoğunlaşması.
- Ödeme sağlayıcısına yönlendirildikten sonra geri dönmeyen oturumlar.
Sunucu tarafında bakılacak yerler
Laravel tabanlı mağazalarda ilk baktığımız yer, ödeme ve sipariş oluşturma uçlarının yanıt süresi ile hata günlüğü. Yanıt uzadıkça kullanıcı butona tekrar basar ve çift sipariş ya da çift tahsilat riski doğar. Çözüm iki parçalı: tekrar eden isteği engellemek için bir idempotency anahtarı kullanmak ve istek sürerken butonu devre dışı bırakmak. Sipariş oluşturmayı DB::transaction() içine almak da stok düşme ile sipariş kaydının yarım kalmasını önler.
Sepetin kendisi de sessiz bir kayıp kaynağıdır. Oturum süresi dolunca sepetin boşalması kullanıcıyı "sepetim kayboldu" hissiyle siteden çıkarır. Girişli kullanıcının sepetini veritabanında, misafir sepetini çerezdeki bir belirteçle eşleştirerek tutmak bu kaybı azaltır. Stok kontrolü ödeme anında değil, ürün sepete eklenirken ve sepet görüntülenirken yapılmalı; son adımda gelen "bu ürün tükendi" mesajı kullanıcıyı en çok kızdıran sürprizlerden biri.
İstemci tarafı: mobil ve form deneyimi
Trafiğin büyük kısmı mobilden geliyorsa ödeme formunu mutlaka gerçek cihazda deneyin. Kart numarası alanında sayısal klavyenin açılması için inputmode="numeric", tarayıcının otomatik doldurması için doğru autocomplete değerleri (cc-number, cc-exp, postal-code gibi) kullanılmalı. Doğrulama hataları alanın hemen yanında ve anlaşılır bir dille gösterilmeli; sayfanın en üstünde çıkan genel bir "hata oluştu" mesajı mobilde çoğu zaman ekran dışında kalıyor. Zorunlu alan sayısını azaltmak ve misafir olarak satın almaya izin vermek de uygulaması tamamen mühendislik işi olan kazanımlar.
Ölçüm ve önceliklendirme
Her şeyi aynı anda düzeltmeye çalışmayın. Örneğin ödeme adımına gelen 1000 oturumun 120'sinde bir sunucu hatası kaydı varsa, bu hata sınıfı kozmetik bir iyileştirmeden çok önce ele alınmalıdır. Bunun için hata günlüğünü oturum ve adım bilgisiyle zenginleştirin: Sentry gibi bir hata izleme aracına ya da kendi günlük altyapınıza checkout_step ve session_id alanlarını ekleyin. Sonra hataları "kaç ödeme denemesini etkiledi" sırasına dizin. Düzeltmeden sonra aynı metriğe tekrar bakıp etkiyi doğrulayın; ölçülmeyen düzeltme tahminden ibarettir. Ödeme sağlayıcısından dönen hata kodlarını da kendi panonuza taşıyın; "reddedildi" ile "zaman aşımı" aynı sorun değildir ve çözümleri farklıdır.
Mağazanızda sepet terkinin ne kadarının teknik kaynaklı olduğunu görmek, ödeme akışını gözden geçirmek ya da izleme altyapısını kurmak isterseniz iletişim sayfamızdan bize ulaşın. 2010'dan bu yana 500'ün üzerinde projede gördüğümüz şu: dönüşüm sorunları çoğu zaman kampanyada ya da tasarımda değil, ödeme adımındaki küçük bir hatada saklı çıkıyor.