Ürün ve inceleme schema'sında sık yapılan hatalar

E-ticaret sitelerinde ürün işaretlemesi genellikle bir eklentiye ya da temaya bırakılır ve bir daha kimse bakmaz. Zengin Sonuçlar Testi yeşil yandığı sürece her şey yolunda sanılır. Oysa testten geçen bir işaretleme de yanlış fiyat gösterebilir, sayfada olmayan puanları taşıyabilir ya da iki farklı eklentinin birbirini tutmayan iki Product bloğundan oluşabilir.

Aşağıda ürün ve inceleme işaretlemesinde en sık karşılaştığım hataları, sebepleriyle ve düzeltme yollarıyla topladım. Sonunda da referans olarak kullanabileceğiniz doğru bir JSON-LD örneği var.

Fiyat ve stok sayfayla uyuşmuyor

En yaygın ve en zararlı hata bu. Sayfada indirimli fiyat 1.299,90 TL yazıyor, JSON-LD'de eski fiyat duruyor. Ya da ürün tükenmiş, işaretleme hâlâ InStock diyor. Sebep genellikle önbellek: sayfa HTML'i ve işaretleme farklı zamanlarda üretiliyor ya da fiyat JavaScript ile sonradan güncelleniyor.

Google, işaretlemedeki fiyat ve stok bilgisini sayfada gördüğüyle karşılaştırabiliyor. Uyuşmazlık durumunda zengin sonuç kaybı yaşayabilirsiniz; Merchant Center kullanıyorsanız ürünler reddedilebilir. Çözüm, fiyat ve stoğu tek bir kaynaktan, aynı anda basmak. Kampanya dönemlerinde önbellek temizliğini işaretlemeyi de kapsayacak şekilde planlamak gerekiyor.

offers eksik

Product işaretlemesi olup offers alanı olmayan sayfalar çok sık. Google'ın ürün snippet'i için offers, review ya da aggregateRating alanlarından en az biri gerekiyor. Satıcı listelemeleri (merchant listings) için ise fiyatlı bir offers şart. Satış yapılan bir ürün sayfasında offers yoksa, işaretlemenin asıl amacı boşa gidiyor.

Para birimi "TL" yazılmış

priceCurrency alanı ISO 4217 kodu bekler. Türk lirası için bu TRY. "TL", "₺" ya da "YTL" geçerli değil. Aynı şekilde price alanı da sadece sayı olmalı: binlik ayırıcı yok, ondalık ayırıcı nokta, para birimi simgesi yok. "1.299,90 TL" yanlış, 1299.90 doğru. Türkçe yerel ayarlı sistemlerde sayıyı biçimlendiren fonksiyonun işaretlemeye de uygulanması bu hatanın en sık sebebi.

Görünmeyen yorumlara puan vermek

aggregateRating ekleyip sayfada tek bir yorum göstermemek yönergelere açıkça aykırı. Puanlar ve yorumlar kullanıcının sayfada görebileceği yerde olmalı. Bazı temalar yorum sayısı sıfırken bile ratingValue: 5 basıyor; bu durumda en iyi çözüm, yorum yoksa aggregateRating alanını hiç basmamak.

İşletmenin kendi hakkındaki yorumları

Bir işletmenin kendi sitesinde, kendisi hakkındaki yorumları LocalBusiness ya da Organization üzerinde işaretlemesi (self-serving reviews) yıldız için uygun değil. Google bunu 2019'dan beri göstermiyor. "Müşterilerimiz ne diyor" bölümünüzdeki yorumlar ana sayfada durabilir ama yıldız beklemeyin. Ürün sayfasında belirli bir ürüne yapılmış müşteri yorumları ise farklı; onlar Product üzerinde işaretlenebilir.

Müşteriye ait olmayan yorumlar

Başka sitelerden kopyalanan ya da toplanan yorumları, pazaryeri puanlarını veya ürün açıklamasına yazılmış övgü cümlelerini inceleme olarak işaretlemek yanlış. Google'ın inceleme snippet'i yönergeleri, işaretlenen yorumların sitenizde kullanıcıların erişebildiği yorumlar olmasını istiyor ve başka sitelerden toplanan puanların işaretlenmesine izin vermiyor.

Sahte puanlar

Kendi yazdığınız yorumlar, uydurma yorum sayıları ya da gerçek dağılımdan farklı bir ortalama... Bunlar sadece yönerge ihlali değil, spam. Google bu durumda yapılandırılmış veriyle ilgili manuel işlem uygulayabiliyor; Search Console'da Manuel işlemler raporunda görünür. Manuel işlem sonrası sitenin tüm zengin sonuçları kaybolabilir ve düzeltme sonrası yeniden inceleme talebi gerekir. Kısa vadeli bir yıldız, bu riske değmez.

Birbiriyle çakışan Product blokları

Tema bir Product basıyor, SEO eklentisi bir tane, yorum eklentisi bir tane daha. Sonuçta sayfada farklı fiyatlar, farklı puanlar taşıyan üç Product nesnesi oluyor. Google hangisini esas alacağını tahmin etmek zorunda kalıyor.

