Teknik SEO & GEO

E-ticaret için Schema.org JSON-LD: Product, Offer, varyant, breadcrumb ve FAQ işaretlemesi nasıl yapılır

Ürün sayfalarınızın Google’da fiyat, stok, puan ve kargo bilgisiyle çıkması ve yapay zekâ aramalarında doğru anlaşılması için eksiksiz JSON-LD rehberi: zorunlu alanlar, ProductGroup ile varyantlar, kargo ve iade politikası, Shopify Liquid örneği, sık yapılan hatalar.

Kısa cevap

E-ticaret sitesinde yapılandırılmış veri için en doğru yöntem, her ürün sayfasının <head> bölümüne tek bir JSON-LD bloğu koymaktır. Bu blokta Product (ad, görsel, açıklama, marka, SKU/GTIN), içinde Offer (fiyat, para birimi, stok durumu, kargo ve iade politikası) ve varsa AggregateRating bulunur. Varyantlı ürünlerde Google’ın 2024’ten beri desteklediği ProductGroup + hasVariant yapısı kullanılır.

Ürün bloğunun yanına BreadcrumbList, siteye bir kez Organization veya OnlineStore ekleyin. FAQ işaretlemesi Google’da zengin sonuç üretmese de yapay zekâ aramaları için sayfanın soru-cevap yapısını netleştirir. Her şeyi Rich Results Test ve Search Console’un “Geliştirmeler” raporuyla doğrulayın.

Yapılandırılmış veri e-ticarette neden ciro meselesidir?

Yapılandırılmış veri, sayfanızdaki bilgiyi (ürün adı, fiyat, stok, puan) arama motorlarının ve yapay zekâ sistemlerinin kesin olarak anlayabileceği, Schema.org sözlüğüne uyan makine okunur biçimde yazmaktır. Google’ın önerdiği format JSON-LD’dir: HTML’den bağımsız, tek bir <script type="application/ld+json"> bloğu.

Ürün sayfasında doğru işaretleme üç somut sonuç üretir:

  • Zengin sonuçlar: Arama sonucunda fiyat, stok durumu, yıldız puanı, kargo ücreti ve teslimat süresi görünür. Google bu bilgileri taşıyan sonuçların daha yüksek tıklama oranı aldığını belgeler; Rotten Tomatoes vaka çalışmasında yapılandırılmış veri eklenen sayfalar %25 daha yüksek tıklama oranı aldı.
  • Google Alışveriş sekmesi ve Merchant Center: “Merchant listing” işaretlemesi, feed’iniz olmasa bile ürünlerinizin ücretsiz listelemelerde çıkmasını sağlar; feed’iniz varsa sayfadaki veriyle feed’i eşleştirip tutarlılığı doğrular.
  • Yapay zekâ aramaları: Google AI Overviews, ChatGPT, Perplexity ve Gemini bir ürünü alıntılarken fiyat, stok ve varyant bilgisini sayfanın görünür metninden çıkarmaya çalışır; JSON-LD bu bilgiyi belirsizlikten kurtarır. Yapılandırılmış verisi olan sayfaların yapay zekâ yanıtlarında daha sık alıntılandığı birden çok sektör araştırmasında raporlanmıştır.
%25Yapılandırılmış veriyle tıklama oranı artışı (Rotten Tomatoes, Google vaka çalışması)
JSON-LDGoogle’ın önerdiği format (Microdata ve RDFa yerine)
2024ProductGroup ile varyant desteğinin Google’a geldiği yıl

Google ürün sonuçlarında iki ayrı deneyim: Product snippet ve Merchant listing

Google, 2022’den beri ürün işaretlemesini iki deneyime ayırır. Hangisini hedeflediğiniz zorunlu alanları belirler.

Product snippetMerchant listing
Kim içinİnceleme siteleri, kıyaslama sayfaları, satıcılarÜrünü doğrudan satan sayfalar (sepete ekle butonu olan)
Zorunluname + şunlardan en az biri: review, aggregateRating, offersname, image, offers (içinde price, priceCurrency)
Önerilenimage, description, brand, sku, gtinavailability, shippingDetails, hasMerchantReturnPolicy, aggregateRating, varyantlar için ProductGroup
ÇıktıPuan, fiyat aralığı, stokFiyat, stok, kargo, iade, teslimat süresi, Alışveriş sekmesi listeleri

