Bir Video URL Kanonikleştirme Hattı Oluşturmak

Canlı SQLite veritabanımda bir sorgu çalıştırdım ve devasa bir sorunla karşılaştım.

videos tablosunda 41.283 satır vardı ancak sadece 29.000 benzersiz başlık bulunuyordu. Aynı videoları birden fazla kez kaydediyorduk.

Bu neden oldu? Aynı YouTube videosu farklı URL formatlarında geliyordu:

• Kısa bağlantılar: youtu.be/ID • Masaüstü bağlantıları: youtube.com/watch?v=ID • Mobil bağlantılar: m.youtube.com/watch?v=ID • Shorts: youtube.com/shorts/ID

Bir video; dört veritabanı satırı ve birbirine neredeyse tıpatıp aynı dört web sayfası anlamına geliyordu. Bu durum tarama bütçemi boşa harcıyor ve Google Search Console'da hatalar veriyordu.

TrendVidStream'i yönetiyorum. Sekiz farklı bölgeden trend verileri çekiyoruz. Her bölge, aynı viral videoyu farklı URL biçimleriyle karşımıza çıkarabiliyor.

Bunu düzeltmek için PHP 8.4 ve SQLite kullanarak bir işlem hattı (pipeline) oluşturdum.

Hattın çalışma şekli şöyledir:

  1. Çıkar (Extract): Herhangi bir URL varyantını kararlı, 11 karakterli bir video ID'sine dönüştürün.
  2. Normalleştir (Normalize): Bu ID'den tek bir kanonik (canonical) URL oluşturun.
  3. Doğrula (Validate): Veritabanına dokunmadan önce hızlı kontroller yapın.
  4. Upsert: Yeni satırlar eklemek yerine verileri birleştirmek için SQLite UPSERT kullanın.
  5. Yayınla (Emit): Arama motorlarının tek bir URL bulması için kanonik etiketler ve 301 yönlendirmeleri ekleyin.

Temel teknik kararlar:

• Kesin bir host izin listesi (allowlist) kullanın. Sonek eşleştirmesi (suffix matching) kullanmayın. Bu, güvenlik risklerini önler. • ID'leri asla küçük harfe çevirmeyin. YouTube ID'leri büyük/küçük harfe duyarlıdır. Bunları küçük harfe çevirmek farklı videoların birleşmesine neden olur. • video_id üzerinde bir UNIQUE kısıtlaması (constraint) kullanın. Bu, yinelenenlere karşı en güçlü savunmanızdır. • SQLite WAL modunu kullanın. Bu, yazma işlemlerini hızlı ve güvenilir hale getirir.

Sonuç:

Video tablomuz 41.283 satırdan 28.094 satıra düştü. Sıfır video kaybettik. Google Search Console hataları 412'den 9'a geriledi. Aynı videoyu dört kez göstermeyi bıraktığımız için arama sonuçları daha temiz hale geldi.

Ders basit: Verileri birçok kaynaktan toplarken, önce sisteminize bir kimlik (identity) yapısı kurun. Kararlı bir ID çıkarın, bunu veritabanı kısıtlamalarıyla zorunlu kılın ve her yazma işlemini idempotent hale getirin.

Karmaşık araçlara ihtiyacınız yok. PHP ve SQLite yeterlidir.

Kaynak: https://dev.to/ahmet_gedik778845/building-a-video-url-canonicalization-pipeline-in-php-84-with-sqlite-32ne