Blog yazıları Google arama sonuçlarında sağ panelde (Knowledge Panel) görünmüyor. Kod analizi ve çözüm önerileri.
Sorun Nedir?
İxtif.com'daki blog yazıları Google'da arandığında sağ tarafta küçük bir kutu (Knowledge Panel) çıkmıyor. Bu kutu normalde yazının görseli, özet bilgisi ve linkini gösterir. Rakiplerinizin sitelerinde bu kutu varsa, sizde yoksa dikkat çekicilik azalır.
Neden Önemli?
Google sağ panelde çıkmak:
Ne Bulundu?
Kodlar incelendi ve 4 ana sorun tespit edildi:
İyi Haber: Tüm sorunlar kod düzeyinde düzeltilebilir. Herhangi bir ücretli hizmet veya eklenti gerekmez!
Kullanıcının araştırmasında (b-html.txt) max-image-preview:large direktifinin eksik olduğu belirtilmiş.
Ancak kod analizi: Bu direktif zaten mevcut!
// Dosya: resources/views/components/seo-meta.blade.php // Satır: 17 <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
⚠️ Sonuç: Sorun "eksik direktif" değil, başka bir yerde. Controller SEO ayarlarına bakmalıyız.
Konum:
// Dosya: Modules/Blog/app/Http/Controllers/Front/BlogController.php // Method: show() // Satır: 380-476 // ❌ SORUN: metaTags oluşturulmuyor! public function show($slug, SeoMetaTagService $seoService = null) { $item = Blog::query()->...->first(); // Sadece model paylaşılıyor, SEO meta yok view()->share('currentModel', $item); return view($viewPath, ['item' => $item]); }
Ne Olması Gerekir:
// ✅ DOĞRU: metaTags array'i oluştur $metaTags = [ 'title' => $item->getTranslated('title', $locale), 'description' => $item->getCleanExcerpt($locale), 'og_type' => 'article', // ← KRİTİK! 'article_published_time' => $item->published_at->toISOString(), 'article_modified_time' => $item->updated_at->toISOString(), 'article_author' => $item->seoSetting->author_name ?? 'İxtif A.Ş.', ]; view()->share('metaTags', $metaTags);
Etki: Google sayfayı "blog yazısı" olarak değil, "genel web sayfası" olarak algılıyor. Bu yüzden Knowledge Panel oluşturmuyor.
Mevcut Durum:
Aynı sayfa için 4 farklı schema türü üretiliyor:
BlogPosting (Blog model - getSeoFallbackSchemaMarkup)FAQPage (HasUniversalSchemas trait - eğer faq_data varsa)HowTo (HasUniversalSchemas trait - eğer howto_data varsa)BreadcrumbList (getBreadcrumbSchema metodu)Google'ın Beklentisi (Google Developers Docs):
"Bir sayfa için birden fazla schema türü kullanıldığında, ana içerik türünü belirlemek zorlaşır. Bu durum zengin sonuç (rich result) gösterimini engelleyebilir."
Önerilen Yapı:
// ✅ DOĞRU HİYERARŞİ: 1. BlogPosting (Ana içerik - ZORUNLU) 2. BreadcrumbList (Navigasyon - ZORUNLU) 3. Organization (Yayıncı bilgisi - ÖNERİLEN) 4. FAQPage (Sadece gerçekten SSS varsa) 5. HowTo (Sadece gerçekten adım adım rehber varsa)
Çözüm: BlogPosting içinde FAQ ve HowTo içeriklerini ayrı ayrı belirtmek yerine, BlogPosting'in "mainEntity" özelliğini kullan.
Mevcut Durum (✅ İyi):
// Dosya: Modules/Blog/resources/views/themes/ixtif/partials/show-content.blade.php // Satır: 380-408 <figure class="overflow-hidden rounded-xl shadow-lg mb-8"> <img src="{{ thumb($featuredImage, 1200, 800) }}" alt="{{ $title }}" width="1200" height="1200" loading="eager" ← ✅ DOĞRU! class="w-full h-auto"> </figure>
Durum: Featured image zaten HTML'de erken görünüyor ve loading="eager" kullanılıyor. Bu kısım doğru!
Kontrol Edilmesi Gereken:
Aşağıdaki düzenlemeler yapıldığında Google sağ panelde görünme ihtimali artacaktır.
Dosya: Modules/Blog/app/Http/Controllers/Front/BlogController.php
Değişiklik: show() metodunu güncelle
// ✅ EKLE: show() metodunun sonunda, view()->share('currentModel', $item); satırından ÖNCE $currentLocale = app()->getLocale(); $featuredImage = $item->getFirstMedia('hero'); $metaTags = [ 'title' => $item->getTranslated('title', $currentLocale), 'description' => $item->getCleanExcerpt($currentLocale), 'og_type' => 'article', // ← KRİTİK DEĞİŞİKLİK! 'og_title' => $item->getTranslated('title', $currentLocale), 'og_description' => $item->getCleanExcerpt($currentLocale), 'og_image' => $featuredImage ? $featuredImage->getUrl() : null, 'twitter_card' => 'summary_large_image', 'article_published_time' => $item->published_at ? $item->published_at->toISOString() : $item->created_at->toISOString(), 'article_modified_time' => $item->updated_at->toISOString(), 'article_author' => optional($item->seoSetting)->author_name ?? setting('site_title'), 'canonical_url' => $item->getUrl($currentLocale), ]; view()->share('metaTags', $metaTags); view()->share('currentModel', $item);
Sonuç: Google artık sayfayı "article" olarak algılayacak ve Knowledge Panel için uygun görecek.
Blog model'de getSeoFallbackSchemaMarkup() metodunu optimize et.
Dosya: Modules/Blog/app/Models/Blog.php
// ✅ METODDAKİ SCHEMA'YI SADECE BlogPosting YAP public function getSeoFallbackSchemaMarkup(): ?array { $currentLocale = app()->getLocale(); $featuredImage = $this->getFirstMedia('hero'); $schema = [ '@context' => 'https://schema.org', '@type' => 'BlogPosting', // ← TEK TÜR! 'headline' => $this->getSeoFallbackTitle(), 'description' => $this->getSeoFallbackDescription(), 'url' => $this->getSeoFallbackCanonicalUrl(), 'datePublished' => $this->published_at ? $this->published_at->toISOString() : $this->created_at->toISOString(), 'dateModified' => $this->updated_at->toISOString(), 'author' => [ '@type' => 'Organization', 'name' => setting('site_title') ?? config('app.name'), 'url' => url('/') ], 'publisher' => [ '@type' => 'Organization', 'name' => setting('site_title') ?? config('app.name'), 'url' => url('/'), 'logo' => [ '@type' => 'ImageObject', 'url' => setting('site_logo') ? cdn(setting('site_logo')) : asset('favicon.ico') ] ], 'mainEntityOfPage' => [ '@type' => 'WebPage', '@id' => $this->getSeoFallbackCanonicalUrl() ] ]; // Featured image ekle if ($featuredImage) { $schema['image'] = [ '@type' => 'ImageObject', 'url' => $featuredImage->getUrl(), 'width' => 1200, 'height' => 630 ]; } return $schema; }
Not: FAQ ve HowTo schema'ları HasUniversalSchemas trait'i tarafından otomatik ekleniyor, bu doğru. Sadece BlogPosting'i temiz tutmak yeterli.
Değişiklikleri yaptıktan sonra mutlaka test et!
1. Google Rich Results Test
https://search.google.com/test/rich-resultsBlog yazısının URL'ini yapıştır ve "Test URL" butonuna tıkla. Hata varsa burada gösterir.
2. Schema.org Validator
https://validator.schema.org/Schema markup'ın geçerli olup olmadığını kontrol eder.
3. Facebook Debugger
https://developers.facebook.com/tools/debug/og:type ve og:image'in doğru geldiğini kontrol eder.
4. HTML Source Kontrolü
Blog yazısını aç → Sağ tık → "Sayfa Kaynağını Görüntüle" → og:type ara → "article" olmalı!
⏰ Hemen: HTML source'da og:type ve schema değişikliklerini görebilirsiniz.
📅 1-2 Gün: Google bot sayfayı tekrar tarar (Search Console'da "URL İncelemesi" yaparak hızlandırabilirsiniz).
📅 1-2 Hafta: Google sağ panelde gösterilme kararını verir. Her sayfa için garanti değil, içerik kalitesine de bağlı.
Not: SEO çalışmaları sabır gerektirir. Değişiklikleri yaptıktan sonra Google'ın sayfayı yeniden taramsını ve değerlendirmesini beklemelisiniz.