📝 Blog Author Sistemi - Planlama

📅 Tarih: 2025-11-19 | 🎯 Modül: Blog + SEO Settings | 👤 Talep: Blog-specific author sistemi + fallback

🎯Ana Hedef

Her blog yazısının kendi author bilgilerine sahip olması

Şu an: Tüm bloglar Nurullah Okatan görünüyor (global fallback)

Hedef: Her blog kendi yazarını gösterecek + SEO schema eklenecek

Mevcut Problemler

1. Tek Author Sorunu

Tüm blog yazıları aynı authoru gösteriyor:

// Şu an çalışan sistem: Author Name: Nurullah Okatan (global fallback) Author Title: iXtif (yanlış - firma adı!) Author Bio: iXtif, Türk Bilişim ve Tuufi...

Sorun: Her blog aynı kişi tarafından yazılmış gibi görünüyor

2. SEO Settings Tablosu Kullanılmıyor

Databasede seo_settings tablosu var ama author bilgileri için kullanılmıyor!

Tablo Kullanım Durum
seo_settings Blog-specific SEO data ❌ Author fieldları yok
settings (Group 8) Global default author ✅ Çalışıyor (fallback)

3. Schema.org Eksik Veri

Schema markup ekledik ama her blog için aynı person gösteriliyor

Google her blogu farklı yazar olarak görmeli!

Çözüm: 3 Katmanlı Author Sistemi

Cascade (Öncelik) Mantığı:

  1. 1. ÖNCELİK: Blogun kendi SEO settingsi (seo_settings tablosu)
  2. 2. ÖNCELİK: Global default author (settings Group 8)
  3. 3. ÖNCELİK: Site bilgileri (son fallback)
// PHP Logic: $authorName = $blog->seoSettings->author_name ?? setting(seo_default_author) ?? setting(site_title); $authorTitle = $blog->seoSettings->author_title ?? setting(seo_default_author_title) ?? İçerik Yazarı;

Sistem Akışı:

Senaryo 1: Blogun kendi authoru var

Blog ID 123:

  • seo_settings → author_name = "Ali Yılmaz"
  • seo_settings → author_title = "SEO Uzmanı"
  • Sonuç: Ali Yılmaz gösterilir ✅

Senaryo 2: Blog authoru boş (fallback)

Blog ID 124:

  • seo_settings → author_name = NULL
  • Fallback → settings → seo_default_author = "Nurullah Okatan"
  • Sonuç: Nurullah Okatan gösterilir ✅

Senaryo 3: Her ikisi de boş (son fallback)

Blog ID 125:

  • seo_settings → author_name = NULL
  • settings → seo_default_author = NULL
  • Fallback → settings → site_title = "iXtif"
  • Sonuç: iXtif gösterilir (firma adı) ⚠️

🗄️Database Değişiklikleri

Migration: seo_settings Tablosuna Author Alanları Ekle

