İçeriğe geç
ship-ready

Yayına almadan önce: 121 benzersiz iş

Kontrol listesi · 13 bölüm · 121 madde

Yayına almadan önce

Yayına çıkmadan önce kontrol edilecek güvenlik, kimlik doğrulama, veri, başlık, ödeme, operasyon, tedarik zinciri, mobil, SEO, içerik, KVKK ve alan adı maddeleri. Hukuki maddeler bilgilendirme amaçlıdır, hukuki tavsiye değildir; kendi durumun için bir hukukçuya danış.

0 / 121 tamamlandı %0

İlerleme yalnızca bu tarayıcıda saklanır.
01

Sırlar & erişim

0 / 8
#1
API anahtarlarını/secret'ları koddan çıkar, env'e taşı

API anahtarlarını/secret’ları koddan çıkar, env’e taşı; JWT secret’ı güçlü olsun, token kısa ömürlü olsun, algoritma sabitlensin (alg: none reddedilsin)

yo-secret-koddan-cikar
#2
.env'i git geçmişinden temizle ve sızan anahtarları rotate et

.env’i git geçmişinden temizle ve sızan anahtarları rotate et; /.env ve /.git web’den açılmasın, staging/dev ortamları dışarıya kapalı olsun, canlıda debug modu kapalı olsun

yo-env-gecmisten-temizle
#3
Veritabanı kullanıcısına ve üçüncü parti API anahtarlarına sadece gereken yetkiyi ver (least privilege)

Veritabanı kullanıcısına ve üçüncü parti API anahtarlarına sadece gereken yetkiyi ver (least privilege); uygulama ana (master) anahtarla değil, kısıtlı anahtarla çalışsın (ör. Supabase’de istemcide secret ya da service_role değil publishable ya da anon anahtar ve RLS, Stripe’ta restricted key)

yo-en-az-yetki
#4
Directory listing'i kapat

Directory listing’i kapat

yo-directory-listing
#5
Varsayılan/tahmin edilebilir admin route'unu kaldır + admin'e rol tabanlı yetki koy

Varsayılan/tahmin edilebilir admin route’unu kaldır + admin’e rol tabanlı yetki koy

yo-admin-rotasi-rol
#6
Tüm varsayılan şifreleri değiştir (admin paneli, veritabanı, sunucu ve yönetim araçları)

Tüm varsayılan şifreleri değiştir (admin paneli, veritabanı, sunucu ve yönetim araçları)

yo-varsayilan-sifreler
#7
Canlı ortamda source map dosyalarını kapat ya da herkese açık yerden kaldır

Canlı ortamda source map dosyalarını kapat ya da herkese açık yerden kaldır

yo-source-map-kapali
#8
GitHub, bulut, alan adı, ödeme ve e-posta hesaplarında ve admin panelinde iki adımlı doğrulamayı (2FA) aç

GitHub, bulut, alan adı, ödeme ve e-posta hesaplarında ve admin panelinde iki adımlı doğrulamayı (2FA) aç; bu hesaplardan biri ele geçirilirse koddaki güvenliğin anlamı kalmaz

yo-hesaplarda-2fa
Sonraki bölüm · 02Kimlik doğrulama & oturumDevam et →
02

Kimlik doğrulama & oturum

0 / 13
#9
Yetki kontrolünü sunucuda tut, client'tan gelen id/role'a güvenme

Yetki kontrolünü sunucuda tut, client’tan gelen id/role’a güvenme

yo-yetki-sunucuda
#10
Ownership/izin kurallarını her sorguda açıkça uygula

Ownership/izin kurallarını her sorguda açıkça uygula

yo-sahiplik-kontrolu
#11
Supabase kullanıyorsan herkese açık şemadaki her tabloda RLS'i aç (panelden oluşturulan tablolarda açık gelir, SQL ya da migration ile oluşturulanlarda elle açılır) ve kuralları kullanıcıya bağla (ör

Supabase kullanıyorsan herkese açık şemadaki her tabloda RLS’i aç (panelden oluşturulan tablolarda açık gelir, SQL ya da migration ile oluşturulanlarda elle açılır) ve kuralları kullanıcıya bağla (ör. auth.uid() = user_id); using (true) kuralı tabloyu herkese açar, sadece gerçekten herkese açık veride kullan. Tabloları sadece herkese açık anahtarla sorgulayarak dene, AI her değişiklik yaptığında tekrarla ve Security Advisor’daki uyarıları (supabase db advisors --type security) sıfırla; UpGuard Eylül 2026’da 16 binden fazla Supabase veritabanında dışarıdan okunabilen tablo buldu. Firebase’de güvenlik kurallarını test modunda (allow read, write: if true) bırakma

yo-rls-kurallari
#12
Şifreleri güçlü algoritmayla hash'le

Şifreleri güçlü algoritmayla hash’le

yo-sifre-hash
#13
Kayıtta zayıf ve sızmış şifreleri reddet: en az 8 karakter iste (şifre tek doğrulama yöntemiyse daha uzun), sızıntılarda görülmüş şifreleri Have I Been Pwned'in Pwned Passwords servisiyle kontrol et (şifrenin kendisi değil, karmasının ilk 5 karakteri gider)

Kayıtta zayıf ve sızmış şifreleri reddet: en az 8 karakter iste (şifre tek doğrulama yöntemiyse daha uzun), sızıntılarda görülmüş şifreleri Have I Been Pwned’in Pwned Passwords servisiyle kontrol et (şifrenin kendisi değil, karmasının ilk 5 karakteri gider); karmaşık karakter kuralı yerine uzunluk ve sızıntı kontrolü daha etkilidir (NIST SP 800-63B). Supabase Auth’un ücretli planlarında sızmış şifre koruması ayardan açılır

yo-sifre-kurallari
#14
Çerezlere HttpOnly + Secure + SameSite ver

Çerezlere HttpOnly + Secure + SameSite ver

yo-guvenli-cerez
#15
CSRF token'ları ekle

CSRF token’ları ekle

yo-csrf
#16
Şifre değişiminde tüm oturumları sıfırla

