
Shopify altyapısında özel ticaret kuralları geliştiren markalar için 2026 önemli bir kırılma noktası oldu.
Shopify Scripts artık çalışmıyor.
Konu artık “ileride migrate etmeli miyiz?” değil.
Eski commerce logic'in yeni Shopify mimarisinde nerede yaşaması gerektiği.
Shopify Scripts ne için kullanılıyordu?
Scripts özellikle Shopify Plus mağazalarında checkout ve sepet davranışlarını özelleştirmek için kullanılıyordu.
Örneğin:
- belirli ürünlerde otomatik indirim,
- müşteri segmentine özel fiyat,
- ürün adedine göre discount,
- ücretsiz kargo,
- belirli ödeme yöntemlerini gizleme,
- shipping method değiştirme,
- bundle benzeri fiyatlama kuralları.
Shopify Functions nedir?
Shopify Functions, custom commerce logic'in Shopify'ın kendi execution environment'ında çalışmasını sağlayan extension modelidir.
Business rule UI'da değil, commerce engine'e yakın katmanda yaşamalıdır.
Migration'a kod yazarak başlanmamalı
İlk yapılması gereken mevcut Script envanterini çıkarmaktır.
| Eski kural | Yeni hedef |
|---|---|
| %20 ürün indirimi | Discount Function |
| 3 al 2 öde | Discount Function |
| Belirli ödeme yöntemini gizle | Payment customization |
| VIP müşteriye ücretsiz kargo | Delivery customization |
| Sepet minimum tutarı | Cart/Checkout Validation |
| Belirli ürün kombinasyonunu engelle | Cart/Checkout Validation |
Her Script'in birebir karşılığı tek bir Function olmayabilir.
Discount logic nasıl taşınmalı?
Kuralın girdileri ve çıktıları açıkça modellenmelidir.
Test edilmesi gerekenler:
- başka indirimle birleşiyor mu?
- discount code ile birlikte çalışıyor mu?
- bundle ürünlerinde ne oluyor?
- subscription varsa ne oluyor?
- currency/market değiştiğinde eşik nasıl hesaplanıyor?
- ürün iade edildiğinde discount allocation doğru mu?
Migration'ın zor kısmı syntax değil, business semantics'in korunmasıdır.
Checkout validation neden frontend'e bırakılmamalı?
“Sepette özel üretim ürün varsa teslimat tarihi seçilmeden checkout tamamlanamasın” gibi kurallar yalnız JavaScript ile UI tarafında uygulanırsa kırılgan olur.
Doğru ayrım:
UI: Kullanıcıya neden ilerleyemediğini anlatır.
Function: İş kuralını gerçekten uygular.
Shopify checkout mimarisi neden sürekli değişiyor?
Checkout artık tek bir HTML sayfası değildir.
Commerce aynı anda web checkout, Shop Pay, express wallets, mobile, POS ve agentic checkout gibi farklı yüzeylerde çalışabilir.
Migration sırasında test matrisi nasıl olmalı?
Customer: Guest / Registered / VIP
×
Cart: Normal / Bundle / Subscription
×
Discount: Yok / Code / Automatic
×
Market: TR / EU / US
×
Payment: Card / Shop Pay / Express
kombinasyonları düşünülmelidir.
Shopify Functions migration checklist
- Aktif tüm Scripts çıkarıldı mı?
- Her Script'in business amacı dokümante edildi mi?
- Discount logic ayrıştırıldı mı?
- Shipping customization belirlendi mi?
- Payment customization belirlendi mi?
- Validation kuralları ayrıştırıldı mı?
- Customer segment dependency'leri kontrol edildi mi?
- Market/currency senaryoları test edildi mi?
- Discount stacking test edildi mi?
- Express checkout test edildi mi?
- Legacy ScriptTag'ler audit edildi mi?
- Analytics kodları modern extension yapısına taşınmalı mı kontrol edildi mi?
- Rollback/fallback senaryosu belirlendi mi?
- Production sonrası order/discount reconciliation yapılacak mı?
Scripts → Functions geçişinde asıl zihniyet değişimi
Migration'da “eski kodu yeni dile çevirmek” yeterli değildir. Önce script'in hangi business capability'yi uyguladığı ayrıştırılmalıdır.
- line item discount
- shipping discount
- payment customization
- delivery customization
- validation
birbirinden ayrı concern'lerdir.
Mevcut script envanteri nasıl çıkarılır?
| Alan | Örnek |
|---|---|
| Business rule | VIP müşteriye %10 |
| Input | customer tag, cart lines |
| Output | discount |
| Dependency | metafield/config |
| Edge cases | bundle, gift card |
| Owner | Growth |
| Test cases | senaryo listesi |
Business rule'u koddan ayırın
Hard-coded kural yerine:
- eligible segment,
- value,
- date range,
- product scope
config/metafield ile yönetilebilir.
Function'ın yapmaması gerekenler
Execution sırasında uzak HTTP isteği, yavaş database sorgusu veya LLM çağrısı gibi dış bağımlılıklar checkout yoluna sokulmamalıdır.
Migration test matrisi
- tek ürün,
- çok ürün,
- eligible + ineligible ürün,
- quantity,
- sale price,
- gift card,
- customer segment,
- currency/market,
- multiple discounts,
- bundle,
- cart edit sonrası recalculation.
Expected cart total snapshot'ları tutulabilir.
Observability
- config version,
- deploy version,
- merchant rule changes
loglanmalıdır.
Rollout
- script behavior snapshot,
- equivalent Function,
- staging test,
- edge-case suite,
- düşük riskli rollout,
- monitoring,
- eski script kapatma.
Doğru migration business logic'i versioned, testable ve configuration-driven hale getirir.
Migration acceptance criteria
Bir Function yalnız “çalışıyor” diye kabul edilmemelidir.
Acceptance:
- eski script ile eşdeğer business output,
- boundary cases geçti,
- config documented,
- rollback hazır,
- merchant operations eğitildi,
- observability mevcut.
Özellikle discount migration'da birkaç happy-path test production güveni için yeterli değildir.
Sonuç
Shopify Scripts migration'ın amacı eski kodu yeni API syntax'ına çevirmek değildir.
Asıl amaç:
ticari kuralları Shopify'ın yeni execution modeline doğru sorumluluklarla taşımaktır.
Reliefers olarak Shopify projelerinde migration'ı yalnız uygulama kurulumu olarak değil; discount, checkout, payment, shipping ve storefront logic'in birlikte ele alındığı bir commerce architecture çalışması olarak değerlendiriyoruz.