Bir e-ticaret sitesi için hedef Merchant listing’dir. Kural basittir: işaretlediğiniz ürünü o sayfada satıyor olmalısınız; üçüncü taraf satıcı fiyatlarını Offer olarak işaretlemek politika ihlalidir.

Eksiksiz Product + Offer JSON-LD örneği (TRY, kargo ve iade dahil)

Aşağıdaki blok tek varyantlı bir ürün için Google’ın Merchant listing ve Product snippet gereksinimlerinin tamamını karşılar. Değerleri sayfada görünen bilgilerle birebir aynı tutun; Google görünmeyen veriyi işaretlemeyi spam sayar.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://www.ornekmagaza.com/urun/organik-cam-bali-450g#product",
  "name": "Organik Çam Balı 450 g",
  "image": [
    "https://cdn.ornekmagaza.com/cam-bali-1x1.jpg",
    "https://cdn.ornekmagaza.com/cam-bali-4x3.jpg",
    "https://cdn.ornekmagaza.com/cam-bali-16x9.jpg"
  ],
  "description": "Muğla yaylalarından, filtresiz ve ısıl işlemsiz organik çam balı. Cam kavanoz, 450 g.",
  "sku": "BAL-CAM-450",
  "gtin13": "8691234567890",
  "brand": { "@type": "Brand", "name": "Örnek Bal" },
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "reviewCount": 127 },
  "offers": {
    "@type": "Offer",
    "url": "https://www.ornekmagaza.com/urun/organik-cam-bali-450g",
    "price": 489.90,
    "priceCurrency": "TRY",
    "priceValidUntil": "2026-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock",
    "seller": { "@type": "Organization", "name": "Örnek Mağaza" },
    "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"
    }
  }
}
</script>

Dikkat edilecek üç ayrıntı: price sayı olmalı, metin değil (489.90, "489,90 TL" değil). image için Google 1:1, 4:3 ve 16:9 oranlarında en az 50.000 piksel görsel önerir. availability değerleri tam URL olmalıdır: InStock, OutOfStock, PreOrder, BackOrder.

Varyantlı ürünler: ProductGroup ve hasVariant

Beden ve renk gibi varyantları olan ürünlerde en sık yapılan hata, tek bir Product içine fiyat aralığı koymaktır. Google 2024’ten beri varyantları ProductGroup ile modellemeyi destekler: ana grup ortak alanları taşır, her varyant kendi SKU, fiyat ve stoğuyla bir Product olur, variesBy hangi özelliğin değiştiğini söyler.

{
  "@context": "https://schema.org",
  "@type": "ProductGroup",
  "name": "Pamuklu Basic Tişört",
  "brand": { "@type": "Brand", "name": "Örnek Tekstil" },
  "productGroupID": "TSH-BASIC",
  "variesBy": ["https://schema.org/size", "https://schema.org/color"],
  "hasVariant": [
    {
      "@type": "Product", "sku": "TSH-BASIC-S-BLK", "name": "Pamuklu Basic Tişört – S / Siyah",
      "size": "S", "color": "Siyah", "image": "https://cdn.ornek.com/tsh-blk.jpg",
      "offers": { "@type": "Offer", "price": 349.00, "priceCurrency": "TRY",
                  "availability": "https://schema.org/InStock",
                  "url": "https://www.ornek.com/urun/basic-tisort?variant=s-siyah" }
    },
    {
      "@type": "Product", "sku": "TSH-BASIC-M-BLK", "name": "Pamuklu Basic Tişört – M / Siyah",
      "size": "M", "color": "Siyah", "image": "https://cdn.ornek.com/tsh-blk.jpg",
      "offers": { "@type": "Offer", "price": 349.00, "priceCurrency": "TRY",
                  "availability": "https://schema.org/OutOfStock",
                  "url": "https://www.ornek.com/urun/basic-tisort?variant=m-siyah" }
    }
  ]
}