Şifre değişiminde tüm oturumları sıfırla; girişte oturum kimliğini yenile, oturuma boşta kalma ve toplam süre sınırı koy, çıkışta oturumu sunucuda da geçersiz kıl

yo-oturum-yonetimi
#17
Şifre sıfırlama linklerini süreli ve tek kullanımlık yap

Şifre sıfırlama linklerini süreli ve tek kullanımlık yap

yo-sifirlama-linki
#18
Kullanıcı enumerasyonunu engelle (jenerik hata mesajı)

Kullanıcı enumerasyonunu engelle (jenerik hata mesajı)

yo-kullanici-enumerasyonu
#19
Başarısız girişlerden sonra hesabı kilitle / kademeli gecikme

Başarısız girişlerden sonra hesabı kilitle / kademeli gecikme

yo-hesap-kilitleme
#20
Tüm API'ye genel rate limit koy

Tüm API’ye genel rate limit koy; login ve şifre sıfırlamaya daha sıkı limit uygula; kayıt, iletişim ve bülten gibi herkese açık formlara bot koruması koy (Cloudflare Turnstile, reCAPTCHA)

yo-rate-limit-bot-korumasi
#21
OTP kodlarını kısa süreli ve tek kullanımlık yap, deneme ve yeniden gönderme sayısını sınırla

OTP kodlarını kısa süreli ve tek kullanımlık yap, deneme ve yeniden gönderme sayısını sınırla; SMS’i sadece hizmet verdiğin ülkelere gönder, yoksa sahte numaralara toplu SMS attırılıp fatura şişirilir (SMS pumping)

yo-otp-sms-limit
Sonraki bölüm · 03Girdi & veriDevam et →
03

Girdi & veri

0 / 10
#22
Girdiyi sunucuda şema ile doğrula

Girdiyi sunucuda şema ile doğrula

yo-girdi-dogrulama
#23
Kaydetmeden önce sanitize et

Kaydetmeden önce sanitize et

yo-sanitize
#24
Çıktıyı XSS'e karşı escape et

Çıktıyı XSS’e karşı escape et

yo-xss-escape
#25
SQL sorgularını parametrele

SQL sorgularını parametrele

yo-sql-parametre
#26
Request body boyutunu sınırla

Request body boyutunu sınırla

yo-istek-boyutu
#27
Dosya yüklemede tip whitelist'i + boyut sınırı

Dosya yüklemede tip whitelist’i + boyut sınırı; gerçek tipi dosya içeriğinden (magic byte) kontrol et, dosyaya rastgele ad ver, çalıştırılamayan bir yerde sakla

yo-dosya-yukleme
#28
Dosya yolu kullanıcı girdisinden oluşuyorsa normalize et, izin verilen klasörün dışına çıkmayı (../) engelle (path traversal)

Dosya yolu kullanıcı girdisinden oluşuyorsa normalize et, izin verilen klasörün dışına çıkmayı (../) engelle (path traversal)

yo-path-traversal
#29
Sunucunun kullanıcının verdiği URL'ye istek attığı yerlerde (link önizleme, webhook test, URL'den avatar ya da PDF) whitelist kullan

Sunucunun kullanıcının verdiği URL’ye istek attığı yerlerde (link önizleme, webhook test, URL’den avatar ya da PDF) whitelist kullan; iç adresleri (127.0.0.1, 169.254.169.254, 10.x, 192.168.x) engelle, sadece https’e izin ver, yönlendirmeden sonraki son adresi de kontrol et, isteğe zaman aşımı ve yanıt boyutu sınırı koy (SSRF)

yo-ssrf
#30
API yanıtında sadece gereken alanları döndür (başka kullanıcıların e-postası, telefonu ya da iç alanlar gitmesin)

API yanıtında sadece gereken alanları döndür (başka kullanıcıların e-postası, telefonu ya da iç alanlar gitmesin); girdide sadece izin verilen alanları kabul et, role, isAdmin, ownerId gibi alanları istemciden alma (mass assignment)

yo-fazla-alan-mass-assignment
#31
Dosya depolamayı (S3, R2, Firebase Storage, Supabase Storage) herkese açık bırakma

Dosya depolamayı (S3, R2, Firebase Storage, Supabase Storage) herkese açık bırakma; kullanıcı sadece kendi dosyasına erişsin, özel dosyaları süreli imzalı linkle ver; herkese açık görselleri yedeklerle, yapılandırma ve kullanıcı dosyalarıyla aynı bucket’ta tutma, erişim kaydını (access logging) aç

yo-depolama-erisimi
Sonraki bölüm · 04Taşıma & başlıklarDevam et →
04

Taşıma & başlıklar

0 / 3
#32
HTTPS zorunlu + HSTS

HTTPS zorunlu + HSTS

yo-https-hsts
#33
Güvenlik başlıkları (CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy)

Güvenlik başlıkları (CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy)

yo-guvenlik-basliklari
#34
CORS'u whitelist ile kilitle

CORS’u whitelist ile kilitle

yo-cors
Sonraki bölüm · 05Entegrasyon, ödeme, AIDevam et →
05

Entegrasyon, ödeme, AI

