Harika bir soru! Checkout sayfası, bir e-ticaret sitesinin en kritik noktasıdır ve burada yapılacak küçük bir hata bile doğrudan gelir kaybına yol açabilir. Doğru loglama stratejisi, sorunları proaktif olarak tespit etmenizi ve kullanıcı deneyimini iyileştirmenizi sağlar.
Checkout için log alanlarını, İşlem Süreci, Kullanıcı Bilgileri, Ürün Detayları, Ödeme Bilgileri ve Teknik Performans olmak üzere 5 ana başlık altında toplayabiliriz .
1. İşlem Süreci (Transaction Funnel) Logları
Checkout sürecinin hangi aşamasında olduğunu ve kullanıcının ilerleyip ilerlemediğini anlamak için bu loglar kritiktir.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
checkout_step |
cart_view, shipping_address, payment, order_review |
Kullanıcının checkout'un hangi adımında olduğu |
checkout_step_completed |
true, false |
Adımın başarıyla tamamlanıp tamamlanmadığı |
checkout_abandoned |
true, false |
Kullanıcının checkout'u terk edip etmediği |
time_spent_on_step_ms |
45000 (45 saniye) |
Her adımda geçirilen süre |
abandoned_field |
email, address |
Terk edilen alan (inaktivite ile tespit edilir) |
Kod Örneği: Adım Değişimi Loglama
// Checkout adımı değiştiğinde
function logCheckoutStep(step, status) {
logger.info('Checkout adım değişimi', {
checkout_step: step,
step_completed: status,
session_id: sessionId,
user_id: userId,
time_spent_ms: stepStartTime ? Date.now() - stepStartTime : null,
page_path: window.location.pathname
});
// Metrik olarak da kaydet
metrics.increment('checkout.step.completed', {
step: step,
status: status
});
}
2. Kullanıcı Bilgileri Logları
Kimin alışveriş yaptığını anlamak, hem kişiselleştirme hem de güvenlik açısından önemlidir.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
user_id |
12345 |
Üye ise kullanıcı ID'si |
is_guest |
true, false |
Misafir kullanıcı mı? |
session_id |
sess_abc123 |
Oturum kimliği |
email |
user@example.com |
E-posta adresi (hash'lenmiş olabilir) |
account_creation_date |
2025-01-15 |
Hesap oluşturma tarihi (fraud tespiti için) |
ip_address |
192.168.1.1 |
Kullanıcı IP adresi |
user_agent |
Mozilla/5.0... |
Tarayıcı bilgisi |
Önemli: KVKK/GDPR Uyumu
Kişisel verileri (email, adres vb.) loglarken mutlaka KVKK ve GDPR kurallarına uyun. Hassas verileri hash'leyerek veya maskeleyerek saklayın.
// Hassas verileri maskele
function maskEmail(email) {
const [localPart, domain] = email.split('@');
return `${localPart[0]}***@${domain}`;
}
// "ahmet@example.com" -> "a***@example.com"
3. Ürün ve Sepet Detayları Logları
Ne satın alındığı, stok sorunlarını ve envanter yönetimini anlamak için gereklidir.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
cart_id |
cart_789 |
Sepet kimliği |
cart_items_count |
3 |
Sepetteki ürün sayısı |
cart_items[] |
Dizi | Ürün detayları listesi |
item.id |
prod_456 |
Ürün ID'si |
item.name |
Akıllı Telefon |
Ürün adı |
item.quantity |
2 |
Ürün adedi |
item.unit_price |
999.99 |
Birim fiyat |
item.sku |
SM-G998B |
Stok kodu |
inventory_available |
true, false |
Stok durumu |
inventory_check_time_ms |
150 |
Stok kontrolü süresi |
Kod Örneği: Sepet Loglama
function logCartContents(cart) {
logger.debug('Sepet içeriği', {
cart_id: cart.id,
cart_total: cart.totalAmount,
items_count: cart.items.length,
items: cart.items.map(item => ({
product_id: item.productId,
quantity: item.quantity,
price: item.price,
category: item.category,
// Hassas olmayan bilgiler
})),
// Stok kontrolü sonuçları
inventory_status: cart.items.map(item => ({
sku: item.sku,
available: item.inStock,
check_duration_ms: item.stockCheckDuration
}))
});
// Stok hatası varsa hemen alert
if (cart.items.some(item => !item.inStock)) {
alertService.send('Stok hatası tespit edildi', cart);
}
}
4. Ödeme ve Fatura Bilgileri Logları
En hassas alan burasıdır. Kredi kartı numarası, CVV gibi bilgileri ASLA loglamayın! PCI-DSS uyumluluğu için ödeme bilgileri maskelenmelidir.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
payment_method |
credit_card, paypal, bank_transfer |
Ödeme yöntemi |
payment_provider |
iyzico, paytr, stripe |
Ödeme sağlayıcı |
payment_status |
pending, success, failed |
Ödeme durumu |
payment_error_code |
insufficient_funds, card_declined |
Hata kodu (varsa) |
authorization_code |
AUTH123 |
Yetkilendirme kodu (maskeli) |
bin_number |
555555 |
Kartın ilk 6 hanesi (sadece BIN) |
last_four_digits |
4444 |
Kartın son 4 hanesi |
avs_result |
Y, N |
Adres doğrulama sonucu |
cvv_result |
M, N |
CVV doğrulama sonucu |
3ds_status |
authenticated, failed |
3D Secure durumu |
billing_address |
Maske lenmiş adres | Fatura adresi |
tax_amount |
18.50 |
Vergi tutarı |
shipping_cost |
15.90 |
Kargo ücreti |
Kod Örneği: Güvenli Ödeme Loglama
// ASLA YAPMAYIN - Bu şekilde loglamayın!
logger.info('Ödeme bilgileri', {
card_number: '5555 5555 5555 4444', // ASLA!
cvv: '123', // ASLA!
});
// DOĞRU KULLANIM - Maskelenmiş ve güvenli
logger.info('Ödeme işlemi', {
payment_method: 'credit_card',
provider: 'stripe',
status: 'success',
bin: '555555', // Sadece BIN (ilk 6 hane) - PCI uyumlu
last_four: '4444', // Sadece son 4 hane - PCI uyumlu
auth_code: 'AUTH_' + mask(authCode),
avs_result: 'Y',
cvv_result: 'M',
transaction_time_ms: 2340,
// Hassas bilgi yok!
});
5. Teslimat Bilgileri Logları
Ürünün nereye gideceği, lojistik ve kullanıcı deneyimi için önemlidir.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
shipping_method |
ground, express, same_day |
Kargo yöntemi |
shipping_address |
Maskelenmiş adres | Teslimat adresi |
shipping_city |
İstanbul |
İl (analiz için) |
shipping_district |
Kadıköy |
İlçe (analiz için) |
shipping_phone |
+90*** *** ** ** |
Maskelenmiş telefon |
shipping_email |
Maskelenmiş email | Dijital teslimatlar için |
delivery_type |
physical, digital, pickup |
Teslimat tipi |
pickup_location |
Mağaza-İstinyePark |
Mağazadan teslim alınacaksa |
6. Teknik Performans ve Hata Logları
Sistemin sağlığını ve performansını izlemek için teknik metrikler.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
total_time_ms |
3450 |
Checkout'un toplam tamamlanma süresi |
payment_time_ms |
1230 |
Ödeme işleminin süresi |
shipping_calculation_time_ms |
450 |
Kargo hesaplama süresi |
tax_calculation_time_ms |
120 |
Vergi hesaplama süresi |
error_type |
validation, timeout, service_unavailable |
Hata tipi |
error_message |
Payment gateway timeout |
Hata mesajı (hassas değilse) |
retry_count |
2 |
Yeniden deneme sayısı |
third_party_service |
tax_cloud, shipping_api |
Kullanılan 3. parti servis |
service_response_time_ms |
890 |
3. parti servis yanıt süresi |
7. Pazarlama ve Kampanya Logları
Hangi kanalın dönüştüğünü anlamak için UTM parametreleri.
| Log Alanı | Örnek Değer | Açıklama |
|---|---|---|
utm_source |
google |
Trafik kaynağı |
utm_medium |
cpc |
Pazarlama kanalı |
utm_campaign |
yeni_yil_indirimi |
Kampanya adı |
utm_content |
banner_1 |
İçerik detayı |
utm_term |
akilli+telefon |
Arama kelimesi |
first_touch_utm |
Obje | İlk tıklamadaki UTM'ler |
last_touch_utm |
Obje | Son tıklamadaki UTM'ler |
referrer_domain |
google.com |
Yönlendiren site |
landing_page |
/urun/akilli-telefon |
Açılış sayfası |
coupon_code |
INDIRIM20 |
Kupon kodu (maskelenebilir) |
discount_amount |
50.00 |
İndirim tutarı |
Standart Checkout Log Formatı Örneği (JSON)
Tüm bu alanları birleştiren örnek bir log:
{
"timestamp": "2026-02-28T14:30:45.123Z",
"level": "INFO",
"service": "checkout-service",
"trace_id": "trace_xyz789",
"checkout": {
"order_id": "ORD-2026-001234",
"checkout_step": "payment",
"step_completed": true,
"time_spent_step_ms": 23500,
"abandoned": false
},
"user": {
"user_id": "user_45678",
"is_guest": false,
"session_id": "sess_abc123",
"email": "a***@example.com",
"ip_address": "192.168.1.1",
"user_agent": "Mozilla/5.0..."
},
"cart": {
"cart_id": "cart_789",
"items_count": 2,
"total_amount": 1250.00,
"currency": "TRY",
"items": [
{
"product_id": "prod_111",
"quantity": 1,
"unit_price": 999.99,
"category": "electronics"
},
{
"product_id": "prod_222",
"quantity": 1,
"unit_price": 250.01,
"category": "accessories"
}
]
},
"payment": {
"method": "credit_card",
"provider": "stripe",
"status": "success",
"bin": "555555",
"last_four": "4444",
"auth_code": "AUTH_xxx",
"avs_result": "Y",
"cvv_result": "M",
"transaction_time_ms": 1850
},
"shipping": {
"method": "express",
"city": "İstanbul",
"district": "Kadıköy",
"cost": 29.90,
"type": "physical"
},
"marketing": {
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "yeni_yil",
"referrer_domain": "google.com",
"landing_page": "/products/phone",
"coupon_code": "YENIYIL20",
"discount_amount": 250.00
},
"performance": {
"total_time_ms": 3450,
"shipping_calculation_ms": 450,
"tax_calculation_ms": 120,
"inventory_check_ms": 230
}
}
Özet: Checkout Log Kontrol Listesi
- [ ] Her adımı logla: Kullanıcı nerede, ne kadar kaldı, nerede terk etti?
- [ ] Sepet içeriğini kaydet: Ne alınıyor, kaç adet, ne kadara?
- [ ] Kullanıcı tipini belirle: Üye mi, misafir mi?
- [ ] Ödeme durumunu logla: Başarılı, başarısız, beklemede?
- [ ] Kart bilgilerini MASKELE: Sadece BIN + son 4 hane!
- [ ] Hata kodlarını yakala: Hangi servis, hangi hata?
- [ ] Performans metriklerini ekle: Her işlem ne kadar sürdü?
- [ ] UTM parametrelerini koru: Hangi kanaldan geldi?
- [ ] Trace ID ekle: Hata durumunda uçtan uca takip için
- [ ] Alert kur: Ödeme hatası, stok hatası gibi kritik durumlarda anında bildirim
Unutmayın: Checkout logları sadece hata ayıklama için değil, aynı zamanda dönüşüm optimizasyonu (CRO) için de en değerli veri kaynağınızdır. Doğru loglarla, kullanıcıların neden terk ettiğini anlar ve süreci iyileştirebilirsiniz .