Compare commits

..

17 Commits

Author SHA1 Message Date
bilalgursen
a834f5ff01 merge: origin/gece/p5-kapi-olcum (gece vardiyası 2026-09-21)
All checks were successful
Deploy / deploy (push) Successful in 8m3s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 15:07:25 +03:00
bilalgursen
dedf3561b3 merge: origin/gece/p2-olcum~1 (gece vardiyası 2026-09-21)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 15:07:25 +03:00
bilalgursen
f87af6e2c6 merge: origin/gece/p1-rehber-altyapi (gece vardiyası 2026-09-21)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 15:07:24 +03:00
bilalgursen
f5911c5ef4 merge: origin/gece/rehber-yazilari (gece vardiyası 2026-09-21)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 15:07:24 +03:00
bilalgursen
2602b6f407 feat(rehber): universite-okurken-tekrar-yks yazısı
Hâlihazırda okuyan öğrencinin yeniden YKS süreci: kayıtlı olmak sınava/tercihe
engel değil, ilişik kesme yalnız yeni kayıt için (2026-YKS Kılavuzu b.10),
önce bakılacak iki sınavsız kapı (Ek Madde-1, not ortalamasıyla yatay geçiş),
devam / kayıt dondurma / kayıt sildirme tablosu, SSS ve Kaynaklar.
1 flowchart TD (%% aria + %% altyazi).