0 / 16
#35
Webhook imzalarını doğrula (ödeme webhook'ları dahil)

Webhook imzalarını doğrula (ödeme webhook’ları dahil)

yo-webhook-imzasi
#36
Webhook'ların aynı olayı birden fazla kez gönderebileceğini varsay: işlediğin olayın kimliğini (event id) kaydet, aynı kimlik tekrar gelirse işlemeden atla

Webhook’ların aynı olayı birden fazla kez gönderebileceğini varsay: işlediğin olayın kimliğini (event id) kaydet, aynı kimlik tekrar gelirse işlemeden atla; olaylar sırasız da gelebilir, sırayı olayın oluşma zamanına göre kurma (Stripe Webhooks belgesi)

yo-webhook-tekrari
#37
Fiyatları sunucu tarafında belirle

Fiyatları sunucu tarafında belirle

yo-fiyat-sunucuda
#38
Canlıya almadan önce ödeme sağlayıcısının yasaklı ve kısıtlı işler listesini oku (Stripe, iyzico, PayTR, Paddle, Lemon Squeezy): listedeki bir işi yapıyorsan hesap haber verilmeden askıya alınabilir, para aylarca tutulabilir

Canlıya almadan önce ödeme sağlayıcısının yasaklı ve kısıtlı işler listesini oku (Stripe, iyzico, PayTR, Paddle, Lemon Squeezy): listedeki bir işi yapıyorsan hesap haber verilmeden askıya alınabilir, para aylarca tutulabilir. Paddle ve Lemon Squeezy sadece yazılım satışını kabul eder, danışmanlık gibi hizmetleri almaz

yo-odeme-yasakli-isler
#39
Prompt injection'a karşı savunma ekle

Prompt injection’a karşı savunma ekle

yo-prompt-injection
#40
Uygulamadaki AI ajanına sadece gereken araç ve veriye erişim ver

Uygulamadaki AI ajanına sadece gereken araç ve veriye erişim ver; silme, ödeme, e-posta gönderme gibi geri alınamaz işlemleri kullanıcı onayına bağla

yo-ai-ajan-yetkisi
#41
AI kullanımına ve SMS, e-posta gibi maliyeti olan uç noktalara kullanıcı başına kota/tavan koy

AI kullanımına ve SMS, e-posta gibi maliyeti olan uç noktalara kullanıcı başına kota/tavan koy

yo-maliyet-kotasi
#42
Harcama uyarısı (billing alert) kur

Harcama uyarısı (billing alert) kur

yo-harcama-uyarisi
#43
AI çağrılarında değişmeyen kısmı (sistem prompt'u, araç tanımları, uzun doküman) başa koy ve prompt önbelleğini (prompt caching) aç

AI çağrılarında değişmeyen kısmı (sistem prompt’u, araç tanımları, uzun doküman) başa koy ve prompt önbelleğini (prompt caching) aç; önbellekten okunan kısım çok daha ucuza gelir (Claude’da giriş fiyatının onda biri ya da daha azı), değişen kısım sona yazılsın; sık gelen aynı sorunun cevabını da anlamına göre önbellekten ver (semantic cache)

yo-prompt-onbellegi
#44
Her isteği en pahalı modele gönderme: kolay istekleri küçük model karşılasın, emin olamadığında bir üst modele aktarsın (model cascade)

Her isteği en pahalı modele gönderme: kolay istekleri küçük model karşılasın, emin olamadığında bir üst modele aktarsın (model cascade); aktarma eşiğini kendi test setinle ayarla

yo-model-kademesi
#45
Modeli değiştirmeden önce yenisini gerçek isteklerin kopyasıyla arka planda çalıştır (shadow test) ve cevapları model adları gizli AI hakemlere karşılaştırt

Modeli değiştirmeden önce yenisini gerçek isteklerin kopyasıyla arka planda çalıştır (shadow test) ve cevapları model adları gizli AI hakemlere karşılaştırt; açık farkla kazanmadıkça geçiş yapma

yo-model-golge-testi
#46
Kodun işleyeceği AI cevaplarını (kategori, evet/hayır, alanlar) serbest metin yerine şemalı JSON olarak al (structured outputs) ve değerleri izin verilen listeye göre doğrula

Kodun işleyeceği AI cevaplarını (kategori, evet/hayır, alanlar) serbest metin yerine şemalı JSON olarak al (structured outputs) ve değerleri izin verilen listeye göre doğrula

yo-ai-semali-cikti
#47
Belgelere dayanan AI cevaplarında (RAG) cevabın hangi belgeden geldiğini göster, belgede yoksa "bilmiyorum" dedirt

Belgelere dayanan AI cevaplarında (RAG) cevabın hangi belgeden geldiğini göster, belgede yoksa “bilmiyorum” dedirt; kullanıcının göremeyeceği belgeleri arama sorgusunun içinde süz, arama ve cevap kalitesini ayrı ölç

yo-rag-kaynak-yetki
#48
LLM ve diğer dış API çağrılarına zaman aşımı koy

LLM ve diğer dış API çağrılarına zaman aşımı koy; 429 ve 5xx hatasında hemen tekrar deneme, Retry-After başlığına uy, beklemeyi her denemede artırıp rastgele kaydır, deneme sayısını sınırla ve yoğun anlarda istekleri kuyruğa al

yo-api-yeniden-deneme
#49
AI ajanının kayıt oluşturan işlemlerine (randevu, sipariş) idempotency key ver ki aynı mesaj iki kez gelince çift kayıt oluşmasın

AI ajanının kayıt oluşturan işlemlerine (randevu, sipariş) idempotency key ver ki aynı mesaj iki kez gelince çift kayıt oluşmasın; “gelecek perşembe” gibi tarih ve saatleri model değil kod hesaplasın. Ajanın “yaptım” dediği işlemi araç çağrısının sonucuyla doğrula: araç hiç çağrılmadıysa ya da hata döndüyse kullanıcıya başarılı gösterme

yo-ajan-kayit-guvencesi
#50
AB'deki kullanıcılara AI özelliği sunuyorsan şeffaflık kurallarına uy (AB Yapay Zekâ Yasası md

AB’deki kullanıcılara AI özelliği sunuyorsan şeffaflık kurallarına uy (AB Yapay Zekâ Yasası md. 50, 2 Ağustos 2026’dan beri): kullanıcıya AI ile konuştuğunu en geç ilk etkileşimde söyle, ürettiğin görsel, ses, video ve metni makine tarafından okunur biçimde işaretle (meta veri ya da filigran), deepfake’leri etiketle. Türkiye’den hizmet vermek kapsam dışı bırakmaz; ceza 15 milyon €’ya ya da cironun %3’üne kadar. 2 Ağustos 2026’dan önce piyasaya sürülmüş üretken sistemlerde işaretleme için süre 2 Aralık 2026’da bitiyor

yo-ai-seffaflik
Sonraki bölüm · 06Operasyon & dayanıklılıkDevam et →
06

Operasyon & dayanıklılık

0 / 13
#51
Hata mesajlarını kıs (stack trace/iç detay sızdırma)

Hata mesajlarını kıs (stack trace/iç detay sızdırma)

yo-hata-mesajlari
#52
Loglardan hassas veriyi temizle

Loglardan hassas veriyi temizle; log dosyaları ve log sayfaları herkese açık olmasın

yo-log-hassas-veri
#53
Güvenlik olaylarını logla (audit trail)

Güvenlik olaylarını logla (audit trail)

yo-guvenlik-logu
#54
Bağımlılıkları denetle (audit / otomatik güncelleme)

Bağımlılıkları denetle (audit / otomatik güncelleme)

yo-bagimlilik-denetimi
#55
Otomatik yedekleme kur + geri yükleme testi yap

Otomatik yedekleme kur + geri yükleme testi yap

yo-yedekleme
#56
Hesap silme gerçekten silsin (kalıcı silme)

Hesap silme gerçekten silsin (kalıcı silme)

yo-hesap-silme
#57
Saldırgan gibi test et (pentest / düşmanca inceleme)

Saldırgan gibi test et (pentest / düşmanca inceleme)

yo-pentest
#58
Sık okunan veriyi önbelleğe al: statik dosyalara uzun Cache-Control ver, herkese açık sayfaları CDN'de tut, sık sorguları Redis gibi bir önbellekte sakla

Sık okunan veriyi önbelleğe al: statik dosyalara uzun Cache-Control ver, herkese açık sayfaları CDN’de tut, sık sorguları Redis gibi bir önbellekte sakla; her okuma veritabanına gitmesin, veri değişince önbelleği temizle

yo-onbellek-katmanlari
#59
Veritabanına bağlantı havuzu (connection pooling) üzerinden bağlan: her istek yeni bağlantı açarsa birkaç düzine eşzamanlı kullanıcıda veritabanının bağlantı sınırı dolar ve uygulama durur

Veritabanına bağlantı havuzu (connection pooling) üzerinden bağlan: her istek yeni bağlantı açarsa birkaç düzine eşzamanlı kullanıcıda veritabanının bağlantı sınırı dolar ve uygulama durur; Supabase’de hazır havuzlayıcının (Supavisor) adresini kullan, kendi Postgres’inde PgBouncer kur. Sunucusuz fonksiyonlarda her çağrı ayrı bağlantı açtığı için bu daha da önemli

yo-baglanti-havuzu
#60
Yavaş sorguları yayından önce bul: sık filtrelediğin, sıraladığın ve birleştirdiğin (join) sütunlara index ekle

Yavaş sorguları yayından önce bul: sık filtrelediğin, sıraladığın ve birleştirdiğin (join) sütunlara index ekle; listedeki her satır için döngüde ayrı sorgu atma (N+1), tek sorguda toplu çek. Veritabanının yavaş sorgu kaydına ve EXPLAIN çıktısına bak

yo-sorgu-performansi
#61
Yayından önce yük testi yap: k6 ya da Artillery ile 100 eşzamanlı kullanıcıyı taklit et, yavaşlayan uç noktaları ve veritabanı sınırlarını kullanıcılardan önce bul

Yayından önce yük testi yap: k6 ya da Artillery ile 100 eşzamanlı kullanıcıyı taklit et, yavaşlayan uç noktaları ve veritabanı sınırlarını kullanıcılardan önce bul; testi canlı sisteme değil staging’e karşı çalıştır

yo-yuk-testi
#62
Canlıdaki hataları izle: Sentry gibi bir hata izleme aracıyla uygulama ve sunucu hatalarını cihaz, tarayıcı, işletim sistemi ve sürüm bilgisiyle topla, yeni hata çıkınca bildirim al

Canlıdaki hataları izle: Sentry gibi bir hata izleme aracıyla uygulama ve sunucu hatalarını cihaz, tarayıcı, işletim sistemi ve sürüm bilgisiyle topla, yeni hata çıkınca bildirim al; web’de kaynak haritalarını (source map) sadece izleme aracına yükle, kişisel veriyi (e-posta, IP, form içeriği) gönderme

yo-hata-izleme
#63
Sitenin ve API'nin ayakta olduğunu dışarıdan izle (uptime monitoring): birkaç dakikada bir istek atan bir izleyici kur, kesintide ve SSL sertifikasının süresi dolmadan önce bildirim al

Sitenin ve API’nin ayakta olduğunu dışarıdan izle (uptime monitoring): birkaç dakikada bir istek atan bir izleyici kur, kesintide ve SSL sertifikasının süresi dolmadan önce bildirim al; izleyiciyi izlenen sunucudan ayrı bir yerde çalıştır (ör. kendi sunucunda Uptime Kuma)

yo-calisirlik-izleme
Sonraki bölüm · 07Tedarik zinciri & CIDevam et →
07

Tedarik zinciri & CI

0 / 3
#64
Lock dosyasını (package-lock.json, pnpm-lock.yaml) commit'le, CI'da ve sunucuda lock'a sadık komutla kur (npm ci, pnpm install --frozen-lockfile)

Lock dosyasını (package-lock.json, pnpm-lock.yaml) commit’le, CI’da ve sunucuda lock’a sadık komutla kur (npm ci, pnpm install --frozen-lockfile); paket sürümleri kendiliğinden yükselmesin

yo-lock-dosyasi
#65
Paketlerin kurulum script'lerini kapat (npm config set ignore-scripts true, pnpm'de sadece izin verdiğin paketler)

Paketlerin kurulum script’lerini kapat (npm config set ignore-scripts true, pnpm’de sadece izin verdiğin paketler); kötü amaçlı bir paket kurulurken bilgisayarında ya da CI’da kod çalıştıramasın

yo-kurulum-scriptleri
#66
Fork'tan gelen PR'ların kodunu secret'lara erişen iş akışında çalıştırma (GitHub Actions'ta pull_request_target ile PR kodunu checkout etme)

