Schema.org JSON-LD WordPress'e Nasıl Eklenir? Rank Math + Custom Kod
WordPress sitenize Schema markup eklemek Google'ın içeriğinizi anlamasını kolaylaştırır. Rank Math ile otomatik, custom kod ile tam kontrol: hangisi işinize yarar?

WordPress sitenizde arama motorlarının içeriğinizi tam olarak anlamasını istiyorsanız, Schema.org markup'ı eklemek zorundasınız. Google, tarif mi, makale mi, ürün mü, etkinlik mi anlamak için HTML'e bakmaz, yapılandırılmış veriye bakar. Ben 6 yıl boyunca onlarca Türk markasına SEO danışmanlığı verirken gördüm: Schema ekleyen siteler rich snippet alıyor, eklemeyenler sıradan mavi linkle kalıyor. Şu an FUTIA'da italyanmutfagi.com için 618 tarif sayfasına otomatik Recipe schema ekliyoruz, Google hepsini yıldızlı snippet olarak gösteriyor. Bu yazıda size iki yöntem göstereceğim: Rank Math gibi eklentilerle hızlı kurulum ve custom JSON-LD koduyla tam kontrol. Hangisini seçeceğiniz, sitenizin yapısına ve ne kadar özelleştirme istediğinize bağlı. İkisini de aynı sitede kullanabilirsiniz, ben çoğu projede öyle yapıyorum.
Schema.org ve JSON-LD Nedir, Neden WordPress'te Kullanmalısınız?
Schema.org, Google, Microsoft, Yahoo ve Yandex'in 2011'de birlikte oluşturduğu bir standart. Amaç basit: web sayfalarındaki bilgileri makinelerin anlayabileceği şekilde etiketlemek. Örneğin, bir tarif yazısında "200 gram un" yazıyorsunuz. Google bunu normal metin olarak görür, ama Recipe schema ile "recipeIngredient": "200 gram un" şeklinde etiketlerseniz, Google bunun tarif malzemesi olduğunu anlar. JSON-LD (JavaScript Object Notation for Linked Data) ise bu yapılandırılmış veriyi sayfanıza eklemenin en temiz yöntemi. Sayfanın <head> veya <body> bölümüne bir <script type="application/ld+json"> etiketi içinde JSON formatında veri koyuyorsunuz. Google bu veriyi okuyup zengin sonuçlar (rich snippets) gösterebiliyor.
WordPress'te Schema kullanmanın üç büyük faydası var. Birincisi, arama sonuçlarında görünürlük artışı. Yıldızlı değerlendirmeler, fiyat bilgisi, yazar fotoğrafı, yayın tarihi gibi ekstra bilgiler gösterilince tıklanma oranı (CTR) %20-30 artabiliyor. İkincisi, Google'ın içeriğinizi doğru kategorize etmesi. Özellikle haber, etkinlik, iş ilanı gibi zamana duyarlı içeriklerde kritik. Üçüncüsü, sesli asistan ve özel arama sonuçlarına girebilme. "Bugün İstanbul'da hangi konserler var?" diye sorulduğunda, Event schema'sı olan siteler öne çıkıyor. Ben kamupersonelhaber.com'da JobPosting schema'sı ekledikten sonra "kamu ilanları" aramasında özel kart görünümü almaya başladık, trafik 3 hafta içinde %40 arttı.
JSON-LD'nin alternatifi Microdata ve RDFa var, ama Google resmi olarak JSON-LD'yi öneriyor. Çünkü HTML'e karışmıyor, ayrı bir script bloğu olarak duruyor. Yani tasarımınızı bozmadan, temadan bağımsız çalışıyor. WordPress için de en pratik yöntem bu.
Rank Math ile Otomatik Schema Ekleme (Kodsuz Yöntem)
Rank Math, WordPress'teki en popüler SEO eklentilerinden biri ve built-in Schema desteği sunuyor. Yoast SEO'nun ücretli versiyonunda olan özelliklerin çoğu Rank Math'te ücretsiz. Ben 2020'den beri Rank Math kullanıyorum, çünkü Schema yönetimi çok daha esnek. Kurulum basit: WordPress admin panelinden Plugins > Add New > "Rank Math" arayın, kurun, Setup Wizard'ı takip edin. İlk adımda Google Search Console'unuzu bağlayın, sonra site tipinizi seçin (blog, e-ticaret, portföy vb.). Wizard, otomatik olarak Organization veya Person schema'sını ekleyecek.
Rank Math'in Schema modülü varsayılan olarak açık geliyor. Rank Math > Dashboard > Schema Markup sekmesinden kontrol edebilirsiniz. Burada "Default Schema Type" seçeneği var, genelde "Article" veya "BlogPosting" olarak bırakabilirsiniz. Her yazı için özel schema tipi seçmek isterseniz, yazı editöründe Rank Math meta kutusuna inin, "Schema" sekmesine tıklayın. Burada 20'den fazla schema tipi var: Article, Recipe, Product, Event, Course, FAQ, HowTo, Review, Video, LocalBusiness, JobPosting ve daha fazlası. Örneğin bir tarif yazısı yazıyorsanız "Recipe" seçin, Rank Math size malzemeler, pişirme süresi, kalori, yıldız puanı gibi alanlar açacak. Bunları doldurduğunuzda, sayfanın <head> kısmına otomatik olarak Recipe schema'sı eklenecek.
Rank Math'in bir avantajı, FAQ ve HowTo schema'larını Gutenberg blokları olarak sunması. Yazınıza FAQ bloğu eklediğinizde, hem sayfada görsel olarak accordion şeklinde gösterilir, hem de otomatik FAQPage schema'sı oluşturulur. Google bu FAQ'ları arama sonuçlarında genişletilebilir liste olarak gösterebilir. Ben diolivo.com.tr'de ürün sayfalarına FAQ blokları ekledim, "zeytinyağı nasıl saklanır" gibi sorularda site direkt cevap snippet'i aldı, trafik %15 arttı.
Rank Math'in sınırları da var. Örneğin, çok spesifik bir Schema tipi kullanmak istiyorsanız (örneğin SoftwareApplication, MedicalCondition, Dataset), Rank Math'te hazır alan olmayabilir. Ayrıca, programatik olarak binlerce sayfaya farklı Schema değerleri enjekte etmek zor. Rank Math API'si var ama dokümantasyonu zayıf. Bu durumda custom kod gerekiyor.
Custom JSON-LD Kodu ile Manuel Schema Ekleme
Tam kontrol istiyorsanız, JSON-LD kodunu doğrudan WordPress'e enjekte edebilirsiniz. Bu yöntem, özellikle programatik SEO projelerinde veya standart dışı Schema tipleri kullanırken kritik. Ben FUTIA projelerinde çoğunlukla custom kod kullanıyorum, çünkü API'lerden veri çekip dinamik Schema oluşturmam gerekiyor. Örneğin doktorbul.com'da 79.000 doktor profilinin her biri için Physician schema'sı oluşturuyoruz, veritabanından çektiğimiz bilgilerle (uzmanlık, çalıştığı hastane, mezuniyet yılı) JSON-LD'yi render ediyoruz.
İlk adım, Schema.org'da hangi tipi kullanacağınıza karar vermek. schema.org sitesine gidin, arama kutusuna "Recipe" veya "Article" yazın. Her Schema tipinin sayfasında hangi özelliklerin (properties) zorunlu, hangilerinin önerilen olduğunu göreceksiniz. Örneğin Recipe için zorunlu: name, image. Önerilen: author, datePublished, description, prepTime, cookTime, recipeIngredient, recipeInstructions, aggregateRating. Google'ın Rich Results Test aracına (search.google.com/test/rich-results) kodu yapıştırıp test edebilirsiniz.
JSON-LD kodunu WordPress'e eklemenin üç yolu var. Birincisi, temanızın functions.php dosyasına wp_head veya wp_footer hook'u ile eklemek. İkincisi, Code Snippets gibi bir eklenti kullanmak (daha güvenli, tema güncellemelerinde kod kaybolmaz). Üçüncüsü, özel bir plugin yazmak (büyük projelerde tercihim bu). Ben size Code Snippets yöntemini göstereyim, en pratik.
Code Snippets eklentisini kurun (ücretsiz). Snippets > Add New'e tıklayın. Başlık: "Custom Article Schema". Kod tipini "PHP" seçin. Aşağıdaki kodu yapıştırın:
function futia_add_article_schema() {
if (is_single()) {
global $post;
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'image' => get_the_post_thumbnail_url($post->ID, 'full'),
'datePublished' => get_the_date('c'),
'dateModified' => get_the_modified_date('c'),
'author' => array(
'@type' => 'Person',
'name' => get_the_author(),
'url' => get_author_posts_url(get_the_author_meta('ID'))
),
'publisher' => array(
'@type' => 'Organization',
'name' => get_bloginfo('name'),
'logo' => array(
'@type' => 'ImageObject',
'url' => 'https://futia.io/logo.png'
)
),
'description' => get_the_excerpt()
);
echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . '</script>';
}
}
add_action('wp_head', 'futia_add_article_schema');
Bu kod, her tekil yazı sayfasında (is_single) Article schema'sı ekler. json_encode fonksiyonunda JSON_UNESCAPED_UNICODE bayrağını kullanmayı unutmayın, yoksa Türkçe karakterler \u00e7 gibi encode edilir. Kodu kaydedip aktif edin, sonra sitenizin herhangi bir yazısının kaynak kodunu görüntüleyin (Ctrl+U), <head> içinde JSON-LD bloğunu göreceksiniz. Rich Results Test'e URL'yi yapıştırıp doğrulayın.
Daha karmaşık senaryolar için, custom post type'lara göre farklı Schema tipleri ekleyebilirsiniz. Örneğin, "etkinlik" post type'ı için Event schema'sı:
if (get_post_type() === 'etkinlik') {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Event',
'name' => get_the_title(),
'startDate' => get_post_meta($post->ID, 'etkinlik_tarihi', true),
'location' => array(
'@type' => 'Place',
'name' => get_post_meta($post->ID, 'mekan_adi', true),
'address' => get_post_meta($post->ID, 'mekan_adres', true)
),
'image' => get_the_post_thumbnail_url($post->ID, 'full'),
'description' => get_the_excerpt()
);
}
Burada get_post_meta ile custom field'lardan tarih, mekan bilgisi çekiyoruz. Eğer Advanced Custom Fields (ACF) kullanıyorsanız, get_field('etkinlik_tarihi') şeklinde çekersiniz. Ben italyanmutfagi.com'da ACF ile tarif malzemelerini array olarak tutuyorum, JSON-LD'de recipeIngredient dizisine dönüştürüyorum.
Rank Math ve Custom Kod Birlikte Kullanma (Hibrit Yaklaşım)
Birçok projede Rank Math'i temel Schema'lar için (Article, Organization, BreadcrumbList), custom kodu ise spesifik ihtiyaçlar için kullanıyorum. Örneğin memuratamalari.com'da Rank Math Article schema'sını varsayılan olarak bıraktım, ama ilan sayfalarına JobPosting schema'sını custom kod ile ekledim. Rank Math JobPosting desteklemiyor, bu yüzden kendi kodumuzu yazdık. İlan detaylarını ilan.gov.tr API'sinden çekip, her ilan için dinamik JobPosting schema'sı oluşturuyoruz. Sonuç: Google for Jobs'ta listelendik, organik trafik 40.400/ay seviyesine çıktı.
Hibrit yaklaşımda dikkat edilmesi gereken nokta: aynı Schema tipini iki kez eklemeyin. Örneğin Rank Math zaten Article schema'sı ekliyorsa, custom kodla bir tane daha Article eklemeyin. Google duplicate schema gördüğünde karışabilir. Bunun yerine, Rank Math'te o sayfa için Schema'yı devre dışı bırakın (yazı editöründe Rank Math > Schema > "Disable Schema" seçeneği var) veya custom kodda if (!function_exists('rank_math')) kontrolü yapın.
Bir diğer strateji, Rank Math'i global Schema'lar için (Organization, WebSite, BreadcrumbList), custom kodu sayfa bazlı Schema'lar için (Recipe, Product, Event) kullanmak. Organization schema'sı genelde tüm sitelerde aynı, bir kere Rank Math'te ayarlarsınız (Rank Math > Schema > Organization sekmesi), her sayfaya otomatik eklenir. Ama Recipe schema'sı her tarif için farklı malzeme, süre içerir, onu custom kodla dinamik oluşturursunuz.
Ben FUTIA'da müşterilere şu şablonu öneriyorum: e-ticaret siteleri için Rank Math + WooCommerce entegrasyonu (Product schema otomatik), blog siteleri için Rank Math + custom FAQ/HowTo blokları, içerik portalları için tamamen custom kod (çünkü veri API'lerden geliyor). diolivo.com.tr'de WooCommerce Product schema'sını Rank Math hallediyor, ama sepet kurtarma e-postalarına özel Offer schema'sı eklemek için custom kod yazdık.
Sık Yapılan Hatalar ve Schema Doğrulama
Schema eklerken en sık karşılaştığım hatalar: zorunlu alanları eksik bırakmak, yanlış veri tipi kullanmak (örneğin tarih string yerine ISO 8601 formatında olmalı), image URL'sinin kırık olması, aggregateRating eklenmişse ratingCount'un 0 olması (Google minimum 1 gerektirir). Google Search Console'da "Enhancements" bölümünde Schema hatalarını görebilirsiniz. Örneğin "Missing field 'image'" uyarısı alırsanız, her yazıya featured image eklemeniz gerekiyor.
Rich Results Test (search.google.com/test/rich-results) ve Schema Markup Validator (validator.schema.org) kullanın. İlki Google'ın kendi aracı, hangi zengin sonuçların çıkabileceğini gösterir. İkincisi Schema.org'un resmi doğrulayıcısı, syntax hatalarını yakalar. Ben her yeni Schema tipi ekledikten sonra mutlaka her iki araçta da test ediyorum. Örneğin italyanmutfagi.com'da Recipe schema'larını test ederken, "recipeInstructions" alanını string olarak vermişiz, ama Google HowToStep dizisi bekliyor. Düzelttikten sonra rich snippet çıkmaya başladı.
Bir diğer yaygın hata, Schema'yı JavaScript ile render etmek. Eğer React veya Vue ile single-page application yapıyorsanız, Schema'yı client-side render ederseniz Google görmeyebilir. Server-side rendering (SSR) veya pre-rendering kullanın. WordPress'te bu sorun genelde yok, çünkü PHP server-side çalışıyor. Ama headless WordPress + Next.js gibi modern stack'lerde dikkat edin. Ben futia.net'i Next.js ile yaptım, Schema'ları getStaticProps içinde oluşturup <Head> component'ine koyuyorum.
Bazı Schema tipleri (örneğin Review, AggregateRating) kötüye kullanım riski taşıyor. Kendi ürününüze 5 yıldız verip Review schema'sı eklerseniz, Google "self-serving review" olarak işaretleyip zengin sonuçları kaldırabilir. Google'ın Spam Policies'ini okuyun. Ben müşterilere gerçek kullanıcı yorumlarını Schema'ya eklemeyi öneriyorum, sahte değerlendirme asla.
Programatik SEO'da Schema Otomasyonu
FUTIA'nın uzmanlık alanlarından biri programatik SEO, yani binlerce sayfayı otomatik oluşturup her birine özel Schema eklemek. doktorbul.com'da 79.000 doktor profili var, her biri için Physician schema'sı oluşturuyoruz. Veritabanında doktorun adı, fotoğrafı, uzmanlık alanı, çalıştığı hastane, iletişim bilgileri var. PHP ile bu bilgileri çekip JSON-LD'ye dönüştürüyoruz. Sayfa şablonu şöyle:
$doktor = get_doktor_data($doktor_id); // Veritabanından çek
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'Physician',
'name' => $doktor['ad_soyad'],
'image' => $doktor['foto_url'],
'medicalSpecialty' => $doktor['uzmanlik'],
'worksFor' => array(
'@type' => 'Hospital',
'name' => $doktor['hastane_adi']
),
'address' => array(
'@type' => 'PostalAddress',
'addressLocality' => $doktor['sehir']
)
);
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
Bu yaklaşımla, her doktor sayfası Google'da "Dr. X, Kardiyoloji Uzmanı, Y Hastanesi" şeklinde zengin snippet alıyor. Kullanıcı "istanbul kardiyolog" diye aradığında, Schema sayesinde Google hangi doktorların İstanbul'da olduğunu biliyor, onları öne çıkarıyor.
italyanmutfagi.com'da 618 tarif sayfası var, hepsi otomatik oluşturuldu. Her tarif için Recipe schema'sı, malzemeler ve talimatlar veritabanından geliyor. Bir de aggregateRating ekliyoruz (kullanıcı oyları gerçek, Disqus yorumlarından çekiyoruz). Sonuç: "mantarlı risotto tarifi" aramasında yıldızlı snippet, tıklanma oranı %35 arttı.
Programatik SEO'da Schema otomasyonu yaparken, veri kalitesine dikkat edin. Eksik veya yanlış veri Schema'ya yansırsa, Google güvenmez. Ben her zaman fallback değerler koyuyorum. Örneğin, tarif fotoğrafı yoksa placeholder image URL'si, pişirme süresi girilmemişse "PT30M" (30 dakika) varsayılan değer. Ama çok fazla varsayılan kullanırsanız, Schema'nın anlamı kalmaz. Veri kalitesi %80'in altına düşmesin.
FUTIA ile Schema Otomasyon Hizmeti
Ben Miraç, FUTIA'nın kurucusuyum. 6 yıl sosyal medya pazarlama, 2 yıl AI otomasyon deneyimim var, Hacettepe mezunuyum. Hollanda'dan çalışıyorum ama Türk markalarına özel hizmet veriyorum: site + otomasyon + aylık bakım paketi. Schema.org konusunda derin deneyimim var, çünkü FUTIA projelerinin hepsi programatik SEO içeriyor. doktorbul.com, italyanmutfagi.com, kamupersonelhaber.com, memuratamalari.com, diolivo.com.tr gibi canlı projelerde binlerce sayfa için dinamik Schema oluşturdum. Sadece Schema eklemiyoruz, API entegrasyonu, içerik otomasyonu, Claude Haiku ile metin üretimi, CartBouncy sepet kurtarma gibi çözümler de sunuyoruz.
Eğer WordPress sitenize Schema eklemek istiyorsanız ama teknik bilginiz yoksa, veya binlerce sayfaya programatik Schema enjekte etmek istiyorsanız, benimle iletişime geçin. WhatsApp: +90 532 491 17 05 (direkt mesaj atabilirsiniz, genelde 2-3 saat içinde cevap veriyorum). E-mail: info@futia.net. Website: https://futia.io, blog yazılarımı okuyabilirsiniz: https://futia.io/blog. İlk 30 dakika danışmanlık ücretsiz, sitenizi analiz edip hangi Schema tiplerinin işinize yarayacağını söylerim. FUTIA'nın farkı, sadece kurulum değil, aylık bakım ve sürekli optimizasyon sunması. Schema'lar Google'ın gerekliliklerine göre değişiyor, biz sizi güncel tutuyoruz.
Sıkça Sorulanlar
Rank Math ve Yoast SEO'nun Schema desteği arasında fark var mı?
Evet, önemli farklar var. Rank Math'te 20'den fazla Schema tipi ücretsiz sürümde mevcut (Recipe, Event, Product, Course, FAQ, HowTo vb.), Yoast SEO'da bu özellikler çoğunlukla Premium versiyonda. Rank Math'in Schema editörü daha esnek, her yazı için farklı Schema tipi seçip özel alanları doldurabiliyorsunuz. Yoast daha basit ama kısıtlı. Ben 2020'den beri Rank Math kullanıyorum, özellikle FAQ ve HowTo blokları çok işlevsel. Ayrıca Rank Math'in Google Search Console entegrasyonu daha iyi, Schema hatalarını doğrudan panelde görebiliyorsunuz.
Custom JSON-LD kodu eklerken functions.php mu yoksa plugin mi kullanmalıyım?
Plugin kullanmanızı şiddetle tavsiye ederim, özellikle Code Snippets gibi ücretsiz bir eklenti ile. functions.php'ye kod eklerseniz, temayı güncellediğinizde kodunuz silinir (child theme kullanmıyorsanız). Code Snippets ile kodlarınız veritabanında saklanır, tema bağımsız çalışır. Ayrıca kodları aktif/pasif yapabilir, hata durumunda otomatik devre dışı kalır. Ben FUTIA projelerinde büyük ölçekli özelleştirmeler için özel plugin yazıyorum, ama küçük işler için Code Snippets yeterli. Tek dezavantajı, çok fazla snippet eklerseniz yönetimi zorlaşabilir, o zaman custom plugin daha mantıklı.
Schema ekledikten sonra Google'da zengin sonuç ne zaman görünür?
Garantili bir süre yok, ama genelde 1-4 hafta arası. Schema'yı ekledikten sonra Google Search Console'da URL'yi manuel olarak indekslemeye göndermeniz süreci hızlandırabilir (URL Inspection > Request Indexing). Google, Schema'yı gördükten sonra sitenizin otoritesine, içerik kalitesine, kullanıcı sinyallerine bakarak zengin sonuç gösterip göstermemeye karar verir. Düşük kaliteli içerik veya spam şüphesi varsa Schema olsa bile rich snippet vermez. Ben italyanmutfagi.com'da Recipe schema'larını ekledikten 2 hafta sonra yıldızlı snippet'ler çıkmaya başladı. Sabırlı olun, ama 1 ay sonra hala görünmüyorsa Rich Results Test ile hataya bakın veya Google Search Console'daki Enhancements raporunu kontrol edin.
Birden fazla Schema tipini aynı sayfada kullanabilir miyim?
Evet, hatta çoğu zaman önerilir. Örneğin bir tarif yazısında hem Article hem Recipe schema'sı olabilir. Veya bir etkinlik sayfasında Event + BreadcrumbList + Organization schema'ları birlikte bulunabilir. Google, aynı sayfada birden fazla Schema tipini destekliyor, hatta bazı durumlarda (örneğin FAQ + Article) ikisini de zengin sonuçlarda gösterebiliyor. Önemli olan, her Schema'nın kendi JSON-LD bloğunda olması veya tek bir bloğun içinde @graph array'i kullanmanız. Ben genelde ayrı bloklar halinde ekliyorum, daha temiz oluyor. Ama aynı tip Schema'yı (örneğin iki Article) iki kere eklemeyin, duplicate hatası alırsınız.
E-ticaret sitesinde Product schema'sı Rank Math ile mi yoksa WooCommerce ile mi eklenmeli?
WooCommerce zaten Product schema'sı ekliyor, ama çok basit düzeyde (name, price, image). Rank Math'in WooCommerce entegrasyonu daha zengin: aggregateRating, review, availability, brand, sku gibi alanları otomatik doldurur. Ben diolivo.com.tr'de Rank Math + WooCommerce kombinasyonunu kullandım, ürün sayfalarına detaylı Product schema'sı eklendi, Google Shopping'de listelendik. Ayar için Rank Math > WooCommerce sekmesine gidin, "Add Product Schema" seçeneğini aktif edin. Eğer çok özel ihtiyaçlarınız varsa (örneğin dinamik fiyat güncellemeleri, stok durumu API'den geliyorsa), custom kod ile WooCommerce hook'larını kullanarak Schema'yı override edebilirsiniz. woocommerce_structured_data_product hook'una bakın.
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.