Varyant URL’leri aynı sayfanın parametreli halleriyse, canonical etiketi ana ürün sayfasını göstermeli; Google varyant URL’lerini ayrıca indekslemek zorunda değildir.

Sayfa düzeyinde tamamlayıcı tipler: BreadcrumbList, Organization/OnlineStore, WebPage

Kategori hiyerarşisini arama sonucunda URL yerine okunabilir yol olarak gösterir ve sitenin bilgi mimarisini netleştirir. Her ürün ve kategori sayfasına ekleyin:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Ana sayfa", "item": "https://www.ornekmagaza.com/" },
    { "@type": "ListItem", "position": 2, "name": "Bal", "item": "https://www.ornekmagaza.com/bal/" },
    { "@type": "ListItem", "position": 3, "name": "Organik Çam Balı 450 g" }
  ]
}

Organization ya da OnlineStore

Siteye bir kez, tercihen ana sayfaya: ad, logo, URL, iletişim ve sosyal profiller (sameAs). Google, mağaza geneli iade politikasını OnlineStore tipinde hasMerchantReturnPolicy ile bir kez tanımlamayı destekler; böylece her Offer’da tekrar yazmanız gerekmez. Marka adınızın yapay zekâ sistemlerinde doğru varlık (entity) olarak tanınması da bu bloktan başlar.

Birbirine bağlı @graph

Birden fazla tipi tek blokta @graph dizisiyle verin ve @id ile birbirine bağlayın: Product → isPartOf WebPage → isPartOf WebSite → publisher Organization. Bu, aynı varlığın sayfada iki kez tanımlanmasını önler.

FAQ ve HowTo: 2026’da gerçek durum

Google, Ağustos 2023’te FAQPage zengin sonuçlarını yalnızca tanınmış devlet ve sağlık sitelerine daralttı; HowTo zengin sonuçlarını Eylül 2023’te tamamen kaldırdı. E-ticaret sitesinde FAQ işaretlemesi artık arama sonucunda açılır soru-cevap üretmez.

Yine de eklemeye değer, iki nedenle: Google sayfayı anlamak için işaretlemeyi okumaya devam eder; yapay zekâ aramaları (AI Overviews, ChatGPT, Perplexity) soru-cevap biçimindeki içeriği doğrudan alıntılamayı tercih eder. Kural: sorular ve cevaplar sayfada aynen görünür olmalı, işaretleme görünmeyen metin içermemeli.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "Çam balı kristalleşir mi?",
    "acceptedAnswer": { "@type": "Answer",
      "text": "Hayır. Çam balı düşük glikoz oranı sayesinde oda sıcaklığında yıllarca sıvı kalır; kristalleşme görülmesi ürünün karışım olabileceğine işarettir." }
  }]
}

Yorumlar ve puanlar: nerede serbest, nerede yasak?

  • Ürün sayfasında gerçek müşteri yorumlarından hesaplanan AggregateRating serbesttir ve Merchant listing için önerilir.
  • Kendi şirketiniz hakkında (Organization, LocalBusiness) yazdığınız ya da sitenizde topladığınız puanları işaretlemek “self-serving review” sayılır ve Google tarafından yok sayılır; manuel işlem riski taşır.
  • Yorum sayısı sayfada görünenle aynı olmalı, puan ölçeği belirtilmemişse 1–5 varsayılır.

Shopify’da uygulama: tema snippet’i ve çakışma denetimi

Shopify temalarının çoğu (Dawn dahil) ürün sayfasına temel bir Product JSON-LD basar. Sorun, SEO uygulamalarının ve yorum uygulamalarının da kendi bloklarını eklemesidir: aynı sayfada üç farklı Product tanımı, çelişen fiyat ve puan. Önce sayfa kaynağında application/ld+json kaç kez geçtiğini sayın; birden fazlaysa birini bırakın.

Temanın kendi bloğunu zenginleştirmek için snippets/structured-data.liquid (ya da temanıza göre benzer dosya) içinde Shopify’ın json filtresini kullanın; elle tırnak yazmak kaçış hataları üretir:

