📅 Tarih: 2025-12-02
🎯 Tenant: İxtif (2), Muzibu (1001)
👤 Detaylı Analiz: 5 Ana Sistem
🎯 Sistem Genel Bakışı
Blog modülü, AI ile otomatik blog taslağı ve içerik üretimi, Meilisearch entegrasyonu, ürün injeksiyonu ve InstantPage preloading'i içeren kapsamlı bir sistemdir. Her bileşen tenant-aware ve SEO-optimize edilmiştir.
AI Content GenerationSEO OptimizedInstantPageSearch Analytics
🤖 AI Draft Generator
25+ blog taslağını otomatik olarak oluşturur. OpenAI GPT-4o-mini kullanır. Kategori önerisi, SEO anahtar kelimeleri ve ana hatlar dahil.
✍️ AI Content Writer
2000+ kelime, 4-5 H2, 10 FAQ, 7-step HowTo. Leonardo AI ile AI görsel üretim. 3 farklı yazım stili (Profesyonel, Samimi, Uzman).
📦 Product Injector
Blog içerisine ürün kartları ve CTA bannerları dinamik enjekte eder. Tag/Title/Excerpt tabanlı eşleştirme. 6 tema, animasyonlu tasarım.
🔍 Meilisearch Analytics
Arama sorgularını kaydeder, popüler aramaları izler. SEO ve içerik geliştirme için veri sağlar. Zero-result aramaları tespit eder.
⚡ InstantPage
Mouseover, touch, viewport ile link preloading. Sayfa hızını artırır. FetchPriority API ile optimize edilmiş.
📊 Universal Schemas
BlogPosting, FAQPage, HowToSchema otomatik üretimi. BreadcrumbList, ItemList desteği. SEO ve structured data tanımlı.
🤖 1. Blog AI Draft Generator
Genel Fonksiyon
Model:BlogAIDraft(Taslak yönetimi)
Service:BlogAIDraftGenerator(Üretim motoru)
OpenAI API ile 25+ blog taslağını toplu olarak oluşturur. Her taslak 4-5 h2 başlığı, kategori önerisi, SEO anahtar kelimeleri ve meta description içerir.
İş Akışı
1
Duplicate Kontrolü
Mevcut blog başlıkları ve taslaklar taranır. Tekrar eden başlıklar engellenir.
2
Tenant Context Hazırlama
Firma adı, sektör, hedef kitle, anahtar kelimeler, mevcut kategoriler AI'ya sunulur.
3
AI İstemi Oluşturma
GPT-4o-mini modeline system message + user prompt gönderilir. max_tokens: 25 * 250 = 6250.
4
JSON Parsing
Response markdown code block'larından çıkarılır. Array'e çevrilir. Format normalizasyonu yapılır.
5
Database Kayıt
Taslaklar blog_ai_drafts tablosuna kaydedilir. is_selected=false, is_generated=false ile başlar.
6
Credit Düşme
1.0 credit düşülür. Blog AI limiti kontrol edilir (günlük/aylık).
OpenAI'ya başlık ve kategoriler gönder, en uygun ID'yi iste
3
Fallback
Hep yoksa varsayılan kategori (14 = Genel)
Validation & Retry
Kontrollü Alanlar:
Title: min 10 karakter
Content: min 1500 kelime (strip_tags)
FAQ: min 5 soru
HowTo: min 3 adım
Company name: min 1 mention (kısa veya uzun ad)
Retry: Max 3 deneme. Her deneme başarısız olursa exception fırlatılır (job retry eder).
Firma Adı Yönetimi (Kritik!)
Sorun: AI bazen uzun firma adını (ör. "İxtif Türkiye İstif Pazarı") yazıyor, "İxtif" değil.
Çözüm:
1. "Marka Adı" (kısa) vs "Firma Adı" (uzun) ayrımı
2. System message'de: "Sadece kısa adı kullan: 'İxtif'"
3. Validation'da: Her iki ad da sayılır (toplam min 1)
4. İdeal: Kısa ad 3+ kez kullanılmış
Ürün Injeksiyonu Desteği
Blog kaydedildikten sonra, template'de Tenant-specific injector çalıştırılır:
Tenant2BlogProductInjector → H2'ler arası ürün + CTA banner enjekte eder
Bu flow'un parçası değildir, template'de yapılır (show-content.blade.php)
Önemli Notlar
Credit Yönetimi: Her blog 1.0 credit harcar. Content generation sonrası düşülür (draft generation'dan ayrı).
Race Condition: İki job aynı başlıklı blog oluşturmaya çalışması engellenir. Cache lock kullanılır (120 saniye).
Iterative approach sayesinde 2000+ kelime kaliteli içerik garantisi
HowTo ve FAQ otomatik schema üretimi SEO'ya yardımcı
🔍 3. Meilisearch & Search Query Logging
Genel Yapı
Index: Ürün ve blog aramaları Meilisearch ile yapılır
Logging: Her arama SearchQuery model'e kaydedilir
Analytics: Admin panel'de popüler aramalar, zero-result aramalar gösterilir
SearchQuery Model
Alan
Tür
Açıklama
query
string
Kullanıcının arama metni
slug
string
Otomatik generated (query'den)
searchable_type
string
'ShopProduct' | 'Blog' | null
results_count
integer
Kaç sonuç bulundu?
filters_applied
array
Kategori, fiyat range vb.
response_time_ms
integer
Arama süresi (ms)
locale
string
'tr' | 'en' vb.
is_popular
boolean
Admin tarafından işaretlendi mi?
is_hidden
boolean
Admin gizledi mi?
Scope Metotları
SearchQuery::noResults() // results_count=0
SearchQuery::byLocale('tr') // locale filter
SearchQuery::byType('Blog') // searchable_type filter
SearchQuery::popular() // is_popular=true
SearchQuery::visible() // is_hidden=false
// Static methods:
SearchQuery::getPopularSearches(10, 30) // Son 30 gün, top 10
SearchQuery::getZeroResultSearches(20, 30) // 0 sonuç, top 20
SearchQuery::getAverageResponseTime(30) // Ortalama yanıt süresi
Meilisearch Konfigürasyonu
Türkçe Support:
Typo Tolerance: 4+ harf: 1 typo, 8+ harf: 2 typo
Synonyms: "soguk" → "soğuk", "forklift" → "fork lift", vb.
Zero-Result Aramaları: Arama yapıldığında sonuç yoksa bu arama veritabanına kaydedilir. Admin bu verilerden yeni blog konuları öğrenebilir. Ör: "Transpalet kaç fiyat" aranıyorsa, ürün sayfasında fiyat karşılaştırması eklenebilir veya blog yazılabilir.
Popüler Aramalar: Admin tarafından işaretlenen popüler aramalar, footer'da quick search tag'leri olarak gösterilir. Tıklanabilir, SEO friendly URL'leri vardır (slug kullanılır).
Önemli Notlar
Arama yanıt süresi ortalama: 50-100ms (çok hızlı)
Search analytics Admin'e içerik planlaması için veri sağlar
📦 4. Product Injector (Tenant 2 - ixtif.com)
Genel Fonksiyon
Blog içeriğindeki H2 başlıklar arası ürün kartları ve CTA bannerları dinamik enjekte eder.
Pattern: H2_2 öncesi (3 ürün) → H2_3 öncesi (CTA banner) → H2_4 öncesi (3 ürün) → ...
İlk H2 atlanır (header'ında ürün istemez)
Ürün Eşleştirme (4 fazlı)
Faz
Kriterleri
Açıklama
1. Tags
Blog.tags'den exact match
Ürün tag'leri blog tag'leri ile eşleşiyorsa öncelik
2. Title
Blog başlığı kelimelerinden
3+ harf kelimelerden ürün title'ında arama
3. Excerpt
Blog excerpt'ten kelimeler
İlk 5 önemli kelime ile arama
4. Random Fallback
Yeterli ürün yoksa
Min 9 ürün garantisi için random ekle
Ürün Sıralama (Priority)
show_on_homepage=1 olanlar (En öncelik)
show_on_homepage=0 ama stok>0 veya fiyat>0 olanlar
Stok veya fiyat=0 olanlar
Diğer ürünler (fallback)
Ana Kategoriler (İxtif için)
ID
Kategori
Icon
Slug
1
Forklift
fa-forklift
forklift
2
Transpalet
fa-dolly
transpalet
3
İstif Makinesi
fa-boxes-stacked
istif-makinesi
4
Order Picker
fa-hand-holding-box
siparis-toplama-makinesi
5
Otonom Sistemler
fa-robot
otonom-sistemler
CTA Bannerları (6 Dinamik Tema)
Blue 🔵
Animated gradient background (130°), white text
Green 💚
Animated gradient background (130°), white text
Orange 🟠
Animated gradient background (130°), white text
Purple 💜
Animated gradient background (130°), white text
Gold 🟡
Dark background, gold gradient text animation
Red 🔴
Animated gradient background (130°), white text
CTA Banner Elemanları
Başlık: Dinamik (ör: "Forklift'lerde En Uygun Fiyat Garantisi")
Alt başlık: Dinamik (ör: "Fiyat almadan karar vermeyin!")
X Logosu: İxtif markası (rounded box, glass efekt)
Kategori Badge: İlgili kategori link ile (icon + slug)
3 Button:
Tel: site_phone (glass efekt)
WhatsApp: site_whatsapp (yeşil, +90 prefix)
Sizi Arayalım: /sizi-arayalim (glass efekt)
Trust Badges (Desktop): "En Uygun Fiyat", "Hızlı Teslimat", "Garanti", "7/24 Destek"
getBreadcrumbSchema() → BreadcrumbList (Home → Blog → Category → Post)
faq_data → FAQPage schema
howto_data → HowToSchema
🎯 Kilit Özellikleri
1. AI Content Writer'ın Iterative Approach
Adımlar:
✓ Outline oluştur (4-5 H2)
✓ Her H2'yi 500-600 kelime ile genişlet (3-4 H3 zorunlu)
✓ FAQ döngüsü (10 soru)
✓ HowTo döngüsü (7 adım)
✓ Leonardo AI görsel üret
✓ Extraction/Fallback mekanizması
2. Firma Adı Yönetimi
Sistem:
✓ Kısa ad (İxtif) vs Uzun ad (İxtif Türkiye İstif Pazarı) farkı
✓ System message'de kısa ad önerilir (3+ mention)
✓ Validation'da her iki ad kontrol edilir (min 1)
✓ Perfect: Kısa ad 3+ kez kullanılmış
3. Product Injector Pattern
Pattern:
✓ H2_2 öncesi: 3 ürün
✓ H2_3 öncesi: CTA banner
✓ H2_4 öncesi: 3 ürün
✓ ...
✓ İlk H2 atlanır