Schema.org JSON-LD WordPress'e Nasıl Eklenir? Rank Math + Custom Kod
WordPress sitenize Schema.org JSON-LD eklemek, Google'ın içeriğinizi anlamasını kolaylaştırır. Rank Math ile otomatik, custom kod ile tam kontrol. İkisini birlikte nasıl kullanacağınızı gösteriyorum.

WordPress sitenize bir tarif eklediğinizde Google'ın bunu gerçek bir yemek tarifi olarak mı, yoksa sadece metin yığını olarak mı gördüğünü hiç düşündünüz mü? 2019'da italyanmutfagi.com için 618 tarif sayfası oluştururken Google Search Console'da rich snippet'ların görünmediğini fark ettiğimde, sorunun Schema.org JSON-LD eksikliği olduğunu anladım. O zamandan beri onlarca WordPress sitesine Schema markup ekledim. Bazılarında Rank Math kullandım, bazılarında tamamen custom kod yazdım, çoğunda ikisini birlikte kullandım. Bu yazıda WordPress'e Schema.org JSON-LD eklemenin her iki yöntemini de, hangi durumlarda hangisinin daha mantıklı olduğunu ve gerçek projelerden örneklerle anlatacağım.
Schema.org nedir, JSON-LD neden önemli gibi temel konuları atlayıp direkt uygulamaya geçiyorum. Eğer bu yazıyı okuyorsanız, zaten Schema'nın ne olduğunu ve neden kullanmanız gerektiğini biliyorsunuzdur.
Rank Math ile Otomatik Schema Ekleme
Rank Math, WordPress'in en popüler SEO eklentilerinden biri ve built-in Schema desteği sunuyor. Yoast SEO'dan farklı olarak ücretsiz versiyonunda bile oldukça güçlü Schema özellikleri var.
Rank Math'i kurduğunuzda otomatik olarak bazı temel Schema türlerini ekler. Organization, Website, WebPage gibi genel yapılar her sayfada otomatik oluşur. Ancak asıl güç, sayfa bazında özel Schema türleri ekleyebilmenizde.
Bir yazı veya sayfa düzenlerken, Rank Math meta kutusunun içinde "Schema" sekmesi görürsünüz. Buradan Article, BlogPosting, Product, Recipe, Event, FAQ gibi onlarca Schema türü seçebilirsiniz. Her tür için ilgili alanları doldurduğunuzda, Rank Math otomatik olarak JSON-LD kodunu sayfanın head bölümüne ekler.
Örneğin bir blog yazısı için Article Schema'sı eklemek istiyorsanız, Schema türünü "Article" olarak seçip başlık, yazar, yayın tarihi, görsel gibi alanları doldurursunuz. Rank Math bu bilgileri alıp şu şekilde bir JSON-LD kodu oluşturur:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Yazı Başlığı",
"author": {
"@type": "Person",
"name": "Miraç Eroğlu"
},
"datePublished": "2024-01-15",
"image": "https://example.com/image.jpg"
}
Rank Math'in güçlü yanı, WordPress'in mevcut verilerini kullanması. Yazı başlığı, yazar adı, yayın tarihi gibi bilgileri otomatik çeker. Siz sadece eksik kalan veya özelleştirmek istediğiniz alanları doldurursunuz.
Rank Math'in Sınırları
Ancak Rank Math'in bazı sınırları var. Özellikle karmaşık veya özel Schema türleri için yetersiz kalabiliyor.
Bir örnek vereyim. doktorbul.com için 79.000 doktor profil sayfası oluştururken, her doktor için Physician Schema'sı eklemem gerekiyordu. Rank Math'te Physician Schema türü yok. Person var ama Physician'a özgü alanlar eksik. Örneğin "medicalSpecialty", "hospitalAffiliation" gibi alanlar Person Schema'sında bulunmuyor.
Bir diğer örnek, italyanmutfagi.com. 618 tarif sayfası için Recipe Schema eklememiz gerekiyordu. Rank Math'te Recipe Schema var ama her tarif için malzemeleri, adımları, pişirme süresini manuel olarak doldurmak imkansızdı. Tarifler bir custom post type'da tutuluyordu ve bu verileri otomatik çekmem gerekiyordu.
Bu gibi durumlarda custom kod yazmak zorunlu hale geliyor.
Custom Kod ile Schema Ekleme
Custom kod ile Schema eklemek, tam kontrol sağlar. WordPress'in herhangi bir verisini kullanabilir, karmaşık Schema türleri oluşturabilir, koşullu mantık ekleyebilirsiniz.
WordPress'e JSON-LD eklemek için wp_head hook'unu kullanırsınız. Temel yapı şu şekilde:
function futia_add_custom_schema() {
if (is_singular('post')) {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'author' => array(
'@type' => 'Person',
'name' => get_the_author()
)
);
echo '<script type="application/ld+json">';
echo json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo '</script>';
}
}
add_action('wp_head', 'futia_add_custom_schema');
Bu kod her tekil yazı sayfasında basit bir Article Schema'sı ekler. Ancak gerçek projelerde çok daha karmaşık yapılar kullanırsınız.
İtalyanmutfagi.com Recipe Schema Örneği
İtalyanmutfagi.com için yazdığım Recipe Schema kodu, custom post type'dan verileri çekiyor ve tam bir Recipe Schema oluşturuyordu:
function futia_recipe_schema() {
if (is_singular('tarif')) {
$malzemeler = get_post_meta(get_the_ID(), 'malzemeler', true);
$adimlar = get_post_meta(get_the_ID(), 'adimlar', true);
$sure = get_post_meta(get_the_ID(), 'pisirme_suresi', true);
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Recipe',
'name' => get_the_title(),
'image' => get_the_post_thumbnail_url(get_the_ID(), 'full'),
'author' => array(
'@type' => 'Person',
'name' => get_the_author()
),
'datePublished' => get_the_date('c'),
'description' => get_the_excerpt(),
'recipeIngredient' => explode("\n", $malzemeler),
'recipeInstructions' => array_map(function($adim) {
return array(
'@type' => 'HowToStep',
'text' => $adim
);
}, explode("\n", $adimlar)),
'totalTime' => 'PT' . $sure . 'M'
);
echo '<script type="application/ld+json">';
echo json_encode($schema, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo '</script>';
}
}
add_action('wp_head', 'futia_recipe_schema');
Bu kod, custom field'lardan malzemeleri ve adımları çekip Schema.org Recipe formatına dönüştürüyor. Her adım bir HowToStep objesi olarak ekleniyor. Pişirme süresi ISO 8601 duration formatına çevriliyor.
Bu yapıyı kurduktan sonra Google Search Console'da rich snippet'lar görünmeye başladı. Tariflerin görsellerinin, puanlarının, pişirme sürelerinin arama sonuçlarında gösterilmesi trafik üzerinde gözle görülür bir etki yarattı.
Rank Math ve Custom Kod Birlikte Kullanımı
Birçok projede Rank Math ve custom kod'u birlikte kullanıyorum. Rank Math temel Schema türlerini hallederken, custom kod özel durumlar için devreye giriyor.
Örneğin kamupersonelhaber.com'da genel sayfalarda Rank Math'in otomatik Schema'sını kullanıyoruz. Ancak ilan sayfalarında custom JobPosting Schema'sı ekliyoruz çünkü ilanlar ilan.gov.tr API'sinden çekiliyor ve bu veriler custom field'larda tutuluyor.
Bu yaklaşımın avantajı, temel SEO yapısını Rank Math'e bırakıp sadece özel durumlar için kod yazmak. Böylece hem zaman kazanıyorsunuz hem de bakım kolaylaşıyor.
Ancak dikkat etmeniz gereken bir nokta var: aynı sayfa için hem Rank Math hem custom kod Schema eklediğinizde, iki ayrı JSON-LD bloğu oluşur. Bu genellikle sorun değil çünkü Google birden fazla Schema'yı okuyabiliyor. Ancak aynı türde iki Schema olmamasına dikkat edin. Örneğin hem Rank Math'ten hem custom koddan Article Schema eklemeyin.
Schema Çakışmalarını Önleme
Schema çakışmalarını önlemek için, custom kod eklerken Rank Math'in o sayfa türü için Schema eklemesini devre dışı bırakabilirsiniz:
add_filter('rank_math/json_ld', function($data, $jsonld) {
if (is_singular('tarif')) {
return array();
}
return $data;
}, 10, 2);
Bu kod, tarif sayfalarında Rank Math'in tüm Schema çıktısını devre dışı bırakır. Böylece sadece sizin custom Schema'nız eklenir.
Alternatif olarak, sadece belirli bir Schema türünü kaldırabilirsiniz:
add_filter('rank_math/json_ld', function($data, $jsonld) {
if (is_singular('tarif') && isset($data['Article'])) {
unset($data['Article']);
}
return $data;
}, 10, 2);
Schema Türlerini Seçme ve Optimizasyon
Doğru Schema türünü seçmek, teknik uygulamadan daha önemli. Google her Schema türünü aynı şekilde değerlendirmiyor ve bazı türler rich snippet'lar için daha uygun.
İçerik Sayfaları İçin
Blog yazıları ve haber içerikleri için Article veya NewsArticle kullanın. BlogPosting de seçenek ama Article daha genel ve güvenli. Her Article Schema'sında mutlaka şunlar olmalı:
- headline (başlık)
- author (yazar, Person veya Organization olarak)
- datePublished (yayın tarihi)
- image (en az 1200px genişliğinde görsel)
- publisher (yayıncı, Organization olarak logo ile)
Publisher kısmı özellikle önemli çünkü Google bu olmadan rich snippet göstermiyor. Logo en az 600x60px olmalı ve organization name ile birlikte verilmeli.
E-ticaret Sayfaları İçin
Ürün sayfalarında Product Schema zorunlu. Ancak sadece temel bilgiler yetmiyor, şunları da eklemelisiniz:
- offers (fiyat, stok durumu, para birimi)
- aggregateRating (ürün puanı, eğer varsa)
- review (kullanıcı yorumları, eğer varsa)
- brand (marka)
- sku veya gtin (ürün kodu)
Diolivo.com.tr'de WooCommerce ürünleri için Product Schema eklerken, stok durumunu dinamik olarak güncelliyoruz. Ürün stokta yoksa "OutOfStock", varsa "InStock" olarak işaretleniyor. Bu, Google Shopping'de ürünlerin doğru gösterilmesi için kritik.
Yerel İşletmeler İçin
Fiziksel konumu olan işletmeler için LocalBusiness Schema şart. Doktor, avukat, restoran gibi sektörlerde özel alt türler var: Physician, Attorney, Restaurant.
Doktorbul.com'da her doktor profili için Physician Schema kullandık. Sadece Person değil, çünkü Physician'da medicalSpecialty, hospitalAffiliation gibi alanlara ihtiyacımız vardı:
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Physician',
'name' => $doktor_adi,
'medicalSpecialty' => $uzmanlik,
'address' => array(
'@type' => 'PostalAddress',
'addressLocality' => $sehir,
'addressRegion' => $ilce
),
'telephone' => $telefon
);
79.000 profil için bu Schema'yı otomatik oluşturmak, manuel girişe göre hem hatasız hem de sürdürülebilir oldu.
Schema Hatalarını Test Etme ve Düzeltme
Schema ekledikten sonra mutlaka test edin. Google'ın Rich Results Test aracı en güvenilir yöntem: https://search.google.com/test/rich-results
Sayfanızın URL'sini girin, Google hem Schema'yı okur hem de hangi rich snippet'ların gösterilebileceğini söyler. Hata varsa detaylı açıklama verir.
Sık karşılaşılan hatalar:
- Eksik zorunlu alanlar: Her Schema türünün zorunlu alanları var. Örneğin Recipe'de recipeIngredient zorunlu.
- Yanlış veri formatı: Tarihler ISO 8601 formatında olmalı (2024-01-15T10:30:00+00:00). Süreler PT formatında (PT30M = 30 dakika).
- Geçersiz URL'ler: Image, url gibi alanlar tam URL olmalı, relative path kabul edilmiyor.
- Tutarsız veriler: Schema'daki bilgiler sayfadaki görünür içerikle uyuşmalı. Örneğin Schema'da 5 yıldız yazıp sayfada yorum yoksa, Google bunu manipülasyon olarak görebilir.
Google Search Console'da "Enhancements" bölümünde de Schema hatalarını görebilirsiniz. Ancak bu raporlar günler sonra güncellenir, anlık test için Rich Results Test kullanın.
Dinamik Schema Oluşturma ve Otomasyon
Büyük sitelerde her sayfa için manuel Schema eklemek imkansız. Otomasyon şart.
Memuratamalari.com'da günde 50+ ilan yayınlanıyor. Her ilan için JobPosting Schema otomatik oluşturuluyor. İlan verileri API'den çekildiği için, Schema da aynı veriyi kullanıyor:
function futia_job_posting_schema($ilan_id) {
$ilan = get_ilan_from_api($ilan_id);
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'JobPosting',
'title' => $ilan['baslik'],
'description' => $ilan['aciklama'],
'datePosted' => date('c', strtotime($ilan['tarih'])),
'hiringOrganization' => array(
'@type' => 'Organization',
'name' => $ilan['kurum']
),
'jobLocation' => array(
'@type' => 'Place',
'address' => array(
'@type' => 'PostalAddress',
'addressLocality' => $ilan['sehir'],
'addressCountry' => 'TR'
)
),
'employmentType' => 'FULL_TIME'
);
return $schema;
}
Bu fonksiyon her ilan sayfası yüklendiğinde çalışır ve o ilanın verilerini kullanarak Schema oluşturur. Manuel müdahale yok, hata riski minimal.
Benzer şekilde, futia.net'te 3 ayda 2000+ video için VideoObject Schema'sı otomatik üretiliyor. Her video için süre, thumbnail, yüklenme tarihi gibi bilgiler YouTube API'sinden çekiliyor ve Schema'ya ekleniyor.
Çok Sayfalı İçerikler ve Schema Dizileri
Bazı içerikler tek sayfada bitmiyor. Örneğin bir rehber 5 sayfaya bölünmüş olabilir. Bu durumda her sayfa için ayrı Schema mı, yoksa bir dizi mi kullanmalısınız?
Google'ın önerisi, HowTo veya Recipe gibi adım adım içerikler için tek bir Schema kullanıp içinde adımları listelemek. Ancak her adım ayrı sayfadaysa, her sayfada o adıma özgü bir HowToStep ekleyip, ana sayfada tüm adımları içeren bir HowTo Schema kullanabilirsiniz.
Alternatif olarak, ItemList Schema'sı ile sayfaları listeleyebilirsiniz:
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://example.com/rehber-sayfa-1"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://example.com/rehber-sayfa-2"
}
]
}
Ancak bu yaklaşım rich snippet'lar için pek etkili değil. Mümkünse içeriği tek sayfada tutup, Schema'yı da tek seferde vermek daha iyi.
FAQ Schema ve Accordion Blokları
FAQ Schema, arama sonuçlarında genişletilebilir soru-cevap kutuları gösterir. Özellikle bilgilendirici içerikler için güçlü bir araç.
Rank Math'te FAQ block'u var, Gutenberg editöründe kullanabilirsiniz. Her soru-cevap çifti otomatik olarak FAQ Schema'sına eklenir. Ancak custom kod ile daha esnek yapılar oluşturabilirsiniz.
Örneğin, ACF ile oluşturulmuş repeater field'dan FAQ'ları çekip Schema'ya eklemek:
function futia_faq_schema() {
if (have_rows('faq')) {
$faqs = array();
while (have_rows('faq')) {
the_row();
$faqs[] = array(
'@type' => 'Question',
'name' => get_sub_field('soru'),
'acceptedAnswer' => array(
'@type' => 'Answer',
'text' => get_sub_field('cevap')
)
);
}
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'FAQPage',
'mainEntity' => $faqs
);
echo '<script type="application/ld+json">';
echo json_encode($schema, JSON_UNESCAPED_UNICODE);
echo '</script>';
}
}
add_action('wp_head', 'futia_faq_schema');
FAQ Schema kullanırken dikkat edilmesi gereken noktalar:
- Her soru-cevap çifti sayfada görünür olmalı. Gizli içerik kabul edilmiyor.
- Cevaplar en az 40-50 karakter olmalı, tek kelime cevaplar geçersiz.
- Reklam veya satış odaklı içerik FAQ olarak işaretlenirse, Google manuel işlem uygulayabilir.
Schema.org Güncellemeleri ve Gelecek
Schema.org sürekli güncelleniyor. Yeni türler ekleniyor, mevcut türlere yeni alanlar geliyor. Örneğin 2023'te SpecialAnnouncement türü COVID-19 için eklenmişti, şimdi genel duyurular için kullanılıyor.
Google'ın hangi Schema türlerini desteklediğini takip etmek önemli. Schema.org'da bir tür olması, Google'ın onu rich snippet'larda kullanacağı anlamına gelmiyor. Google'ın resmi dokümantasyonunu kontrol edin: https://developers.google.com/search/docs/appearance/structured-data/search-gallery
Yapay zeka araçları da Schema'yı kullanmaya başladı. ChatGPT, Perplexity gibi araçlar web sayfalarından bilgi çekerken Schema'yı okuyor. Düzgün Schema'nız varsa, AI'ların sitenizi kaynak olarak kullanma olasılığı artıyor.
Örneğin doktorbul.com'daki doktor profilleri, Physician Schema sayesinde AI asistanlar tarafından doğru şekilde yorumlanıyor. "İstanbul'da kardiyolog" diye sorulduğunda, AI Schema'dan uzmanlık alanını, lokasyonu okuyabiliyor.
Bu trend güçlenecek. Schema sadece Google için değil, tüm dijital ekosistem için önemli hale geliyor.
WordPress sitenize Schema eklemek, teknik bir gereklilik değil, içeriğinizi makinelerin anlayabileceği bir dile çevirmek. Rank Math temel ihtiyaçlar için yeterli, ancak özel durumlar ve otomasyon için custom kod şart. İkisini birlikte kullanarak hem hızlı kurulum hem de tam kontrol sağlayabilirsiniz.
Ben her projede Schema'yı baştan planlıyorum, içerik yapısına göre hangi türlerin gerektiğini belirliyorum. Sonra Rank Math ile temel yapıyı kuruyorum, özel durumlar için custom kod yazıyorum. Bu yaklaşım, hem zaman kazandırıyor hem de uzun vadede bakım kolaylığı sağlıyor.
Eğer sitenize Schema eklerken takıldığınız bir nokta varsa veya custom Schema çözümlerine ihtiyacınız varsa, benimle WhatsApp üzerinden iletişime geçebilirsiniz: +90 532 491 17 05. FUTIA olarak WordPress sitelerine özel Schema implementasyonları yapıyoruz, özellikle büyük ölçekli ve programatik SEO projelerinde.
Sıkça Sorulanlar
Rank Math kullanıyorum ama Schema hatası alıyorum, ne yapmalıyım?
Önce Google Rich Results Test ile tam hatayı görün. Genellikle eksik zorunlu alan veya yanlış format sorunu olur. Rank Math'in doldurduğunuz tüm alanları kontrol edin, özellikle görsel URL'lerinin tam yol olduğundan emin olun. Eğer hata devam ederse, o sayfa türü için Rank Math Schema'sını devre dışı bırakıp custom kod yazmanız gerekebilir. Bazı özel Schema türlerinde Rank Math yetersiz kalıyor.
Aynı sayfada birden fazla Schema türü kullanabilir miyim?
Evet, kullanabilirsiniz ve çoğu durumda önerilir. Örneğin bir blog yazısında hem Article hem de BreadcrumbList Schema'sı olabilir. Hatta aynı yazıda FAQ Schema da ekleyebilirsiniz. Google birden fazla Schema'yı okur ve uygun olanları rich snippet'larda kullanır. Ancak aynı türde iki Schema eklemeyin, örneğin iki ayrı Article Schema çakışma yaratır. Rank Math ve custom kod birlikte kullanıyorsanız, aynı türü iki kez eklememek için filtre kullanın.
Custom Schema kodunu nereye eklemeliyim, functions.php'ye mi?
Functions.php'ye ekleyebilirsiniz ama önerilmez, tema güncellemelerinde kaybolur. En iyi yöntem, site-specific plugin oluşturmak. wp-content/plugins/ altında bir klasör açın, içine php dosyası koyun, plugin header'ı ekleyin. Böylece tema bağımsız çalışır ve yönetimi kolay olur. Alternatif olarak Code Snippets gibi bir eklenti kullanabilirsiniz, ancak ben kendi pluginimi tercih ediyorum çünkü versiyon kontrolü yapabiliyorum.
Schema ekledim ama rich snippet'lar görünmüyor, ne kadar beklemeliyim?
Google'ın Schema'yı işlemesi birkaç gün alabilir. Önce Google Search Console'da sayfanın index'lendiğinden emin olun. Sonra Rich Results Test ile Schema'nın hatasız olduğunu doğrulayın. Eğer her şey doğruysa, yine de rich snippet gösterilmeyebilir çünkü Google her zaman gösterme garantisi vermiyor. Özellikle düşük otoriteli sitelerde rich snippet'lar daha az görünür. Schema'nızı doğru ekleyin, ardından sabırlı olun. Bazı durumlarda aylar sürebilir.
E-ticaret sitem için Product Schema yeterli mi, başka ne eklemeliyim?
Product Schema temel ama yeterli değil. Mutlaka offers (fiyat ve stok) ekleyin, yoksa rich snippet çıkmaz. AggregateRating eklerseniz yıldızlar görünür, bu tıklama oranını artırır. Review eklemek de faydalı ama sahte yorum eklerseniz manuel işlem yersiniz. Breadcrumb Schema da önemli, arama sonuçlarında kategori yolunu gösterir. Organization Schema ile marka bilgisi ekleyin. Tüm bunları kombine ettiğinizde, ürün sayfalarınız arama sonuçlarında çok daha zengin görünür.
Bu yazıdaki tekniklerden birini uygulamak ister misiniz? Kısa bir form doldurun, 48 saat içinde ücretsiz ön inceleme raporu mailinize düşsün.