🎨 Leonardo.AI Blog Media Recovery

📅 Tarih: 2025-11-30 | 🎯 Tenant: ixtif.com (ID: 2) | 👤 Talep: 268 kayıp medya recovery + Leonardo.AI import

⚠️ DURUM ANALİZİ

268 medya dosyası kalıcı olarak kayıp!

Sebep: app:clear-all komutu 2025-11-30 tarihinde çalıştırıldı ve storage/tenant2/app/ klasörünü tamamen sildi.

Mevcut: Sadece 2 medya (ID: 1733, 1734) | Orphan: 268 DB kaydı fiziksel dosya yok

📊 Sistem Analizi

🗄️ Mevcut Blog & Media Yapısı

Media Collection Adı
featured_image
Collection Tipi
Single File (1 görsel)
Blog Model
Modules\Blog\App\Models\Blog
Primary Key
blog_id
Trait
HasMediaManagement
Storage Path
storage/tenant2/app/public/{ID}/

🔍 SEO & Schema Markup Sistemi

Bileşen Kullanım Durum
og:image Facebook/LinkedIn paylaşım görseli featured_image collection'dan çekiliyor
twitter:image Twitter/X card görseli featured_image collection'dan çekiliyor
Schema.org Image Google Rich Results görseli ✅ Blog model getSeoFallbackSchemaMarkup()
Frontend Hero Blog detay sayfası ana görsel $item->getFirstMediaUrl('featured_image')
Blog Card Thumbnail Liste sayfası küçük görsel ✅ Thumbmaker ile otomatik conversion
✅ Mevcut Sistem Hazır: Blog model zaten featured_image collection'ı destekliyor. Leonardo.AI görsellerini bu collection'a ekleyeceğiz.

🎯 İŞLEM PLANI

1
Media Tablosu Sıfırlama
CRITICAL

İşlem: Tüm orphan media kayıtlarını temizle, fresh start

TRUNCATE TABLE media; -- 270 kayıt (268 orphan + 2 valid) silinecek

⚠️ UYARI: Geri Dönüşü Yok!

Bu işlem 2 mevcut medyayı da silecek (ID: 1733, 1734). Ancak zaten 268 medya kayıp olduğu için temiz başlangıç gerekli.

Kullanıcı onayı alındı ✓ - "tüm medyayı sıfırla tabloyu flush et truncate yani"

Beklenen Sonuç: Media tablosu tamamen boş, auto_increment sıfırlanacak

2
Leonardo.AI Görselleri İndir
YÜKSEKPRİORİTE

Kaynak: https://app.leonardo.ai/library

Dosya Adlandırma Stratejisi:

  • Format: blog-{blog_id}-{slug-kisa}.webp
  • Örnek: blog-1-transpalet-nedir.webp
  • Slug: Blog başlığından ilk 3-4 kelime (URL-safe)
  • WebP: Modern format, küçük boyut, yüksek kalite

İndirme Süreci:

  • Leonardo.AI library'yi aç
  • Her görseli sırayla indir (Generation ID ile takip et)
  • Görselleri /tmp/leonardo-blog-images/ klasörüne kaydet
  • Her görsel için blog_id mapping dosyası oluştur (JSON)
# Mapping örneği (leonardo-mapping.json): { "blog_1": "transpalet-cesitleri-ve-kullanim-alanlari.webp", "blog_2": "forklift-periyodik-bakim-rehberi.webp", "blog_3": "akulu-transpalet-avantajlari.webp" }
3
Blog-Media Eşleştirme & Upload
YÜKSEK PRİORİTE

Spatie Media Library ile Attach:

  • Blog kaydını çek: Blog::find($blog_id)
  • Leonardo görselini yükle: addMedia($filepath)
  • Collection belirt: toMediaCollection('featured_image')
  • Otomatik conversion: Thumbmaker ile responsive görseller
  • SEO meta güncelle: og:image, twitter:image
// Pseudo-kod (implementation detayları kodda) foreach ($mapping as $blog_id => $filename) { $blog = Blog::find($blog_id); $filepath = "/tmp/leonardo-blog-images/{$filename}"; // Featured image attach (sync mode - queue yok!) $blog->addMedia($filepath) ->preservingOriginal() ->toMediaCollection('featured_image'); // SEO meta otomatik güncellenir (SeoMetaTagService) }

İsimlendirme & Alt Text:

Alan Değer Örnek
file_name Blog başlığı slugified transpalet-cesitleri-ve-kullanim.webp
name Blog başlığı (Türkçe) Transpalet Çeşitleri ve Kullanım Alanları
alt_text SEO friendly açıklama Transpalet çeşitleri - Manuel, akülü ve elektrikli transpalet modelleri
custom_properties width, height, copyright {"width": 1200, "height": 630, "generated_by": "Leonardo.AI"}
4
SEO Meta Tag Kontrolü
YÜKSEK PRİORİTE

Kontrol Edilecek Meta Taglar:

  • og:image: Facebook/LinkedIn paylaşımlarında gösterilecek görsel (1200x630px ideal)
  • og:image:width & height: Boyut bilgileri (sosyal medya önizleme için)
  • twitter:image: Twitter/X card görseli (same as og:image)
  • twitter:card: summary_large_image olmalı
  • Schema.org image: Google Rich Results için (BlogPosting schema)

