feat(seo): kapanan 28 bölüm + 2 üniversite sayfası benzer sayfaya kalıcı yönlendirilir
All checks were successful
Deploy / deploy (push) Successful in 6m50s
All checks were successful
Deploy / deploy (push) Successful in 6m50s
Arşivlenen slug'lar 200 + 'sayfa yok' dönüyordu (soft 404). Eşlemenin tek kaynağı src/lib/kapanan-sluglar.ts; alt yollar (/sayfa/N) hedefin köküne gider; zincir ya da çift kaynak build'i durdurur. Yıllık güncelleme kılavuzuna 5b adımı eklendi. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
249
src/lib/kapanan-sluglar.ts
Normal file
249
src/lib/kapanan-sluglar.ts
Normal file
@@ -0,0 +1,249 @@
|
||||
/**
|
||||
* Kapanan katalog sayfaları → yaşayan en yakın sayfa (kalıcı yönlendirme).
|
||||
*
|
||||
* Neden var: yıllık veri güncellemesinde son kılavuzda olmayan program satırları
|
||||
* `programs_arsiv`'e taşınır; bir bölüm adının ya da üniversitenin bütün
|
||||
* satırları giderse /bolum/<slug> ya da /universite/<slug> sayfası tamamen
|
||||
* kapanır. Bu URL'ler arama sonuçlarında ve dış linklerde yaşamaya devam eder;
|
||||
* "sayfa yok" göstermek yerine adı/alanı en yakın yaşayan sayfaya 308 verilir.
|
||||
* Tek tüketici `next.config.ts` içindeki `redirects()`'tir.
|
||||
*
|
||||
* Yıllık güncellemede (docs/veri/yillik-guncelleme.md, 5. adım):
|
||||
* `pnpm eski-arsivle --kuru` çıktısındaki "tamamen kapanan" slug'lar buraya
|
||||
* eklenir. Hedef seçimi sırasıyla: (1) program/kurum ad değiştirdiyse yeni adı
|
||||
* (kanıt: aynı üniversitede geçmiş yıl sıraları birebir taşınmış satır, ya da
|
||||
* resmî karar), (2) aynı alanın lisans/önlisans karşılığı, (3) emin
|
||||
* olunamıyorsa hub (`/bolumler`, `/universiteler`). Uydurma eşleme yapılmaz.
|
||||
*
|
||||
* Kurallar:
|
||||
* - `hedef` yaşayan bir sayfa olmalı (slug `programs` tablosundan türemeli).
|
||||
* - `hedef` başka bir kaydın `kaynak`'ı olamaz (zincir/döngü) —
|
||||
* `kapananYonlendirmeleri()` bunu build'de sınar ve ihlâlde durur.
|
||||
* - Kapanan bir sayfa ileride yeniden açılırsa (program kılavuza dönerse)
|
||||
* kaydı SİL; yoksa yönlendirme dosya sisteminden önce çalıştığı için yeni
|
||||
* sayfa hiç görünmez.
|
||||
*
|
||||
* Bu dosya `next.config.ts`'ten, uygulama paketinin dışında yüklenir: bağımlılıksız
|
||||
* kalmalı — `server-only`, DB ya da başka bir uygulama modülü import ETME.
|
||||
*/
|
||||
|
||||
export type KapananSlug = {
|
||||
/** Kapanan sayfanın yolu, sonda eğik çizgi yok: `/bolum/<slug>` | `/universite/<slug>` */
|
||||
kaynak: `/bolum/${string}` | `/universite/${string}`;
|
||||
/** Yaşayan hedef sayfa ya da hub */
|
||||
hedef: `/bolum/${string}` | `/universite/${string}` | "/bolumler" | "/universiteler";
|
||||
/** Hedefin neden seçildiği (kanıt türüyle) */
|
||||
gerekce: string;
|
||||
};
|
||||
|
||||
/** 2026 veri yayını (21 Eylül 2026): 28 bölüm + 2 üniversite sayfası kapandı. */
|
||||
export const KAPANAN_SLUGLAR: readonly KapananSlug[] = [
|
||||
// ---- Bölümler: ad değişikliği veriyle kanıtlı (geçmiş sıralar yeni ada taşınmış) ----
|
||||
{
|
||||
kaynak: "/bolum/radyo-ve-televizyon-programciligi",
|
||||
hedef: "/bolum/medya-ve-iletisim",
|
||||
gerekce:
|
||||
"Önlisans programı 2024'ten sonra kılavuzda yok; İzmir Ekonomi Ü. MYO'da geçmiş sıralar Medya ve İletişim'e taşınmış (ardıl ad), hedefte 21 önlisans programı var",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/iletisim-sanatlari",
|
||||
hedef: "/bolum/halkla-iliskiler-ve-reklamcilik",
|
||||
gerekce:
|
||||
"Tek kurum (İstanbul Kültür Ü. Sanat ve Tasarım Fak.); 3 satırın 2023 sıraları aynı fakültedeki Halkla İlişkiler ve Reklamcılık satırlarına taşınmış",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/cevre-temizligi-ve-denetimi",
|
||||
hedef: "/bolum/cevresel-olcum-ve-izleme-sistemleri-teknikerligi",
|
||||
gerekce:
|
||||
"Tek kurum (Kocaeli Ü. Hereke Asım Kocabıyık MYO); geçmiş sırası aynı MYO'daki yeni adlı programa taşınmış",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/atik-yonetimi",
|
||||
hedef: "/bolum/su-ve-atik-yonetimi-teknikerligi",
|
||||
gerekce:
|
||||
"Tek kurum (Karamanoğlu Mehmetbey Ü.); geçmiş sırası aynı üniversitedeki Su ve Atık Yönetimi Teknikerliği'ne taşınmış",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/emlak-ve-emlak-yonetimi",
|
||||
hedef: "/bolum/gayrimenkul-gelistirme-ve-yonetimi",
|
||||
gerekce:
|
||||
"Tek kurum (Ankara Hacı Bayram Veli Ü. Tapu Kadastro YO); geçmiş sırası aynı okuldaki Gayrimenkul Geliştirme ve Yönetimi'ne taşınmış",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/meteoroloji-muhendisligi",
|
||||
hedef: "/bolum/iklim-bilimi-ve-meteoroloji-muhendisligi",
|
||||
gerekce:
|
||||
"Tek kurum (Samsun Ü.); program aynı fakültede İklim Bilimi ve Meteoroloji Mühendisliği adıyla sürüyor",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/endustri-yonetimi-muhendisligi",
|
||||
hedef: "/bolum/endustri-muhendisligi",
|
||||
gerekce:
|
||||
"Tek kurum (Uluslararası Balkan Ü.); aynı program kimlikleri 2026 kılavuzunda Endüstri Mühendisliği adıyla",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/taki-tasarimi",
|
||||
hedef: "/bolum/kuyumculuk-ve-mucevher-tasarimi",
|
||||
gerekce:
|
||||
"Lisans; Altınbaş Ü. Uygulamalı Bilimler Fak.'nde Takı Tasarımı 2024'te bitti, aynı fakültede 2025'ten itibaren Kuyumculuk ve Mücevher Tasarımı var",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/islam-bilimleri",
|
||||
hedef: "/bolum/ilahiyat",
|
||||
gerekce:
|
||||
"Sayfanın tek satırı (Kırgızistan-Türkiye Manas Ü. İlahiyat Fak., kimlik 405210389) 2026 kılavuzunda İlahiyat adıyla",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/bati-dilleri",
|
||||
hedef: "/bolum/filoloji",
|
||||
gerekce:
|
||||
"Tek kurum (Manas Ü. Edebiyat Fak.); 2024'te kapandı, aynı fakültede 2025'ten itibaren Filoloji (İngiliz Dili ve Edebiyatı) açıldı",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/dogu-dilleri",
|
||||
hedef: "/bolum/filoloji",
|
||||
gerekce:
|
||||
"Tek kurum (Manas Ü. Edebiyat Fak.); Batı Dilleri ile aynı yeniden yapılanma, fakültenin dil programları Filoloji altında",
|
||||
},
|
||||
|
||||
// ---- Bölümler: aynı alanın lisans karşılığı / ad yakınlığı ----
|
||||
{
|
||||
kaynak: "/bolum/uygulamali-ingilizce-cevirmenlik",
|
||||
hedef: "/bolum/ingilizce-mutercim-ve-tercumanlik",
|
||||
gerekce:
|
||||
"Önlisans programı 2024'ten sonra kılavuzda yok, önlisansta çeviri programı kalmadı; aynı alanın lisans karşılığı",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/uygulamali-ispanyolca-cevirmenlik",
|
||||
hedef: "/bolum/ispanyolca-mutercim-ve-tercumanlik",
|
||||
gerekce: "Önlisans programı kapandı; aynı alanın lisans karşılığı",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/menkul-kiymetler-ve-sermaye-piyasasi",
|
||||
hedef: "/bolum/sermaye-piyasasi",
|
||||
gerekce: "Önlisans programı kapandı; aynı alanın lisans karşılığı",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/siyasal-bilimler",
|
||||
hedef: "/bolum/siyaset-bilimi",
|
||||
gerekce: "Tek kurum (Uluslararası Balkan Ü.); eş anlamlı ad",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/uluslararasi-ekonomi",
|
||||
hedef: "/bolum/ekonomi",
|
||||
gerekce: "Tek kurum (Uluslararası Balkan Ü.); adı en yakın yaşayan bölüm",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/girisimcilik",
|
||||
hedef: "/bolum/uluslararasi-girisimcilik",
|
||||
gerekce: "Tek kurum (Özyeğin Ü.); adı en yakın yaşayan bölüm",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/film-tasarimi-ve-yazarligi",
|
||||
hedef: "/bolum/film-tasarimi-ve-yonetimi",
|
||||
gerekce: "Tek kurum (Dokuz Eylül Ü. GSF); aynı alan, adı en yakın yaşayan bölüm",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/film-tasarimi-ve-yonetmenligi",
|
||||
hedef: "/bolum/film-tasarimi-ve-yonetimi",
|
||||
gerekce: "Tek kurum (Dokuz Eylül Ü. GSF); aynı alan, adı en yakın yaşayan bölüm",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/muhendislik-programlari",
|
||||
hedef: "/bolum/muhendislik-ve-doga-bilimleri-programlari",
|
||||
gerekce:
|
||||
"TED Ü. bölümsüz mühendislik girişi kapandı; aynı türden (fakülteye giriş, bölüm sonradan) yaşayan tek sayfa",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/iktisadi-ve-idari-bilimler-programlari",
|
||||
hedef: "/bolum/yonetim-bilimleri-programlari",
|
||||
gerekce:
|
||||
"TED Ü. bölümsüz İİBF girişi kapandı; aynı türden (fakülteye giriş, bölüm sonradan) en yakın yaşayan sayfa",
|
||||
},
|
||||
|
||||
// ---- Bölümler: alan yakınlığı — ardıl ad kanıtı YOK, Bilal onayı bekliyor ----
|
||||
{
|
||||
kaynak: "/bolum/spor-yoneticiligi",
|
||||
hedef: "/bolum/rekreasyon",
|
||||
gerekce:
|
||||
"113 satırın tamamı 2026 kılavuzundan çıktı, ardıl ad yok; spor bilimleri fakültelerinde merkezi yerleştirmeyle öğrenci alan kardeş bölüm (Rekreasyon Yönetimi turizm fakültelerinde, o yüzden seçilmedi)",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/spor-yonetimi",
|
||||
hedef: "/bolum/rekreasyon",
|
||||
gerekce:
|
||||
"Önlisans programı 2024'ten sonra kılavuzda yok, ardıl ad yok; Spor Yöneticiliği ile aynı hedef",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/bilgi-yonetimi",
|
||||
hedef: "/bolum/bilgi-ve-belge-yonetimi",
|
||||
gerekce:
|
||||
"Önlisans programı 2024'ten sonra kılavuzda yok, ardıl ad yok; adı ve alanı en yakın yaşayan (lisans) bölüm",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/ambalaj-tasarimi",
|
||||
hedef: "/bolum/grafik-tasarimi",
|
||||
gerekce:
|
||||
"Tek kurum (Fatih Sultan Mehmet Vakıf Ü. MYO), ardıl ad yok; ambalaj tasarımı grafik tasarımın alt dalı, hedefte 119 önlisans programı var",
|
||||
},
|
||||
|
||||
// ---- Bölümler: yakın sayfa yok → hub ----
|
||||
{
|
||||
kaynak: "/bolum/nufus-ve-vatandaslik",
|
||||
hedef: "/bolumler",
|
||||
gerekce: "Önlisans programı kapandı; ardıl ad ya da alanı yakın yaşayan bölüm yok",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/aile-ve-tuketici-bilimleri",
|
||||
hedef: "/bolumler",
|
||||
gerekce: "Tek kurum (Hacettepe Ü.); alanı yakın yaşayan bölüm yok",
|
||||
},
|
||||
{
|
||||
kaynak: "/bolum/ev-idaresi",
|
||||
hedef: "/bolumler",
|
||||
gerekce: "Tek kurum (Anadolu Ü. AÖF); alanı yakın yaşayan bölüm yok",
|
||||
},
|
||||
|
||||
// ---- Üniversiteler: kurum ad değiştirdi ----
|
||||
{
|
||||
kaynak: "/universite/izmir-kavram-meslek-yuksekokulu",
|
||||
hedef: "/universite/izmir-konak-meslek-yuksekokulu",
|
||||
gerekce:
|
||||
"Ad değişikliği: 10929 sayılı Cumhurbaşkanı Kararı, Resmî Gazete 31.01.2026 / 33154; 2026 kılavuzunda yeni adla 72 program",
|
||||
},
|
||||
{
|
||||
kaynak: "/universite/kibris-ilim-universitesi",
|
||||
hedef: "/universite/kibris-aydin-universitesi",
|
||||
gerekce:
|
||||
"Ad değişikliği (Mart 2025); veride Kıbrıs Aydın Ü. satırları Kıbrıs İlim Ü.'nün aynı programlarını ve 2024 sıralarını birebir taşıyor",
|
||||
},
|
||||
];
|
||||
|
||||
export type KaliciYonlendirme = {
|
||||
source: string;
|
||||
destination: string;
|
||||
permanent: true;
|
||||
};
|
||||
|
||||
/**
|
||||
* `next.config.ts` → `redirects()` için kurallar. `:yol*` sıfır ya da daha çok
|
||||
* parça eşler: sayfanın kendisi, `/sayfa/N` sayfalama URL'leri ve diğer alt
|
||||
* yollar hedefin KÖK sayfasına gider (hedefin sayfa sayısı farklıdır, N taşınmaz).
|
||||
*/
|
||||
export function kapananYonlendirmeleri(): KaliciYonlendirme[] {
|
||||
const kaynaklar = new Set<string>();
|
||||
for (const { kaynak } of KAPANAN_SLUGLAR) {
|
||||
if (kaynaklar.has(kaynak)) {
|
||||
throw new Error(`kapanan-sluglar: "${kaynak}" iki kez tanımlı`);
|
||||
}
|
||||
kaynaklar.add(kaynak);
|
||||
}
|
||||
return KAPANAN_SLUGLAR.map(({ kaynak, hedef }) => {
|
||||
if (kaynaklar.has(hedef)) {
|
||||
throw new Error(
|
||||
`kapanan-sluglar: "${kaynak}" → "${hedef}" zincir oluşturuyor (hedef de kapanan listesinde)`,
|
||||
);
|
||||
}
|
||||
return { source: `${kaynak}/:yol*`, destination: hedef, permanent: true };
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user