{%- if request.page_type == 'product' -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "url": {{ shop.url | append: product.url | json }},
  "image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
  "description": {{ product.description | strip_html | truncate: 500 | json }},
  "sku": {{ product.selected_or_first_available_variant.sku | json }},
  "brand": { "@type": "Brand", "name": {{ product.vendor | json }} },
  "offers": {
    "@type": "Offer",
    "price": {{ product.selected_or_first_available_variant.price | divided_by: 100.0 | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
    "url": {{ shop.url | append: product.url | json }},
    "itemCondition": "https://schema.org/NewCondition"
  }
}
</script>
{%- endif -%}

Varyantlı ürünlerde aynı mantıkla product.variants üzerinden döngüyle ProductGroup üretebilirsiniz. Kargo ve iade politikasını ürün başına yazmak yerine mağaza düzeyinde (Merchant Center ya da OnlineStore) tanımlamak Shopify’da daha sürdürülebilirdir.

Doğrulama ve izleme

  1. Rich Results Test (search.google.com/test/rich-results): Google’ın hangi zengin sonuçlara uygun bulduğunu ve eksik alanları gösterir. Hem URL hem kod parçası test edebilirsiniz.
  2. Schema Markup Validator (validator.schema.org): Google’dan bağımsız, sözlük düzeyinde sözdizimi kontrolü.
  3. Search Console → Geliştirmeler → Ürün snippet’leri / Satıcı listeleri: Sitedeki tüm ürün sayfalarının geçerli, uyarılı ve hatalı dağılımı. Dağıtımdan sonra 1–2 hafta içinde dolar; hatalı URL’ler burada listelenir.
  4. Merchant Center → Ürünler → Veri kalitesi: Feed ile sayfa işaretlemesi arasındaki fiyat ve stok uyumsuzluklarını gösterir.

En sık yapılan 8 hata

HataSonuçDüzeltme
Fiyatı metin yazmak ("489,90 TL")Offer geçersizSayı ve ayrı priceCurrency
Aynı sayfada birden fazla Product bloğuÇelişen veri, zengin sonuç kaybıTek kaynak bırakın; uygulamalarınkini kapatın
Sayfada görünmeyen puan veya fiyat işaretlemekSpam politikası ihlali, manuel işlemYalnızca görünen veriyi işaretleyin
Kategori sayfasına Product işaretlemesiGoogle yok sayarKategoriye ItemList, ürüne Product
Varyantları fiyat aralığıyla tek Product’a sıkıştırmakYanlış fiyat gösterimiProductGroup + hasVariant
Bağıl görsel URL’leriGörsel alınamazMutlak https:// URL
Stok bitince işaretlemeyi silmekSayfa zengin sonuçtan düşeravailability: OutOfStock bırakın
Şirket puanını Organization’a işaretlemekSelf-serving review, yok sayılırYalnızca ürün yorumlarını işaretleyin

Yapılandırılmış veri, sayfanın teknik sağlığıyla birlikte işler: yavaş bir ürün sayfası zengin sonuçla da tıklanmaz. Hız tarafı için Shopify Core Web Vitals rehberine, dönüşüm ölçümü için GA4 Consent Mode v2 ve Meta CAPI yazısına bakın.

Öne çıkanlar

  • Format JSON-LD, yer <head>, ürün başına tek Product bloğu; uygulamaların ürettiği çift blokları kapatın.
  • Satış yapan sayfalar Merchant listing hedefler: name, image, offers.price, priceCurrency zorunlu; availability, kargo ve iade önerilir.
  • Varyantlar için ProductGroup + hasVariant + variesBy; fiyat aralığı yerine her varyanta kendi Offer’ı.
  • FAQPage ve HowTo e-ticarette Google zengin sonucu üretmez (2023), ama FAQ işaretlemesi yapay zekâ aramaları için değerlidir; görünür metinle birebir olmalı.
  • Fiyat sayı olarak, görseller mutlak URL ve üç en-boy oranında, puanlar yalnızca gerçek ürün yorumlarından.
  • Rich Results Test ile dağıtım öncesi, Search Console “Geliştirmeler” ve Merchant Center veri kalitesi raporlarıyla dağıtım sonrası doğrulayın.

Sık sorulan sorular

E-ticaret sitesinde hangi schema.org tipleri zorunludur?

Zorunlu olan yoktur; Google zengin sonuçları için ürün sayfasında Product ve içinde Offer gerekir. Satış yapan sayfalarda Merchant listing için name, image, offers.price ve priceCurrency zorunludur. Site geneline Organization (ya da OnlineStore) ve her sayfaya BreadcrumbList eklemek önerilir.

JSON-LD mi, Microdata mı kullanmalıyım?

JSON-LD. Google bunu açıkça önerir; HTML’den bağımsız olduğu için tema değişikliklerinde bozulmaz, uygulama ve etiket yöneticisiyle yönetilebilir ve @graph ile tipler birbirine bağlanabilir. Microdata ve RDFa hâlâ desteklenir ama bakımı zordur.

Varyantlı ürünleri nasıl işaretlemeliyim?

ProductGroup tipiyle. Ortak alanlar (ad, marka, açıklama) grupta, her varyant hasVariant içinde kendi sku, size/color, görsel ve Offer’ıyla bir Product olarak yer alır; variesBy hangi özelliklerin değiştiğini belirtir. Google bu yapıyı 2024’ten beri Merchant listing için destekler.

FAQ schema eklemek 2026’da hâlâ işe yarıyor mu?

Google arama sonuçlarında açılır soru-cevap üretmez; bu deneyim Ağustos 2023’ten beri yalnızca devlet ve sağlık sitelerine açık. Ancak işaretleme Google’ın sayfayı anlamasına yardım eder ve AI Overviews, ChatGPT ve Perplexity gibi yapay zekâ aramaları soru-cevap biçimli içeriği daha kolay alıntılar. Sorular sayfada görünür olmak şartıyla eklemeye değer.

Shopify temam zaten JSON-LD basıyor, dokunmalı mıyım?

Kontrol edin. Dawn ve türevleri temel bir Product bloğu üretir ama kargo, iade, GTIN ve varyant yapısı eksiktir. Daha önemlisi, SEO ve yorum uygulamaları kendi bloklarını da ekler; aynı sayfada birden fazla Product tanımı çelişkiye yol açar. Sayfa kaynağında application/ld+json sayısını kontrol edip tek bir kaynak bırakın.

Yapılandırılmış veri yapay zekâ aramalarında görünmeye yardım eder mi?

Evet, dolaylı ama somut biçimde. Yapay zekâ sistemleri sayfadaki varlıkları (ürün, marka, fiyat, stok) kesin olarak tanımlayabildiğinde o sayfayı daha güvenle alıntılar. Product, Organization ve FAQPage işaretlemesi; net başlıklar, görünür soru-cevaplar ve güncel tarih bilgisiyle birleştiğinde en iyi sonucu verir.

Stokta olmayan ürünün işaretlemesini kaldırmalı mıyım?

Hayır. availability değerini https://schema.org/OutOfStock yapın ve sayfayı yayında tutun. İşaretlemeyi silmek sayfanın zengin sonuç geçmişini sıfırlar; stok geri geldiğinde yeniden değerlendirme beklemek zorunda kalırsınız.

Kaynaklar

  1. Google Search Central – Product structured data (genel bakış)
  2. Google Search Central – Merchant listing structured data
  3. Google Search Central – Product variant structured data (ProductGroup)
  4. Google Search Central – Breadcrumb structured data
  5. Google Search Central – FAQPage structured data ve 2023 değişikliği
  6. Google Search Central – Organization structured data (OnlineStore, iade politikası)
  7. Google Search Central – Review snippet yönergeleri (self-serving reviews)
  8. Google – Yapılandırılmış veri vaka çalışmaları (Rotten Tomatoes %25 CTR)
  9. Schema.org – Product
  10. Shopify.dev – json Liquid filtresi