Test Araçları:

Facebook Debugger
Twitter Card Validator
Google Rich Results
LinkedIn Inspector
✅ Otomatik Sistem: SeoMetaTagService zaten featured_image collection'ını kontrol ediyor. Görsel attach edilince otomatik meta taglar güncellenir.
5
Admin Panel Test
ORTA PRİORİTE

Test Senaryoları:

  • Blog Liste Sayfası: Görseller doğru thumbnail ile gösteriliyor mu?
  • Blog Edit Sayfası: Featured image doğru attach edilmiş mi?
  • Medya Yönetimi: Media library'de görsel görünüyor mu?
  • Thumbnail Conversion: Responsive görseller oluştu mu? (thumb, medium, large)
  • Yeni Blog Oluşturma: Featured image upload çalışıyor mu?

Admin URL'ler:

https://ixtif.com/admin/blog # Blog liste https://ixtif.com/admin/blog/manage/1 # Blog edit https://ixtif.com/admin/media # Media library
6
Frontend Görünüm Test
ORTA PRİORİTE

Test Edilecek Alanlar:

Alan Kontrol Beklenen
Blog Liste Sayfası Card thumbnail gösterimi Thumbmaker ile optimize edilmiş küçük görsel (400x300px)
Blog Detay Hero Ana görsel gösterimi Full-width hero image (1200px+)
Related Posts İlgili blog görselleri Thumbnail görseller doğru görünüyor
Mobile Responsive Mobil cihazlarda görsel Responsive image serving (srcset)
Lazy Loading Sayfa yükleme hızı Görseller lazy load ile yükleniyor
Alt Text Görsel erişilebilirliği Alt text SEO-friendly ve açıklayıcı

Frontend URL'ler:

https://ixtif.com/blog # Blog liste https://ixtif.com/blog/{slug} # Blog detay https://ixtif.com/blog/category/{cat} # Kategori
7
Google Search Console Kontrol
ORTA PRİORİTE

İşlemler:

  • URL Inspection: Blog URL'lerini test et, görseller indexed mi?
  • Rich Results: BlogPosting schema doğru parse ediliyor mu?
  • Mobile Usability: Görseller mobilde düzgün görünüyor mu?
  • Page Experience: CLS (Cumulative Layout Shift) sorunu var mı?
  • Sitemap: Blog görselleri sitemap'te var mı?
⏰ Not: Google indexleme 1-7 gün sürebilir. SEO etkisi kısa vadede değil, uzun vadede görülecek.

🔧 TEKNİK DETAYLAR

Media Collection Config (Blog Model)

'featured_image' => [ 'type' => 'image', 'single_file' => true, // Sadece 1 görsel 'max_items' => 1, 'max_size' => 10240, // 10MB 'conversions' => [ // Otomatik thumbnail'ler 'thumb', // 150x150 'medium', // 300x300 'large', // 1024x768 'responsive' // Çoklu boyut ], 'sortable' => false ]

SEO Image Priority Chain (SeoMetaTagService)

1. SEO Settings og_image (manuel yükleme) 2. hero collection (YENİ STANDART - 2025) 3. featured_image collection (LEGACY - Blog kullanıyor) ← BİZ BURAYI KULLANIYORUZ 4. gallery collection (ilk görsel) 5. product_images collection (Shop için) 6. images collection (genel) 7. default collection 8. FALLBACK: Site logo

Blog Schema Markup (Google Rich Results)

{ "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Blog başlığı", "description": "Blog özeti", "image": { "@type": "ImageObject", "url": "https://ixtif.com/storage/XXX/featured-image.webp", "width": 1200, "height": 630 }, "datePublished": "2025-11-30T10:00:00Z", "dateModified": "2025-11-30T15:00:00Z", "author": { "@type": "Organization", "name": "İxtif Endüstriyel Ekipman" } }

✅ BAŞARI KRİTERLERİ

İşlem Tamamlandı Sayılır:

  • Media tablosu truncate edildi, orphan kayıtlar temizlendi
  • Tüm Leonardo.AI görselleri indirildi ve doğru isimlendirildi
  • Her blog için featured_image collection'a görsel attach edildi
  • Admin panel: Blog liste ve edit sayfalarında görseller görünüyor
  • Frontend: Blog liste ve detay sayfalarında görseller doğru gösteriliyor
  • SEO: og:image, twitter:image, schema.org image tagları doğru
  • Facebook Debugger: Blog URL'si test edildi, görsel önizlemede çıkıyor
  • Twitter Card Validator: Blog URL'si test edildi, card doğru render ediliyor
  • Google Rich Results: BlogPosting schema hatasız parse ediliyor
  • Mobile: Responsive görseller doğru serve ediliyor

🎯 Hedef Sonuç

268 kayıp medya yerine Leonardo.AI'dan temiz, profesyonel, SEO-uyumlu görseller. Blog sisteminde tamamen çalışan, sosyal medya paylaşımlarında doğru önizleme gösteren, Google'da rich results ile görünen komple bir medya sistemi.