Yeni yazıya 3 iç link aynı commit'te (dynamicParams=false; yazı alınmazsa
~1 ile linkler de gider): mezuna-kalmak-mi-kayit-olmak-mi,
yatay-gecis-cap-yandal (teyitsiz "eski kaydın silinir" cümlesi kılavuz
ifadesine çekildi), yerlesemedim-ne-yapmaliyim.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 09:26:22 +03:00
bilalgursen
643e41cc98 fix(analitik): kullaniciTanit script'ten önce sessiz no-op olmasın
Erken olay kuyruğu yalnız olay() içindi; sert yüklemede (OAuth / e-posta
linki dönüşü) RybbitIdentify effect'i de script'ten önce koşuyor, identify
kayboluyor ve kuyruktan boşalan olaylar anonim profile yazılıyordu
(08-kod-denetimi #6).

- Tek "son değer" slotu (bekleyenKimlik): kuyruk değil, yalnız en son
  kimlik anlamlı. Yoklama zamanlayıcısı olay kuyruğuyla ortak
  (zamanlayiciyiBaslat); script 10 sn'de gelmezse slot da atılır.
- kuyruguBosalt kimliği olaylardan ÖNCE uygular.
- kullaniciTemizle slotu siler.

rybbit-identify.tsx'e dokunulmadı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 09:22:10 +03:00
bilalgursen
67be93c394 feat(analitik): kapi_acildi + kapi_kapatildi olayları
Profil kapısının açılışı ve tamamlanmadan kapanışı doğrudan ölçülmüyordu;
"82 oturum kapıyı gördü" kod davranışından çıkarımdı (09-analitik-tur2).
İki yeni olay (adlar kalıcı sözleşme):

- kapi_acildi {tetik: arti|sonuc|sihirbaz|duzenle|diger}: depoda tek
  açılış noktası (kapiyiAc). Her açıcı kendi tetik'ini yazar:
  programEkleIste → arti, profilDuzenlemeyiAc → duzenle, profilToplamaAc →
  isteğe bağlı 3. parametre, verilmezse hedeften (sonuc/sihirbaz), o da
  yoksa diger. Depoya `tetik` alanı eklendi.
- kapi_kapatildi {adim: giris|sira|sihirbaz, tetik}: yalnız TAMAMLANMADAN
  kapanışta; kapı bileşeninde tek noktadan (vazgec) — X, dışarı tıklama,
  Esc ve "Vazgeç" butonları. Tamamlanan kapı profilTamamlandi ile depodan
  kapanır, bu noktaya uğramaz.

Ham sıra/e-posta olaylara girmez. Davranış değişmez.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 05:25:23 +03:00
bilalgursen
9c7ea13590 fix(rehber): taban yazısında ürün verisi 5 yıl (2021–2025), hedef yazısında dilim adı atfı silindi
- taban-siralamalar-nasil-degisir: şema, %% aria ve gövdede "dört yıl / son 4 yıl" -> 5 yıl
  (yokatlas.db programs tablosunda sira2021..sira2025 kolonları dolu; ürün satırı "Son 5 yıl" gösteriyor).
  Genel okuma tavsiyesi olan "en az 3-4 yıla bak" altyazısı yerinde.
- hedef-siralama-nasil-belirlenir: "üründe dilimin adı da böyle geçer" yan cümlesi silindi
  (dilim etiketi kararı bekliyor).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 05:24:27 +03:00
bilalgursen
4b87a3e71e fix(analitik): program_eklendi yalnız gerçek eklemede atılsın
Olay, profilsiz ziyaretçide program listeye girmeyip profil kapısı
açıldığında da atılıyordu (kapiAcildi dalı else'e düşüyordu); seri
"ekleme"yi değil "+ tıklaması"nı ölçüyordu (09-analitik-tur2, S6).

- Buton: yalnız sonuc.eklendi iken {kaynak, yol: "dogrudan"}.
- profilTamamlandi: bekleyen program listeye girdiyse (ekle() true)
  {kaynak, yol: "kapi"}.
- OlayAdi yorumuna seri kırılması notu.

Davranış değişmez: profilsiz + hâlâ kapıyı açar.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 05:23:40 +03:00
bilalgursen
0ec390777e feat(rehber): yeni yazılara iç linkler + kılavuzla çelişen ifadelerin düzeltilmesi
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:51:22 +03:00
bilalgursen
e1bb4829fd fix(giris): 429 mesajı + 60 sn geri sayım
Hız sınırına takılan kullanıcı "Tekrar dener misin?" görüp sınırı
uzatıyordu; 429'da "Çok sık denedin, bir dakika sonra tekrar dene" denir.
"Yeniden gönder" geri sayımı 30 → 60 sn: sunucu tarafındaki adres başına
60 sn soğumayla hizalı (o değişiklik gelmese de zararsız).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:49:31 +03:00
bilalgursen
cf19903e19 feat(analitik): huni olayları
Huninin kör noktalarına altı olay (adlar kalıcı sözleşme):
- cta_form_goruntulendi: programatik sayfalardaki CTA kartı, yalnız
  profilsiz dalda (görünüm hook'u; sayfa ayrımı Rybbit pathname'inden)
- sira_form_hata {kaynak: hero|cta|kapi|duzenle}: facet isteği hatası;
  geçersiz sayı doğrulaması sayılmaz
- sonuc_goruntulendi {girisli, sira_kovasi}: /sonuc pathname'i maskeli,
  huni adımı bu olayla kurulur; oturum başına girişli/anonim birer kez
- paket_goruntulendi {kaynak: kilit|kredi_bitti|nav|diger}: sayfaya
  dokunmadan yeni paket/layout.tsx + client bileşenle; /paket linklerine
  ?kaynak= eklendi (listem kilit kartları, kredi-yetersiz, nav kredi pill'i)
- liste_uretim_hata {kod: HATA|ISTISNA}: AUTH/KREDI/PAKET dalları atmaz
- giris_hata {yontem: eposta|google, status}

Ham sıra ve e-posta hiçbir olaya girmez; sıra yalnız siraKovasi() ile.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:49:09 +03:00
bilalgursen
1a75f42f29 fix(rehber): şema metni SSR'da + mermaid hata toparlama
Şemanın metin karşılığı yalnızca SVG çizilince `aria-label` olarak
basılıyordu; JS çalıştırmayan botlar iskeletten başka bir şey görmüyordu.
Artık aynı `ariaLabel` metni figure içinde bir `<details>` olarak sunucu
HTML'ine girer. mermaid import/render hatası yakalanır: iskelet kalkar,
metin açık gelir, mermaid'in body'de bıraktığı geçici div temizlenir.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:48:10 +03:00
bilalgursen
d9e125c5de feat(rehber): guncelleme alanı → sitemap/JSON-LD/OG/görünür tarih
Frontmatter'a isteğe bağlı `guncelleme` alanı geldi ve uçtan uca akıyor:
sitemap lastmod (yazı + /rehber dizini), Article JSON-LD dateModified,
og:article modified_time ve makale başlığının altındaki görünür tarih
satırı. `tarih`/`guncelleme` YYYY-AA-GG değilse ya da güncelleme yayından
önceyse build kırılır. Tarih metni saat diliminden bağımsız `trTarih` ile
üretilir.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:47:29 +03:00
bilalgursen
fa43392077 fix(analitik): görünüm hook'u callback ref + erken olay kuyruğu
useGorunumOlayi useRef + [ad, anahtarEki] deps'li effect kullanıyordu:
eleman ilk commit'te yoksa (kaydet-banner: mount sonrası açılır, portal
içinde) ya da sökülüp yeni düğümle geri geliyorsa (tadımlık satırı) gözlem
hiç kurulmuyordu → kaydet_banner_goruntulendi / tadimlik_goruntulendi = 0.
Hook artık callback ref döner; gözlem düğüm bağlanınca kurulur, sökülünce
React 19 ref temizliğiyle bırakılır. Çağıranlar yalnız ref={…} verdiği
için kullanım yerleri değişmedi.

olay(): Rybbit script'i afterInteractive; sert yüklemede mount anında
atılan olaylar window.rybbit henüz yokken sessizce düşüyordu. Artık en çok
20 olay, 500 ms aralıkla en çok 20 deneme (10 sn) kuyrukta bekler; script
gelmezse (reklam engelleyici, dev) kuyruk atılır.

olayBirKez(): hook'taki sessionStorage tekilleştirmesinin effect'ten
çağrılabilir hâli (anahtar biçimi aynı: kolaytercih.olay.<ad>[.<ek>]).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:47:24 +03:00
bilalgursen
a9ea0bf49b fix(rehber): frontmatter tırnak + tablo sarmalayıcı
Frontmatter değerinin iki ucundaki tırnak bağımsız siliniyordu; "Alıntı"
diye başlayan açıklamalar baştaki tırnağını kaybediyordu. Artık yalnızca
tamamı aynı tırnakla sarılı değer soyulur. Makale tabloları yatay kayan,
klavyeyle odaklanabilir bir bölgeye sarılır (mobilde sayfa taşması).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:46:19 +03:00
bilalgursen
902c7a1e3a feat(rehber): üç yeni mermaid şemalı yazı + ek yerleştirme yazısının güncellenmesi
- ek-yerlestirme-sonuclari-ve-kayit (ÖSYM kaynaklarıyla teyitli; açıklanmamış tarihler 'açıklanmadı')
- mezuna-kalmak-mi-kayit-olmak-mi (OBP kuralı ve Ek Madde-1 resmî metinlerden)
- hedef-siralama-nasil-belirlenir (tüm rakamlar yokatlas.db, 1,4x kuralı risk.ts)
- ek-yerlestirme-2026: geçmiş zamana çekildi, yeni yazıya iç link

Gece vardiyası 2026-09-21; yayın öncesi kontrol listesi docs/gece-vardiyasi/2026-09-21/07-yazilimci-raporlari.md

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 04:44:19 +03:00
32 changed files with 1133 additions and 150 deletions

View File

@@ -2,13 +2,18 @@
baslik: Ek Yerleştirme Nedir? 2026 Ek Tercih Rehberi
aciklama: İlk yerleştirmede boşta kaldıysan oyun bitmedi — kimlerin başvurabileceği ve ikinci şansı doğru kullanmanın yolu tek şemada.
tarih: 2026-07-22
guncelleme: 2026-09-21
---
Merkezi yerleştirme sonuçları açıklandığında bir programa yerleşememiş olmak yılın sonu değildir. Üniversiteler kayıt dönemini kapattığında binlerce kontenjan boş kalır ve ÖSYM bu boş kontenjanlar için **ek yerleştirme** (ek tercih) süreci açar.
## Ek yerleştirme ne zaman?
## Ek yerleştirme ne zaman yapıldı?
Kayıtlar tamamlandıktan sonra, genellikle **Eylül ayı içinde**. ÖSYM önce boş kontenjanları içeren Ek Yerleştirme Kılavuzu'nu yayımlar, ardından birkaç günlük tercih penceresi açılır. Kesin tarihler her yıl ÖSYM duyurusuyla netleşir — tercih takviminin tamamı için [YKS 2026 tercih takvimi](/rehber/yks-tercih-takvimi-2026) yazısına bak.
2026'da ek yerleştirme tercihleri **17 Eylül saat 16.00** ile **21 Eylül saat 23.59** arasında alındı. Ek yerleştirme ücreti 170 TL'ydi ve son ödeme zamanı 22 Eylül 2026 saat 23.59 olarak duyuruldu; ücreti yatırmayan adayın tercihleri geçersiz sayılıyor.
Sıra her yıl aynı işler: ilk yerleştirmenin kayıtları tamamlanır, ÖSYM boş kontenjanları içeren Ek Yerleştirme Kılavuzu'nu yayımlar, ardından birkaç günlük tercih penceresi açılır. Tarihler her yıl ÖSYM duyurusuyla netleşir — yılın tamamı için [YKS 2026 tercih takvimi](/rehber/yks-tercih-takvimi-2026) yazısına bak.
**Tercihini yaptıysan:** 21 Eylül 2026 itibarıyla ÖSYM sonuç tarihi açıklamadı. Sonuca nereden bakacağın, kayıt, e-kayıt ve yurt başvurusu için [ek yerleştirme sonuçları ve kayıt](/rehber/ek-yerlestirme-sonuclari-ve-kayit) yazısına geç.
## Kimler başvurabilir?
@@ -32,12 +37,13 @@ Kurallar nettir ve en kritik olanı şudur:
- **İlk yerleştirmede herhangi bir programa yerleşen aday, kayıt yaptırmasa bile ek yerleştirmeye başvuramaz.** "Yerleştim ama gitmeyeceğim, ek tercihte daha iyisini denerim" diye bir yol yoktur.
- Ek yerleştirme yalnızca ilk yerleştirmede **hiçbir programa yerleşememiş** adaylara açıktır.
- İlk dönemde hiç tercih yapmamış adaylar da ek yerleştirmeye katılabilir.
- 2026 kılavuzuna göre özel yetenek sınavıyla bir programa yerleşmiş adaylar da ek yerleştirmede tercih yapabilir.
Bu kural, ilk listenin sonuna "kayıt yaptırmayacağım ama boşta da kalmayayım" mantığıyla program yazmanın neden tehlikeli olduğunu gösterir: oraya yerleşirsen ek tercih hakkın yanar. Bu tuzağın detayı [tercih listesi rehberinde](/rehber/tercih-listesi-nasil-yapilir).
## Ek yerleştirmede taban nasıl işler?
Ek yerleştirmede bir programa başvurabilmek için o programın **ilk yerleştirmedeki taban puanına eşit veya daha yüksek** puana sahip olman gerekir (ilk yerleştirmede hiç dolmayan programlarda bu şart esner). Yani ek tercih "tabanlar sıfırlanır, herkes her yere yazılır" demek değildir.
Ek yerleştirmede bir programı tercih edebilmek için o programın **ilk yerleştirmedeki en küçük puanına eşit veya daha yüksek** puana sahip olman gerekir. İlk yerleştirmede kontenjanı dolmayan, yani en küçük puanı oluşmayan programları ise ilgili puan türünde puanı hesaplanmış tüm adaylar yazabilir. Yani ek tercih "tabanlar sıfırlanır, herkes her yere yazılır" demek değildir.
## Boş kontenjanlar nereden çıkar?
@@ -48,8 +54,8 @@ Boş kontenjan listesi ağırlıklı olarak vakıf üniversiteleri, ücretli/ind
## Ek tercih stratejisi
1. **Kılavuzu bekleme, hazırlığını şimdi yap.** Sıralamana uygun program evrenini [tercih robotuyla](/tercih-robotu) önceden çıkar; kılavuz yayımlanınca sadece kesişimi almak kalır.
2. **İlk yerleştirme mantığıyla kurma.** Ek yerleştirmede tek liste hakkın var ve pencere kısa; dengeli-garanti ağırlıklı, gerçekçi bir liste kur.
3. **Kayıt yaptırmayacağın programı yine yazma.** Aynı kural burada da geçerli — ek yerleştirmeden sonra üçüncü bir şans yok.
1. **Kılavuzu bekleme, hazırlığını önceden yap.** Sıralamana uygun program evrenini [tercih robotuyla](/tercih-robotu) önceden çıkar; kılavuz yayımlanınca sadece kesişimi almak kalır.
2. **İlk yerleştirme mantığıyla kurma.** Ek yerleştirmede tek liste hakkın var ve pencere kısa; dengeli ve güvenli (halk arasında "garanti") tercih ağırlıklı, gerçekçi bir liste kur.
3. **Kayıt yaptırmayacağın programı yine yazma.** Ek yerleştirmede kayıt hakkı kazandığın programı sonradan değiştiremezsin; üstelik yerleşirsen, kayıt yaptırmasan bile, gelecek yıl [OBP katsayın yarıya düşer](/rehber/obp-nedir-nasil-hesaplanir).
Ek yerleştirme, ilk turda şanssızlık yaşayanlar için gerçek bir ikinci şanstır; panik turu değil. Veriyle ve soğukkanlı kurulmuş bir ek liste, aceleyle yazılmış ilk listeden daha iyi sonuç verebilir.

View File

@@ -0,0 +1,139 @@
---
baslik: Ek Yerleştirme Sonuçları Ne Zaman Açıklanır? Sonuçtan Sonra Kayıt, e-Kayıt ve Yurt
aciklama: Ek tercihini yaptın, şimdi ne olacak? Sonuca nereden bakılır, kayıt tarihi nerede yazar, e-Devlet kaydı ve KYK yurt başvurusu nasıl işler, yerleşirsen ya da yerleşemezsen seni ne bekler — tek şemada.
tarih: 2026-09-21
---
2026-YKS ek yerleştirme sonuçları ÖSYM'nin **sonuc.osym.gov.tr** adresinden açıklanır; 21 Eylül 2026 itibarıyla ÖSYM sonuç için bir tarih duyurmadı. Kayıt tarihleri sonuç duyurusunda ve sonuç ekranında yazar; bu süre içinde kaydını tamamlamayan aday kayıt hakkını kaybeder. Ek yerleştirmeyle bir programa yerleşen aday, kayıt olsun ya da olmasın, 2027-YKS'ye girerse OBP katsayısı yarıya düşer.
Bu yazıdaki kurallar ÖSYM'nin 2026 kılavuzlarına ve resmî duyurulara dayanıyor; kaynakların tamamı yazının sonunda.
## Ek yerleştirme sonuçları ne zaman açıklanacak?
Kısa cevap: **henüz belli değil.** ÖSYM'nin ek yerleştirme duyurusunda da, Ek Yerleştirme Kılavuzu'nda da sonuç tarihi yok. Biz de tahmin yazmıyoruz; tarih açıklandığında bu yazıyı güncelleyeceğiz. Resmî olarak bilinenler şunlar:
- Tercihler **17 Eylül 2026 saat 16.00** ile **21 Eylül 2026 saat 23.59** arasında alındı.
- Ek yerleştirme ücreti **170 TL**; son ödeme zamanı **22 Eylül 2026 saat 23.59**. Ücreti yatırmayan adayın tercihleri geçersiz sayılıyor, yerleştirme işlemine alınmıyor.
- Sonuçlar **sonuc.osym.gov.tr** adresinden duyurulacak. Sonuç belgesi basılmıyor ve adresine postayla gönderilmiyor; sonucunu yalnızca internetten görürsün.
Tarih için tek güvenilir adres ÖSYM'nin kendi duyuru sayfası. Sosyal medyada dolaşan "şu gün açıklanacak" paylaşımlarına göre plan yapma.
## Sonuç ekranından sonra hangi yoldan gideceksin?
```mermaid
%% aria: Ek yerleştirme sonrası yol şeması: sonuç ekranında bir programa yerleştiğini görürsen önündeki soru kayıt süresi içinde kayıt yaptırıp yaptırmayacağındır. Kayıt yaptıracaksan önce e-Devlet'te e-kayıt seçeneğinin açık olup olmadığına bakarsın; açıksa e-kayıt yapıp barkodlu belgeni alırsın, kapalıysa belgelerinle üniversiteye bizzat başvurursun. İki yol da kaydını tamamlar; ardından üniversitenin duyurduğu ders kaydı tarihini ve kayıtlar bitince açılacak KYK yurt başvurusu duyurusunu takip edersin. Kayıt yaptırmazsan kayıt hakkın yanar ve yerleştirilmiş sayıldığın için 2027-YKS'de OBP katsayın yine yarıya düşer. Sonuç ekranında yerleşemediğini görürsen OBP katsayın düşmez ve önündeki yolları sakin kafayla değerlendirirsin.
%% altyazi: Kritik ayrım: OBP katsayısını düşüren şey kayıt değil, yerleştirilmiş olmaktır; kayıt yaptırmamak bu bedeli ortadan kaldırmaz.
flowchart TD
S{"Sonuç ekranında<br/>ne yazıyor?"}
S -- "bir programa yerleştin" --> K{"Kayıt süresi içinde<br/>kayıt yaptıracak mısın?"}
K -- "evet" --> E{"e-Devlet'te e-kayıt<br/>seçeneğin açık mı?"}
E -- "evet" --> E1("e-kayıt yap,<br/>barkodlu belgeni al")
E -- "hayır" --> E2("Belgelerinle üniversiteye<br/>bizzat başvur")
E1 --> T("Tamam: kaydın bitti,<br/>ders kaydı tarihini takip et")
E2 --> T
T --> Y("Dikkat: KYK yurt başvurusu<br/>kayıtlar bitince açılır, duyuruyu izle")
K -- "hayır" --> R("Risk: kayıt hakkın yanar,<br/>seneye OBP katsayın yine yarıya düşer")
S -- "yerleşemedin" --> N("OBP katsayın düşmez:<br/>önündeki yolları sakin kafayla değerlendir")
classDef uyari fill:#fef3c7,stroke:#f59e0b,color:#92400e
classDef garanti fill:#d1fae5,stroke:#10b981,color:#065f46
classDef hayal fill:#fee2e2,stroke:#ef4444,color:#991b1b
class T garanti
class Y,N uyari
class R hayal
```
## Yerleştiysen: kayıt nasıl yapılır?
Ek Yerleştirme Kılavuzu'na göre kayıt tarihleri **yerleştirme sonuçları duyurusunda** belirtilir ve sonuç ekranında da yer alır. Kayıt hakkı kazanan adayın bu süre içinde üniversitesine başvurması zorunludur; süresinde başvurmayan ya da kayıt işlemini tamamlamayan aday kayıt hakkını kaybeder.
### e-Devlet'ten e-kayıt
2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu'ndaki YÖK açıklamasına göre:
- Tüm devlet üniversiteleri ile isteyen vakıf ve KKTC üniversiteleri e-Devlet'ten kayıt imkânı sunar ve **ek yerleştirme için de elektronik kayıt yapılabilir.**
- e-kayıt zorunlu değil, isteğe bağlıdır. turkiye.gov.tr adresine e-Devlet şifrenle girip Yükseköğretim Kurulu Başkanlığı bölümünden yapılır.
- Lise mezuniyetin MEB sisteminden doğrulanırsa ayrıca diploma istenmez. Doğrulanamazsa e-kayıt yapamazsın; üniversiteye yönlendirilirsin.
- Özel yetenek programları ile üniversitenin e-kayda uygun görmediği programlar (örneğin sağlık raporu isteyenler) e-kayıt dışındadır.
- Kaydını tamamlayınca barkodlu kayıt belgesi alabilirsin. e-kayıt yapanlar, üniversitenin duyurduğu tarihte ve istenen belgelerle ders kaydına gider.
### Üniversitede şahsen kayıt
Aynı kılavuzun saydığı belgeler:
- Lise diplomasının aslı ya da onaylı örneği, yoksa yeni tarihli mezuniyet belgesi
- Üniversite isterse 12 adet 4,5 × 6 cm fotoğraf
- Katkı payı ya da öğretim ücretinin ödendiğini gösteren belge
- Üniversitenin kayıttan önce ilan ettiği diğer belgeler
Üç kural daha: kayda **bizzat** başvurulur, postayla kayıt yapılmaz; belgelerin onaysız sureti ya da fotokopisi kabul edilmez; belge eksikse kayıt yapılmaz. O yüzden yola çıkmadan üniversitenin kayıt duyurusunu mutlaka aç.
Başka bir örgün programda kaydın varsa dikkat: aynı anda iki örgün lisans ya da iki örgün önlisans programına kayıt yapılamıyor. Yeni programa kaydolabilmek için eski üniversitenle ilişiğini kesmen gerekiyor.
Kayıt sürecinin genel anlatımı [üniversite kayıt rehberinde](/rehber/universite-kayit-rehberi-2026); oradaki tarihler Ağustos'taki ilk yerleştirmeye aittir.
## İlk yerleştirme ile ek yerleştirme arasında ne fark var?
| | İlk yerleştirme | Ek yerleştirme |
|---|---|---|
| Kimler tercih yapabildi | İlgili yerleştirme puanı hesaplanan adaylar | İlk yerleştirmede hiçbir programa yerleştirilmeyenler (özel yetenekle yerleşenler de yapabildi) |
| Tercih sayısı | En fazla 24 | En fazla 24 |
| Sonuç | 18 Ağustos 2026'da açıklandı | 21 Eylül 2026 itibarıyla tarih açıklanmadı |
| Kayıt | 24–28 Ağustos 2026 | Sonuç duyurusunda yazacak |
| e-kayıt | 24–26 Ağustos 2026 | Yapılabilecek; tarihi açıklanmadı |
| 2027-YKS'de OBP katsayısı | Yarıya düşer | Yarıya düşer |
| KYK yurt başvurusu | 25–29 Ağustos 2026, e-Devlet | Kayıtlar tamamlandıktan sonra; tarih açıklanmadı |
Ek yerleştirmeye kimlerin girebildiği ve tabanların nasıl işlediği [ek yerleştirme rehberinde](/rehber/ek-yerlestirme-2026).
## Kayıt yaptırmazsan ne olur?
Üç sonucu var ve üçü de kılavuzda yazıyor:
1. **Kayıt hakkın yanar.** Belirtilen tarihlerde kaydını yaptırmayan aday sonradan hak iddia edemez.
2. **Programı değiştiremezsin.** Ek yerleştirmede kayıt hakkı kazandığın programı sonradan değiştirmek ya da daha düşük puanla öğrenci alan başka bir programa kaydolmak mümkün değil.
3. **OBP katsayın yine yarıya düşer.** Kural kayda değil, yerleştirilmiş olmaya bağlı: 2026-YKS ile bir programa yerleşen aday (ek yerleştirme dahil) 2027-YKS'ye girerse OBP katsayısı 0,12 yerine 0,06 uygulanır. Diploma notu 80 olan biri için bu, 48 puanlık katkının 24'e inmesi demek. Hesabın tamamı [OBP yazısında](/rehber/obp-nedir-nasil-hesaplanir).
Yani "kayıt olmazsam OBP'm kurtulur" diye bir yol yok. Seneye yeniden denemeyi düşünüyorsan bile kayıt olup olmamayı bu bilgiyle tart; kayıt olmak, kaydı dondurmak ve mezuna kalmak seçeneklerini [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) karar ağacında karşılaştırdık.
## KYK yurduna ne zaman başvuracaksın?
Kredi ve Yurtlar Genel Müdürlüğü'nün 19 Ağustos 2026 tarihli duyurusuna göre ek kontenjanla yerleşen öğrencilerin yurt başvuruları, yükseköğrenim kayıtları tamamlandıktan sonra **ilerleyen tarihlerde** alınacak. Duyuruda bu grup için tarih verilmedi. İlk yerleştirmede başvurular e-Devlet üzerinden alınmıştı.
Kaydını yaptırdıktan sonra kygm.gsb.gov.tr duyurularını takip et. Yurt çıkmama ihtimaline karşı barınma bütçeni şimdiden hesaplamak istersen [yurt, burs ve yıllık maliyet](/rehber/yurt-burs-ve-yillik-maliyet) yazısına bak.
## Yerleşemediysen önünde ne var?
Önce iyi haber: OBP katsayısı yalnızca **yerleştirilen** adaylar için yarıya iner. Ek yerleştirmede de yerleşemediysen — ve bu yıl özel yetenek sınavıyla bir programa kayıt olmadıysan — 2027-YKS'ye tam katsayıyla girersin.
Kılavuz bir kapıyı da açıkça kapatıyor: kayıtlar bittikten sonra kontenjan açığı kalan programlara ön kayıtla öğrenci alınmıyor. Yani üniversitelerin kendi başına boş kontenjan doldurmasını bekleme.
Bundan sonrası bir yıllık plan işi. Hangi durumda hangi yolun açık olduğunu [yerleşemedim, şimdi ne olacak?](/rehber/yerlesemedim-ne-yapmaliyim) yazısında şemayla anlattık. Seneye listeni kurarken de tek bir ders yeter: sonuna, yerleşirsen gerçekten gideceğin güvenli tercihleri (halk arasında "garanti tercih") koymak. Sıralamana göre hangi programın hangi dilimde kaldığını [tercih robotunda](/tercih-robotu) geçmiş yılların tabanlarıyla görebilirsin.
## Sık sorulan sorular
**Ek yerleştirme sonuçları saat kaçta açıklanır?**
ÖSYM 21 Eylül 2026 itibarıyla tarih de saat de açıklamadı. Açıklandığında osym.gov.tr duyurular sayfasında yer alır; sonucuna sonuc.osym.gov.tr adresinden bakarsın.
**Ek yerleştirmede e-Devlet'ten kayıt olabilir miyim?**
Evet. Kontenjan kılavuzundaki YÖK açıklaması ek yerleştirme için de elektronik kayıt yapılabileceğini söylüyor. Yerleştiğin program e-kayda açık değilse ya da lise mezuniyetin sistemden doğrulanamıyorsa üniversiteye bizzat başvurursun.
**Ek yerleştirmeyle yerleşip kayıt olmazsam OBP'm kırılır mı?**
Evet. Kural yerleştirilmiş olmaya bağlı ve ek yerleştirmeyi de kapsıyor; kayıt yaptırmamak sonucu değiştirmiyor.
**Sonuç belgesi eve gelir mi?**
Hayır. Sonuç belgesi basılmıyor ve postayla gönderilmiyor.
**Ek yerleştirmede yerleştiğim programı değiştirebilir miyim?**
Hayır. Kayıt hakkı kazandığın programı sonradan değiştirmek mümkün değil.
## Kaynaklar
Tüm kaynaklara 21 Eylül 2026'da erişildi.
- ÖSYM, [2026-YKS: Ek Yerleştirme İçin Tercih İşlemleri](https://www.osym.gov.tr/2026-yks-ek-yerlestirme-icin-tercih-islemleri) ve [2026-YKS Ek Yerleştirme: Tercihlerin Alınması](https://www.osym.gov.tr/2026-yks-ek-yerlestirme-tercihlerin-alinmasi) duyuruları
- ÖSYM, [2026-YKS Yükseköğretim Programlarına Ek Yerleştirme Kılavuzu](https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf) (Genel Bilgiler, bölüm 1–4)
- ÖSYM, [2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu](https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) (bölüm 1.3, 3.4, 3.5 ve 4)
- ÖSYM, [2026-YKS: Yerleştirme Sonuçları Açıklandı](https://www.osym.gov.tr/2026-yks-yerlestirme-sonuclari-aciklandi) duyurusu
- ÖSYM, [2026-YKS Sıkça Sorulan Sorular](https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf) (soru 50–52)
- Kredi ve Yurtlar Genel Müdürlüğü, [2026-2027 Eğitim Öğretim Yılı Yurt Başvurularına İlişkin Duyuru](https://kygm.gsb.gov.tr/Duyuru/302551/2026-2027-egitim-ogretim-yili-yurt-basvurularina-iliskin-duyuru.aspx)

View File

@@ -0,0 +1,130 @@
---
baslik: Hedef Sıralama Nasıl Belirlenir? Hedef Bölümden Geriye Doğru Yöntem
aciklama: İstediğin bölüm için kaçıncı olman gerektiğini son 5 yılın taban sıralamalarından çıkar — trendi oku, deneme sıralamanla kıyasla, hedef bandını koy. Tek şemada.
tarih: 2026-09-21
---
Hedef sıralama, istediğin programın **son yıllardaki taban başarı sıralamasından geriye doğru** belirlenir: programın son 5 yıllık tabanlarına bakarsın, trendin yönünü okursun, en güncel tabanı referans alırsın ve deneme sıralamanı bu referansla kıyaslarsın. Hedef net sabit bir sayı değildir; sınavın zorluğu her yıl değiştiği için aynı sıralamaya her yıl farklı netlerle gelinir. Doğru sıra şu: önce bölüm, sonra sıralama, en son net.
Bu yazıdaki bütün rakamlar 2021-2025 yerleştirmelerine ait YÖK Atlas verisidir. 2026 yerleştirme verisi kataloğumuza yüklendiğinde tablolar güncellenecek; yöntem aynı kalır.
```mermaid
%% aria: Hedef sıralama belirleme şeması: önce hedef bölümünü ve o bölümde üç ila beş üniversiteyi seçersin. Sonra her programın son beş yıllık taban başarı sıralamasına bakarsın. Tabanlar dar bir bantta duruyorsa son yılın tabanı güvenilir referanstır. Her yıl sıkılaşıyorsa tabanın bu yıl daha da küçülebileceğini hesaba katıp hedefini daha iyi bir sıralamaya çekersin. Bir sıkı bir gevşek gidiyorsa ya da son yıllarda gevşediyse en sıkı yılı da aklında tutarsın. Ardından deneme sıralamanı referans tabanla kıyaslarsın. Taban senin sıralamandan küçükse program hayal dilimindedir ve satır etiketi risklidir. Taban, sıralaman ile sıralamanın 1,4 katı arasındaysa dengeli dilimdedir ve etiketi az risklidir. Taban, sıralamanın 1,4 katından büyükse güvenli dilimdedir. Sonunda hedef bandını yazarsın: bandın alt ucu tabanın kendisi, üst ucu tabanın 1,4'e bölünmüş hâlidir. Bu etiketler yerleşme olasılığı değil, geçmiş tabana göre konumundur.
%% altyazi: Önce bölüm, sonra son 5 yılın tabanı, sonra trend, en son deneme sıralamanla kıyas — hedef bandın böyle çıkar.
flowchart TD
H("Hedef bölümünü ve<br/>3-5 üniversiteyi seç") --> T("Her programın son 5 yıllık<br/>taban sıralamasına bak")
T --> F{"Beş yılın filmi<br/>ne diyor?"}
F -- "dar bantta duruyor" --> I("İstikrarlı:<br/>son yılın tabanı referans")
F -- "her yıl sıkılaşıyor" --> S("Sıkılaşıyor:<br/>hedefini daha iyi sıraya çek")
F -- "bir sıkı bir gevşek" --> Z("Dalgalı:<br/>en sıkı yılı da aklında tut")
I --> K("Deneme sıralamanı<br/>referans tabanla kıyasla")
S --> K
Z --> K
K --> D{"Taban, senin sıralamana<br/>göre nerede?"}
D -- "taban senden küçük" --> HY("Hayal dilimi<br/>etiket: Riskli")
D -- "sıralaman ile 1,4 katı arasında" --> DN("Dengeli dilim<br/>etiket: Az riskli")
D -- "1,4 katından da büyük" --> GV("Güvenli dilim<br/>etiket: Güvenli")
HY --> B("Hedef bandını yaz:<br/>taban ÷ 1,4 ile taban arası")
DN --> B
GV --> B
classDef hayal fill:#fee2e2,stroke:#ef4444,color:#991b1b
classDef uyari fill:#fef3c7,stroke:#f59e0b,color:#92400e
classDef garanti fill:#d1fae5,stroke:#10b981,color:#065f46
class HY hayal
class S,Z,DN uyari
class I,GV garanti
```
## Neden hedef net değil de hedef sıralama?
Çünkü net, o yılın sınavına bağlıdır; sıralama ise seni o yılın bütün adaylarıyla kıyaslar ve yıllar arasında aynı cetvelde kalır. Kendi verimizden bir örnek: Ege Üniversitesi Tıp'ın taban sıralaması üç yıldır neredeyse hiç kıpırdamadı, ama yerleşen son kişinin netleri her yıl başka çıktı.
| Yıl | Taban sıralaması (SAY) | Yerleşen son kişinin TYT neti (120 soruda) | AYT sayısal neti (80 soruda) |
| --- | --- | --- | --- |
| 2023 | 5.303 | 105,25 | 74,25 |
| 2024 | 5.294 | 112,5 | 68,25 |
| 2025 | 5.118 | 101 | 73,75 |
*Kaynak: YÖK Atlas verisi, 2023-2025 yerleştirmeleri. Netler tek bir kişiye, o programa yerleşen son adaya aittir.*
Aynı kapıdan 2024'te 112,5 TYT netiyle, 2025'te 101 netle girilmiş. Üstelik bu satırlar tek bir kişinin netleri: OBP'si ve ders dağılımı seninkinden farklı olabilir. Yani bir net listesini hedef diye duvara asmak yanıltır. Net, hedef sıralamana ulaşmanın aracıdır; hedefin kendisi sıralamadır. Puan ile sıralama arasındaki aynı tuzağı [Taban puan mı, başarı sıralaması mı?](/rehber/taban-puan-mi-siralama-mi) yazısında anlattık.
## Hedef bölümünün son 5 yılı ne söylüyor?
Tek yılın tabanı fotoğraf, beş yılın tabanı filmdir. Aşağıda farklı sıralama bantlarından yedi tanınmış program var; hepsinde filmi izle:
| Program | Puan türü | 2021 | 2022 | 2023 | 2024 | 2025 | Film ne diyor? |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [Hukuk](/bolum/hukuk), Ankara Üniversitesi | EA | 5.124 | 4.387 | 3.242 | 3.227 | 2.233 | Her yıl sıkılaşıyor |
| [Tıp](/bolum/tip), Ege Üniversitesi | SAY | 4.218 | 5.159 | 5.303 | 5.294 | 5.118 | 2022'den beri dar bantta |
| [Psikoloji](/bolum/psikoloji), Ege Üniversitesi | EA | 28.306 | 18.751 | 13.730 | 21.549 | 18.557 | Bir sıkı bir gevşek |
| [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi), Gebze Teknik Üniversitesi | SAY | 15.935 | 9.926 | 9.764 | 13.974 | 22.294 | 2023'ten beri gevşiyor |
| [Sınıf Öğretmenliği](/bolum/sinif-ogretmenligi), Gazi Üniversitesi | EA | 63.986 | 66.184 | 52.275 | 52.808 | 45.590 | Sıkılaşıyor |
| [Hemşirelik](/bolum/hemsirelik), Dokuz Eylül Üniversitesi | SAY | 116.356 | 121.110 | 123.227 | 120.589 | 110.484 | Dar bantta, 2025'te sıkılaştı |
| [Makine Mühendisliği](/bolum/makine-muhendisligi), Erciyes Üniversitesi | SAY | 230.974 | 219.734 | 197.346 | 191.513 | 154.725 | Her yıl sıkılaşıyor |
*Kaynak: YÖK Atlas verisi, 2021-2025 yerleştirmeleri (taban başarı sıralaması; küçük sayı daha iyi derece demektir).*
Bu tablodan üç ders çıkar:
- **Tek yıla bakan yanılır.** Gebze Teknik Bilgisayar Mühendisliği'ne 2023'ün tabanıyla (9.764) hedef koyan biriyle 2025'in tabanıyla (22.294) hedef koyan biri, aynı program için iki kattan fazla farklı sıralamaya çalışıyor demektir. Kontenjan bu yıllarda 90-95 arasında neredeyse sabitti; oynayan şey aday davranışı.
- **Kontenjan tabanı sıçratır.** Ankara Hukuk'un kontenjanı 2024'te 500'dü, 2025'te 200'e indi; taban aynı yıl 3.227'den 2.233'e sıkılaştı. Hedef koyarken kontenjanın değişip değişmediğine de bak; kataloğumuz güncel kontenjanı gösterir, önceki yılları YÖK Atlas'tan kıyaslayabilirsin.
- **Sıkılaşan programda geçen yılın tabanı hedef değil, en fazla başlangıç çizgisidir.** Erciyes Makine Mühendisliği'ne 2021'de 230 bin civarı sıralamayla girilirken 2025'te taban 154.725.
Tabanları neyin oynattığını ve film okuma kalıplarını ayrıntısıyla [Taban sıralamalar yıldan yıla ne kadar değişir?](/rehber/taban-siralamalar-nasil-degisir) yazısında bulursun. Kendi hedef bölümünün tablosu için [bölümler](/bolumler) sayfasından bölümünü aç; her program satırında son 5 yılın taban sıralaması ve güncel kontenjan durur, satırdaki netler butonu da yerleşen son kişinin netlerini gösterir.
## Hedef bandını nasıl koyarsın?
Burada uydurma bir formül yerine KolayTercih'in listeleri dilimlerken kullandığı kuralın aynısını kullanabilirsin. Kural tek bir kıyasa dayanır: programın en güncel taban sıralaması (2025, o yıl veri yoksa 2024) ile senin sıralaman.
- Taban **senin sıralamandan küçükse** (program senden daha iyi bir dereceyle kapatmış) program **hayal** dilimindedir; satır etiketi "Riskli".
- Taban, **sıralaman ile sıralamanın 1,4 katı arasındaysa** **dengeli** dilimdedir; etiketi "Az riskli".
- Taban, **sıralamanın 1,4 katından büyükse** güvenli dilimdedir (halk arasındaki adıyla garanti tercih); etiketi "Güvenli".
Örnek: SAY sıralaman 100.000 olsun; 1,4 katı 140.000 eder. 2025 tabanı 110.484 olan Dokuz Eylül Hemşirelik senin için dengeli, 154.725 olan Erciyes Makine güvenli, 22.294 olan Gebze Teknik Bilgisayar ise hayal dilimine düşer.
Hedef koyarken bu kuralı tersinden okursun: programın tabanını 1,4'e bölersin. **Taban ÷ 1,4 ile taban arasındaki sıralamalar o programı dengeli dilimde görür; taban ÷ 1,4'ten daha iyi bir sıralama güvenli dilimde görür.** İşte hedef bandın bu aralıktır:
| Program (2025 tabanı) | Hedef bandı: programı dengeli dilimde gören sıralamalar | Bu sıralamadan iyiysen güvenli dilim |
| --- | --- | --- |
| Ege Tıp (5.118) | 3.656 - 5.118 | 3.655 |
| Gebze Teknik Bilgisayar Müh. (22.294) | 15.924 - 22.294 | 15.923 |
| Gazi Sınıf Öğretmenliği (45.590) | 32.564 - 45.590 | 32.563 |
| Dokuz Eylül Hemşirelik (110.484) | 78.917 - 110.484 | 78.916 |
*Hesap: 2025 taban sıralaması (YÖK Atlas verisi) ÷ 1,4; sınırlar ürünün yuvarlama kuralıyla birebir hesaplandı.*
İki dürüst not. Birincisi, bu etiketler **yerleşme olasılığı değildir**; yalnızca geçmiş tabana göre nerede durduğunu söyler. Bu yılın tabanı yerleştirme bitince belli olur. İkincisi, etiket tek bir yılın tabanına bakar; filmi sen okursun. Sıkılaşan programda (Ankara Hukuk, Erciyes Makine gibi) bandın alt ucuna, yani tabanın kendisine yaslanma; bandın iyi ucunu hedefle. Son yıllarda gevşeyen programda (Gebze Teknik Bilgisayar gibi) aday ilgisi geri dönebilir; en sıkı yılın tabanını da aklında tut. Dilimlerin nasıl ayrıldığını ve listenin nasıl kurulduğunu [Meraklısına](/meraklisina) sayfasında şemasıyla birlikte görebilirsin.
## Deneme sıralamanı bu bantla nasıl kıyaslarsın?
1. **Tek denemeye değil ortalamaya bak.** Son 3-4 denemenin sıralamasını al; bir iyi bir kötü deneme seni yanıltmasın.
2. **Doğru puan türünü kıyasla.** Hukuk için EA, tıp için SAY sıralaman geçerli; türler birbirinin yerine kullanılmaz.
3. **Deneme sıralamasının kaba olduğunu unutma.** Deneme, o yayının sınavına giren adaylar arasındaki yerini gösterir; gerçek sınavda herkes vardır ve yerleştirme sıralamana [OBP](/rehber/obp-nedir-nasil-hesaplanir) de eklenir. Bu yıl bir programa yerleştirildiysen seneye o katkının yarıya ineceğini de hesaba kat; ayrıntısı [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) yazısında. Deneme yön gösterir, kesin konum vermez.
4. **Aradaki farkı sıralama olarak yaz.** "Şu an 140 bin civarındayım, hedef bandım 79-110 bin" cümlesi, "15 net artırmam lazım" cümlesinden daha sağlam bir hedeftir; neti bu farkı kapatmak için planlarsın.
5. **Tek programa kilitlenme.** Aynı bölümde 3-5 üniversiteyi alt alta koy; bir bölümün tabanları üniversiteye göre çok açılır. Hangi bantta hangi bölümlerin açıldığını [Kaç sıralama ile hangi bölüme girebilirim?](/rehber/kac-siralama-ile-hangi-bolume-girebilirim) yazısındaki haritadan görebilirsin.
Elle hesaplamak istemezsen deneme sıralamanı [tercih robotuna](/tercih-robotu) gir; hedef programlarının şu an hangi dilimde durduğunu aynı kuralla, satır satır görürsün. Sıralaman değiştikçe tekrar girersin; bandın nasıl yaklaştığını izlemek iyi bir motivasyondur.
## Sık sorulan sorular
**Hedef sıralama için kaç yılın tabanına bakmalıyım?**
En az 3-4, mümkünse 5 yıl. Tek yıl, dalgalı bir programın tepesine ya da dibine denk gelebilir. Bölüm sayfalarımızda 2021-2025 arasındaki beş yılın taban sıralaması yan yana durur.
**Hedef bandıma girersem yerleşmem kesin mi?**
Hayır. Bant ve dilim etiketleri geçmiş yılların tabanına göre konumunu gösterir; olasılık ya da söz değildir. Tabanlar yıldan yıla oynar, o yüzden tek hedef yerine bir bant ve birden fazla üniversite önerdik.
**Hedef bölümümün tabanı her yıl sıkılaşıyorsa ne yapmalıyım?**
Geçen yılın tabanını hedef diye alma; bandın iyi ucunu hedefle ve aynı bölümde tabanı daha geniş kapatan bir-iki üniversiteyi de listene not et. Tercih zamanı geldiğinde dağılımı [dengeli bir listeyle](/rehber/tercih-listesi-nasil-yapilir) kurarsın.
**Kaç net yapmam gerektiğini hiç mi bilemem?**
Kabaca bilebilirsin: bölüm sayfasındaki netler butonu, o programa yerleşen son kişinin netlerini yıl yıl gösterir. Ama yukarıdaki Ege Tıp örneğindeki gibi bu netler yıldan yıla ve kişiden kişiye değişir; onları alt sınır fikri olarak oku, hedefini sıralama üzerinden tut.
**Bazı bölümlerde ayrıca sıralama şartı var, hedefimi etkiler mi?**
Evet. Bazı programlara tercih yazabilmek için tabandan bağımsız bir başarı sıralaması şartı aranır; hedef bölümün bu gruptaysa şart, bandından önce gelir. Güncel liste [Baraj ve başarı sıralaması şartları](/rehber/siralama-sartlari-2026) yazısında.
## Kaynaklar
- YÖK Atlas, yokatlas.yok.gov.tr — 2021-2025 yerleştirmelerine ait taban başarı sıralaması, kontenjan ve yerleşen son kişinin netleri. Rakamlar KolayTercih kataloğundaki veriden alınmıştır (katalog veri güncellemesi: 9 Ağustos 2026).
- Dilim kuralı (1,4 katı eşiği): KolayTercih'in kendi listeleme kuralıdır; dilimlerin işleyişi [Meraklısına](/meraklisina) sayfasında gösterilir.

View File

@@ -2,6 +2,7 @@
baslik: Kaç Sıralama ile Hangi Bölüme Girebilirim? (2025 Verileriyle)
aciklama: 10 binden 1 milyona — sıralama bandına göre hangi bölümlerin gerçekçi olduğunun haritası ve nasıl okunacağı tek şemada.
tarih: 2026-07-23
guncelleme: 2026-09-21
---
"Sıralamam X, nereyi kazanırım?" tercih döneminin en çok sorulan sorusu. Aşağıdaki bantlar 2025 YKS yerleştirme verilerine (YÖK Atlas) dayanır ve **kabaca bir harita** çizer — kesin sınır değildir; aynı bölümün tabanı üniversiteye, şehre ve burs durumuna göre çok geniş bir aralığa yayılır.
@@ -50,6 +51,7 @@ Sözel ve Dil tarafında bantlar daha da geniştir; öğretmenlikler için ayrı
1. **Bandını bul, ama banda güvenme.** Bant sana "hangi bölümlere bakmaya değer" der; hangi üniversitede tutacağını söylemez. Aynı bölüm içinde tabanlar 10 kat oynayabilir.
2. **Bölüm sayfasının tablosuna in.** Örneğin [Psikoloji taban puanları](/bolum/psikoloji) sayfasında 380'e yakın programın tek tek tabanını görürsün — senin sıralaman listenin neresine düşüyorsa gerçekçi bölgen orasıdır.
3. **Kendi sıralamanla tara.** [Tercih robotuna](/tercih-robotu) sıralamanı gir; robot 23.000+ programın içinden senin bandına düşenleri hayal/dengeli/garanti dilimleriyle ayırıp önüne koyar. Tablo ezberlemekten hızlıdır.
4. **Henüz sıralaman yoksa tersinden git.** Seneye hazırlanıyorsan istediğin bölümden başlayıp kaçıncı olman gerektiğini [hedef sıralama nasıl belirlenir?](/rehber/hedef-siralama-nasil-belirlenir) yazısındaki yöntemle çıkar.
## Unutma

View File

@@ -0,0 +1,116 @@
---
baslik: Mezuna Kalmak mı, Yerleştiğim Bölüme Gitmek mi? Karar Ağacı
aciklama: İstemediğin bölüme kayıt olup seneye tekrar denemek mi, kaydı dondurmak mı, hiç kayıt olmadan mezuna kalmak mı? OBP bedeli, Ek Madde-1 kapısı ve her seçeneğin kazancı ile bedeli — tek şemada.
tarih: 2026-09-21
---
**Kısa cevap:** 2026-YKS ile bir programa yerleştirildiysen, kayıt olsan da olmasan da 2027-YKS'de OBP katsayın 0,12 yerine 0,06 uygulanır; bu, diploma notuna göre 15 ile 30 puan arasında bir katkının baştan gitmesi demektir. Bedel iki durumda da aynı olduğu için asıl fark şudur: kayıt olursan elinde bir bölüm ve — puanın yetiyorsa — Ek Madde-1 yatay geçiş kapısı kalır; kayıt olmazsan ikisi de kalmaz. Hiçbir programa yerleşmediysen OBP katsayın tam kalır; mezuna kalmanın puan tarafında bir bedeli yoktur.
Hangisinin senin için doğru olduğuna biz karar veremeyiz. Bu yazı seçenekleri, her birinin kazancını ve bedelini yan yana koyuyor. Kurallar ÖSYM kılavuzlarından ve YÖK'ün yatay geçiş ilkelerinden alındı; hepsi sondaki kaynaklarda.
## Hangi durumdasın?
Bu karar şu an iki grup için canlı. Ana yerleştirmenin kayıt dönemi 24–28 Ağustos 2026'da bitti; o turda yerleşip kayıt olduysan sorun artık "devam mı edeyim, kaydı mı dondurayım, bırakayım mı". [Ek yerleştirme sonucunu](/rehber/ek-yerlestirme-sonuclari-ve-kayit) bekliyorsan sorun "yerleşirsem kayıt olacak mıyım". Şema ikisini de kapsıyor.
```mermaid
%% aria: Mezuna kalmak mı kayıt olmak mı karar şeması. İlk soru 2026'da ek yerleştirme dahil bir programa yerleştirilip yerleştirilmediğindir. Yerleşemediysen OBP katsayın tam yani 0,12 kalır ve mezuna kalmanın puan tarafında bedeli yoktur. Yerleştiysen ama için rahat değilse önce bedeli bilirsin: seneye sınava girersen kayıt olsan da olmasan da OBP katsayın 0,06 uygulanır. Sonraki soru 2026 puanının istediğin programın 2026 taban puanına yetip yetmediğidir. Yetiyorsa kayıt olup Ek Madde 1 ile yatay geçişe başvurabilirsin, yeniden sınava girmen gerekmeyebilir; kontenjan sınırlıdır. Yetmiyorsa üç seçenek kalır. Birincisi kayıt olup okurken yeniden hazırlanmaktır: bölüm elinde kalır ama iki işi birlikte yürütürsün. İkincisi kayıt olup kaydı dondurmaktır: tam zaman hazırlanırsın ama şartları kendi üniversiten belirler. Üçüncüsü kayıt olmadan mezuna kalmaktır: tam zaman hazırlanırsın ama geri dönecek bir bölümün ve Ek Madde 1 hakkın olmaz.
%% altyazi: OBP bedelini doğuran şey kayıt değil yerleştirilmiş olmaktır; kayıt, elinde bir bölüm kalıp kalmayacağını belirler.
flowchart TD
S{"2026'da bir programa<br/>yerleştirildin mi?<br/>ek yerleştirme dahil"}
S -- "hayır, yerleşemedim" --> T("Bedel yok: OBP katsayın tam kalır,<br/>mezuna kalmak puanını düşürmez")
S -- "evet, ama içime sinmedi" --> O("Bedel: seneye girersen OBP katsayın 0,06<br/>kayıt olsan da olmasan da")
O --> P{"2026 puanın, istediğin programın<br/>2026 taban puanına yetiyor mu?"}
P -- "evet" --> E("Kayıt ol, Ek Madde-1 ile<br/>yatay geçişe başvur:<br/>yeniden sınav gerekmeyebilir")
P -- "hayır" --> K{"Yerleştiğin programa<br/>kayıt olacak mısın?"}
K -- "evet, okurken hazırlanırım" --> A("Kayıt ol + tekrar gir:<br/>bölüm elinde kalır,<br/>iki işi birlikte yürütürsün")
K -- "evet, ama tam zaman çalışacağım" --> D("Kayıt ol + kayıt dondur:<br/>şartları kendi üniversiten belirler")
K -- "hayır" --> M("Kayıt olmadan mezuna kal:<br/>tam zaman hazırlık,<br/>geri dönecek bölüm yok")
classDef uyari fill:#fef3c7,stroke:#f59e0b,color:#92400e
classDef garanti fill:#d1fae5,stroke:#10b981,color:#065f46
classDef hayal fill:#fee2e2,stroke:#ef4444,color:#991b1b
class T,E garanti
class O hayal
class A,D,M uyari
```
## Yerleştiysen seneye ne kaybedersin?
Kural 2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu'nda (bölüm 1.3) yazıyor: 2026-YKS sonucuyla bir programa merkezî yerleştirmeyle yerleşen adaylar — ek yerleştirme dâhil — 2027-YKS'ye girerlerse OBP katsayıları yarıya düşürülür. ÖSYM'nin sıkça sorulan sorular belgesi aynı kuralı yerleşip kayıt yaptıran ve yaptırmayan aday için ayrı ayrı sorup ikisine de "evet" cevabı veriyor; ifadesi "kayıt olsun veya olmasın".
Bundan üç sonuç çıkıyor:
- **Kayıt yaptırmamak bedeli silmez.** Katsayıyı düşüren şey kayıt değil, yerleştirilmiş olmak.
- **Kaydı sonradan sildirmek ya da dondurmak da silmez.** Kural kaydının durumuna bakmıyor; yerleştirme gerçekleştiyse gerçekleşmiştir.
- **Ek yerleştirme de sayılır.** Ek tercihle yerleşirsen aynı kural seni de kapsar.
Sayıya dökersek kayıp, diploma notu × 5 × 0,06 kadardır: diploma notu 70 olan aday 21, 85 olan 25,5, 95 olan 28,5 puanlık katkıyı kaybeder. Bunun sıralamada ne kadar yer tuttuğu puan türüne ve bulunduğun dilime göre değişir; formülün tamamı [OBP yazısında](/rehber/obp-nedir-nasil-hesaplanir).
Bir not: kılavuzlar bu kuralı hep bir önceki yılın yerleştirmesi üzerinden tanımlıyor (2026 kılavuzu 2025-YKS ile yerleşenleri sayıyor). Daha sonraki yıllar için o yılın kılavuzu belirleyicidir.
## Puanın istediğin bölüme zaten yetiyor muydu?
Yeniden sınava girmeyi düşünmeden önce bakılacak ilk yer burası. Merkezi yerleştirme puanıyla yatay geçiş (Ek Madde-1), puanı hedefine yettiği hâlde listeyi farklı kurduğu için başka programa yerleşenlere açık bir kapıdır. YÖK'ün uygulama ilkelerine göre:
- Başvurabilmek için bir programa **kayıt yaptırmış** olman gerekir. Yerleşip kayıt olmayan aday için bu kapı yoktur.
- Kayıt olduğun yıldaki yerleştirme puanın, geçmek istediğin programın **aynı yıldaki taban puanına** eşit ya da ondan yüksek olmalıdır; hedef programın puan türünde puanın bulunmalıdır.
- Not ortalaması şartı aranmaz, hazırlık sınıfı öğrencileri de başvurabilir, hak **bir kez** kullanılır.
- Kayıt olduğun yılın güz döneminde başvuramazsın. Hedef üniversite bahar dönemi için öğrenci alıyorsa bahar başvurusu yapabilirsin; almıyorsa sıra bir sonraki güz başvurularına kalır.
- Kontenjan sınırlıdır: her sınıf için programın kılavuz kontenjanının yüzde 30'u, en fazla 90 kişi. Başvuran fazlaysa YKS puanı yüksek olandan başlanır; yani tabanı geçmek başvuru hakkı verir, yer ayırmaz.
2026 taban puanlarını ÖSYM'nin en küçük ve en büyük puanlar yayınında bulursun. Puanın yetmiyorsa Ek Madde-1 senin için bir şey değiştirmez. Bu yolun ayrıntısı [yatay geçiş, ÇAP ve yandal yazısında](/rehber/yatay-gecis-cap-yandal), sonuç sonrası bütün yollar [yerleşemedim yazısında](/rehber/yerlesemedim-ne-yapmaliyim).
## Seçeneklerin kazancı ve bedeli ne?
| Seçenek | Kazanç | Bedel | Kime uygun |
| --- | --- | --- | --- |
| Kayıt ol, okurken tekrar gir | Bölüm elinde kalır; seneki sonuç ne olursa olsun bir yıl okumuş olursun; puanın yetiyorsa Ek Madde-1 hakkın olur | OBP katsayısı 0,06; dersler ve sınav hazırlığı aynı anda; vakıfsa ücret, başka şehirdeyse yaşam masrafı | Yerleştiği bölüme olursa okurum diyebilenler |
| Kayıt ol, kaydı dondur | Kayıt durur; hazırlığa tam zaman ayırırsın | OBP katsayısı 0,06; izin şartları ve son başvuru günü üniversiteye bağlı, talebin kabul edilmeyebilir | Dönme ihtimalini açık tutmak isteyip önce okulunun yönetmeliğini okuyanlar |
| Kayıt olmadan mezuna kal (yerleşmiştin) | Hazırlığa tam zaman; okul masrafı yok | OBP katsayısı yine 0,06; kayıt hakkın yanar, geri dönecek bölüm ve Ek Madde-1 yok | O bölümü hiçbir koşulda okumayacağından emin olanlar |
| Mezuna kal (hiç yerleşmedin) | OBP katsayısı tam; hazırlığa tam zaman | Bir yıl; seneye tabanlar aynı yerde durmayabilir | Hedefi net olup bu yıl neyi farklı yapacağını bilenler |
## Üniversitede kayıtlıyken YKS'ye girebilir misin?
Evet. 2026-YKS Kılavuzu'na göre bir programa kayıtlı olman, YKS'de tercih yapmana ve yerleştirilmene engel değil. Sınır şu: aynı anda iki örgün lisans (ya da iki örgün ön lisans) programına kayıtlı olunamıyor. Seneye yeni bir programa yerleşirsen, ona kayıt olabilmek için eskisinden ilişiğini kesmen gerekir. Zaten bir bölümde okuyorsan başvurudan ilişik kesmeye sürecin tamamı [üniversite okurken tekrar YKS'ye girmek](/rehber/universite-okurken-tekrar-yks) yazısında.
Kayıt dondurma ise ülke çapında tek bir kurala bağlı değil; her üniversitenin kendi eğitim-öğretim yönetmeliğinde yazıyor. Örnek olsun: Karabük Üniversitesi'nin yönetmeliğinde başvuru için akademik takvime bağlı bir son gün var, dondurulan yarıyılda derse kaydolunamıyor ve bu süre öğrenim süresinden sayılmıyor. Senin okulunda süreler ve kabul edilen gerekçeler farklı olabilir; karar vermeden önce öğrenci işlerine sor ve yönetmeliğin ilgili maddesini oku.
## Karar verirken kendine ne sormalısın?
1. **"Seneye de olmazsa bu bölümde okur muyum?"** Cevabın evetse kayıtlı kalmanın sana bıraktığı şey büyük. Cevabın "asla" ise kaydın sana kazandırdığı pek bir şey yok.
2. **Hedefinle aran ne kadar?** Tek yıla değil, hedef programın son 5 yıllık taban sıralamasına bak: [bölüm sayfalarında](/bolumler) hepsi var, yöntemi [hedef sıralama nasıl belirlenir](/rehber/hedef-siralama-nasil-belirlenir) yazısında. Tabanlar da yerinde durmuyor: [tabanlar nasıl değişir](/rehber/taban-siralamalar-nasil-degisir).
3. **Bu yıl neyi farklı yapacaksın?** İkinci yılın daha iyi geçeceğinin bir güvencesi yok. Planını, bu soruya somut bir cevap verebiliyorsan kur.
4. **Bir yılın masrafı ne?** Vakıf ücreti, başka şehirde yaşam, kurs ya da yayın gideri — hangi seçenekte hangisi var, alt alta yaz. Kalemler için [yurt, burs ve yıllık maliyet](/rehber/yurt-burs-ve-yillik-maliyet) yazısı işini görür.
## 2027'de liste zamanı gelince
Hangi yolu seçersen seç, 2027'de sıralaman belli olduğunda iş yine 24 satırlık listeye gelecek. Bu yılın dersi belli: yerleşsen bile gitmeyeceğin programı listeye yazma ve [ölü tercihleri](/rehber/olu-tercih-nedir) temizle. O gün sıralamanı [tercih robotuna](/tercih-robotu) girip hangi programların son 5 yılın verisine göre hayal, dengeli ya da güvenli (halk arasında "garanti tercih") aralıkta kaldığını tek ekranda görebilirsin.
## Sık sorulan sorular
**Yerleştim ama kayıt yaptırmadım. OBP'm yine de düşer mi?**
Evet. ÖSYM kuralı yerleştirilmiş olmaya bağlıyor; 2027-YKS'ye girersen katsayın 0,06 uygulanır.
**Kaydımı sildirirsem ya da dondurursam OBP katsayım düzelir mi?**
Hayır. Kural kaydın durumuna değil, 2026'da bir programa yerleştirilmiş olmana bakıyor.
**Ek yerleştirmeyle yerleşirsem de aynı kural geçerli mi?**
Evet. Kontenjan kılavuzunun 1.3 bölümü ek yerleştirmeyi açıkça sayıyor.
**Ek Madde-1'e ne zaman başvurabilirim?**
Kayıt olduğun yılın güz döneminde başvuramazsın. Hedef üniversite bahar için öğrenci alıyorsa bahar döneminde, almıyorsa sonraki güz başvurularında. Takvimi her üniversite kendi sayfasında duyurur.
**Hiç yerleşmedim; mezuna kalırsam puan kaybım olur mu?**
OBP yönünden hayır: katsayı yalnızca yerleştirilen (ya da özel yetenek sınavıyla bir programa kayıt olan) adaylar için düşürülüyor.
## Kaynaklar
Tüm kaynaklara 21 Eylül 2026'da erişildi.
- ÖSYM, [2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu](https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) (bölüm 1.3 ve 4)
- ÖSYM, [2026-YKS Sıkça Sorulan Sorular](https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf) (soru 49–52)
- ÖSYM, [2026-YKS Kılavuzu](https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu) (bölüm 4.2 ve 10)
- ÖSYM, [2026-YKS Yükseköğretim Programlarına Ek Yerleştirme Kılavuzu](https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf) (bölüm 1.2)
- YÖK, [Öğrencilerle İlgili İş ve İşlemler](https://egitim.yok.gov.tr/tr/page/492) sayfası ve [Güz ve Bahar Dönemi Ek Madde 1 Uygulama İlkeleri](https://egitim.yok.gov.tr/tr/document/2853)
- Mevzuat Bilgi Sistemi, [Yükseköğretim Kurumlarında Önlisans ve Lisans Düzeyindeki Programlar Arasında Geçiş, Çift Anadal, Yan Dal ile Kurumlar Arası Kredi Transferi Yapılması Esaslarına İlişkin Yönetmelik](https://www.mevzuat.gov.tr/mevzuat?MevzuatNo=13948&MevzuatTur=7&MevzuatTertip=5) (Ek Madde 1)
- Mevzuat Bilgi Sistemi, [Karabük Üniversitesi Ön Lisans, Lisans Eğitim-Öğretim ve Sınav Yönetmeliği](https://www.mevzuat.gov.tr/anasayfa/MevzuatFihristDetayIframe?MevzuatTur=8&MevzuatNo=38896&MevzuatTertip=5) (madde 27; kayıt dondurma örneği)

View File

@@ -2,6 +2,7 @@
baslik: OBP Nedir, Nasıl Hesaplanır? Diploma Notu Kaç Puan Getirir?
aciklama: Ortaöğretim başarı puanının hesabı, yerleştirme puanına gerçek katkısı ve "geçen yıl yerleştiysen çarpan yarıya düşer" kuralı — sayılarla ve tek şemada.
tarih: 2026-07-27
guncelleme: 2026-09-21
---
Tercih döneminde en çok aranan hesap sorusu: *"Diploma notum yerleştirme puanıma kaç puan ekler?"* Cevap net bir formüle dayanır ve iki dakikada öğrenilir. Ama formülün ucunda, tercih stratejini doğrudan etkileyen bir kural saklı: **geçen yıl bir programa yerleşenlerin katkısı yarıya düşer.**
@@ -31,7 +32,9 @@ flowchart TD
## Kritik kural: çarpan neden yarıya düşer?
Geçen yıl merkezi yerleştirmeyle bir programa **yerleştirildiysen** — kayıt yaptırmamış olsan bile — bu yıl OBP çarpanın 0,12 yerine **0,06** uygulanır (kontenjansız açıköğretim programları bu kuralın dışındadır). Yani "bir yere yerleşeyim de garantim olsun, seneye yine denerim" planının görünmez bir bedeli vardır: gelecek yılki puanından 15-30 puan peşinen gider.
Geçen yıl merkezi yerleştirmeyle bir programa **yerleştirildiysen** — kayıt yaptırmamış olsan bile — bu yıl OBP çarpanın 0,12 yerine **0,06** uygulanır. Kural ek yerleştirmeyle yerleşenleri ve özel yetenek sınavıyla bir programa kayıt olanları da kapsar. ÖSYM kılavuzunun saydığı tek istisna, lise son sınıftayken yerleştirildiği hâlde zamanında mezun olamadığı için kayıt yaptıramayan adaylardır; kendi durumun farklıysa o yılın YKS kılavuzundaki OBP maddesini kontrol et. Yani "bir yere yerleşeyim de garantim olsun, seneye yine denerim" planının görünmez bir bedeli vardır: gelecek yılki puanından 15-30 puan peşinen gider.
Yerleştin ve şimdi kayıt olmakla mezuna kalmak arasındaysan, seçenekleri bedelleriyle [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) karar ağacında karşılaştırdık.
Bunun tercih listene çevirisi şudur: **yerleşsen bile gitmeyeceğin programı listene yazma.** Bu kuralın diğer bedelleriyle birlikte tamamı [tercih listesi rehberinde](/rehber/tercih-listesi-nasil-yapilir) anlatılıyor.
@@ -45,3 +48,11 @@ Okul birincileri için üniversitelerde **ayrı bir kontenjan** ayrılır (2026'
- Herkes en az 30 aldığı için gerçek rekabet farkı küçüktür; asıl belirleyici sınav performansın ve sıralamandır.
- Geçen yıl yerleştiysen çarpan yarıya düşer — istemediğin programı listeye yazmanın en somut cezası budur.
- Sıralamanla nereye uzanabildiğini görmek için [tercih robotunu](/tercih-robotu) kullanabilirsin.
## Kaynaklar
Kaynaklara 21 Eylül 2026'da erişildi.
- ÖSYM, [2026-YKS Sıkça Sorulan Sorular](https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf) (soru 49–52: OBP hesabı, 0,12 katsayısı ve "kayıt olsun veya olmasın" yarıya düşme kuralı)
- ÖSYM, [2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu](https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) (bölüm 1.3: ek yerleştirme ve ÖZYES dâhil)
- ÖSYM, [2026-YKS Kılavuzu](https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu) (bölüm 4.2: zamanında mezun olamadığı için kayıt yaptıramayanlar istisnası)

View File

@@ -2,6 +2,7 @@
baslik: Taban Puan mı, Başarı Sıralaması mı? Tercihte Hangisine Bakılır?
aciklama: İki sayı da sonuç belgende yazıyor ama tercih listeni sadece biriyle kurmalısın. Neden sıralamanın kazandığı tek şemada.
tarih: 2026-07-21
guncelleme: 2026-09-21
---
Kısa cevap: **başarı sıralamasına bakılır.** Taban puan, tabelada büyük yazan ama seni yanıltan sayıdır. Nedenini iki dakikada anlatalım.
@@ -45,4 +46,6 @@ Liste kurarken açtığın her tabloda gözün **sıralama kolonunda** olmalı.
2. **Puan haberlerine kapılma.** "X bölümü 500 puanla öğrenci aldı" manşeti sana hiçbir şey söylemez; o yılın 500 puanı kaçıncı sıraysa bilgi odur.
3. **Sıralamanı doğru yerden oku.** ÖSYM sonuç belgesindeki, kendi puan türünün "başarı sırası" satırı. OBP eklenmiş/eklenmemiş karışıklığına dikkat — tercihte kullanılan, yerleştirme puanına ait sıralamadır.
Seneye hazırlanıyorsan aynı mantık hedef koyarken de geçerli: hedefini netle ya da puanla değil sıralamayla koy — yöntemi [hedef sıralama nasıl belirlenir?](/rehber/hedef-siralama-nasil-belirlenir) yazısında.
Sıralamanı biliyorsan gerisi mekanik: [tercih robotuna](/tercih-robotu) gir, sıralamana uygun programları hayal/dengeli/garanti dilimleriyle gör, listeni veriyle kur.

View File

@@ -2,6 +2,7 @@
baslik: Taban Sıralamalar Yıldan Yıla Ne Kadar Değişir?
aciklama: "Geçen yıl 90 bin kapatmış, ben 85 binim, garanti" demeden önce oku — tabanları oynatan mekanizmalar ve trend okuma yolu tek şemada.
tarih: 2026-07-16
guncelleme: 2026-09-21
---
Tercih listeni geçen yılın tabanlarıyla kuruyorsun ama yerleşmeni **bu yılın** tabanları belirleyecek. Aradaki fark bazen birkaç bin, bazen yüz binlerce sıra. Bu yazı tabanları neyin oynattığını ve trendi nasıl okuyacağını anlatıyor.
@@ -9,11 +10,11 @@ Tercih listeni geçen yılın tabanlarıyla kuruyorsun ama yerleşmeni **bu yıl
## Tabanı oynatan mekanizmalar
```mermaid
%% aria: Taban trendi okuma şeması: tek yılın tabanı fotoğraftır, dört yılın tabanı filmdir. Dört yıl üst üste dar banttaysa istikrarlı referanstır. Her yıl sıkılaşıyorsa geçen yılın tabanına güvenme ve pay bırak. Bir sıkı bir gevşek testere dişi sürü etkisidir, ortalamayı al. Bazı yıllar veri boşsa belirsizlik yüksektir; o programı dengeli değil hayal bölgesine koy.
%% aria: Taban trendi okuma şeması: tek yılın tabanı fotoğraftır, beş yılın (2021–2025) tabanı filmdir. Beş yıl üst üste dar banttaysa istikrarlı referanstır. Her yıl sıkılaşıyorsa geçen yılın tabanına güvenme ve pay bırak. Bir sıkı bir gevşek testere dişi sürü etkisidir, ortalamayı al. Bazı yıllar veri boşsa belirsizlik yüksektir; o programı dengeli değil hayal bölgesine koy.
%% altyazi: Tek yıla bakan, testere dişinin tepesinden ya da dibinden ölçüm alır — en az 3-4 yıla bak.
flowchart TD
F("Tek yılın tabanı = fotoğraf<br/>dört yılın tabanı = film") --> T{"Film ne diyor?"}
T -- "dört yıl dar bantta" --> I("İstikrarlı:<br/>güvenilir referans")
F("Tek yılın tabanı = fotoğraf<br/>5 yılın tabanı = film") --> T{"Film ne diyor?"}
T -- "5 yıl dar bantta" --> I("İstikrarlı:<br/>güvenilir referans")
T -- "her yıl sıkılaşıyor" --> S("Tek yönlü trend:<br/>pay bırak, geçen yıla güvenme")
T -- "bir sıkı bir gevşek" --> TE("Testere dişi:<br/>ortalamayı al, uca değil")
T -- "bazı yıllar veri yok" --> B("Belirsiz:<br/>dengeli değil, hayal bölgesine koy")
@@ -38,9 +39,9 @@ flowchart TD
## Trend nasıl okunur?
Tek yılın tabanı **fotoğraf**, dört yılın tabanı **film**dir. Film izle:
Tek yılın tabanı **fotoğraf**, 5 yılın (2021–2025) tabanı **film**dir. Film izle:
- **İstikrarlı taban** (dört yıl üst üste dar bantta): güvenilir referans. Sıralaman tabana yakınsa "dengeli", belirgin gerisindeyse "garanti" davranabilirsin.
- **İstikrarlı taban** (5 yıl üst üste dar bantta): güvenilir referans. Sıralaman tabana yakınsa "dengeli", belirgin gerisindeyse "garanti" davranabilirsin.
- **Tek yönlü trend** (her yıl sıkılaşıyor): geçen yılın tabanına güvenme; bu yıl daha da sıkılaşacağını varsayıp payla yaklaş. Popüler bölümlerde sık görülür — [Psikoloji](/bolum/psikoloji) ve [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi) tablolarında 2024-2025 kolonlarını yan yana koyup bak.
- **Testere dişi** (bir sıkı bir gevşek): sürü etkisi işliyor demektir; ortalamayı referans al, uç yıla değil.
- **Veri boşluğu** (bazı yıllar "—"): yeni ya da o yıl dolmamış program; belirsizlik yüksek, listende dengeli değil garanti bölgesine koyma, hayal bölgesine koy.
@@ -49,9 +50,9 @@ Bölüm sayfalarımızdaki tablolarda 2025 sıralamasının yanında 2024 kolonu
## Listeye nasıl yansıtılır?
1. Her satır için son 4 yılın tabanına bak; tek yıl asla yeterli değil.
1. Her satır için son 5 yılın (2021–2025) tabanına bak; tek yıl asla yeterli değil.
2. Sıkılaşma trendindeki programları bir kademe yukarı say ("dengeli" sandığın aslında "hayal" olabilir).
3. Gevşeme trendindeki programlara erken sevinme; sürü geri dönebilir.
4. Belirsizliği [dengeli bir listeyle](/rehber/tercih-listesi-nasil-yapilir) yönet: trend ne yaparsa yapsın, hayal/dengeli/garanti dağılımı düzgün kurulmuş bir liste boşta bırakmaz.
[Tercih robotu](/tercih-robotu) bu analizi senin yerine yapar: sıralamanı girdiğinde programları yalnızca son tabana göre değil, çok yıllı veriyle dilimleyerek gösterir.
[Tercih robotu](/tercih-robotu) işin mekanik kısmını üstlenir: sıralamanı girdiğinde her programı **son yılın tabanına** göre (2025; o yıl veri yoksa 2024) hayal, dengeli ya da güvenli (halk arasında "garanti") dilimine yerleştirir ve satırda geçmiş yılların tabanlarını da gösterir. Dilim tek yılın fotoğrafıdır; filmi yukarıdaki kalıplarla sen okursun. Aynı okumayı seneye tek bir hedef bölüm için yapmak istersen [hedef sıralama nasıl belirlenir?](/rehber/hedef-siralama-nasil-belirlenir) yazısına bak.

View File

@@ -2,13 +2,16 @@
baslik: Üniversite Kaydı Nasıl Yapılır? 2026 e-Kayıt ve Belge Rehberi
aciklama: Yerleştin, tebrikler — şimdi kaydını kaçırma. e-Devlet'ten 5 dakikada e-kayıt, şahsen kayıtta istenen belgeler ve "kayıt yaptırmazsam ne olur" sorusunun net cevabı.
tarih: 2026-07-28
guncelleme: 2026-09-21
---
Yerleştirme sonuçları açıklandıktan sonra en çok aranan soru değişir: "nereye yerleştim"in yerini **"kayıt nasıl yapılır, son gün ne zaman?"** alır. 2026'da kayıtlar **24-28 Ağustos** tarihleri arasında; e-Devlet üzerinden elektronik kayıt ise **24-26 Ağustos** günlerinde yapılabiliyor. Takvimin tamamı için [2026 tercih takvimi](/rehber/yks-tercih-takvimi-2026) yazısına bakabilirsin.
## Önce e-kayıt dene: belge yok, yol yok, sıra yok
Üniversitelerin büyük bölümü e-Devlet üzerinden **e-kayıt** kabul ediyor. e-Devlet'e girip *"Üniversite E-Kayıt"* hizmetini açtığında yerleştiğin program listeleniyorsa birkaç onayla kaydın tamamlanır — diploma, fotoğraf, şehirlerarası yolculuk gerekmez. Kayıt belgeni yine e-Devlet'ten barkodlu indirebilirsin.
Kontenjan kılavuzundaki YÖK açıklamasına göre tüm devlet üniversiteleri ile isteyen vakıf ve KKTC üniversiteleri e-Devlet üzerinden **e-kayıt** imkânı sunuyor; e-kayıt zorunlu değil, isteğe bağlı. e-Devlet'e girip Yükseköğretim Kurulu bölümündeki *"Üniversite E-Kayıt"* hizmetini açtığında yerleştiğin program listeleniyorsa birkaç onayla kaydın tamamlanır — lise mezuniyetin MEB sisteminden doğrulandığı için ayrıca diploma istenmez, şehirlerarası yolculuk gerekmez. Kayıt belgeni yine e-Devlet'ten barkodlu indirebilirsin.
İki sınır var: özel yetenek programları ile üniversitenin e-kayda uygun görmediği programlar (örneğin sağlık raporu isteyenler) e-kayıt dışındadır; mezuniyet bilgin MEB'den alınamıyorsa da e-kayıt yapamazsın, üniversiteye yönlendirilirsin. e-kayıt yapanlar, üniversitenin duyurduğu tarihte ve duyuruda istenen belgelerle ders kaydına gider.
```mermaid
%% aria: Üniversite kayıt akış şeması: bir programa yerleştikten sonra kayıt yaptırmaya karar verirsen önce e-Devlet'te e-kayıt seçeneğini kontrol edersin; açıksa 24-26 Ağustos arasında belgesiz ve sırasız e-kayıt yaparsın, kapalıysa 24-28 Ağustos arasında belgelerinle üniversiteye giderek şahsen kayıt olursun; iki yol da kaydını tamamlar. Kayıt yaptırmazsan bu yılki hakkın yanar, yerleştiğin için ek yerleştirmeye giremezsin ve gelecek yıl OBP katkın yarıya düşer.
@@ -30,15 +33,17 @@ flowchart TD
## Şahsen kayıtta istenen belgeler
Üniversiteler kendi listesini yayımlar; standart çekirdek şudur:
ÖSYM'nin 2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu (bölüm 4.1) çekirdek listeyi şöyle sayıyor:
- **Lise diploması** (aslı) ya da yeni mezunlar için mezuniyet belgesi
- **ÖSYS yerleştirme sonuç belgesi** (internet çıktısı yeterli)
- Nüfus cüzdanı / T.C. kimlik kartı ve fotokopisi
- Vesikalık fotoğraf (genelde 4-6 adet)
- Bazı programlar için ek koşul belgeleri: sağlık raporu, boy-kilo şartı, mülakat sonucu gibi — bunlar kılavuzda programın yanındaki koşul numaralarında yazar
- **Lise diplomasının aslı ya da onaylı örneği**, yoksa yeni tarihli mezuniyet belgesi
- Üniversite isterse **12 adet 4,5 × 6 cm fotoğraf** — adet ve biçim üniversiteye göre değişebilir, kayıt duyurusuna bak
- Katkı payının ya da öğretim ücretinin ödendiğini gösteren belge (ödemen gereken bir tutar varsa)
- Ek puanla yerleştiysen ve alanın diplomanda yazmıyorsa, hangi okul ve alandan mezun olduğunu gösteren resmî belge
- **Üniversitenin kayıttan önce ilan ettiği diğer belgeler** — kimlik, sonuç belgesi çıktısı, form gibi kalemler üniversiteden üniversiteye değişir; tek doğru liste üniversitenin kendi kayıt duyurusudur
İkinci öğretim ya da vakıf programına yerleştiysen ilk taksit/öğrenim ücreti dekontu da istenir. Gitmeden önce üniversitenin kayıt sayfasını mutlaka aç; eksik belge, kayıt döneminin en klasik zaman kaybıdır.
Programın kılavuzdaki koşullarında yazıyorsa üniversite sağlık kurulu raporu da isteyebilir; koşullarda yoksa isteyemez. Bu koşulları [özel koşullu programlar](/rehber/ozel-kosullu-programlar) yazısında anlattık.
Kılavuzun üç kuralı daha var (bölüm 4.2): kayda **bizzat** başvurulur, postayla kayıt yapılmaz; belgelerin **onaysız sureti ya da fotokopisi kabul edilmez**; belge eksikse kayıt yapılmaz. Gitmeden önce üniversitenin kayıt sayfasını mutlaka aç; eksik belge, kayıt döneminin en klasik zaman kaybıdır.
## "Kayıt yaptırmazsam ne olur?"
@@ -50,6 +55,10 @@ Bu sorunun cevabı üç maddedir ve üçü de önemlidir:
Bu üç maddenin tek bir tercih dersi var: **kayıt yaptırmayacağın programı listene hiç yazma.** Liste kurarken bu süzgeci nasıl uygulayacağın [tercih listesi rehberinde](/rehber/tercih-listesi-nasil-yapilir).
## Ek yerleştirmeyle yerleştiysen
Bu yazıdaki tarihler Ağustos'taki ilk yerleştirmeye ait. Ek yerleştirmede kayıt tarihleri sonuç duyurusunda yazar; e-kayıt ek yerleştirme için de yapılabilir, belgeler için yine üniversitenin kayıt duyurusuna bakılır. Sonuçtan kayda adım adım akış [ek yerleştirme sonuçları ve kayıt](/rehber/ek-yerlestirme-sonuclari-ve-kayit) yazısında.
## Kayıt sonrası küçük ama önemli işler
- Ders kaydı / oryantasyon tarihlerini üniversitenin öğrenci işleri sayfasından not al; kayıt olmak çoğu üniversitede ders seçimini otomatik yapmaz.
@@ -57,3 +66,8 @@ Bu üç maddenin tek bir tercih dersi var: **kayıt yaptırmayacağın programı
- Öğrenci belgeni e-Devlet'ten alabilirsin; indirim ve burs başvurularının çoğu bunu ister.
Yerleşmek maratonun bitişi, kayıt ise ipi göğüslemek. Son güne bırakma — e-kayıt penceresi, şahsen kayıttan **iki gün önce** kapanıyor.
## Kaynaklar
- ÖSYM, [2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu](https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) — bölüm 4 (kayıt tarihleri ve YÖK'ün e-kayıt açıklaması), 4.1 (kayıt için gerekli belgeler), 4.2 (kayıtla ilgili bilgiler). Erişim: 21 Eylül 2026.
- ÖSYM, [2026-YKS Yükseköğretim Programlarına Ek Yerleştirme Kılavuzu](https://dokuman.osym.gov.tr/web/2026/9/2026-yuksekogretim-programlarina-ek-yerlestirme-kilavuzu-f2ttjv-17130413.pdf) — ek yerleştirmede kayıt tarihlerinin sonuç duyurusunda belirtileceği. Erişim: 21 Eylül 2026.

View File

@@ -0,0 +1,127 @@
---
baslik: Üniversite Okurken Tekrar YKS'ye Girmek: Kayıt Dondurma, Kayıt Sildirme ve Yeniden Tercih
aciklama: Kaydın varken sınava girebilir misin, dondurmak ya da sildirmek şart mı, yeni bir programa yerleşirsen eski kaydın için ne yapman gerekir? Okurken yeniden deneyenler için süreç ve sınavsız iki alternatif — tek şemada.
tarih: 2026-09-21
---
**Kısa cevap:** Evet, bir üniversitede kayıtlıyken YKS'ye yeniden girebilirsin; bunun için kaydını dondurman ya da sildirmen gerekmez. 2026-YKS Kılavuzu'na göre bir programa kayıtlı olmak, tercih yapmana ve yeni bir programa yerleştirilmene engel değildir. Sınır kayıt aşamasındadır: aynı anda iki örgün lisans ya da iki örgün ön lisans programında kayıtlı olunamadığı için, yeni yerleştiğin programa kayıt yaptırabilmek için eski programından ilişiğini kesmen gerekir. Yani eski kayıtla ilgili karar sınava girerken değil, yeni programa kayıt olmaya karar verdiğin gün verilir.
Bu yazı hâlihazırda bir bölümde okuyan ve "burası bana göre değil" diyen öğrenci için. Henüz kayıt olup olmamaya karar veriyorsan o kararın yeri [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) yazısı. Buradaki kurallar ÖSYM kılavuzundan, YÖK'ün yatay geçiş yönetmeliğinden ve uygulama ilkelerinden alındı; hepsi sondaki kaynaklarda.
## Yeniden sınava girmeden önce hangi kapılara bakmalısın?
Yeniden YKS bir yıllık bir iş. Ondan önce, sınav gerektirmeyen iki kapının sana açık olup olmadığına bakmak birkaç dakikanı alır. Şema önce o iki soruyu soruyor, sonra okurken sınava girme sürecini gösteriyor.
```mermaid
%% aria: Üniversite okurken bölüm değiştirmek isteyen öğrenci için süreç şeması. İlk soru, kayıt olduğun yıldaki YKS puanının hedef programın aynı yıldaki taban puanına yetip yetmediğidir. Yetiyorsa sınavsız kapı olan Ek Madde 1 ile yatay geçişe başvurabilirsin; kontenjan sınırlıdır ve hak bir kez kullanılır. Yetmiyorsa ikinci soru hedefinin eşdeğer bir program olup olmadığı ve not ortalamanın yüz üzerinden en az altmış olup olmadığıdır. Öyleyse şartlı kapı olan not ortalamasıyla yatay geçişe bakarsın; kontenjan ve yarıyıl sınırı vardır. İkisi de sana uymuyorsa okurken YKS'ye girersin: kayıtlı olman engel değildir, kaydı dondurmak ya da sildirmek şart değildir. Hazırlık yılını üç biçimde geçirebilirsin. Derslere devam edersen bölüm ve öğrencilik sürer, iki işi birlikte yürütürsün. Kaydı dondurursan şartları kendi üniversitenin yönetmeliği belirler. Kaydı sildirirsen öğrencilik biter ve yerleşemezsen elinde bölüm kalmaz. Devam ettiysen ya da kaydı dondurduysan son soru, yeni bir programa yerleşip gitmeye karar verip vermediğindir. Karar verdiysen eski programdan ilişiğini keser, yeni programa kayıt olursun. Vermediysen yeni kayıt olmadığı için ilişik kesme şartı doğmaz.
%% altyazi: Sınava girmek için kayıtla ilgili bir şey yapman gerekmez; ilişik kesme yalnızca yeni programa kayıt olacağın gün gündeme gelir.
flowchart TD
A("Bir bölümde okuyorum,<br/>başka bir bölüm istiyorum") --> P{"Kayıt olduğun yılki YKS puanın,<br/>hedef programın o yılki<br/>taban puanına yetiyor muydu?"}
P -- "evet" --> E("Sınavsız kapı: Ek Madde-1<br/>yatay geçiş başvurusu,<br/>kontenjan sınırlı, hak 1 kez")
P -- "hayır" --> N{"Hedefin eşdeğer bir program mı<br/>ve not ortalaman 100 üzerinden<br/>en az 60 mı?"}
N -- "evet" --> Y("Şartlı kapı: not ortalamasıyla<br/>yatay geçiş, kontenjan ve<br/>yarıyıl sınırı var")
N -- "hayır" --> S("Okurken YKS'ye gir:<br/>kayıtlı olman engel değil,<br/>dondurmak ya da sildirmek şart değil")
S --> H{"Hazırlık yılını<br/>nasıl geçireceksin?"}
H -- "derslere devam ederek" --> D1("Bölüm ve öğrencilik sürer,<br/>iki işi birlikte yürütürsün")
H -- "kaydı dondurarak" --> D2("Şartları kendi üniversitenin<br/>yönetmeliği belirler")
H -- "kaydı sildirerek" --> D3("Öğrencilik biter:<br/>yerleşemezsen elinde bölüm kalmaz")
D1 --> R{"Yeni bir programa yerleştin<br/>ve gitmeye karar verdin mi?"}
D2 --> R
R -- "evet" --> K("Eski programdan ilişiğini kes,<br/>yeni programa kayıt ol")
R -- "hayır" --> Z("Yeni kayıt yok:<br/>ilişik kesme şartı doğmaz")
classDef uyari fill:#fef3c7,stroke:#f59e0b,color:#92400e
classDef garanti fill:#d1fae5,stroke:#10b981,color:#065f46
classDef hayal fill:#fee2e2,stroke:#ef4444,color:#991b1b
class E garanti
class Y,S,D1,D2 uyari
class D3 hayal
```
## Puanın hedefine zaten yetiyor muydu?
Merkezi yerleştirme puanıyla yatay geçiş (Ek Madde-1) yalnızca birinci sınıflar için değildir. YÖK'ün uygulama ilkelerinde okuyan öğrenciyi ilgilendiren maddeler şunlar:
- **Hangi yılın puanı?** Bakılan puan, şu an okuduğun programa **kayıt olduğun yılın** yerleştirme puanıdır; kıyaslandığı taban da hedef programın **aynı yıldaki** taban puanıdır. 2024'te yerleştiysen 2024 puanın, hedefin 2024 tabanıyla kıyaslanır. Hedef programın puan türünde puanın olmalıdır.
- **Hangi sınıftasın?** Hazırlık, ara sınıflar ve son sınıf dâhil kayıtlı öğrenciler başvurabilir; hangi sınıftan devam edeceğine (intibak) geçtiğin üniversitenin kurulları karar verir. Not ortalaması ya da başka bir başarı şartı aranmaz.
- **Hedef program o yıl öğrenci aldı mı?** Senin kayıt olduğun yıl öğrenci almamış bir programın tabanı oluşmadığı için o programa bu yolla geçilemez.
- **Koşullar seni de bağlar.** Kılavuzda hedef program için yazan özel koşulları ve öğretim dili yabancı dilse o üniversitenin dil şartını sağlaman gerekir ([hazırlık ve öğretim dili](/rehber/hazirlik-sinifi-ve-ogretim-dili)).
- **Vakıf üniversitesine geçişte** burs verip vermeme kararı o üniversitenindir; ilkeler ücretli programa geçişe izin verir.
Hak bir kez kullanılır, kontenjan sınırlıdır ve başvuran fazlaysa YKS puanı yüksek olandan başlanır; yani tabanı geçmek başvuru hakkı verir, yer ayırmaz. Kontenjan oranı ve başvuru dönemleri [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) yazısında, yolun bütünü [yatay geçiş, ÇAP ve yandal](/rehber/yatay-gecis-cap-yandal) yazısında. Eski yılların taban puanlarını ÖSYM'nin o yıla ait en küçük ve en büyük puanlar yayınında bulursun.
## Not ortalamanla geçebilir misin?
Puanın yetmiyorsa ikinci kapı klasik yatay geçiştir. Yönetmeliğe göre kurumlar arası yatay geçiş, aynı düzeydeki **eşdeğer** programlar arasında ve YÖK'ün yayımladığı kontenjanlar içinde yapılır; bitirdiğin dönemlerin genel not ortalaması 100 üzerinden en az 60 olmalıdır. Hazırlık sınıfına, lisansın ilk iki ve son iki yarıyılına, ön lisansın ilk ve son yarıyılına yatay geçiş yapılamaz. 60 başvurabilmenin alt sınırıdır; yer, kontenjan kadar kişiye verilir.
Bu kapının doğal sınırı "eşdeğer program" şartıdır. Okuduğun alanla ilgisi olmayan bir bölüm istiyorsan ve puanın da Ek Madde-1'e yetmiyorsa geriye yeniden YKS kalır.
## Okurken YKS'ye girmek için kaydını dondurman ya da sildirmen gerekir mi?
Hayır. 2026-YKS Kılavuzu'nda bunu iki yerde görürsün:
- Başvuru bilgilerindeki öğrenim durumu seçeneklerinden biri "Bir yükseköğretim programına kayıtlıyım"dır. Kayıtlı öğrenci, sistemin tanıdığı bir aday türüdür.
- Kılavuzun 10. bölümü, aynı anda iki örgün ön lisans ya da iki örgün lisans programına kayıt yasağını anlatırken bu kuralın YKS tercih ve yerleştirmesinde bir programa yerleştirilmeye engel olmadığını ayrıca yazar. Koyduğu şart tektir: hâlen kayıtlı olduğun kurumdan ilişiğini kesmezsen yeni yerleştirildiğin programa kayıt yaptıramazsın.
YÖK yönetmeliği aynı sınırı şöyle kurar: örgün öğretimde aynı düzeydeki birden fazla programa öğrenci kaydı yapılamaz (madde 23).
Süreç sırasıyla şöyle işler:
1. Başvuru döneminde YKS'ye başvurursun; öğrenim durumunda kayıtlı olduğunu işaretlersin.
2. Sınava girer, sonuçlar açıklanınca tercihlerini yaparsın.
3. Yeni bir programa yerleşir ve gitmeye karar verirsen, o programın kayıt günlerinden önce kendi öğrenci işlerinden ilişik kesme işleminin nasıl ve kaç günde yapıldığını öğrenirsin; ilişiğini kesip yeni programa kayıt olursun.
4. Yerleşemezsen kayıtla ilgili yapman gereken bir işlem doğmaz.
Kılavuz ilişik kesmeyi yalnızca yeni programa kayıt yaptırmanın şartı olarak yazıyor. Bunun dışındaki ayrıntılar — belgeler, süre, ders saydırma — üniversitelerin kendi işleyişine bağlı; yazılı olarak öğrenci işlerine sor.
## Hazırlık yılını nasıl geçireceksin?
| Yol | Elinde kalan hak | Bedel | Geri dönüş |
| --- | --- | --- | --- |
| Derslere devam ederek hazırlan | Bölüm ve öğrencilik sürer; kayıtlı öğrenci olduğun için Ek Madde-1 ve not ortalamasıyla yatay geçiş kapıları açık kalır | Dersler ve sınav hazırlığı aynı anda; ortalaman düşerse not ortalamasıyla geçiş zorlaşır | Gerekmez: yerleşemezsen aynı bölümde devam edersin |
| Kaydı dondur | Kayıt durur; hazırlığa tam zaman ayırırsın | Üniversitenin yönetmeliğine bak: son başvuru günü, kabul edilen gerekçeler, süre ve ücret tarafı okuldan okula değişir; talebin kabul edilmeyebilir | Yönetmeliğe bağlı; kaydın nasıl yeniden açıldığını dondurmadan önce öğren |
| Kaydı sildir | Hazırlığa tam zaman | Öğrencilik sona erer; kayıtlı öğrenciye açık olan iki yatay geçiş kapısı da kapanır; yerleşemezsen elinde bölüm kalmaz | Geri dönüş varmış gibi plan kurma; dilekçeyi vermeden önce öğrenci işlerine yazılı sor |
Tablodan çıkan sonuç: kaydı sildirmek sınava girmenin şartı değil, senin tercihin. Sildirmenin sınav tarafında sana kazandırdığı bir hak yok.
Kayıt dondurma ülke çapında tek bir kurala bağlı değil. Bir örnek: Karabük Üniversitesi'nin yönetmeliğinde başvuru için akademik takvime bağlı bir son gün var, talebi öğrenci işleri değerlendiriyor ve dondurulan yarıyılda derse kaydolunamıyor. Senin okulunda süreler ve kabul edilen gerekçeler farklı olabilir; kararını kendi yönetmeliğinin ilgili maddesini okuduktan sonra ver.
## OBP tarafında ne değişir?
Kuralı burada yeniden anlatmıyoruz; hesabı [OBP yazısında](/rehber/obp-nedir-nasil-hesaplanir), kayıt kararıyla ilişkisi [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) yazısında. Okuyan öğrenci için özeti: 2026 kılavuzlarındaki kural, **bir önceki yılın YKS'siyle** yerleşenleri sayıyor. 2026-YKS ile yerleştiysen ve 2027-YKS'ye girersen OBP katsayın yarıya düşürülür; kural "kayıt olsun veya olmasın" diye yazıldığı için kaydının durumu bunu değiştirmez. Daha önceki yıllarda yerleştiysen 2026 kılavuzlarının metni seni saymıyor; yine de gireceğin yılın kılavuzunda OBP bölümünü oku, belirleyici olan odur.
## Yeniden tercih yaparken neye dikkat etmelisin?
Elinde bir bölüm varken liste kurmak, ilk tercihinden farklıdır:
- **Listeye yalnızca şu anki bölümüne tercih edeceğin programları yaz.** Yerleştirme listeni yukarıdan aşağı okur; "nasıl olsa gitmem" dediğin satıra da yerleşebilirsin. 2026 kılavuzlarındaki kural aynı kalırsa her yeni yerleştirme, bir sonraki yılın sınavı için OBP bedelini yeniden doğurur. ÖSYM de devam etmeyi düşünmediğin programı yazmaman konusunda uyarıyor.
- **Hedefi tek yılın tabanıyla koyma.** Hedef programın son 5 yıllık taban sıralamasına [bölüm sayfalarından](/bolumler) bak; yöntemi [hedef sıralama nasıl belirlenir?](/rehber/hedef-siralama-nasil-belirlenir) yazısında.
- **[Ölü tercihleri](/rehber/olu-tercih-nedir) temizle.** Sıralaman belli olduğunda [tercih robotuna](/tercih-robotu) girip programların son yılın tabanına göre hayal, dengeli ya da güvenli (halk arasında "garanti tercih") dilimlerinden hangisine düştüğünü tek ekranda görebilirsin. Bu dilimler yerleşme olasılığı değil, geçmiş tabana göre konumundur.
## Sık sorulan sorular
**Kaydımı dondurmadan YKS'ye girebilir miyim?**
Evet. Kılavuza göre bir programa kayıtlı olmak tercih yapmana ve yerleştirilmene engel değil; başvuruda öğrenim durumunu "kayıtlıyım" olarak işaretlersin.
**Tercih yapmak için kaydımı sildirmem gerekir mi?**
Hayır. İlişik kesme yalnızca yeni yerleştiğin programa kayıt yaptıracağın zaman gerekir.
**İkinci ya da üçüncü sınıftayım. Ek Madde-1'e hâlâ başvurabilir miyim?**
YÖK ilkelerine göre evet: ara sınıflar ve son sınıf dâhil. Kayıt olduğun yılın puanı, hedef programın o yılki taban puanıyla kıyaslanır; hangi sınıftan devam edeceğine geçtiğin üniversite karar verir. Hakkı daha önce kullandıysan yeniden kullanamazsın.
**Kayıt dondurmak için "YKS'ye hazırlanacağım" gerekçesi kabul edilir mi?**
Bunun genel bir cevabı yok. Kabul edilen gerekçeleri her üniversitenin kendi yönetmeliği ve kurulları belirliyor; başvurmadan önce öğrenci işlerine sor.
**Yerleşemezsem okuduğum bölüme ne olur?**
Kaydın duruyorsa (devam ediyor ya da dondurulmuşsa) kılavuzun senden istediği bir işlem yok; ilişik kesme şartı yalnızca yeni bir kayıt için. Kaydını sildirdiysen dönecek bir bölümün olmaz.
## Kaynaklar
Tüm kaynaklara 21 Eylül 2026'da erişildi.
- ÖSYM, [2026-YKS Kılavuzu](https://www.osym.gov.tr/2026yuksekogretim-kurumlari-sinavi-yks-kilavuzu) (başvuru bilgileri 23. alan: öğrenim durumu; bölüm 4.2: OBP; bölüm 10: kayıt yaptıramayacak olanlar)
- ÖSYM, [2026-YKS Yükseköğretim Programları ve Kontenjanları Kılavuzu](https://www.osym.gov.tr/2026-yuksekogretim-kurumlari-sinavi-yks-yuksekogretim-programlari-ve-kontenjanlari-kilavuzu) (bölüm 1.3 ve tercih uyarıları)
- ÖSYM, [2026-YKS Sıkça Sorulan Sorular](https://dokuman.osym.gov.tr/pdfdokuman/2026/YKS/sss_yksd19022026.pdf) (soru 51–52)
- YÖK, [Güz ve Bahar Dönemi Ek Madde 1 Uygulama İlkeleri](https://egitim.yok.gov.tr/tr/document/2853) (A.2, A.5, A.7, A.11, A.16–A.18, A.20, A.21)
- Mevzuat Bilgi Sistemi, [Yükseköğretim Kurumlarında Önlisans ve Lisans Düzeyindeki Programlar Arasında Geçiş, Çift Anadal, Yan Dal ile Kurumlar Arası Kredi Transferi Yapılması Esaslarına İlişkin Yönetmelik](https://www.mevzuat.gov.tr/mevzuat?MevzuatNo=13948&MevzuatTur=7&MevzuatTertip=5) (madde 6, 11, 23 ve Ek Madde 1)
- Mevzuat Bilgi Sistemi, [Karabük Üniversitesi Ön Lisans, Lisans Eğitim-Öğretim ve Sınav Yönetmeliği](https://www.mevzuat.gov.tr/anasayfa/MevzuatFihristDetayIframe?MevzuatTur=8&MevzuatNo=38896&MevzuatTertip=5) (madde 27; kayıt dondurma örneği)

View File

@@ -2,6 +2,7 @@
baslik: İstemediğim Bölüme Yerleşirsem? Yatay Geçiş, ÇAP ve Yandal Gerçekte Nasıl İşler?
aciklama: Sonra yatay geçerim cümlesinin arkasında ne var? Üniversiteye başladıktan sonraki dört yol ve gerçek koşulları — tek şemada.
tarih: 2026-07-30
guncelleme: 2026-09-21
---
Tercih döneminde en çok kurulan cümlelerden biri: "Şimdilik buraya yazayım, sonra yatay geçerim." Bu cümle tamamen yanlış değil — üniversiteye başladıktan sonra gerçekten birkaç çıkış yolu var. Ama her birinin koşulu, takvimi ve kontenjanı var. Bu yazı, o yolları **planlanabilir** hâle getiriyor: hangisi neye bağlı, hangisi ne zaman açılıyor.
@@ -65,7 +66,7 @@ Eşik değerler ve hangi bölümler arası açıldığı **üniversitenin kendi
Her zaman açık olan yol. Ama şu üç şeyi baştan bil:
- Bir yıl maliyeti vardır ve bu yıl geri gelmez.
- Bir yükseköğretim programına kayıtlıysan, ertesi yıl yerleştiğinde eski kaydın silinir; ayrıca kayıtlı olmanın OBP ve bazı programların koşulları açısından sonuçlarını [tercih takvimi](/rehber/yks-tercih-takvimi-2026) ve kılavuz üzerinden kontrol etmelisin.
- Bir programa kayıtlı olman yeniden sınava girmene ve yerleştirilmene engel değildir; ama yeni yerleştiğin programa kayıt yaptırabilmek için eskisinden ilişiğini kesmen gerekir. Süreç, kayıt dondurma ve OBP tarafı [üniversite okurken tekrar YKS'ye girmek](/rehber/universite-okurken-tekrar-yks) yazısında.
- Sıralamanın ikinci yılda otomatik olarak yükseleceği garantisi yoktur.
[Yerleşemedim ya da istemediğim bölüme yerleştim](/rehber/yerlesemedim-ne-yapmaliyim) yazısı bu kararı bütün seçenekleriyle birlikte ele alıyor.

View File

@@ -2,6 +2,7 @@
baslik: Yerleşemedim ya da İstemediğim Bölüme Yerleştim — Şimdi Ne Olacak?
aciklama: Sonuç ekranı istediğin gibi çıkmadıysa önünde hâlâ üç yol var: ek yerleştirme, yatay geçiş ve yeniden deneme. Hangi durumda hangisi mantıklı, tek şemada.
tarih: 2026-08-01
guncelleme: 2026-09-21
---
Sonuçlar açıklandığında iki tür hayal kırıklığı yaşanır: hiçbir tercihe yerleşememek ya da listenin sonlarındaki "keşke yazmasaydım" satırına yerleşmek. İkisi de yolun sonu değil — ama ikisinin kuralları **birbirinden çok farklı** ve yanlış hamle, doğru kapıyı kapatabiliyor.
@@ -29,7 +30,7 @@ flowchart TD
## Yol 1: Ek yerleştirme — boşta kalanların ikinci şansı
İlk yerleştirmede **hiçbir programa yerleşemediysen** ek yerleştirmeye başvurabilirsin. Kayıt dönemi bitince boş kalan ve kayıt yaptırılmadığı için boşalan kontenjanlar ÖSYM'nin ek kılavuzunda ilan edilir; yeniden en fazla 24 tercih yaparsın. Tabanlar ilk yerleştirmeye göre genelde gevşer ama en çok istenen programlar ek yerleştirmeye nadiren kalır. Kimin başvurabileceği, takvimi ve stratejisiyle tüm detaylar [ek yerleştirme rehberinde](/rehber/ek-yerlestirme-2026).
İlk yerleştirmede **hiçbir programa yerleşemediysen** ek yerleştirmeye başvurabilirsin. Kayıt dönemi bitince boş kalan ve kayıt yaptırılmadığı için boşalan kontenjanlar ÖSYM'nin ek kılavuzunda ilan edilir; yeniden en fazla 24 tercih yaparsın. Tabanlar ilk yerleştirmeye göre genelde gevşer ama en çok istenen programlar ek yerleştirmeye nadiren kalır. Kimin başvurabileceği, takvimi ve stratejisiyle tüm detaylar [ek yerleştirme rehberinde](/rehber/ek-yerlestirme-2026). Ek tercihini yaptıysan sonuca nereden bakacağın ve kaydın nasıl işlediği [ek yerleştirme sonuçları ve kayıt](/rehber/ek-yerlestirme-sonuclari-ve-kayit) yazısında.
Kritik kural bir kez daha: bir programa **yerleştirildiysen** — kayıt yaptırmamış olsan bile — ek yerleştirme sana kapalıdır. "İstemediğim yere yerleştim, kayıt olmayayım, ek tercihte daha iyisini yazarım" planı **çalışmaz.**
@@ -45,7 +46,7 @@ Yani "puanım aslında X bölümüne yetiyordu ama listeme yazmamıştım" durum
## Yol 3: Yeniden denemek — bedelini bilerek
Gelecek yıl tekrar sınava girmek meşru bir plan; ama iki bedelini baştan bil:
Gelecek yıl tekrar sınava girmek meşru bir plan. Kayıt olup denemek, kaydı dondurmak ve hiç kayıt olmamak arasındaki farkı [mezuna kalmak mı, kayıt olmak mı?](/rehber/mezuna-kalmak-mi-kayit-olmak-mi) karar ağacında ayrıca anlattık; kayıt olup okurken yeniden denemenin süreci [üniversite okurken tekrar YKS'ye girmek](/rehber/universite-okurken-tekrar-yks) yazısında. Burada iki bedelini baştan bil:
1. **OBP çarpanı:** bir programa yerleştirildiysen (kayıt yaptırmasan bile) gelecek yıl diploma notu katkın yarıya düşer — hesabı [OBP yazısında](/rehber/obp-nedir-nasil-hesaplanir).
2. **Tabanlar sabit durmaz:** bu yıl "az farkla kaçırdığın" bölümün tabanı seneye aynı yerde olmayabilir — [tabanlar nasıl değişir](/rehber/taban-siralamalar-nasil-degisir) yazısı bu oynaklığı verilerle gösteriyor.

16
src/app/paket/layout.tsx Normal file
View File

@@ -0,0 +1,16 @@
import { PaketGorunumOlayi } from "@/features/odeme/components/paket-gorunum-olayi";
// Yalnızca ölçüm için: sayfanın kendisine dokunmadan paket_goruntulendi
// olayını bağlar (bkz. paket-gorunum-olayi.tsx).
export default function PaketLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<>
{children}
<PaketGorunumOlayi />
</>
);
}

View File

@@ -19,7 +19,6 @@ const staticEntries: MetadataRoute.Sitemap = [
priority: 0.8,
changeFrequency: "weekly",
},
{ url: `${SITE_URL}/rehber`, priority: 0.8, changeFrequency: "weekly" },
{ url: `${SITE_URL}/paket`, priority: 0.7, changeFrequency: "monthly" },
{ url: `${SITE_URL}/meraklisina`, priority: 0.6, changeFrequency: "monthly" },
{ url: `${SITE_URL}/iletisim`, priority: 0.3, changeFrequency: "yearly" },
@@ -42,11 +41,32 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
changeFrequency: "monthly",
}),
);
const rehberler: MetadataRoute.Sitemap = getAllRehberler().map((y) => ({
const yazilar = getAllRehberler();
const rehberler: MetadataRoute.Sitemap = yazilar.map((y) => ({
url: `${SITE_URL}/rehber/${y.slug}`,
lastModified: y.tarih,
lastModified: y.guncelleme ?? y.tarih,
priority: 0.7,
changeFrequency: "monthly",
}));
return [...staticEntries, ...bolumler, ...universiteler, ...rehberler];
// /rehber dizini en son dokunulan yazı kadar tazedir (ISO tarihler metin
// olarak karşılaştırılabilir). Hiç yazı yoksa lastmod hiç yazılmaz.
const rehberSonDegisiklik = yazilar
.map((y) => y.guncelleme ?? y.tarih)
.reduce<string | undefined>(
(enBuyuk, t) => (enBuyuk === undefined || t > enBuyuk ? t : enBuyuk),
undefined,
);
const rehberDizini: MetadataRoute.Sitemap[number] = {
url: `${SITE_URL}/rehber`,
lastModified: rehberSonDegisiklik,
priority: 0.8,
changeFrequency: "weekly",
};
return [
...staticEntries,
rehberDizini,
...bolumler,
...universiteler,
...rehberler,
];
}

View File

@@ -1,54 +1,60 @@
"use client";
import { useEffect, useRef, type RefObject } from "react";
import { olay, type OlayAdi, type Ozellikler } from "@/lib/analitik";
import { useCallback, useEffect, useRef, type RefCallback } from "react";
import {
olayAnahtari,
olayBirKez,
type OlayAdi,
type Ozellikler,
} from "@/lib/analitik";
/**
* Bir elemanın viewport'a ilk girişinde analitik olayı atan ref hook'u.
* Gösterim olayları (hazir_panel_goruntulendi, kilit_goruntulendi vb.)
* oturum başına en fazla 1 kez sayılmalı; tekilleştirme sessionStorage
* anahtarıyla yapılır. IntersectionObserver yoksa olay hiç atılmaz —
* "görüntülendi" ölçümünde görünürlüğü doğrulayamadığımız cihazı saymak
* veriyi şişirir.
* anahtarıyla yapılır (bkz. olayBirKez). IntersectionObserver yoksa olay hiç
* atılmaz — "görüntülendi" ölçümünde görünürlüğü doğrulayamadığımız cihazı
* saymak veriyi şişirir.
*
* Callback ref döner (RefObject değil): gözlem effect'te değil, DOM düğümü
* bağlandığı anda kurulur. Eleman ilk commit'te yoksa (kaydet-banner: mount
* sonrası açılır, üstelik portal içinde) ya da sökülüp yeni bir düğümle geri
* geliyorsa (tadımlık satırı: tip uymayınca gizlenip fetch sonrası yeniden
* takılır) useRef + effect deseni gözlemi hiç kurmuyordu.
*/
export function useGorunumOlayi<T extends HTMLElement = HTMLElement>(
ad: OlayAdi,
ozellikler?: Ozellikler,
/** Aynı olayın farklı yüzeyleri için tekilleştirme eki ("satir", "kart"). */
anahtarEki?: string,
): RefObject<T | null> {
const ref = useRef<T>(null);
// Özellikler her render sonrası tazelenir; observer effect'i yalnızca
// ad/anahtar değişiminde kurulur (deps'e obje koymamak için ref).
): RefCallback<T> {
// Özellikler her render sonrası tazelenir; callback ref yalnızca ad/anahtar
// değişiminde yeniden kurulur (deps'e obje koymamak için ref).
const ozelliklerRef = useRef(ozellikler);
useEffect(() => {
ozelliklerRef.current = ozellikler;
});
useEffect(() => {
const el = ref.current;
if (!el || typeof IntersectionObserver === "undefined") return;
return useCallback(
(el: T | null) => {
if (!el || typeof IntersectionObserver === "undefined") return;
const anahtar = `kolaytercih.olay.${ad}${anahtarEki ? `.${anahtarEki}` : ""}`;
try {
if (window.sessionStorage.getItem(anahtar)) return;
} catch {
// Storage engelliyse tekilleştirmeden vazgeç, olay yine atılabilir
}
const io = new IntersectionObserver((entries) => {
if (!entries.some((e) => e.isIntersecting)) return;
io.disconnect();
try {
window.sessionStorage.setItem(anahtar, "1");
if (window.sessionStorage.getItem(olayAnahtari(ad, anahtarEki))) return;
} catch {
// yut
// Storage engelliyse tekilleştirmeden vazgeç, olay yine atılabilir
}
olay(ad, ozelliklerRef.current);
});
io.observe(el);
return () => io.disconnect();
}, [ad, anahtarEki]);
return ref;
const io = new IntersectionObserver((entries) => {
if (!entries.some((e) => e.isIntersecting)) return;
io.disconnect();
olayBirKez(ad, ozelliklerRef.current, anahtarEki);
});
io.observe(el);
// React 19 ref temizliği: düğüm sökülünce (ya da ad/anahtar değişince)
// gözlemci bırakılır; yeni düğüm bağlanınca callback baştan çalışır.
return () => io.disconnect();
},
[ad, anahtarEki],
);
}

View File

@@ -38,8 +38,10 @@ export function GirisForm({ callbackURL }: { callbackURL: string }) {
// Yeniden gönderim arası bekleme (sn) — istemeden spam'lenmesin
const [bekleme, setBekleme] = useState(0);
// 60 sn: sunucunun adres başına gönderim soğumasıyla hizalı; daha kısa
// sayaçta "Yeniden gönder" sessizce yutulur, kullanıcı gelmeyen maili bekler.
function geriSayimBaslat() {
setBekleme(30);
setBekleme(60);
const sayac = setInterval(() => {
setBekleme((s) => {
if (s <= 1) {
@@ -59,6 +61,7 @@ export function GirisForm({ callbackURL }: { callbackURL: string }) {
callbackURL,
});
if (error) {
olay("giris_hata", { yontem: "google", status: error.status ?? 0 });
toast.error("Google ile giriş başarısız. Tekrar dener misin?");
setBusy(null);
}
@@ -81,7 +84,13 @@ export function GirisForm({ callbackURL }: { callbackURL: string }) {
});
setBusy(null);
if (error) {
toast.error("Bağlantı gönderilemedi. Tekrar dener misin?");
olay("giris_hata", { yontem: "eposta", status: error.status ?? 0 });
// 429 = hız sınırı: "tekrar dene" demek sınırı daha da uzatır
toast.error(
error.status === 429
? "Çok sık denedin, bir dakika sonra tekrar dene"
: "Bağlantı gönderilemedi. Tekrar dener misin?",
);
return;
}
setSent(true);

View File

@@ -48,7 +48,7 @@ export async function UserNav() {
<ListeSenkron userId={u.id} />
<ListemButonu />
<Link
href="/paket"
href="/paket?kaynak=nav"
className="inline-flex h-9 items-center gap-1.5 whitespace-nowrap rounded-full border border-slate-200 bg-white px-3 text-xs font-semibold text-slate-700 transition-colors duration-200 hover:border-slate-300 hover:bg-slate-50 sm:h-12 sm:gap-2 sm:px-5 sm:text-sm"
title="Kredilerin — yüklemek için tıkla"
>

View File

@@ -52,8 +52,11 @@ export function ProgramEkleButonu({
toast.info(`Listen ${MANUEL_LISTE_MAX} tercihe ulaştı.`);
} else if (sonuc.zatenVar) {
toast.info("Bu program zaten seçtiklerinde.");
} else {
olay("program_eklendi", { kaynak });
} else if (sonuc.eklendi) {
// Yalnız gerçek eklemede: profilsiz + kapıyı açar (kapiAcildi) ve
// program o an listeye girmez — o yolun olayı kapı tamamlanınca
// profilTamamlandi içinden {yol: "kapi"} ile atılır.
olay("program_eklendi", { kaynak, yol: "dogrudan" });
}
}

View File

@@ -1,6 +1,6 @@
"use client";
import { useState } from "react";
import { useEffect, useRef, useState } from "react";
import { useRouter } from "next/navigation";
import { ArrowRight, Trophy } from "lucide-react";
import { useReducedMotion } from "motion/react";
@@ -53,17 +53,38 @@ type Adim = "giris" | "sira" | "sihirbaz";
const ADIM_SIRASI: Record<Adim, number> = { giris: 0, sira: 1, sihirbaz: 2 };
export function TercihProfiliKapisi() {
const { acik, duzenle, dogrudanSira, bekleyen, bekleyenHedef, profil } =
useProfilKapisi();
const {
acik,
duzenle,
dogrudanSira,
tetik,
bekleyen,
bekleyenHedef,
profil,
} = useProfilKapisi();
// Kapanış olayı için o an görünen adım; KapıIcerik her adım değişiminde
// (ve mount'ta) bildirir. Render'ı etkilemediği için state değil ref.
const adimRef = useRef<Adim>("giris");
const oturumAnahtari = acik
? `${duzenle ? "d" : "n"}-${bekleyen?.program.id ?? "yok"}-${profil?.sira ?? 0}-${profil?.tur ?? ""}`
: "kapali";
// Tamamlanmadan kapanışın TEK noktası: X, dışarı tıklama, Esc (Dialog
// onOpenChange) ve içerideki "Vazgeç" butonları buradan geçer.
// Tamamlanan kapı buraya uğramaz: secimleriTamamla → profilTamamlandi
// depoda `acik`'ı doğrudan kapatır; Radix kontrollü `open` prop'u
// değişince onOpenChange çağırmaz → `kapi_kapatildi` atılmaz.
function vazgec() {
if (!acik) return;
olay("kapi_kapatildi", { adim: adimRef.current, tetik });
profilKapisiniKapat();
}
return (
<Dialog
open={acik}
onOpenChange={(v) => {
if (!v) profilKapisiniKapat();
if (!v) vazgec();
}}
>
<DialogContent
@@ -85,6 +106,10 @@ export function TercihProfiliKapisi() {
bekleyen={bekleyen}
hedef={bekleyenHedef}
profil={profil}
onAdimDegisti={(yeniAdim) => {
adimRef.current = yeniAdim;
}}
onVazgec={vazgec}
/>
) : null}
</DialogContent>
@@ -98,21 +123,32 @@ function KapıIcerik({
bekleyen,
hedef,
profil,
onAdimDegisti,
onVazgec,
}: {
duzenle: boolean;
dogrudanSira: boolean;
bekleyen: BekleyenProgram | null;
hedef: BekleyenHedef | null;
profil: TercihProfili | null;
/** Görünen adımı üst bileşene bildirir (yalnız `kapi_kapatildi` ölçümü). */
onAdimDegisti: (adim: Adim) => void;
/** Tamamlamadan kapat — olayı üst bileşen atar, sonra kapıyı kapatır. */
onVazgec: () => void;
}) {
const router = useRouter();
const bilinenSira = bekleyen?.adaySira ?? profil?.sira ?? null;
const bilinenTur = bekleyen?.adayTur ?? profil?.tur ?? "say";
// Düzenlemede ve navbar "Sıralamanı gir" girişinde doğrudan sıralama adımı
const [adim, setAdim] = useState<Adim>(
duzenle || dogrudanSira ? "sira" : "giris",
);
const ilkAdim: Adim = duzenle || dogrudanSira ? "sira" : "giris";
const [adim, setAdim] = useState<Adim>(ilkAdim);
// Her açılışta (key ile yeniden mount) üstteki adım kaydını başa sar;
// önceki açılıştan kalan "sihirbaz" değeri yeni kapanışa sızmasın.
useEffect(() => {
onAdimDegisti(ilkAdim);
// eslint-disable-next-line react-hooks/exhaustive-deps -- yalnız mount
}, []);
// Adım geçişleri sihirbazın kendi içindeki TransitionPanel kaymasıyla oynar
const [yon, setYon] = useState(1);
const [gecisBasladi, setGecisBasladi] = useState(false);
@@ -140,6 +176,7 @@ function KapıIcerik({
setYon(ADIM_SIRASI[yeniAdim] > ADIM_SIRASI[adim] ? 1 : -1);
setGecisBasladi(true);
setAdim(yeniAdim);
onAdimDegisti(yeniAdim);
}
async function facetYukle(siraDeger: number, turDeger: string) {
@@ -163,6 +200,7 @@ function KapıIcerik({
sira_kovasi: siraKovasi(siraDeger),
});
} catch {
olay("sira_form_hata", { kaynak: duzenle ? "duzenle" : "kapi" });
setHata("Bir şeyler ters gitti, tekrar dener misin?");
} finally {
setYukleniyor(false);
@@ -286,7 +324,7 @@ function KapıIcerik({
<Button
type="button"
variant="ghost"
onClick={profilKapisiniKapat}
onClick={onVazgec}
className="cursor-pointer"
>
Vazgeç
@@ -384,7 +422,7 @@ function KapıIcerik({
onClick={() =>
// Doğrudan sıralama adımıyla açıldıysa tanıtım adımı hiç
// görülmedi; "Geri" yerine kapıyı kapatmak beklenen davranış.
duzenle || dogrudanSira ? profilKapisiniKapat() : adimaGec("giris")
duzenle || dogrudanSira ? onVazgec() : adimaGec("giris")
}
className="cursor-pointer"
>

View File

@@ -5,6 +5,7 @@
import { useSyncExternalStore } from "react";
import type { Program } from "@/types/yokatlas";
import { olay } from "@/lib/analitik";
import { PROFIL_DEGISTI_EVENT, sonucHref, type TercihProfili } from "@/features/sihirbaz/sihirbaz-sabitler";
import { tercihProfiliOku, tercihProfiliTamamlandiMi } from "@/features/sihirbaz/sihirbaz-profil";
import {
@@ -40,11 +41,19 @@ export type BekleyenProgram = {
* girişsizse giriş CTA paneli; hero-form ile aynı desen). */
export type BekleyenHedef = "sonuc" | "sihirbaz";
/** Kapıyı kimin açtığı — yalnız ölçüm içindir (`kapi_acildi` /
* `kapi_kapatildi` olaylarının `tetik` özelliği), davranışı etkilemez.
* "arti": + butonu · "sonuc": sonuca gitmek isteyen CTA'lar ·
* "sihirbaz": Yapay Zeka niyetli CTA'lar · "duzenle": profil düzenleme. */
export type KapiTetik = "arti" | "sonuc" | "sihirbaz" | "duzenle" | "diger";
type KapıDurumu = {
acik: boolean;
duzenle: boolean;
/** Tanıtım (giriş) adımını atla, doğrudan sıralama adımıyla aç. */
dogrudanSira: boolean;
/** Açık kapıyı kimin açtığı; kapalıyken "diger". */
tetik: KapiTetik;
bekleyen: BekleyenProgram | null;
bekleyenHedef: BekleyenHedef | null;
profil: TercihProfili | null;
@@ -55,6 +64,7 @@ let durum: KapıDurumu = {
acik: false,
duzenle: false,
dogrudanSira: false,
tetik: "diger",
bekleyen: null,
bekleyenHedef: null,
profil: null,
@@ -106,6 +116,7 @@ const SSR_DURUM: KapıDurumu = {
acik: false,
duzenle: false,
dogrudanSira: false,
tetik: "diger",
bekleyen: null,
bekleyenHedef: null,
profil: null,
@@ -133,44 +144,63 @@ export function profilKapisiniKapat() {
acik: false,
duzenle: false,
dogrudanSira: false,
tetik: "diger",
bekleyen: null,
bekleyenHedef: null,
};
yayinla();
}
/** Kapının tek açılış noktası: durumu yazar ve `kapi_acildi`'yi atar; her
* açıcı kendi `tetik` değerini verir. (Tamamlanmadan kapanışın olayı
* `kapi_kapatildi` kapı bileşeninden atılır — adımı yalnız o bilir.) */
function kapiyiAc(
yama: Pick<
KapıDurumu,
"duzenle" | "dogrudanSira" | "bekleyen" | "bekleyenHedef"
>,
tetik: KapiTetik,
) {
durum = { ...durum, acik: true, ...yama, tetik };
yayinla();
olay("kapi_acildi", { tetik });
}
export function profilDuzenlemeyiAc() {
if (!durum.profilYuklendi) yukle();
durum = {
...durum,
acik: true,
duzenle: true,
dogrudanSira: false,
bekleyen: null,
bekleyenHedef: null,
};
yayinla();
kapiyiAc(
{
duzenle: true,
dogrudanSira: false,
bekleyen: null,
bekleyenHedef: null,
},
"duzenle",
);
}
/**
* Profil yokken kapıyı açar; tamamlanınca `hedef`'e yönlendirilir.
* Navbar, çekmece +, /sonuc boş hali ve listem gibi yerler bunu kullanır.
* `dogrudanSira` tanıtım adımını atlar — kapı sıralama adımıyla açılır.
* `tetik` yalnız ölçüm içindir; verilmezse hedeften türetilir ("sonuc" /
* "sihirbaz"), hedef de yoksa "diger".
*/
export function profilToplamaAc(
hedef: BekleyenHedef | null = null,
dogrudanSira = false,
tetik?: KapiTetik,
) {
if (!durum.profilYuklendi) yukle();
durum = {
...durum,
acik: true,
duzenle: false,
dogrudanSira,
bekleyen: null,
bekleyenHedef: hedef,
};
yayinla();
kapiyiAc(
{
duzenle: false,
dogrudanSira,
bekleyen: null,
bekleyenHedef: hedef,
},
tetik ?? hedef ?? "diger",
);
}
/**
@@ -209,15 +239,15 @@ export function programEkleIste(opts: {
}
if (!tercihProfiliTamamlandiMi()) {
durum = {
...durum,
acik: true,
duzenle: false,
dogrudanSira: false,
bekleyen: { program, kaynak, adaySira, adayTur },
bekleyenHedef: null,
};
yayinla();
kapiyiAc(
{
duzenle: false,
dogrudanSira: false,
bekleyen: { program, kaynak, adaySira, adayTur },
bekleyenHedef: null,
},
"arti",
);
return { eklendi: false, zatenVar: false, doldu: false, kapiAcildi: true };
}
@@ -250,13 +280,21 @@ export function profilTamamlandi(
const bekleyen = durum.bekleyen;
const hedef = durum.bekleyenHedef;
if (bekleyen) {
ekle(programdanManuelTercih(bekleyen.program, profil.sira, bekleyen.kaynak));
const eklendi = ekle(
programdanManuelTercih(bekleyen.program, profil.sira, bekleyen.kaynak),
);
// Kapıdan geçen +: program ancak şimdi listeye girdi. Butondaki
// {yol: "dogrudan"} atışının eşi; liste doluysa/zaten varsa atılmaz.
if (eklendi) {
olay("program_eklendi", { kaynak: bekleyen.kaynak, yol: "kapi" });
}
}
durum = {
...durum,
acik: false,
duzenle: false,
dogrudanSira: false,
tetik: "diger",
bekleyen: null,
bekleyenHedef: null,
profil,

View File

@@ -0,0 +1,25 @@
"use client";
// /paket görüntülenmesini ve ziyaretçiyi oraya getiren yüzeyi ölçer.
//
// Neden ayrı bileşen + layout: /paket sayfası sunucu bileşeni ve statik
// kalmalı. `useSearchParams` kullanılmaz — cacheComponents açıkken Suspense
// sınırı/CSR bailout gerektirir; parametre yalnızca ölçüm için lazım, mount
// sonrası window.location'dan okumak yeter.
import { useEffect } from "react";
import { olayBirKez } from "@/lib/analitik";
// Serbest metin analitiğe sızmasın: bilinmeyen değerler "diger"e düşer.
const KAYNAKLAR = ["kilit", "kredi_bitti", "nav"] as const;
export function PaketGorunumOlayi() {
useEffect(() => {
const ham = new URLSearchParams(window.location.search).get("kaynak");
const kaynak = KAYNAKLAR.find((k) => k === ham) ?? "diger";
// Oturum başına kaynak başına 1 kez: yenileme sayıyı şişirmesin
olayBirKez("paket_goruntulendi", { kaynak }, kaynak);
}, []);
return null;
}

View File

@@ -84,9 +84,11 @@ export function ListeUretici({
} else if (sonuc.code === "AUTH") {
router.push(`/giris?callback=${encodeURIComponent("/listem?uret=1")}`);
} else {
olay("liste_uretim_hata", { kod: sonuc.code });
setDurum({ ad: "hata", mesaj: sonuc.error });
}
} catch {
olay("liste_uretim_hata", { kod: "ISTISNA" });
setDurum({
ad: "hata",
mesaj: "Beklenmeyen bir hata oluştu, tekrar dener misin?",
@@ -131,7 +133,7 @@ export function ListeUretici({
size="lg"
className="mt-6 cursor-pointer bg-orange-500 text-white transition-colors duration-200 hover:bg-orange-600"
>
<Link href="/paket">
<Link href="/paket?kaynak=kredi_bitti">
{hasPaket ? "+30 kredi yükle — 129 TL" : "Paketi aktive et — 299 TL"}
<ArrowRight className="size-4" aria-hidden />
</Link>

View File

@@ -285,7 +285,7 @@ export function ListemGovde({
asChild
className="h-11 w-full shrink-0 cursor-pointer bg-orange-500 text-white transition-[background-color,transform] duration-200 active:scale-[0.97] hover:bg-orange-600 sm:w-auto"
>
<Link href="/paket">
<Link href="/paket?kaynak=kilit">
Analizleri aç — {paketFiyati} TL
<ArrowRight data-icon="inline-end" aria-hidden />
</Link>
@@ -366,7 +366,7 @@ export function ListemGovde({
size="lg"
className="mt-5 w-full cursor-pointer bg-orange-500 text-white transition-[background-color,transform] duration-200 active:scale-[0.97] hover:bg-orange-600"
>
<Link href="/paket">
<Link href="/paket?kaynak=kilit">
Kişisel analizi aç
<ArrowRight data-icon="inline-end" aria-hidden />
</Link>

View File

@@ -30,6 +30,9 @@ export function ElCizimiSema({
figcaption?: React.ReactNode;
}) {
const [svg, setSvg] = useState<string | null>(null);
// mermaid yüklenemez ya da çizemezse (bazı tarayıcılarda `getBBox` hatası)
// sonsuz iskelet yerine metin karşılığı açık gelir
const [hata, setHata] = useState(false);
const figureRef = useRef<HTMLElement>(null);
// mermaid.render'ın istediği DOM id'si: useId'nin ":" karakterleri geçersiz
const semaId = `sema-${useId().replace(/[^a-zA-Z0-9-]/g, "")}`;
@@ -52,26 +55,34 @@ export function ElCizimiSema({
io.observe(el);
function cizdir() {
import("mermaid").then(async ({ default: mermaid }) => {
mermaid.initialize({
startOnLoad: false,
look: "handDrawn",
handDrawnSeed: 7, // her render'da aynı çizgi titremesi (deterministik)
theme: "base",
fontFamily: `${elYazisi.style.fontFamily}, cursive`,
themeVariables: {
primaryColor: "#ffffff",
primaryBorderColor: "#e2e8f0",
primaryTextColor: "#0f172a",
lineColor: "#94a3b8",
edgeLabelBackground: "#ffffff",
import("mermaid")
.then(async ({ default: mermaid }) => {
mermaid.initialize({
startOnLoad: false,
// Hata olursa mermaid kendi "bomba" SVG'sini basmasın; biz toparlıyoruz
suppressErrorRendering: true,
look: "handDrawn",
handDrawnSeed: 7, // her render'da aynı çizgi titremesi (deterministik)
theme: "base",
fontFamily: `${elYazisi.style.fontFamily}, cursive`,
fontSize: "17px", // script fontun x-yüksekliği düşük; okunurluk için büyütüldü
},
themeVariables: {
primaryColor: "#ffffff",
primaryBorderColor: "#e2e8f0",
primaryTextColor: "#0f172a",
lineColor: "#94a3b8",
edgeLabelBackground: "#ffffff",
fontFamily: `${elYazisi.style.fontFamily}, cursive`,
fontSize: "17px", // script fontun x-yüksekliği düşük; okunurluk için büyütüldü
},
});
const sonuc = await mermaid.render(semaId, tanim);
if (!iptal) setSvg(sonuc.svg);
})
.catch(() => {
// mermaid.render atarsa geçici ölçüm div'ini body'de bırakabiliyor
document.getElementById(`d${semaId}`)?.remove();
if (!iptal) setHata(true);
});
const sonuc = await mermaid.render(semaId, tanim);
if (!iptal) setSvg(sonuc.svg);
});
}
return () => {
@@ -89,7 +100,7 @@ export function ElCizimiSema({
className={`${elYazisi.className} overflow-x-auto [&_svg]:mx-auto [&_svg]:h-auto [&_svg]:max-w-full`}
dangerouslySetInnerHTML={{ __html: svg }}
/>
) : (
) : hata ? null : (
<div
aria-hidden
className="h-96 animate-pulse rounded-xl bg-slate-100"
@@ -100,6 +111,18 @@ export function ElCizimiSema({
{figcaption}
</figcaption>
) : null}
{/* Şemanın metin karşılığı sunucu HTML'inde de durur: JS çalıştırmayan
botlar ve şemayı çizemeyen tarayıcılar aynı içeriği okur. Kaynak
yine tek `ariaLabel` prop'u — ikinci bir metin tutulmaz. */}
<details
open={hata || undefined}
className="mt-2 text-xs text-slate-500"
>
<summary className="cursor-pointer font-medium text-slate-600">
Şemayı metin olarak oku
</summary>
<p className="mt-2 text-sm leading-6 text-slate-600">{ariaLabel}</p>
</details>
</figure>
);
}

View File

@@ -8,6 +8,7 @@ import {
breadcrumbJsonLd,
sayfaMetadata,
} from "@/lib/seo";
import { trTarih } from "@/lib/tarih";
import { CtaSiraForm } from "@/features/sihirbaz/components/cta-sira-form";
import { ElCizimiSema } from "./el-cizimi-sema";
import { RehberKapak } from "./rehber-kapak";
@@ -29,7 +30,11 @@ export function rehberYaziMetadata(slug: string): Metadata {
title: yazi.baslik,
description: yazi.aciklama,
path: `/rehber/${slug}`,
openGraph: { type: "article", publishedTime: yazi.tarih },
openGraph: {
type: "article",
publishedTime: yazi.tarih,
modifiedTime: yazi.guncelleme ?? yazi.tarih,
},
});
}
@@ -49,6 +54,7 @@ export function RehberMakale({ slug }: { slug: string }) {
description: yazi.aciklama,
path: `/rehber/${slug}`,
datePublished: yazi.tarih,
dateModified: yazi.guncelleme,
})}
/>
<JsonLd
@@ -67,6 +73,15 @@ export function RehberMakale({ slug }: { slug: string }) {
<p className="mt-3 text-base leading-7 text-slate-600">
{yazi.aciklama}
</p>
<p className="mt-3 text-xs text-slate-500">
Yayın: <time dateTime={yazi.tarih}>{trTarih(yazi.tarih)}</time>
{yazi.guncelleme ? (
<>
{" · "}Güncelleme:{" "}
<time dateTime={yazi.guncelleme}>{trTarih(yazi.guncelleme)}</time>
</>
) : null}
</p>
<div
className="mt-8 text-[15px] leading-7 text-slate-700
[&_h2]:mt-10 [&_h2]:font-heading [&_h2]:text-xl [&_h2]:font-bold [&_h2]:text-slate-900
@@ -76,7 +91,7 @@ export function RehberMakale({ slug }: { slug: string }) {
[&_strong]:font-semibold [&_strong]:text-slate-900
[&_ul]:mt-3 [&_ul]:list-disc [&_ul]:space-y-1.5 [&_ul]:pl-6
[&_ol]:mt-3 [&_ol]:list-decimal [&_ol]:space-y-1.5 [&_ol]:pl-6
[&_table]:mt-4 [&_table]:w-full [&_table]:border-collapse [&_table]:text-sm
[&_.rehber-tablo]:mt-4 [&_.rehber-tablo]:overflow-x-auto [&_table]:w-full [&_table]:border-collapse [&_table]:text-sm
[&_th]:border [&_th]:border-slate-200 [&_th]:bg-slate-50 [&_th]:px-3 [&_th]:py-2 [&_th]:text-left [&_th]:font-semibold
[&_td]:border [&_td]:border-slate-200 [&_td]:px-3 [&_td]:py-2
[&_blockquote]:mt-4 [&_blockquote]:border-l-4 [&_blockquote]:border-primary/30 [&_blockquote]:pl-4 [&_blockquote]:italic [&_blockquote]:text-slate-600"

View File

@@ -21,6 +21,7 @@ import {
DrawerTitle,
} from "@/components/ui/drawer";
import { SectionEyebrow } from "@/components/pixel-decor";
import { useGorunumOlayi } from "@/components/use-gorunum-olayi";
import {
SihirbazAdimlarLazy,
preloadSihirbazAdimlar,
@@ -73,6 +74,10 @@ export function CtaSiraForm({ baslik }: { baslik?: string }) {
const [yukleniyor, setYukleniyor] = useState(false);
const [hata, setHata] = useState<string | null>(null);
const [girisli, setGirisli] = useState(false);
// Huni girişi ölçümü: ref yalnızca profilsiz daldaki karta bağlanır; kayıtlı
// profilli ziyaretçi formu hiç görmediğinden sayılmaz. Sayfa ayrımı için
// özellik gerekmez — Rybbit olayın pathname'ini zaten yazar.
const formRef = useGorunumOlayi<HTMLElement>("cta_form_goruntulendi");
// Yazarken binlik ayracıyla biçimle (85000 → 85.000)
function siralamaDegisti(ham: string) {
@@ -108,6 +113,7 @@ export function CtaSiraForm({ baslik }: { baslik?: string }) {
sira_kovasi: siraKovasi(value),
});
} catch {
olay("sira_form_hata", { kaynak: "cta" });
setHata("Bir şeyler ters gitti, tekrar dener misin?");
} finally {
setYukleniyor(false);
@@ -159,7 +165,10 @@ export function CtaSiraForm({ baslik }: { baslik?: string }) {
}
return (
<section className="rounded-2xl border border-primary/20 bg-primary/5 p-6 sm:p-8">
<section
ref={formRef}
className="rounded-2xl border border-primary/20 bg-primary/5 p-6 sm:p-8"
>
<h2 className="font-heading text-xl font-bold text-slate-900">
{baslik ?? "Sıralamanla nereye yerleşirsin? Saniyede gör."}
</h2>

View File

@@ -85,6 +85,7 @@ export function HeroForm() {
sira_kovasi: siraKovasi(value),
});
} catch {
olay("sira_form_hata", { kaynak: "hero" });
setHata("Bir şeyler ters gitti, tekrar dener misin?");
} finally {
setYukleniyor(false);

View File

@@ -9,7 +9,7 @@ import { useReducedMotion } from "motion/react";
import { Button } from "@/components/ui/button";
import { PixelField } from "@/components/pixel-decor";
import { useGorunumOlayi } from "@/components/use-gorunum-olayi";
import { olay } from "@/lib/analitik";
import { olay, olayBirKez, siraKovasi } from "@/lib/analitik";
import type { SihirbazFacetleri } from "@/types/yokatlas";
import { SIHIRBAZ_AC_EVENT, SIHIRBAZ_STORAGE_KEY, sihirbazDogrula, type SihirbazSecimleri } from "@/features/sihirbaz/sihirbaz-sabitler";
import { tercihProfiliYaz } from "@/features/sihirbaz/sihirbaz-profil";
@@ -82,6 +82,22 @@ export function SihirbazBolumu({
// görsün diye ref'te tutulur; olay dinleyicisi bir kez bağlanır.
const bekleyenRef = useRef<BekleyenSecim | null>(null);
// Huni adımı: sonuç sayfası görüntülendi. URL sıralamayı taşıdığı için
// pathname maskeli (bkz. app/layout.tsx); huni bu olayla kurulur. Oturum
// başına girişli/anonim için birer kez — girişten dönen ziyaretçi ikinci
// kez "girisli" olarak sayılır. Ham sıra gönderilmez, yalnızca kovası.
useEffect(() => {
olayBirKez(
"sonuc_goruntulendi",
{
girisli: girisliMi ? "evet" : "hayir",
sira_kovasi: siraKovasi(sira),
},
girisliMi ? "girisli" : "anonim",
);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
// Mount sonrası storage'dan bekleyen seçimleri oku
useEffect(() => {
try {

View File

@@ -3,8 +3,9 @@
*
* Script yalnızca prod build'de yükleniyor (bkz. app/layout.tsx) ve reklam
* engelleyiciler tarafından bloklanabiliyor; bu yüzden buradaki her çağrı
* `window.rybbit` yoksa sessizce hiçbir şey yapmaz — çağıran taraf asla
* varlık kontrolü yapmak zorunda kalmasın.
* `window.rybbit` yoksa kullanıcıya hiçbir şey hissettirmez (olaylar kısa
* süre kuyrukta bekler, script gelmezse atılır) — çağıran taraf asla varlık
* kontrolü yapmak zorunda kalmasın.
*
* KURAL: Öğrencinin ham başarı sıralaması analitiğe GÖNDERİLMEZ. Sıralama
* her zaman `siraKovasi()` ile bantlanır.
@@ -19,6 +20,9 @@ export type OlayAdi =
| "liste_olusturuldu"
| "liste_guncellendi"
| "liste_revize"
// Seri kırılması: bu düzeltmenin canlıya çıktığı tarihten önce = +
// tıklaması (kapı açılsa da atılıyordu), sonrası = gerçek ekleme
// ({yol: "dogrudan" | "kapi"}); seriler karşılaştırılamaz.
| "program_eklendi"
| "netler_goruntulendi"
| "danisman_sorusu"
@@ -29,7 +33,18 @@ export type OlayAdi =
| "kilit_goruntulendi"
| "kredi_bitti"
| "tadimlik_goruntulendi"
| "kaydet_banner_goruntulendi";
| "kaydet_banner_goruntulendi"
| "cta_form_goruntulendi"
| "sira_form_hata"
| "sonuc_goruntulendi"
| "paket_goruntulendi"
| "liste_uretim_hata"
| "giris_hata"
// Profil kapısı (sıra + sihirbaz modalı). kapi_acildi {tetik}: her açılış.
// kapi_kapatildi {adim, tetik}: yalnız TAMAMLANMADAN kapanış (X, dışarı
// tıklama, Vazgeç); tamamlanan kapıda atılmaz.
| "kapi_acildi"
| "kapi_kapatildi";
export type Ozellikler = Record<string, string | number>;
@@ -48,16 +63,120 @@ declare global {
}
}
/** Özel olay gönderir. Script yoksa no-op. */
// Erken olay kuyruğu: script `afterInteractive` yüklendiği için sert sayfa
// yüklemesinde (OAuth dönüşü, e-postadaki link, yer imi) mount effect'leri
// `window.rybbit`'ten önce koşar. Mount anında atılan olaylar
// (sonuc_goruntulendi, paket_goruntulendi) kaybolmasın diye script gelene
// kadar burada bekletilir. Script hiç gelmezse (reklam engelleyici, dev)
// kuyruk 10 sn sonra sessizce atılır ve bir daha doldurulmaz.
const KUYRUK_SINIRI = 20;
const DENEME_ARALIGI_MS = 500;
const DENEME_SINIRI = 20;
let kuyruk: Array<[OlayAdi, Ozellikler | undefined]> = [];
// Script'ten önce gelen identify için tek "son değer" slotu: sert yüklemede
// (OAuth / e-posta linki dönüşü) RybbitIdentify effect'i de script'ten önce
// koşar. Kuyruk değil slot — yalnız en son kimlik anlamlıdır.
let bekleyenKimlik: [string, Record<string, string> | undefined] | null = null;
let zamanlayici: ReturnType<typeof setInterval> | null = null;
let denemeSayisi = 0;
let kuyrukKapali = false;
function zamanlayiciyiDurdur(): void {
if (zamanlayici !== null) clearInterval(zamanlayici);
zamanlayici = null;
}
/** Önce bekleyen kimliği uygular, sonra olayları geliş sırasıyla gönderir
* (kuyruktaki olaylar anonim profile değil tanımlı kullanıcıya yazılsın). */
function kuyruguBosalt(rybbit: RybbitApi): void {
const bekleyenler = kuyruk;
const kimlik = bekleyenKimlik;
kuyruk = [];
bekleyenKimlik = null;
zamanlayiciyiDurdur();
if (kimlik) {
try {
rybbit.identify(kimlik[0], kimlik[1]);
} catch {
// yut
}
}
for (const [ad, ozellikler] of bekleyenler) {
try {
rybbit.event(ad, ozellikler);
} catch {
// yut
}
}
}
/** Script'i bekleyen yoklamayı başlatır (olay kuyruğu ve kimlik slotu ortak). */
function zamanlayiciyiBaslat(): void {
if (zamanlayici !== null) return;
zamanlayici = setInterval(() => {
denemeSayisi += 1;
if (window.rybbit) {
kuyruguBosalt(window.rybbit);
} else if (denemeSayisi >= DENEME_SINIRI) {
// Script gelmedi: bekleyenleri at, sonraki çağrılar eski no-op'a dönsün
kuyruk = [];
bekleyenKimlik = null;
kuyrukKapali = true;
zamanlayiciyiDurdur();
}
}, DENEME_ARALIGI_MS);
}
function kuyrugaEkle(ad: OlayAdi, ozellikler?: Ozellikler): void {
if (kuyrukKapali || kuyruk.length >= KUYRUK_SINIRI) return;
kuyruk.push([ad, ozellikler]);
zamanlayiciyiBaslat();
}
/** Özel olay gönderir. Script henüz yoksa kısa süre kuyrukta bekletir. */
export function olay(ad: OlayAdi, ozellikler?: Ozellikler): void {
if (typeof window === "undefined") return;
try {
window.rybbit?.event(ad, ozellikler);
if (!window.rybbit) {
kuyrugaEkle(ad, ozellikler);
return;
}
// Sıra bozulmasın: bekleyen (kimlik ya da olay) varsa önce onlar gider
if (kuyruk.length > 0 || bekleyenKimlik) kuyruguBosalt(window.rybbit);
window.rybbit.event(ad, ozellikler);
} catch {
// Analitik hiçbir koşulda kullanıcı akışını bozmaz
}
}
/** Oturum başına tekilleştirme anahtarı (useGorunumOlayi ile ortak). */
export function olayAnahtari(ad: OlayAdi, anahtarEki?: string): string {
return `kolaytercih.olay.${ad}${anahtarEki ? `.${anahtarEki}` : ""}`;
}
/**
* Olayı oturum (sekme) başına en fazla 1 kez gönderir; "görüntülendi" türü
* olaylar yenileme ve geri-ileri gezinmede şişmesin diye. Tekilleştirme
* sessionStorage anahtarıyla yapılır.
*/
export function olayBirKez(
ad: OlayAdi,
ozellikler?: Ozellikler,
/** Aynı olayın farklı yüzeyleri/durumları için tekilleştirme eki. */
anahtarEki?: string,
): void {
if (typeof window === "undefined") return;
const anahtar = olayAnahtari(ad, anahtarEki);
try {
if (window.sessionStorage.getItem(anahtar)) return;
window.sessionStorage.setItem(anahtar, "1");
} catch {
// Storage engelliyse tekilleştirmeden vazgeç, olay yine atılır
}
olay(ad, ozellikler);
}
/**
* Ham sıralamayı analitik için bantlar. Panelde "hangi sıralama bandı
* dönüşüyor" sorusunu yanıtlar ama tekil öğrenciyi işaret etmez.
@@ -75,6 +194,8 @@ export function siraKovasi(sira: number): string {
* Giriş yapan kullanıcıyı eşler. İlk çağrıda o cihazdaki önceki anonim
* olaylar geriye dönük olarak bu kullanıcıya bağlanır (sihirbazı doldurup
* sonra giriş yapan öğrencinin yolculuğu tek profilde birleşsin diye).
* Script henüz yoksa kimlik tek slotta bekler; kuyruk boşaltılırken
* olaylardan ÖNCE uygulanır.
*/
export function kullaniciTanit(
kullaniciId: string,
@@ -82,15 +203,25 @@ export function kullaniciTanit(
): void {
if (typeof window === "undefined") return;
try {
window.rybbit?.identify(kullaniciId, traits);
if (!window.rybbit) {
if (kuyrukKapali) return;
bekleyenKimlik = [kullaniciId, traits];
zamanlayiciyiBaslat();
return;
}
// Doğrudan uygulanır; kuyrukta olay bekliyorsa sonraki boşaltmada bu
// kimlikle gider. Eski slot değeri geçersiz kalmasın diye silinir.
bekleyenKimlik = null;
window.rybbit.identify(kullaniciId, traits);
} catch {
// yut
}
}
/** Çıkışta kimliği temizler. */
/** Çıkışta kimliği temizler (bekleyen kimlik slotu dahil). */
export function kullaniciTemizle(): void {
if (typeof window === "undefined") return;
bekleyenKimlik = null;
try {
window.rybbit?.clearUserId();
} catch {

View File

@@ -9,7 +9,7 @@ import { marked } from "marked";
* ile tamamen prerender edilir; runtime'da fs erişimi olmaz).
*
* Frontmatter elle parse edilir (yalnızca düz `anahtar: değer` satırları) —
* 10 makale için gray-matter bağımlılığına gerek yok.
* bir avuç makale için gray-matter bağımlılığına gerek yok.
*
* ```mermaid çitleri HTML'e gömülmez: makale parçalara bölünür ve şemalar
* sayfada ürünün ortak el çizimi bileşeniyle (ElCizimiSema) çizilir. Çitin
@@ -23,6 +23,8 @@ export type RehberOzet = {
aciklama: string;
/** ISO tarih — Article JSON-LD datePublished */
tarih: string;
/** ISO tarih, isteğe bağlı — dateModified / sitemap lastmod / görünür satır */
guncelleme?: string;
};
/**
@@ -57,6 +59,18 @@ const globalRehber = globalThis as unknown as {
};
const CACHE_AKTIF = process.env.NODE_ENV === "production";
// Değerin TAMAMI aynı tırnakla sarılıysa soyar. İki ucu bağımsız silmek
// `"Alıntı" diye başlayan cümle` gibi değerlerin yalnızca baştaki tırnağını
// yutuyordu; içinde aynı tırnak geçen değer de tam sarılı sayılmaz.
function tirnakSoy(deger: string): string {
if (deger.length < 2) return deger;
const tirnak = deger[0];
if (tirnak !== '"' && tirnak !== "'") return deger;
if (deger[deger.length - 1] !== tirnak) return deger;
const ic = deger.slice(1, -1);
return ic.includes(tirnak) ? deger : ic;
}
function parseFrontmatter(raw: string): {
meta: Record<string, string>;
body: string;
@@ -68,10 +82,7 @@ function parseFrontmatter(raw: string): {
const ayrac = satir.indexOf(":");
if (ayrac === -1) continue;
const anahtar = satir.slice(0, ayrac).trim();
const deger = satir
.slice(ayrac + 1)
.trim()
.replace(/^["']|["']$/g, "");
const deger = tirnakSoy(satir.slice(ayrac + 1).trim());
if (anahtar) meta[anahtar] = deger;
}
return { meta, body: raw.slice(match[0].length) };
@@ -98,39 +109,73 @@ function parseSema(slug: string, ham: string): RehberSema {
return { tanim: satirlar.join("\n").trim(), ariaLabel, altyazi };
}
// Geniş tablolar dar ekranda sayfayı taşırmasın: her tablo yatay kayan,
// klavyeyle odaklanabilir bir bölgeye sarılır (stil rehber-makale.tsx'te).
// marked `<table>`'ı özniteliksiz basar; global `marked.use` ile renderer
// değiştirmek yerine çıktı burada sarılır.
function markdownHtml(md: string): string {
return marked
.parse(md, { gfm: true, async: false })
.replaceAll(
"<table>",
'<div class="rehber-tablo" role="region" aria-label="Tablo" tabindex="0"><table>',
)
.replaceAll("</table>", "</table></div>");
}
function parcala(slug: string, body: string): RehberParca[] {
const parcalar: RehberParca[] = [];
let son = 0;
for (const eslesme of body.matchAll(SEMA_CITI)) {
const md = body.slice(son, eslesme.index).trim();
if (md) {
parcalar.push({
tip: "html",
html: marked.parse(md, { gfm: true, async: false }),
});
parcalar.push({ tip: "html", html: markdownHtml(md) });
}
parcalar.push({ tip: "sema", sema: parseSema(slug, eslesme[1]) });
son = eslesme.index + eslesme[0].length;
}
const kalan = body.slice(son).trim();
if (kalan) {
parcalar.push({
tip: "html",
html: marked.parse(kalan, { gfm: true, async: false }),
});
parcalar.push({ tip: "html", html: markdownHtml(kalan) });
}
return parcalar;
}
const TARIH_BICIMI = /^\d{4}-\d{2}-\d{2}$/;
function metaDogrula(
slug: string,
meta: Record<string, string>,
): asserts meta is { baslik: string; aciklama: string; tarih: string } {
): asserts meta is {
baslik: string;
aciklama: string;
tarih: string;
guncelleme?: string;
} {
if (!meta.baslik || !meta.aciklama || !meta.tarih) {
throw new Error(
`rehber: ${slug}.md frontmatter eksik (baslik/aciklama/tarih zorunlu)`,
);
}
// Tarihler sitemap lastmod'a, JSON-LD'ye ve görünür satıra olduğu gibi
// akıyor; bozuk biçim sessizce yayına çıkmasın, build kırılsın.
if (!TARIH_BICIMI.test(meta.tarih)) {
throw new Error(
`rehber: ${slug}.md frontmatter "tarih" YYYY-AA-GG biçiminde olmalı`,
);
}
if (meta.guncelleme !== undefined) {
if (!TARIH_BICIMI.test(meta.guncelleme)) {
throw new Error(
`rehber: ${slug}.md frontmatter "guncelleme" YYYY-AA-GG biçiminde olmalı`,
);
}
if (meta.guncelleme < meta.tarih) {
throw new Error(
`rehber: ${slug}.md frontmatter "guncelleme" "tarih"ten önce olamaz`,
);
}
}
}
function oku(slug: string): RehberYazi | null {
@@ -148,6 +193,7 @@ function oku(slug: string): RehberYazi | null {
baslik: meta.baslik,
aciklama: meta.aciklama,
tarih: meta.tarih,
guncelleme: meta.guncelleme,
parcalar: parcala(slug, body),
};
}
@@ -166,8 +212,8 @@ function ozetOku(slug: string): RehberOzet | null {
const tam = CACHE_AKTIF ? globalRehber.rehberYazilar?.get(slug) : undefined;
if (tam !== undefined) {
if (tam === null) return null;
const { slug: s, baslik, aciklama, tarih } = tam;
return { slug: s, baslik, aciklama, tarih };
const { slug: s, baslik, aciklama, tarih, guncelleme } = tam;
return { slug: s, baslik, aciklama, tarih, guncelleme };
}
const dosya = path.join(REHBER_DIZIN, `${slug}.md`);
if (!fs.existsSync(dosya)) return null;
@@ -178,6 +224,7 @@ function ozetOku(slug: string): RehberOzet | null {
baslik: meta.baslik,
aciklama: meta.aciklama,
tarih: meta.tarih,
guncelleme: meta.guncelleme,
};
}

View File

@@ -151,6 +151,8 @@ export function articleJsonLd(opts: {
description: string;
path: string;
datePublished: string;
/** Verilmezse yayın tarihi kullanılır (yazı hiç güncellenmemiş). */
dateModified?: string;
}): JsonLdData {
return {
"@context": "https://schema.org",
@@ -159,6 +161,7 @@ export function articleJsonLd(opts: {
description: opts.description,
url: `${SITE_URL}${opts.path}`,
datePublished: opts.datePublished,
dateModified: opts.dateModified ?? opts.datePublished,
inLanguage: "tr",
publisher: {
"@type": "Organization",

30
src/lib/tarih.ts Normal file
View File

@@ -0,0 +1,30 @@
/**
* `YYYY-MM-DD` tarihini Türkçe uzun biçime çevirir ("21 Eylül 2026").
* Bilinçli olarak `Date`/`toLocale*` kullanmaz: sunucu ile tarayıcının saat
* dilimi ya da ICU verisi farklıysa aynı girdi farklı metin üretir
* (hydration uyuşmazlığı, bir gün kayması). Saf metin dönüşümü her yerde
* aynı sonucu verir.
*/
const AYLAR = [
"Ocak",
"Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık",
];
export function trTarih(iso: string): string {
const eslesme = iso.match(/^(\d{4})-(\d{2})-(\d{2})$/);
const ay = eslesme ? AYLAR[Number(eslesme[2]) - 1] : undefined;
if (!eslesme || !ay) {
throw new Error(`tarih: "${iso}" YYYY-AA-GG biçiminde değil`);
}
return `${Number(eslesme[3])} ${ay} ${eslesme[1]}`;
}