Fork’tan gelen PR’ların kodunu secret’lara erişen iş akışında çalıştırma (GitHub Actions’ta pull_request_target ile PR kodunu checkout etme); CI secret’ları dışarıdan gelen koda açılmasın

yo-fork-pr-secret
Sonraki bölüm · 08Mobil uygulamaDevam et →
08

Mobil uygulama

0 / 8
#67
Uygulama paketine (APK, AAB, IPA) gizli anahtar koyma

Uygulama paketine (APK, AAB, IPA) gizli anahtar koyma; paket açılıp okunabilir, istemcide sadece herkese açık anahtarlar kalsın (ör. Supabase anon key), gizli işlemler sunucudan geçsin

yo-mobil-pakette-anahtar
#68
Oturum token'larını ve hassas veriyi iOS'ta Keychain'de, Android'de Keystore ile şifrelenmiş depoda sakla

Oturum token’larını ve hassas veriyi iOS’ta Keychain’de, Android’de Keystore ile şifrelenmiş depoda sakla; AsyncStorage, SharedPreferences ya da UserDefaults’a düz metin yazma

yo-mobil-guvenli-depolama
#69
Android'de uygulama verisinin yedeklenmesini kapat ya da hassas dosyaları yedekten çıkar (android:allowBackup="false", dataExtractionRules)

