SEO Sorun Analizi

İxtif Blog - Google Sağ Panel Sorunu

Blog yazıları Google arama sonuçlarında sağ panelde (Knowledge Panel) görünmüyor. Kod analizi ve çözüm önerileri.

17 Aralık 2025 ~8 dk okuma Kod Analizi

📝 Basit Anlatım (Herkes İçin)

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:

  • Daha fazla görünürlük: Kullanıcılar hem listede hem sağda görür
  • Güvenilir görünüm: Google sizi "önemli içerik" olarak tanır
  • Tıklama oranı artar: Görsel ve özet merak uyandırır
  • Profesyonel imaj: Markanızın değerini artırır

Ne Bulundu?
Kodlar incelendi ve 4 ana sorun tespit edildi:

  1. Sayfa türü yanlış: Google'a "blog yazısı" yerine "websitesi" gönderiliyor
  2. Schema karmaşık: Aynı sayfada çok fazla farklı içerik türü tanımı var
  3. Robots direktifi eksik: Google'a "büyük görsel göster" komutu verilmemiş
  4. Görsel pozisyonu sorunlu: Kapak görseli sayfada çok aşağıda

İyi Haber: Tüm sorunlar kod düzeyinde düzeltilebilir. Herhangi bir ücretli hizmet veya eklenti gerekmez!

🔧 Teknik Detaylar (Geliştiriciler İçin)

Önemli Bulgu

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.

Sorun #1: og:type = "website" (Yanlış!)

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.

Sorun #2: Çoklu Schema Çatışması

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.

Sorun #3: Featured Image HTML Pozisyonu

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:

  • Görsel 1200x630 boyutunda olmalı (Open Graph standart)
  • Görsel 100 KB altında olmalı (performans)
  • Görsel <head> içinde og:image olarak belirtilmeli

Çözüm Önerileri (Adım Adım)

Aşağıdaki düzenlemeler yapıldığında Google sağ panelde görünme ihtimali artacaktır.

1

BlogController'a metaTags Ekleme

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.

2

Schema Temizliği (Opsiyonel, Önerilen)

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.

3

Test & Doğrulama

Değişiklikleri yaptıktan sonra mutlaka test et!

1. Google Rich Results Test

https://search.google.com/test/rich-results

Blog 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ı!

Değişiklikler Ne Zaman Etkili Olur?

⏰ 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.

Özet Kontrol Listesi