Schema::table(seo_settings, function (Blueprint $table) { // Author bilgileri $table->string(author_name)->nullable(); $table->string(author_title)->nullable(); $table->text(author_bio)->nullable(); $table->string(author_image)->nullable(); $table->string(author_url)->nullable(); // Index $table->index([model_type, model_id, author_name]); });

Mevcut Yapı:

Tablo Field Kullanım
seo_settings model_type Blog, Product, Page, vb.
model_id İlgili içeriğin IDsi
meta_title SEO başlık
meta_description SEO açıklama
author_name ⭐ NEW Yazar adı
author_title ⭐ NEW Yazar ünvanı
...diğer author fieldları ⭐ Bio, image, url, vb.

🔧Kod Değişiklikleri

1. Author Card Component Güncellemesi

// Eski (sadece global settings): $authorName = setting(seo_default_author); // Yeni (cascade fallback): $authorName = $blog->seoSettings->author_name ?? setting(seo_default_author) ?? setting(site_title);

2. Blog Modele SEO Settings İlişkisi

// Blog.php model public function seoSettings() { return $this->morphOne(SeoSetting::class, model); } // Kullanım: $blog->seoSettings->author_name

3. Component Parametresi Ekleme

// show-content.blade.php <x-blog.author-card variant="full" :blog="$item" /> // author-card.blade.php @props([variant => full, blog => null])

📊Authorun Diğer İçerikleri - Karar Zamanı!

OPTION A: Göster

Avantajlar:

  • ✓ Internal linking (SEO+)
  • ✓ Author authority artışı
  • ✓ Kullanıcı sitede daha fazla kalır
  • ✓ E-E-A-T sinyali (Google SEO)

Dezavantajlar:

  • ✗ Mobilde yer kaplar
  • ✗ Ekstra database query
  • ✗ Sayfa daha uzun

OPTION B: Gösterme

Avantajlar:

  • ✓ Temiz, minimal görünüm
  • ✓ Hızlı sayfa yükleme
  • ✓ Mobilde yer kazanımı

Dezavantajlar:

  • ✗ Internal linking kaybı
  • ✗ Author authority zayıf
  • ✗ Kullanıcı siteden çıkabilir

💡 ÖNERİ: Hibrit Çözüm

  • Desktop: Authorun son 3 yazısını göster (sidebar veya bottom)
  • Mobil: Gösterme (yer kazanmak için)
  • Tasarım: Kompakt kartlar, thumbnail + başlık

📋Yapılacaklar Listesi

Yüksek Öncelik 1. Database Migration

  • seo_settings tablosuna author alanları ekle
  • Migration dosyası oluştur (tenant + central)
  • Migration çalıştır

Yüksek Öncelik 2. Model İlişkileri

  • Blog modele seoSettings ilişkisi ekle
  • SeoSetting modele author accessorlar ekle

Yüksek Öncelik 3. Author Card Güncelleme

  • Componente blog parametresi ekle
  • 3 katmanlı fallback sistemi kur
  • Schema.org markupı dinamik hale getir

Orta Öncelik 4. Admin Panel Entegrasyonu

  • Blog edit sayfasına "Author Bilgileri" sekmesi ekle
  • Author fieldlarını forma ekle
  • Kaydetme logicini güncelle

Düşük Öncelik 5. Authorun Diğer Yazıları (Opsiyonel)

  • Karar: Gösterilecek mi? (Desktop/Mobil)
  • Query: Authora göre blog filtreleme
  • Component: Kompakt blog kartları

Düşük Öncelik 6. Test & SEO Doğrulama

  • Google Rich Results Test
  • Schema.org validator
  • Farklı senaryoları test et (blog author var/yok)

🎯Beklenen Sonuç

SEO Açısından:

  • ✅ Her blog farklı author (Google için unique content)
  • ✅ Author authority tracking (Google yazarı takip eder)
  • ✅ E-E-A-T puanı artışı (Experience, Expertise, Authority, Trust)
  • ✅ Rich snippets (yazar kutusu Googleda)

Kullanıcı Deneyimi:

  • ✅ Kim yazdı? sorusuna net cevap
  • ✅ Yazar hakkında bilgi (bio, sosyal medya)
  • ✅ Güven artışı (gerçek kişiler yazıyor)
  • ✅ İlgili içerik keşfi (authorun diğer yazıları)

Yönetim Açısından:

  • ✅ Her blog için ayrı author atama
  • ✅ Fallback sistem (otomatik default author)
  • ✅ Merkezi yönetim (global author ayarları)
  • ✅ Esneklik (blog bazında override)

Kararlar

Senin Onayın Gereken Noktalar:

  1. Authorun Diğer Yazıları gösterilsin mi?
    • A) Evet (Desktopta göster, mobilde gizle)
    • B) Hayır (sadece author bilgileri yeterli)
  2. Admin panelde ayrı sekme mi yoksa mevcut SEO sekmesine ekle mi?
    • A) Ayrı "Author" sekmesi
    • B) Mevcut "SEO" sekmesine ekle
  3. Migration şimdi mi yoksa ileride toplu mu?
    • A) Şimdi yap (hemen kullan)
    • B) Sonra yap (planlama aşamasında kal)