Kontrol için sayfanın kaynak kodunda "@type": "Product" araması yapıyorum ya da Zengin Sonuçlar Testi'nde algılanan öğeleri sayıyorum. Birden fazla varsa, kaynaklardan birini tek doğru kaynak seçip diğerlerinin işaretleme çıktısını kapatıyorum. Çoğu eklentinin bunun için bir ayarı var; yoksa filtre ile çıktı kaldırılabiliyor.

Varyantlar

Aynı ürünün farklı beden ve renkleri için her varyantı ayrı ve bağımsız bir Product olarak basmak, ya da tüm varyantları tek bir fiyatla göstermek sık görülen iki uç. Google, varyantlar için ProductGroup türünü destekliyor: grup düzeyinde productGroupID ve variesBy, her varyant için de hasVariant altında kendi sku, offers ve varyant özelliklerini taşıyan ayrı Product nesneleri. Varyant başına ayrı URL varsa her varyant kendi sayfasında da işaretlenebilir. Tek fiyatlı basit ürünlerde bu yapıya gerek yok.

Kargo ve iade bilgisi

Satıcı listelemelerinde kargo ücreti, teslim süresi ve iade politikası kullanıcıya gösterilebiliyor. Bunun için offers altında shippingDetails ve hasMerchantReturnPolicy kullanılıyor. Google, bu politikaların Organization düzeyinde ya da Merchant Center ayarlarında tanımlanmasına da izin veriyor; tüm ürünlerde aynı politika geçerliyse bu yollar daha az tekrar demek. Hangisini kullanırsanız kullanın, sayfadaki ve koşullar sayfanızdaki bilgilerle aynı olmalı.

Doğru bir örnek

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Örnek Kahve Makinesi X200",
  "image": ["https://ornek.com/img/x200-1.jpg", "https://ornek.com/img/x200-2.jpg"],
  "description": "15 bar basınçlı, süt köpürtücülü espresso makinesi.",
  "sku": "X200-SYH",
  "gtin13": "8690000000000",
  "brand": { "@type": "Brand", "name": "Örnek" },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.4, "reviewCount": 27 },
  "review": {
    "@type": "Review",
    "author": { "@type": "Person", "name": "Mehmet K." },
    "reviewRating": { "@type": "Rating", "ratingValue": 5, "bestRating": 5 },
    "reviewBody": "Kurulumu kolay, köpürtücüsü iyi çalışıyor."
  },
  "offers": {
    "@type": "Offer",
    "url": "https://ornek.com/urun/x200",
    "price": 1299.90,
    "priceCurrency": "TRY",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "TRY" },
      "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "TR" },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
        "transitTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 3, "unitCode": "DAY" }
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "TR",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 14,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  }
}

Bu örnekteki her değerin sayfada karşılığı olmalı: 27 yorum sayfada listeleniyor, fiyat ve stok görünür, kargo ve iade koşulları ürün sayfasında ya da bağlantılı politika sayfasında yazıyor. GTIN değerini uydurmayın; ürünün gerçek barkodu yoksa alanı hiç eklemeyin. Kendi iskeletinizi schema oluşturucu ile çıkarıp bu kontrol listesine göre doldurabilirsiniz.

Test ve takip

Tek sayfa için Zengin Sonuçlar Testi'ni kullanıyorum; hem canlı URL'yi hem de kod parçasını test edebiliyor ve render sonrası işaretlemeyi gösteriyor. Site genelinde ise Search Console'daki iki rapora bakıyorum: satıcı listelemeleri (Merchant listings) ve ürün snippet'leri (Product snippets). Bu raporlar geçersiz öğeleri ve uyarıları gruplayıp etkilenen örnek URL'leri listeliyor. Bir şablonu düzelttikten sonra raporda Düzeltmeyi doğrula (Validate fix) ile yeniden kontrol başlatıyorum.

Stoğu tükenen ürün sayfalarının hem işaretlemesini hem de dizin durumunu nasıl yönettiğimi stokta olmayan ürünler yazısında anlattım. Genel olarak hangi türlerin hâlâ zengin sonuç ürettiğini merak ediyorsanız zengin sonuç schema türleri yazısına bakabilirsiniz.

Kontrol listesi

  • Fiyat ve stok işaretlemede ve sayfada aynı, aynı kaynaktan üretiliyor.
  • Satılan her üründe fiyatlı offers var.
  • priceCurrency değeri TRY, price sadece sayı ve ondalık ayırıcı nokta.
  • aggregateRating sadece sayfada görünen gerçek yorumlar varsa basılıyor.
  • LocalBusiness ya da Organization üzerinde işletmenin kendi hakkındaki yorumlar işaretlenmiyor.
  • Sayfada tek bir Product bloğu var.
  • Varyantlı ürünlerde ProductGroup ve hasVariant doğru kurulu.
  • Kargo ve iade bilgisi işaretlemede, Organization düzeyinde ya da Merchant Center'da tanımlı ve sayfayla tutarlı.
  • Zengin Sonuçlar Testi ve Search Console raporları düzenli kontrol ediliyor.

Comments / questions

If you have a question about any topic or wish to contact me: Telegram or send an email to [email protected] Thanks!

Related pages