Schema.org: Google’a Sayfanı Kelimelerle Değil Veriyle Anlatmak
Arama motoru sayfanızdaki metni okuyor ama “bu bir hizmet mi, bir yazı mı, bir kişi mi” sorusunu tahmin ediyor. JSON-LD tam olarak bu tahmini ortadan kaldırıyor. Hangi tipleri neden kullandığımı, doğrulamayı nasıl yaptığımı ve en sık düştüğüm tuzakları anlatıyorum.
Bir müşteri sitesini teslim ettikten sonra Search Console’u açtım, “Zenginleştirmeler” sekmesi bomboştu. Sayfada hizmetler vardı, adres vardı, çalışma saatleri vardı — hepsi düzgün yazılmıştı. Ama Google için bunlar sadece metindi. Bir <p> etiketinin içindeki “Pazartesi–Cuma 09:00–18:00” ile aynı cümlenin makine tarafından okunabilir hali arasında dağlar kadar fark var.
Yapısal veri bu farkı kapatıyor. Sayfanın görünen içeriğini değiştirmeden, sayfaya “ben şu tip bir varlığım, şu özelliklere sahibim” diyen ayrı bir katman ekliyorsunuz. Ben bunu JSON-LD ile yapıyorum ve şu an okuduğunuz sitede de aynısı var.
Neden JSON-LD, neden Microdata değil
Schema.org’u sayfaya üç şekilde gömebilirsiniz: Microdata (HTML etiketlerine itemprop öznitelikleri serpiştirmek), RDFa ve JSON-LD (ayrı bir <script> bloğu). Üçünü de denedim, ikinci projeden sonra JSON-LD dışında bir şey kullanmadım. Sebebi basit:
- İşaretleme ile içerik ayrışıyor. Tasarımı değiştirdiğinizde, bir
div’i kaldırdığınızda şema bozulmuyor. Microdata’da bir sarmalayıcıyı silmek, içindeki bütün özellikleri sessizce düşürür. - Tek yerden okunabiliyor. Şemayı gözden geçirmek için sayfanın tamamını taramanız gerekmiyor; tek blok.
- Sunucudan üretmesi kolay. Bende sayfalar bir üretici betikten çıkıyor; şemayı da aynı veriden basıyorum, elle iki yerde güncellemek zorunda kalmıyorum.
- Google’ın önerdiği biçim bu. Diğerlerini de okuyor ama dokümantasyonda örnekler JSON-LD üzerinden veriliyor.
Bunu baştan söyleyeyim, çünkü çok yanlış anlaşılıyor: şema eklemek sizi doğrudan yukarı çıkarmıyor. Yaptığı şey, arama sonucunda daha fazla yer kaplamanız ve içeriğinizin ne olduğunun doğru anlaşılması. Yıldızlı puan, SSS açılır listesi, tarif kartı, iş ilanı kutusu — bunlar tıklama oranını değiştirir. Sıralamayı ise içerik ve teknik sağlık belirler.
Pratikte işe yarayan tipler
Schema.org’da sekiz yüzden fazla tip var. Gerçekte kullandıklarım bir elin parmaklarını biraz aşıyor. Teslim ettiğim sitelerde şu dağılım oturdu:
| Tip | Nerede kullanıyorum | Ne kazandırıyor |
|---|---|---|
LocalBusiness | Fiziksel adresi olan işletme siteleri | Harita ve bilgi panelinde adres, telefon, çalışma saati |
Organization / Person | Kurumsal siteler / kişisel portföy | Marka veya kişi olarak tanınma, sameAs ile hesap eşleme |
BlogPosting | Her blog yazısı | Yazar, tarih, kategori; haber/makale görünümü |
BreadcrumbList | Alt sayfaların tamamı | Sonuçta çıplak URL yerine okunabilir yol |
FAQPage | Gerçekten SSS bölümü olan sayfalar | Sonucun altında açılır soru listesi |
SoftwareApplication | Uygulama tanıtım sayfaları | Platform, kategori, mağaza bağlantısı |
Service | Hizmet sayfaları | Sunulan hizmetin adı ve kapsamı |
Bir yazı sayfası nasıl işaretleniyor
Şu an okuduğunuz sayfanın <head> bölümünde şuna benzer bir blok var:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Schema.org: Google'a Sayfanı Kelimelerle Değil Veriyle Anlatmak",
"description": "JSON-LD ile yapısal veri nasıl yazılır...",
"datePublished": "2026-05-14",
"dateModified": "2026-05-14",
"inLanguage": "tr-TR",
"articleSection": "SEO & Pazarlama",
"keywords": ["Schema.org", "JSON-LD", "yapısal veri"],
"author": {
"@type": "Person",
"name": "Demir Taşdemir",
"url": "https://demirtasdemir.com"
},
"publisher": {
"@type": "Person",
"name": "Demir Taşdemir",
"url": "https://demirtasdemir.com"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://demirtasdemir.com/blog/schema-org-yapisal-veri.html"
}
}
</script>
Dikkat edilecek üç nokta var. headline sayfadaki <h1> ile aynı olmalı — farklı olursa Google bunu tutarsızlık sayıyor. mainEntityOfPage canonical adresle birebir eşleşmeli. datePublished gerçekten yayın tarihi olmalı; her derlemede bugünün tarihini basmak, sonuçta “bugün yayınlandı” diyen ama içeriği aynı kalan bir sayfa üretir ve bu güven kaybettirir.
Yerel işletmede detay farkı
Adresi olan bir işletmede LocalBusiness tipi en çok getirisi olan işaretleme. Ama burada da çoğu site yarım bırakıyor: adı ve telefonu yazıp geçiyorlar. Asıl işe yarayan alanlar şunlar:
{
"@context": "https://schema.org",
"@type": "HealthAndBeautyBusiness",
"name": "Örnek Klinik",
"url": "https://ornek.com",
"telephone": "+90 555 000 00 00",
"address": {
"@type": "PostalAddress",
"streetAddress": "Örnek Mah. Örnek Cad. No: 1",
"addressLocality": "Kadıköy",
"addressRegion": "İstanbul",
"postalCode": "34000",
"addressCountry": "TR"
},
"geo": { "@type": "GeoCoordinates", "latitude": 40.99, "longitude": 29.02 },
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "18:00"
}],
"sameAs": [
"https://www.instagram.com/ornek",
"https://www.google.com/maps/place/..."
]
}
@type alanında LocalBusiness yerine daha özel bir alt tip seçmek işe yarıyor: HealthAndBeautyBusiness, Restaurant, SecurityService gibi. sameAs alanı da göründüğünden önemli — işletmenin Google Haritalar kaydı, Instagram hesabı ve sitesi arasındaki bağı açıkça kuruyor.
En sık yapılan hata bu. Sayfada görünmeyen bir puanı aggregateRating olarak eklemek, olmayan bir SSS bölümü için FAQPage basmak, sunulmayan bir hizmeti listelemek. Google bunu “yapısal veri politikası ihlali” sayıyor ve elle uygulanan bir yaptırımla sitenin bütün zengin sonuçlarını kapatabiliyor. Şema, sayfanın makine tarafından okunabilir kopyası olmalı — reklamı değil.
Doğrulama: iki ayrı araç, iki ayrı soru
İşaretlemeyi yazdıktan sonra iki yerden geçiriyorum, çünkü ikisi farklı şeye bakıyor:
- Schema Markup Validator (validator.schema.org) — “Bu JSON, Schema.org sözlüğüne göre geçerli mi?” Sözdizimi hatalarını, tanımsız özellikleri burada yakalıyorum.
- Rich Results Test (Google) — “Google bunu zengin sonuç olarak gösterir mi?” Geçerli ama Google’ın desteklemediği bir tip yazdıysanız ilk araç sorun görmez, ikincisi “uygun öğe bulunamadı” der.
Yayına aldıktan sonra iş bitmiyor. Search Console’un “Zenginleştirmeler” bölümü, gerçek taramalarda çıkan hataları gösteriyor ve buradaki uyarılar test araçlarında görünmeyen şeyleri yakalayabiliyor — özellikle sayfa şablonundaki bir alanın bazı kayıtlarda boş kalması gibi durumları.
Sık düştüğüm tuzaklar
Bunları kendi hatalarımdan çıkardım:
- İçeriği JavaScript ile sonradan enjekte etmek. Google render ediyor ama garantisi yok ve gecikmeli. JSON-LD’yi HTML’in içinde, sunucudan gelen halinde tutuyorum.
- Aynı sayfada çakışan iki blok. İki ayrı eklenti ya da iki ayrı şablon parçası aynı tip için farklı veri basarsa hangisinin geçerli olduğu belirsizleşiyor. Tek kaynak, tek blok.
- Türkçe karakterlerin bozulması. JSON içinde kaçış yapmaya çalışmak yerine sayfayı UTF-8 tutup karakterleri olduğu gibi yazmak en temizi.
- Tırnak kaçırmak. Başlıkta çift tırnak varsa JSON kırılıyor ve blok tamamen görmezden geliniyor — sessizce. Üretici betikte başlığı basmadan önce tırnakları kaçırıyorum.
- Tarih biçimi. ISO 8601 dışında bir şey yazarsanız alan tamamen düşer.
2026-05-14doğru,14.05.2026değil.
Nereden başlamalı
Sıfırdan bir siteye şema eklemem gerekse sıralamam şöyle olurdu: önce her sayfaya BreadcrumbList, sonra site geneli için tek bir Organization ya da Person, sonra sayfa tipine özel işaretleme (yazı ise BlogPosting, hizmet ise Service, işletme ise LocalBusiness alt tipi). SSS bölümü gerçekten varsa FAQPage en sona.
Bu sıralamanın mantığı şu: ilk ikisi bütün siteyi tek seferde kapsıyor ve bakımı en ucuz olanlar. Sayfa tipine özel işaretlemeler daha fazla emek istiyor ama getirisi de daha yüksek. Şemayı bir kere şablona doğru yerleştirdiğinizde, sonraki her sayfa onu ücretsiz alıyor — benim blogumda her yeni yazı için ayrıca bir şey yazmıyorum, üretici betik hallediyor.
- SEO
- Schema.org
- JSON-LD
- Yapısal Veri
- Web Geliştirme
Demir Taşdemir
Mobil Uygulama & Web Geliştirici
2018'den beri yazılım geliştiriyorum. App Store ve Google Play'de 11 uygulama yayınladım; şu an 6 mobil uygulama, 1 e-ticaret platformu ve 1 masaüstü oyun üzerinde çalışıyorum.
Sitenizde yapısal veri var mı, doğru mu?
Mevcut sitenizin şema işaretlemesini inceleyip hangi tiplerin eksik, hangilerinin hatalı olduğunu çıkarabilirim. Yeni bir site kuruyorsanız yapısal veriyi baştan planlayarak geliştiriyorum. İletişim sayfasından yazmanız yeterli.