Android’de uygulama verisinin yedeklenmesini kapat ya da hassas dosyaları yedekten çıkar (android:allowBackup="false", dataExtractionRules); yedekten token ve veritabanı çıkarılamasın

yo-android-yedekleme
#70
Firebase kullanıyorsan App Check'i aç ve zorunlu kıl (enforce)

Firebase kullanıyorsan App Check’i aç ve zorunlu kıl (enforce); istekler sadece gerçek uygulamandan gelsin (iOS’ta App Attest, Android’de Play Integrity)

yo-firebase-app-check
#71
Android sürümünde kod küçültme ve karartmayı aç (R8, isMinifyEnabled = true)

Android sürümünde kod küçültme ve karartmayı aç (R8, isMinifyEnabled = true); tersine mühendisliği zorlaştırır ama gizli anahtarı korumaz

yo-android-r8
#73
Hassas API'lerde sertifika sabitlemeyi (certificate pinning) değerlendir

Hassas API’lerde sertifika sabitlemeyi (certificate pinning) değerlendir; yedek anahtar ve son kullanma tarihi koy, yoksa sertifika yenilenince uygulama sunucuya bağlanamaz

yo-sertifika-sabitleme
#74
Sadece gerçekten kullandığın izinleri iste (kamera, konum, rehber, bildirim)

Sadece gerçekten kullandığın izinleri iste (kamera, konum, rehber, bildirim); kullanılmayan izin saldırı yüzeyini büyütür ve mağaza incelemesinde sorun çıkarır

yo-mobil-izinler
Sonraki bölüm · 09SEO & teknik siteDevam et →
09

SEO & teknik site

0 / 13
#75
Özel 404 sayfası

Özel 404 sayfası

yo-404-sayfasi
#76
Benzersiz sayfa başlıkları

Benzersiz sayfa başlıkları

yo-sayfa-basliklari
#77
Meta description'lar

Meta description’lar

yo-meta-description
#78
Her sayfada tek bir H1 olsun, alt başlıklar sırayla H2 ve H3 gitsin

Her sayfada tek bir H1 olsun, alt başlıklar sırayla H2 ve H3 gitsin; başlık gibi görünen yazılar gerçekten başlık etiketiyle işaretlensin, başlık etiketi sadece yazıyı büyütmek için kullanılmasın

yo-baslik-hiyerarsisi
#79
Sosyal paylaşım görseli (OG/Twitter card)

Sosyal paylaşım görseli (OG/Twitter card)

yo-og-gorseli
#80
robots.txt

robots.txt

yo-robots-txt
#81
Sayfanın metni HTML kaynağında olsun: içerik sadece JavaScript ile sonradan geliyorsa (kaynakta boş <div id="root">) sayfaları sunucuda ya da derlemede üret (SSR, SSG ya da prerender)

Sayfanın metni HTML kaynağında olsun: içerik sadece JavaScript ile sonradan geliyorsa (kaynakta boş <div id="root">) sayfaları sunucuda ya da derlemede üret (SSR, SSG ya da prerender); tarayıcıda “Sayfa kaynağını görüntüle” ile metni göremiyorsan arama motorları ve AI botları da eksik görebilir

yo-icerik-kaynakta
#82
Yapısal veriyi JSON-LD ile ekle (yerel işletmede LocalBusiness: ad, adres, telefon, çalışma saatleri)

Yapısal veriyi JSON-LD ile ekle (yerel işletmede LocalBusiness: ad, adres, telefon, çalışma saatleri); bilgiler sayfada görünenle aynı olsun. Google, AI özelliklerinde görünmek için llms.txt ya da özel bir dosya gerekmediğini söylüyor

yo-yapisal-veri
#83
Breadcrumb'lar

Breadcrumb’lar

yo-breadcrumb
#84
İç linkler

İç linkler

yo-ic-linkler
#85
Her hizmet, ürün ya da konu için kendi adresi olan ayrı bir sayfa aç

Her hizmet, ürün ya da konu için kendi adresi olan ayrı bir sayfa aç; her şey tek sayfadaysa aramada çıkacak sayfa olmaz. Google’da site:alanadi.com aratıp kaç sayfanın dizinde olduğuna bak

yo-sayfa-basina-konu
#86
Görsellerde alt text

Görsellerde alt text

yo-alt-text
#87
Google Analytics

Google Analytics

yo-analitik
Sonraki bölüm · 10İçerik & dönüşümDevam et →
10

İçerik & dönüşüm

0 / 10
#88
CTA'yı fold üstüne koy

CTA’yı fold üstüne koy

yo-cta-ust
#89
Mobilde sticky CTA

Mobilde sticky CTA

yo-sticky-cta
#90
Teşekkür (thank you) sayfası

Teşekkür (thank you) sayfası

yo-tesekkur-sayfasi
#91
5 soruluk SSS

5 soruluk SSS

yo-sss
#92
Vaka çalışmaları

Vaka çalışmaları

yo-vaka-calismalari
#93
Gerçek kullanıcı yorumları

Gerçek kullanıcı yorumları

yo-kullanici-yorumlari
#94
Yanıt süresi taahhüdü

Yanıt süresi taahhüdü

yo-yanit-suresi-taahhudu
#95
Harita + yol tarifi

Harita + yol tarifi

yo-harita-yol-tarifi
#96
Ekip fotoğrafı

