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
Sırlar & erişim
0 / 8API 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.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-temizleVeritabanı 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-yetkiDirectory listing'i kapat
Directory listing’i kapat
yo-directory-listingVarsayı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-rolTü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-sifrelerCanlı 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-kapaliGitHub, 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-2faKimlik doğrulama & oturum
0 / 13Yetki 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-sunucudaOwnership/izin kurallarını her sorguda açıkça uygula
Ownership/izin kurallarını her sorguda açıkça uygula
yo-sahiplik-kontroluSupabase 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Şifreleri güçlü algoritmayla hash'le
Şifreleri güçlü algoritmayla hash’le
yo-sifre-hashKayı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Çerezlere HttpOnly + Secure + SameSite ver
Çerezlere HttpOnly + Secure + SameSite ver
yo-guvenli-cerezCSRF token'ları ekle
CSRF token’ları ekle
yo-csrfŞ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Ş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-linkiKullanıcı enumerasyonunu engelle (jenerik hata mesajı)
Kullanıcı enumerasyonunu engelle (jenerik hata mesajı)
yo-kullanici-enumerasyonuBaşarısız girişlerden sonra hesabı kilitle / kademeli gecikme
Başarısız girişlerden sonra hesabı kilitle / kademeli gecikme
yo-hesap-kilitlemeTü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-korumasiOTP 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-limitGirdi & veri
0 / 10Girdiyi sunucuda şema ile doğrula
Girdiyi sunucuda şema ile doğrula
yo-girdi-dogrulamaKaydetmeden önce sanitize et
Kaydetmeden önce sanitize et
yo-sanitizeÇıktıyı XSS'e karşı escape et
Çıktıyı XSS’e karşı escape et
yo-xss-escapeSQL sorgularını parametrele
SQL sorgularını parametrele
yo-sql-parametreRequest body boyutunu sınırla
Request body boyutunu sınırla
yo-istek-boyutuDosya 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-yuklemeDosya 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-traversalSunucunun 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-ssrfAPI 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-assignmentDosya 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-erisimiTaşıma & başlıklar
0 / 3HTTPS zorunlu + HSTS
HTTPS zorunlu + HSTS
yo-https-hstsGü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-basliklariCORS'u whitelist ile kilitle
CORS’u whitelist ile kilitle
yo-corsEntegrasyon, ödeme, AI
0 / 16Webhook imzalarını doğrula (ödeme webhook'ları dahil)
Webhook imzalarını doğrula (ödeme webhook’ları dahil)
yo-webhook-imzasiWebhook'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-tekrariFiyatları sunucu tarafında belirle
Fiyatları sunucu tarafında belirle
yo-fiyat-sunucudaCanlı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-islerPrompt injection'a karşı savunma ekle
Prompt injection’a karşı savunma ekle
yo-prompt-injectionUygulamadaki 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-yetkisiAI 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-kotasiHarcama uyarısı (billing alert) kur
Harcama uyarısı (billing alert) kur
yo-harcama-uyarisiAI ç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-onbellegiHer 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-kademesiModeli 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-testiKodun 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-ciktiBelgelere 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-yetkiLLM 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-denemeAI 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-guvencesiAB'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-seffaflikOperasyon & dayanıklılık
0 / 13Hata 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-mesajlariLoglardan hassas veriyi temizle
Loglardan hassas veriyi temizle; log dosyaları ve log sayfaları herkese açık olmasın
yo-log-hassas-veriGüvenlik olaylarını logla (audit trail)
Güvenlik olaylarını logla (audit trail)
yo-guvenlik-loguBağımlılıkları denetle (audit / otomatik güncelleme)
Bağımlılıkları denetle (audit / otomatik güncelleme)
yo-bagimlilik-denetimiOtomatik yedekleme kur + geri yükleme testi yap
Otomatik yedekleme kur + geri yükleme testi yap
yo-yedeklemeHesap silme gerçekten silsin (kalıcı silme)
Hesap silme gerçekten silsin (kalıcı silme)
yo-hesap-silmeSaldırgan gibi test et (pentest / düşmanca inceleme)
Saldırgan gibi test et (pentest / düşmanca inceleme)
yo-pentestSı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-katmanlariVeritabanı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-havuzuYavaş 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-performansiYayı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-testiCanlı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-izlemeSitenin 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-izlemeTedarik zinciri & CI
0 / 3Lock 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-dosyasiPaketlerin 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-scriptleriFork'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-secretMobil uygulama
0 / 8Uygulama 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-anahtarOturum 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-depolamaAndroid'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-yedeklemeFirebase 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-checkAndroid 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-r8Deep link'leri doğrula: Android App Links (autoVerify) ve iOS Universal Links kullan, linkten gelen parametrelere güvenme, giriş ya da ödeme gibi işlemleri sadece linkle tetikleme
Deep link’leri doğrula: Android App Links (autoVerify) ve iOS Universal Links kullan, linkten gelen parametrelere güvenme, giriş ya da ödeme gibi işlemleri sadece linkle tetikleme
yo-deep-linkHassas 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-sabitlemeSadece 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-izinlerSEO & teknik site
0 / 13Özel 404 sayfası
Özel 404 sayfası
yo-404-sayfasiBenzersiz sayfa başlıkları
Benzersiz sayfa başlıkları
yo-sayfa-basliklariMeta description'lar
Meta description’lar
yo-meta-descriptionHer 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-hiyerarsisiSosyal paylaşım görseli (OG/Twitter card)
Sosyal paylaşım görseli (OG/Twitter card)
yo-og-gorselirobots.txt
robots.txt
yo-robots-txtSayfanı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-kaynaktaYapı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-veriBreadcrumb'lar
Breadcrumb’lar
yo-breadcrumbİç linkler
İç linkler
yo-ic-linklerHer 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-konuGörsellerde alt text
Görsellerde alt text
yo-alt-textGoogle Analytics
Google Analytics
yo-analitikİçerik & dönüşüm
0 / 10CTA'yı fold üstüne koy
CTA’yı fold üstüne koy
yo-cta-ustMobilde sticky CTA
Mobilde sticky CTA
yo-sticky-ctaTeşekkür (thank you) sayfası
Teşekkür (thank you) sayfası
yo-tesekkur-sayfasi5 soruluk SSS
5 soruluk SSS
yo-sssVaka çalışmaları
Vaka çalışmaları
yo-vaka-calismalariGerçek kullanıcı yorumları
Gerçek kullanıcı yorumları
yo-kullanici-yorumlariYanıt süresi taahhüdü
Yanıt süresi taahhüdü
yo-yanit-suresi-taahhuduHarita + yol tarifi
Harita + yol tarifi
yo-harita-yol-tarifiEkip fotoğrafı
Ekip fotoğrafı
yo-ekip-fotografiGizlilik politikası sayfası
Gizlilik politikası sayfası
yo-gizlilik-politikasiHukuki & KVKK
0 / 19Fontları (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-fontlarOturum 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-maskelemeAydı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-uygunAydı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-ayriZorunlu 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-onayiKiş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-aktarimVeri 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-bildirimiTicari 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-iletiAbonelik 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-sartlariKayı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-kontroluKullanı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-sikayetiKullanı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-bildirimiUygulama 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-vergisiAB'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-hakkiTü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-bilgilendirmeWeb'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-kunyesiSahte 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-iddiaArayü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-erisilebilirlikSitede, 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-icerikAlan adı, e-posta & indeksleme
0 / 3Uygulamayı 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-adiE-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-alanHerkese 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-sitemapSürüm çıkarma & geri dönüş
0 / 2Yeni 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-surumVeritabanı 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