Schema.org Implementasyonu + Marketing Platform Durumu
09 Ocak 2026
x-marketing.auto-platforms)Sitede Google Analytics, Facebook Pixel gibi pazarlama araçları için hazır bir sistem var. Ancak bu araçların ID'leri (kimlik numaraları) henüz ayarlarda tanımlanmamış. ID'leri ekleyince otomatik olarak çalışmaya başlayacak.
🎯 Sonuç:
Marketing sistemi hazır ama boş. ID'leri girdikten sonra aktif olacak.
Google Tag Manager
Google Analytics 4
Facebook Pixel
Yandex Metrika
LinkedIn Insight
TikTok Pixel
Microsoft Clarity
<x-marketing.auto-platforms /> component çağrılıyor.
Component kodu şöyle çalışıyor:
Eğer $gtmId boşsa (null), script hiç yüklenmiyor.
Settings'te marketing_gtm_id değeri olmadığı için şu anda hiçbir marketing platform aktif değil.
Muzibu'da 7 farklı içerik tipi var: Şarkı, Albüm, Sanatçı, Playlist, Tür, Sektör, Radyo. Her birinin Google'a "ben neyim, ne içeriğim var" diye bildirmesi gerekiyor. Şu anda bu bildirimler eksik veya yetersiz.
🎯 Hedef:
Her model için Google'ın anladığı Schema.org yapısını ekleyeceğiz.
muzibu_songs table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (MusicRecording)
⚠️ Eksik: HasUniversalSchemas trait eklenmeli (FAQ, HowTo, Breadcrumb için)
🔗 İlişkiler:
muzibu_albums table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (MusicAlbum)
⚠️ Eksik: HasUniversalSchemas trait eklenmeli
🔗 İlişkiler:
muzibu_artists table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (MusicGroup)
⚠️ Eksik: HasUniversalSchemas trait eklenmeli
🔗 İlişkiler:
muzibu_playlists table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (MusicPlaylist)
⚠️ Eksik: HasUniversalSchemas trait eklenmeli
🔗 İlişkiler:
muzibu_genres table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (MusicGenre)
❌ Eksik: HasUniversalSchemas trait yok + Schema çok basit
🔗 İlişkiler:
muzibu_sectors table
❌ Schema Yok:
HasSeo trait yok, schema method yok
🔧 Eklenecek: HasSeo + HasUniversalSchemas + CollectionPage schema
🔗 İlişkiler:
muzibu_radios table
✅ Mevcut Schema:
getSeoFallbackSchemaMarkup() method var (RadioStation)
⚠️ Eksik: HasUniversalSchemas trait eklenmeli
🔗 İlişkiler:
Sistem iki katmanlı çalışıyor:
Blog modülü bu sistemi kullanıyor, Muzibu modelleri henüz kullanmıyor.
getAllSchemas($model) methodu:
renderUniversalSchemas() varsa çağırır (FAQ, HowTo, Breadcrumb)getSchemaMarkup() varsa çağırır (Ana schema)Sağladığı method'lar:
getFaqSchema(): faq_data field'ından FAQPage schema üretirgetHowToSchema(): howto_data field'ından HowTo schema üretirgetBreadcrumbSchema(): Override edilmeli (her model kendi mantığı)getUniversalSchemas(): Hepsini toplarrenderUniversalSchemas(): JSON-LD script tag'leri oluştururSağladığı method'lar:
getSeoFallbackTitle(): SEO başlığıgetSeoFallbackDescription(): SEO açıklamasıgetSeoFallbackSchemaMarkup(): Ana schema (override edilmeli)getSchemaMarkup(): Fallback'i çağırırLayout dosyasında (app.blade.php Line 458) şu kontrol var:
Eğer controller'dan schema gelmemişse ve $item variable'ında model varsa, otomatik olarak schema'ları render eder.
Settings'te marketing platform ID'lerini tanımla (GTM, GA4, FB Pixel vs.)
marketing_gtm_id = "GTM-XXXXXX"
Marketing Platform ayarlarını admin panel'den düzenlenebilir yap
Tüm Muzibu model'lerine HasUniversalSchemas trait'i ekle
Song → use HasUniversalSchemas;Album → use HasUniversalSchemas;Artist → use HasUniversalSchemas;Playlist → use HasUniversalSchemas;Genre → use HasUniversalSchemas;Radio → use HasUniversalSchemas;
Sector model'inde şu anda hiç schema yok. HasSeo trait'i bile yok.
use HasSeo, HasUniversalSchemas;
Her model'de getBreadcrumbSchema() methodu override edilmeli.
Ana Sayfa → Şarkılar → [Şarkı Adı]
Layout'ta $item variable'ı kontrol ediliyor. Controller'lardan view'e model gönder.
return view('...', ['item' => $song]);
HasUniversalSchemas trait'i bu field'ları kullanıyor. Migration ile ekle.
$table->json('faq_data')->nullable();$table->json('howto_data')->nullable();
Mevcut schema'lar temel seviyede. Daha fazla property ekle:
Song → datePublished, recordingOf, audio URLAlbum → releaseDate, track listArtist → sameAs (social links), foundingDatePlaylist → creator, track arrayBlog modülü schema sistemini doğru kullanıyor. Muzibu model'leri için aynı pattern'i uygulayacağız.
Bu pattern sayesinde Blog modeli otomatik olarak 4 farklı schema üretiyor:
Settings tablosuna marketing platform ID'lerini ekle
Tinker ile ekle:
setting(['marketing_gtm_id' => 'GTM-XXXXXX']);
Muzibu tablolarına faq_data ve howto_data field'larını ekle
php artisan make:migration add_schema_fields_to_muzibu_tables
Her model'e HasUniversalSchemas trait ekle + fillable/casts güncelle
use HasUniversalSchemas;
protected $fillable = [..., 'faq_data', 'howto_data'];
protected $casts = ['faq_data' => 'array', 'howto_data' => 'array'];
Her model'de getBreadcrumbSchema() method'unu override et
public function getBreadcrumbSchema(): ?array { ... }
Controller'larda view'e $item variable'ı gönder
return view('...', ['item' => $song]);