Ekip fotoğrafı

yo-ekip-fotografi
#97
Gizlilik politikası sayfası

Gizlilik politikası sayfası

yo-gizlilik-politikasi
Sonraki bölüm · 11Hukuki & KVKKDevam et →
11

Hukuki & KVKK

0 / 19
#98
Fontları (Google Fonts dahil) kendi sunucundan ver

Fontları (Google Fonts dahil) kendi sunucundan ver; ziyaretçinin IP adresi yurt dışına gitmesin (KVKK / GDPR)

yo-yerel-fontlar
#99
Oturum kaydı ve ısı haritası araçlarında (Clarity vb.) form alanlarını maskele, çerez onayı olmadan başlatma, aydınlatma metninde belirt

Oturum kaydı ve ısı haritası araçlarında (Clarity vb.) form alanlarını maskele, çerez onayı olmadan başlatma, aydınlatma metninde belirt

yo-oturum-kaydi-maskeleme
#100
Aydınlatma metnini başka bir siteden kopyalama, uygulamanın gerçekte yaptığına göre yaz: hangi veriyi hangi amaçla topladığını ve kimlere aktardığını (analitik, e-posta, ödeme, hata izleme servisleri) eksiksiz yaz, yeni bir piksel ya da SDK eklediğinde metni güncelle

Aydınlatma metnini başka bir siteden kopyalama, uygulamanın gerçekte yaptığına göre yaz: hangi veriyi hangi amaçla topladığını ve kimlere aktardığını (analitik, e-posta, ödeme, hata izleme servisleri) eksiksiz yaz, yeni bir piksel ya da SDK eklediğinde metni güncelle; Kurul kopya metni ve yurt dışına aktarım yokken varmış gibi yazmayı hukuka aykırı sayıyor (Aydınlatma Tebliği md. 5, Kurul’un 2026/347 sayılı İlke Kararı). Aydınlatma yükümlülüğüne uymamanın 2026 cezası 85.437–1.709.200 TL (KVKK md. 18)

yo-aydinlatma-gercege-uygun
#101
Aydınlatma ile açık rızayı ayrı metin ve ayrı onayla al: aydınlatma için sadece "okudum, anladım" yaz, açık rıza zorunlu olmayan ayrı bir onay kutusu olsun

Aydınlatma ile açık rızayı ayrı metin ve ayrı onayla al: aydınlatma için sadece “okudum, anladım” yaz, açık rıza zorunlu olmayan ayrı bir onay kutusu olsun; “okudum, kabul ediyorum” diyen tek kutu ya da rızayı üyelik şartına bağlamak hukuka aykırı. Veriyi sözleşmenin ifası gibi başka bir hukuki sebeple işliyorsan açık rıza isteme (Kurul’un 2026/347 sayılı İlke Kararı)

yo-acik-riza-ayri
#102
Zorunlu olmayan çerezleri, reklam piksellerini ve takip SDK'larını onay alınmadan çalıştırma: çerez panelinde bu seçenekler kapalı gelsin, reddetmek kabul etmek kadar kolay olsun, onay kullanım koşullarına gömülmesin

Zorunlu olmayan çerezleri, reklam piksellerini ve takip SDK’larını onay alınmadan çalıştırma: çerez panelinde bu seçenekler kapalı gelsin, reddetmek kabul etmek kadar kolay olsun, onay kullanım koşullarına gömülmesin; IP’yi maskeleyen, siteler arası takip yapmayan ve veriyi üçüncü taraflara vermeyen birinci taraf anonim analitik onaysız kullanılabilir (KVKK Çerez Uygulamaları Hakkında Rehber, 2025)

yo-cerez-onayi
#103
Kişisel veri yurt dışındaki bir servise gidiyorsa (analitik, e-posta, hata izleme, bulut veritabanı) aktarımı hukuka bağla: Kurul'un ilan ettiği standart sözleşmeyi servisle imzala ve imzadan sonra 5 iş günü içinde Kurum'a bildir

Kişisel veri yurt dışındaki bir servise gidiyorsa (analitik, e-posta, hata izleme, bulut veritabanı) aktarımı hukuka bağla: Kurul’un ilan ettiği standart sözleşmeyi servisle imzala ve imzadan sonra 5 iş günü içinde Kurum’a bildir; sürekli aktarımlarda açık rızaya dayanılamaz, bildirim yapmamanın da ayrı cezası var (KVKK md. 9, 7499 sayılı Kanunla değişik). Google Cloud gibi bazı sağlayıcılar Türk standart sözleşmesini veri işleme ekinde sunuyor, birçok küçük servisin sözleşmesinde ise Türkiye geçmiyor; o zaman veriyi Türkiye’de ya da kendi sunucunda tutan bir alternatif düşün

yo-yurt-disi-aktarim
#104
Veri ihlali olursa ne yapacağını önceden yaz: kişisel veri sızdığında ihlali öğrendiğin andan itibaren en geç 72 saat içinde KVKK Kurulu'na bildir, etkilenen kişilere de en kısa sürede haber ver (KVKK md

Veri ihlali olursa ne yapacağını önceden yaz: kişisel veri sızdığında ihlali öğrendiğin andan itibaren en geç 72 saat içinde KVKK Kurulu’na bildir, etkilenen kişilere de en kısa sürede haber ver (KVKK md. 12/5, Kurul’un 2019/10 sayılı kararı); AB’deki kullanıcılar için GDPR’da da süre 72 saat. İhlali fark etmek için hata izleme ve güvenlik logu gerekir

yo-veri-ihlali-bildirimi
#105
Ticari e-posta ve SMS için önceden onay al, İYS'ye kayıt ol, her iletide ret (abonelikten çıkma) linki ve gönderenin kimliği olsun: tacirse ticaret unvanı ve MERSİS numarası, esnafsa adı soyadı ve T.C

Ticari e-posta ve SMS için önceden onay al, İYS’ye kayıt ol, her iletide ret (abonelikten çıkma) linki ve gönderenin kimliği olsun: tacirse ticaret unvanı ve MERSİS numarası, esnafsa adı soyadı ve T.C. kimlik numarası, ayrıca en az bir iletişim bilgisi (6563 sayılı Kanun, Ticari İletişim Yönetmeliği); ABD’ye gönderiyorsan posta adresi de şart (CAN-SPAM). Ret linki olmamasının cezası 2026’da 5.723–42.930 TL, onaysız toplu gönderimde ceza on katına kadar çıkabilir (6563 md. 12)

