Ürün Şeması (Product JSON-LD) Oluşturucu
Ürün şeması nasıl yazılır? Ürün şeması, Google'ın ürün sayfasındaki fiyatı ve stoğu okuduğu schema.org Product verisidir; JSON-LD biçiminde tek bir script etiketi içinde yazılır. Product nesnesi ürünü tanımlar; Offer nesnesi fiyatı, para birimini, stok durumunu, adresi ve kargo bilgisini taşır; yıldız puanı varsa AggregateRating, marka varsa Brand eklenir. Fiyat noktayla yazılır (549.90), para birimi TRY gibi üç harfli koddur.
Ürün şeması (JSON-LD) nasıl oluşturulur?
Google, ürün sayfasındaki fiyatı ve stoğu HTML'den tahmin etmek yerine sayfaya gömülü schema.org Product verisini okur. Şema JSON-LD biçiminde, tek bir script etiketi içinde yazılır: ürünü tanımlayan bir Product nesnesi ve fiyat, para birimi, stok durumu, adres ve kargo bilgisini taşıyan bir Offer nesnesi. Yıldız puanı varsa AggregateRating, marka varsa Brand nesnesi eklenir.
Product { name, image[], description, brand, sku, gtin13, aggregateRating, offers: Offer { price, priceCurrency, availability, url, priceValidUntil, shippingDetails } }
Fiyat metin olarak, iki ondalıkla ve noktaylayazılır (549,90 TL → "549.90"); para birimi 3 harfli ISO kodudur (TRY). Stok durumu serbest metin değil, schema.org listesinden tam adresle verilir (https://schema.org/InStock). Barkod (GTIN) yazılmadan önce kontrol basamağı doğrulanır:
kontrol basamağı = (10 − (Σ hane × ağırlık) mod 10) mod 10 · ağırlık sağdan 3, 1, 3, 1…
Çıktıdaki her < karakteri \u003colarak kaçışlanır; böylece açıklamaya yazılan bir </script> parçası etiketi kapatıp sayfayı bozamaz. Tarayıcı ve Google bunu aynen < olarak okur.
Örnek hesaplama
- Ürün: "Pamuklu Oversize Tişört, Siyah", 549,90 TL, stokta, iki görsel, marka "Marka", SKU TS-OVS-SYH, barkod 8691234567890, 4,6 puan / 128 değerlendirme, fiyat 2026-12-31'e kadar geçerli, Türkiye'ye kargo 49,90 TL.
- GTIN denetimi: kontrol basamağı hariç 12 hane (869123456789) sağdan 3-1 ağırlıkla toplanır: 9×3 + 8×1 + 7×3 + 6×1 + 5×3 + 4×1 + 3×3 + 2×1 + 1×3 + 9×1 + 6×3 + 8×1 = 130. 130 zaten 10'un katı; kontrol basamağı (10 − 0) mod 10 = 0, numaranın son hanesiyle aynı. 13 hane olduğu için gtin13 olarak yazılır.
- Fiyat 549,90 → "549.90", priceCurrency TRY; kargo 49,90 → shippingRate "49.90", addressCountry TR.
- Puan 4,6 ve 128 değerlendirme → AggregateRating (bestRating 5, worstRating 1). Denetim: 0 sorun, 0 uyarı; tüm zorunlu ve önerilen alanlar dolu.
- Üretilen kod (sayfaya aynen yapıştırılır):
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "Pamuklu Oversize Tişört, Siyah", "image": [ "https://magazam.com/img/tisort-siyah-1.jpg", "https://magazam.com/img/tisort-siyah-2.jpg" ], "description": "%100 pamuk, 240 g/m² kumaş; S–XXL beden. 500 TL üzeri ücretsiz kargo, 14 gün iade.", "brand": { "@type": "Brand", "name": "Marka" }, "sku": "TS-OVS-SYH", "gtin13": "8691234567890", "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.6, "reviewCount": 128, "bestRating": 5, "worstRating": 1 }, "offers": { "@type": "Offer", "price": "549.90", "priceCurrency": "TRY", "availability": "https://schema.org/InStock", "url": "https://magazam.com/urun/pamuklu-oversize-tisort-siyah", "itemCondition": "https://schema.org/NewCondition", "priceValidUntil": "2026-12-31", "shippingDetails": { "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": "49.90", "currency": "TRY" }, "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "TR" } } } } </script>
Zorunlu ve önerilen alanlar
Google iki ayrı zengin sonuç üretir: ürün snippet'i (fiyat, puan, stok satırı) için name ve offers yeterlidir; satıcı listesi(Alışveriş sekmesi, görselli kart) için görsel de zorunludur ve fiyat 0'dan büyük olmalıdır.
| Alan | Durum | Kural |
|---|---|---|
| name | Zorunlu | Ürün adı; Merchant Center'da en fazla 150 karakter, ilk 70 karakter görünür. |
| image | Zorunlu (satıcı listesi) | Bir ya da daha çok tam https adresi; en az 50.000 piksel, 16:9 / 4:3 / 1:1 oranları önerilir. |
| offers.price | Zorunlu | Noktalı ondalık, iki basamak ("549.90"); satıcı listesi için 0'dan büyük. |
| offers.priceCurrency | Zorunlu | 3 harfli ISO 4217 kodu: TRY, USD, EUR. |
| offers.availability | Önerilen | https://schema.org/InStock, OutOfStock, PreOrder, BackOrder, LimitedAvailability. |
| offers.url | Önerilen | Ürünün satın alma sayfası; tam https adres. |
| offers.priceValidUntil | Önerilen | YYYY-AA-GG; geçmiş tarih fiyatı geçersiz sayar. |
| offers.shippingDetails | Önerilen | Kargo ücreti (0 = ücretsiz) ve hedef ülke; arama sonucunda kargo bilgisi olarak görünür. |
| offers.itemCondition | Önerilen | NewCondition, RefurbishedCondition, UsedCondition. |
| brand | Önerilen | Brand nesnesi; GTIN yoksa mpn ile birlikte kimlik yerine geçer. |
| sku · gtin8/12/13/14 · mpn | Önerilen | Ürün kimlikleri; GTIN kontrol basamağı tutmalı, uzunluğa göre gtin13 vb. yazılır. |
| description | Önerilen | En fazla 5.000 karakter; en önemli bilgi ilk 160–500 karakterde. |
| aggregateRating | Önerilen | ratingValue (1–5) + reviewCount (≥ 1); bestRating 5, worstRating 1. |
Sık yapılan hatalar
- Virgüllü fiyat."549,90" Google için geçersizdir; ondalık ayırıcı nokta olmalı. Araç bunu otomatik çevirir, elle yazarken en sık bozulan alan budur.
- Göreli görsel ve ürün adresi. /img/urun.jpg Google tarafından çözümlenmez; https:// ile başlayan tam adres gerekir. Araç göreli adresi koda yazmaz ve denetimde işaretler.
- Tutmayan barkod.Yanlış kopyalanan bir hane kontrol basamağını bozar; Google tutmayan GTIN'i hata sayar. Araç beklenen haneyi söyler; barkodu ürün etiketinden ya da tedarikçi listesinden düzeltin.
- Puan var, sayı yok. ratingValue yazılıp reviewCount ya da ratingCount verilmezse AggregateRating geçersiz olur. Sitenizde toplanmamış puanları şemaya yazmak yönerge ihlalidir.
- Şema ile sayfa farklı. Kampanya bitince sayfadaki fiyat değişir ama şema eski kalırsa Google uyuşmazlık verir. Şema ürün verisinden otomatik üretilmeli, elle güncellenmemeli.
- Her sayfada aynı şema. Kategori ve anasayfaya Product şeması koymayın; yalnız tek bir ürünü satan sayfada, o ürünün verisiyle kullanılır.
Mağaza yazılımında otomatik şema
Bu araç tek ürün için kod üretir; yüzlerce ürünü elle işlemek sürdürülebilir değildir. Doğru kurulumda mağaza yazılımı her ürün sayfasına şemayı ürün kaydından üretir: fiyat ve stok değiştiğinde şema aynı anda değişir, varyantlı ürünlerde ProductGroup ve hasVariant yapısı kurulur, kargo politikası shippingDetails olarak, müşteri puanları aggregateRating olarak yazılır. Çok ülkeye satan mağazalarda ise bölgenin para birimi ve fiyatı yazılmalıdır; aksi hâlde Almanya'daki müşteri arama sonucunda TL fiyat görür. ESOLTEC mağazalarında bu üretim ürün verisinden otomatik yapılır; araç, hazır bir yazılımınız yokken ya da mevcut sitenizin şemasını kontrol ederken işinize yarar.
Sık sorulan sorular
Ürün şeması (Product structured data) nedir, ne işe yarar?
Ürün sayfasının içine gömülen, schema.org sözlüğüyle yazılmış JSON-LD kodudur. Google bu kodu okuyarak arama sonucunda fiyat, stok durumu, yıldız puanı ve kargo bilgisini gösterir (zengin sonuç). Aynı sıradaki düz bir sonuca göre daha fazla yer kaplar ve tıklanma oranını artırır; ayrıca Google Alışveriş sekmesindeki ücretsiz listelere girmenin yollarından biridir.
Hangi alanlar zorunlu?
Google ürün snippet'i için name ve offers (ya da review veya aggregateRating) yeterlidir. Satıcı listeleri (merchant listing) için name, en az bir image, offers.price ve offers.priceCurrency zorunludur; fiyat 0'dan büyük olmalıdır. availability, url, sku, gtin, brand, description, priceValidUntil ve shippingDetails önerilen alanlardır. Araç zorunlu alanları kırmızı, önerilenleri sarı olarak işaretler.
Fiyatı nasıl yazmalıyım, KDV dahil mi?
Müşterinin ödeyeceği fiyatı, yani KDV dahil satış fiyatını girin. Araç fiyatı iki ondalıkla ve noktayla metin olarak yazar: 549,90 TL için "549.90" ve priceCurrency "TRY". Google ondalık ayırıcı olarak virgülü kabul etmez; "549,90" yazan şema hatalı sayılır.
GTIN nedir, kontrol basamağı nasıl doğrulanır?
GTIN ürünün küresel barkod numarasıdır: EAN-13 (13 hane; GS1 Türkiye'nin verdiği numaralar 868 ya da 869 ile başlar), EAN-8, UPC-A (12 hane) ve GTIN-14. Son hane kontrol basamağıdır: diğer haneler sağdan başlayarak 3-1-3-1 ağırlıkla toplanır, toplamı 10'un katına tamamlayan rakam kontrol basamağıdır. 8691234567890 için toplam 130'dur, 130 zaten 10'un katı olduğundan kontrol basamağı 0'dır. Araç tutmayan numarayı şemaya yazmaz ve doğru haneyi söyler.
availability için hangi değerler geçerli?
Yalnız schema.org ItemAvailability listesindeki değerler: InStock, OutOfStock, PreOrder, BackOrder, LimitedAvailability (ayrıca SoldOut, Discontinued, InStoreOnly, OnlineOnly, PreSale). Tam adres biçiminde yazılır: https://schema.org/InStock. "Stokta var" gibi serbest metin Google tarafından tanınmaz.
Yıldız puanı (AggregateRating) nasıl eklenir?
Puanı (ratingValue) ve değerlendirme sayısını (reviewCount) girin; araç bestRating 5 ve worstRating 1 ile birlikte yazar. Puan 1–5 aralığında olmalı, değerlendirme sayısı en az 1 tam sayı olmalıdır. Sitenizde gerçekten toplanmamış puanları şemaya yazmak Google'ın yapılandırılmış veri yönergelerine aykırıdır ve manuel işlem cezasına yol açabilir.
Kodu sayfaya nereye eklerim, nasıl test ederim?
Kopyaladığınız script etiketini ürün sayfasının head bölümüne ya da body içine, sayfa başına bir kez ekleyin; her ürün sayfasında o ürünün kendi verisi olmalıdır. Ardından Google Zengin Sonuç Testi'ne (search.google.com/test/rich-results) sayfa adresini ya da kodu yapıştırın; hata ve uyarıları aynı isimlerle görürsünüz. Dizine alınma sonrası Search Console'daki Alışveriş ve Ürün snippet'i raporları takip edilir.
Görseller neden https ve tam adres olmalı?
Google görseli kendi tarayıcısıyla çeker; göreli yol (/img/urun.jpg) çözümlenemez, engellenmiş ya da giriş isteyen adres okunamaz. Görsel taranabilir olmalı, Google Görseller'in desteklediği bir biçimde (JPEG, PNG, WebP, GIF, AVIF, SVG, BMP) ve en az 50.000 piksel (genişlik × yükseklik, örneğin 250×200) olmalıdır. Birden fazla görselde 16:9, 4:3 ve 1:1 oranlarını birlikte vermek önerilir; araç ilk satırdaki görseli ana görsel olarak yazar.
Beden ve renk varyantlı ürünlerde ne yapmalıyım?
Her varyantın kendi adresi varsa o sayfada varyantın kendi fiyatı, stoğu ve GTIN'i ile ayrı bir Product şeması kullanın; bu araç tek varyant için kod üretir. Tek sayfada tüm varyantlar satılıyorsa Google ProductGroup ve hasVariant yapısını önerir; bunu elle yazmak yerine mağaza yazılımının varyant verisinden otomatik üretmesi daha güvenlidir.
Girdiğim ürün bilgileri sunucuya gönderiliyor mu?
Hayır. Kod tamamen tarayıcınızda üretilir; ürün adı, fiyat ve adresler ne sunucumuza gider ne de sayfanın adresine yazılır. Sayfayı yenilediğinizde form sıfırlanır.
Kaynaklar
- Google Search Central — Product snippet yapılandırılmış verisi (zorunlu/önerilen alanlar) ( tarihinde kontrol edildi)
- Google Search Central — Merchant listing yapılandırılmış verisi (image, price, availability, shippingDetails) ( tarihinde kontrol edildi)
- Google Search Central — Review snippet / AggregateRating (ratingValue, reviewCount, bestRating 5) ( tarihinde kontrol edildi)
- Google Merchant Center — title özniteliği (en fazla 150 karakter, ilk 70 görünür) ( tarihinde kontrol edildi)
- Google Merchant Center — description özniteliği (en fazla 5.000 karakter, ilk 160–500 önemli) ( tarihinde kontrol edildi)
Tüm kaynaklar (6)
- EAN / GTIN kontrol basamağı algoritması (GS1 mod-10, ağırlık 3-1) ( tarihinde kontrol edildi)