yo-ticari-ileti
#106
Abonelik satılıyorsa yenileme şartlarını ve iptal yolunu abone ol butonunun yanında göster, iptal abone olmak kadar kolay olsun (6502 sayılı Kanun, Mesafeli Sözleşmeler Yönetmeliği)

Abonelik satılıyorsa yenileme şartlarını ve iptal yolunu abone ol butonunun yanında göster, iptal abone olmak kadar kolay olsun (6502 sayılı Kanun, Mesafeli Sözleşmeler Yönetmeliği); uymamanın cezası 2026’da işlem başına 3.973 TL (6502 md. 77)

yo-abonelik-sartlari
#107
Kayıtta yaş sor ya da çocukların kaydını engelle

Kayıtta yaş sor ya da çocukların kaydını engelle; ABD’de 13 yaş altı çocukların verisini ebeveyn onayı olmadan toplamak COPPA ihlalidir ve ceza ihlal başınadır. Uygulama çocuklara yönelikse mağazaların çocuk kategorisi kurallarına da uy

yo-yas-kontrolu
#108
Kullanıcılar görsel ya da dosya yüklüyorsa telif şikâyeti yolu kur: kaldırma talebi için iletişim adresi ve süreç yaz

Kullanıcılar görsel ya da dosya yüklüyorsa telif şikâyeti yolu kur: kaldırma talebi için iletişim adresi ve süreç yaz. ABD’li kullanıcıların varsa DMCA temsilcini ABD Telif Ofisi’ne kaydet (6 $); kayıt yoksa yüklenen içerikteki telif ihlalinden sen de sorumlu tutulabilirsin

yo-telif-sikayeti
#109
Kullanıcıların içerik paylaştığı (yorum, gönderi, dosya) bir uygulama ya da site işletiyorsan 5651 sayılı Kanun'daki yer sağlayıcı yükümlülüklerine bak: faaliyete başlamadan önce yer sağlayıcı bildirimi yapılır (e-Devlet'te "BTK Yer Sağlayıcılığı Bildirimi"

Kullanıcıların içerik paylaştığı (yorum, gönderi, dosya) bir uygulama ya da site işletiyorsan 5651 sayılı Kanun’daki yer sağlayıcı yükümlülüklerine bak: faaliyete başlamadan önce yer sağlayıcı bildirimi yapılır (e-Devlet’te “BTK Yer Sağlayıcılığı Bildirimi”; 31 Temmuz 2026’dan beri bu yetki Siber Güvenlik Başkanlığı’nda), hukuka aykırı içerik bildirilince yayından kaldırılır. Bildirim yapmamanın cezası kanunda 100 bin–1 milyon TL yazar ve her yıl yeniden değerleme oranıyla artar; küçük bir yorum alanının kapsama girip girmediği mevzuatta net değil, emin değilsen hukukçuya sor (5651 md. 2, 5)

yo-yer-saglayici-bildirimi
#110
Uygulama mağazası dışında (web'den) dijital ürün ya da abonelik satıyorsan vergiyi baştan kur: AB'deki tüketiciye ilk satıştan itibaren onun ülkesinin KDV'si (VAT) uygulanır, ABD'de birçok eyalet satış eşiğini geçince satış vergisi ister

Uygulama mağazası dışında (web’den) dijital ürün ya da abonelik satıyorsan vergiyi baştan kur: AB’deki tüketiciye ilk satıştan itibaren onun ülkesinin KDV’si (VAT) uygulanır, ABD’de birçok eyalet satış eşiğini geçince satış vergisi ister; bunu Paddle ya da Lemon Squeezy gibi satıcı olarak kayıtlı (merchant of record) bir ödeme sağlayıcısına bırak ya da Stripe Tax ile hesaplat

yo-dijital-satis-vergisi
#111
AB'deki tüketiciye dijital içerik satıyorsan 14 günlük cayma hakkı vardır

AB’deki tüketiciye dijital içerik satıyorsan 14 günlük cayma hakkı vardır; erişimi hemen veriyorsan ödeme ekranında müşterinin açık onayını ve cayma hakkını kaybettiğini kabul ettiğini al

yo-ab-cayma-hakki
#112
Türkiye'deki tüketiciye web'den abonelik ya da dijital içerik satıyorsan ödeme adımından hemen önce ön bilgilendirme formunu göster (satıcının adı ya da unvanı, adresi, telefonu, toplam fiyat, cayma hakkı, dijital içeriğin işlevselliği), mesafeli satış sözleşmesini onaylat ve ikisini e-posta ya da PDF gibi kalıcı bir yolla gönder

Türkiye’deki tüketiciye web’den abonelik ya da dijital içerik satıyorsan ödeme adımından hemen önce ön bilgilendirme formunu göster (satıcının adı ya da unvanı, adresi, telefonu, toplam fiyat, cayma hakkı, dijital içeriğin işlevselliği), mesafeli satış sözleşmesini onaylat ve ikisini e-posta ya da PDF gibi kalıcı bir yolla gönder; onay alınmazsa sözleşme kurulmamış sayılır. Hemen kullanılmaya başlanan dijital içerikte cayma hakkı tüketicinin onayıyla düşer (Mesafeli Sözleşmeler Yönetmeliği md. 5–8, 15)

yo-on-bilgilendirme
#113
Web'den satış yapıyorsan ana sayfadan doğrudan ulaşılan bir "İletişim" sayfasında künyeni ver: tacirsen ticaret unvanı, MERSİS numarası ve merkez adresi, esnafsan ad soyad ve vergi kimlik numarası

Web’den satış yapıyorsan ana sayfadan doğrudan ulaşılan bir “İletişim” sayfasında künyeni ver: tacirsen ticaret unvanı, MERSİS numarası ve merkez adresi, esnafsan ad soyad ve vergi kimlik numarası; ayrıca KEP adresi, e-posta, telefon ve bağlı olduğun meslek odası (Elektronik Ticarette Hizmet Sağlayıcı ve Aracı Hizmet Sağlayıcılar Hakkında Yönetmelik, 2022, md. 5)

yo-iletisim-kunyesi
#114
Sahte yorum yazma, yazdırma ya da satın alma: yorumu sadece ürünü gerçekten satın alan ya da kullanan bırakabilsin, olumsuz yorumları gizleme ve yorumları tarafsız bir ölçüte göre sırala

Sahte yorum yazma, yazdırma ya da satın alma: yorumu sadece ürünü gerçekten satın alan ya da kullanan bırakabilsin, olumsuz yorumları gizleme ve yorumları tarafsız bir ölçüte göre sırala; kanıtlayamadığın iddiayı (“en hızlı”, “%50 daha ucuz”, “uzman onaylı”) kullanma (Ticari Reklam ve Haksız Ticari Uygulamalar Yönetmeliği md. 9, 28/B). AB’de sahte yorum her durumda haksız ticari uygulamadır (2019/2161 sayılı Yönerge), ABD’de FTC sahte yorum ve referans için ihlal başına ceza keser (16 CFR 465)

yo-yorum-ve-iddia
#115
Arayüzü erişilebilir yap: metin ile arka plan arasındaki kontrast en az 4,5:1 olsun, her işlem klavyeyle yapılabilsin ve odaklanılan öğe görünsün, form alanlarının görünür etiketi, görsellerin alt metni olsun (WCAG 2.2)

Arayüzü erişilebilir yap: metin ile arka plan arasındaki kontrast en az 4,5:1 olsun, her işlem klavyeyle yapılabilsin ve odaklanılan öğe görünsün, form alanlarının görünür etiketi, görsellerin alt metni olsun (WCAG 2.2). Türkiye’de 6563’e tabi e-ticaret sitelerinden Haziran 2027’ye kadar WCAG 2.2’ye ve A seviyesi kontrol listesine uymaları isteniyor (Cumhurbaşkanlığı Genelgesi 2025/10); AB’de tüketiciye online satış yapan işletmelere 28 Haziran 2025’ten beri Avrupa Erişilebilirlik Yasası uygulanıyor, 10 kişiden az çalışanı ve 2 milyon €’yu aşmayan cirosu olan mikro işletmeler hariç

yo-erisilebilirlik
#116
Sitede, uygulamada ve mağaza görsellerinde kullandığın fotoğraf, ikon, font ve müziğin lisansını kontrol et: internette ücretsiz bulunan her görsel ticari kullanıma açık değildir, bazı fontlar web sitesine ya da uygulamaya gömülmek için ayrı lisans ister

Sitede, uygulamada ve mağaza görsellerinde kullandığın fotoğraf, ikon, font ve müziğin lisansını kontrol et: internette ücretsiz bulunan her görsel ticari kullanıma açık değildir, bazı fontlar web sitesine ya da uygulamaya gömülmek için ayrı lisans ister; AI ile ürettiğin görsellerde aracın ticari kullanım şartlarına bak. Lisans belgesini ya da indirdiğin sayfanın adresini sakla

yo-lisansli-icerik
Sonraki bölüm · 12Alan adı, e-posta & indekslemeDevam et →
12

Alan adı, e-posta & indeksleme

0 / 3
#117
Uygulamayı alt alan adında yayınla (app.alanadi.com), tanıtım sayfaları ana alan adında kalsın (alanadi.com)

Uygulamayı alt alan adında yayınla (app.alanadi.com), tanıtım sayfaları ana alan adında kalsın (alanadi.com); ikisi ayrı ekiplerce birbirini bozmadan değiştirilebilsin (DNS’te app için CNAME kaydı)

yo-alt-alan-adi
#118
E-postaları ana alan adından değil ayrı alt alan adlarından gönder: uygulama e-postaları (fatura, kayıt, şifre sıfırlama) mail.alanadi.com, pazarlama e-postaları (bülten, kampanya) news.alanadi.com

E-postaları ana alan adından değil ayrı alt alan adlarından gönder: uygulama e-postaları (fatura, kayıt, şifre sıfırlama) mail.alanadi.com, pazarlama e-postaları (bülten, kampanya) news.alanadi.com; her biri için SPF, DKIM ve DMARC kayıtlarını kur (ör. Resend), spam bildirimi ana alan adının itibarını düşürmesin

yo-eposta-alt-alan
#119
Herkese açık sayfalar için sitemap.xml oluştur ve Google Search Console'da Dizin oluşturma > Site haritaları bölümünden gönder

Herkese açık sayfalar için sitemap.xml oluştur ve Google Search Console’da Dizin oluşturma > Site haritaları bölümünden gönder

yo-sitemap
Sonraki bölüm · 13Sürüm çıkarma & geri dönüşDevam et →
13

Sürüm çıkarma & geri dönüş

0 / 2
#120
Yeni sürümü canlıyı bozmadan yayına al ve sorun çıkarsa önceki sürüme dakikalar içinde dönebil (blue-green ya da sağlık kontrollü kesintisiz güncelleme

Yeni sürümü canlıyı bozmadan yayına al ve sorun çıkarsa önceki sürüme dakikalar içinde dönebil (blue-green ya da sağlık kontrollü kesintisiz güncelleme; istersen önce trafiğin küçük bir kısmına aç ve hata oranını izleyerek artır: canary); geri dönüşü yayından önce bir kez dene

yo-kesintisiz-surum
#121
Veritabanı değişikliklerini geriye uyumlu yap (genişlet-daralt): sütunu yeniden adlandırma ya da silme yerine önce yenisini ekle, iki yapıyı da okuyan kodu çıkar, veriyi taşı, eskisini sonraki sürümde kaldır

Veritabanı değişikliklerini geriye uyumlu yap (genişlet-daralt): sütunu yeniden adlandırma ya da silme yerine önce yenisini ekle, iki yapıyı da okuyan kodu çıkar, veriyi taşı, eskisini sonraki sürümde kaldır; yoksa eski sürüme dönüş veritabanında kırılır

yo-geriye-uyumlu-sema