Sorudan-doğrudan-cevap (Hızlı Yanıt)
JSON-LD (JavaScript Object Notation for Linked Data), haber sitesi içeriğini Google News, ChatGPT, Perplexity, Gemini ve Bing Copilot gibi modern arama ve cevap motorlarına makine-okunur biçimde anlatan, Schema.org tanımlı JSON tabanlı structured data formatıdır. 2026 itibarıyla NewsArticle, FAQPage, Speakable, BreadcrumbList, LiveBlogPosting ve ItemList olmadan haber siteleri Top Stories carousel'a giremez, People Also Ask kutucuklarında görünmez ve generative AI cevaplarında kaynak olarak gösterilmez. Google 2014'ten bu yana JSON-LD'yi diğer iki structured data formatı (Microdata, RDFa) yerine resmi olarak önerir; çünkü içerik HTML'den ayrı bir <script type="application/ld+json"> bloğunda tutulur, sayfa render maliyetini artırmaz ve deeply nested entity graph'larını @graph anahtarıyla destekler. 30 yıllık Türk pazar SEO tecrübemde, 2024 sonrası JSON-LD altyapısı zayıf olan haber portallarının organik trafiği ortalama %42 düşerken, 22+ @type kullanan AI-native portalların 3 ay içinde Top Stories'e girdiğini gözlemledim. Bu rehber, 14 ana başlık ve 5+ tam JSON-LD kod örneği ile haber sitesi mimarisinde Schema.org katmanını sıfırdan inşa etmek isteyen mühendisler ve content director'lar için yazıldı.
Bilgilendirme: Bu teknik rehber, 30 yıllık Türk dijital medya pazar SEO/AEO/GEO uzmanlık birikimi ile K-On Tech mühendislik ekibinin Schema.org production deployment tecrübesi birleştirilerek hazırlandı. Bütün kod örnekleri Schema.org public spec'lerine uyumludur; her portalın CMS yapısı farklıdır, kendi senaryonuz için schema audit istemek için demo görüşmesi talep edebilirsiniz. Pricing referansı: plan ücretleri Starter ₺20K, Pro ₺50K, Pro+ ₺85K, Enterprise T1 ₺175K, T2 ₺350K; Pro Pilot tarifesi ₺30K/ay — yıllık peşin ödemede 12 ay sabit fiyat garantisi + ek %15 indirim (kontenjan ilk 5-10 müşteri ile sınırlı). Setup Pro ₺50.000 tek seferlik kurulum + schema migration paketi.
1. JSON-LD Nedir? — Schema.org Foundation
JSON-LD (JavaScript Object Notation for Linked Data), W3C tarafından 2014'te resmî standart olarak yayımlanan, JSON syntax'ını Linked Data prensipleriyle birleştiren bir veri serileştirme formatıdır. Haber yayıncılığında bu format, sayfa içeriğini HTML'den ayrı bir bloğa yerleştirip arama motorlarına ve LLM crawler'larına doğrudan, ayrıştırması ucuz bir veri katmanı sunar.
1.1 Linked Data ve Tim Berners-Lee'nin vizyonu
Linked Data kavramı, World Wide Web mucidi Tim Berners-Lee tarafından 2006'da tanımlandı. Temel prensip: dünyadaki her kavram (kişi, yer, olay, ürün) benzersiz bir URI'ye sahip olmalı; bu URI'ler birbirine HTTP üzerinden bağlanabilir olmalı; bağlantılar makine-okunur biçimde işaretlenmelidir. JSON-LD, bu felsefeyi pratik geliştirici deneyimine indiren teknik araçtır.
Pratikteki yaygın yanılgılar:
- "JSON-LD = JSON'dur, fark yok." Doğrusu: JSON-LD'de
@context,@type,@id,@graphgibi özel anahtar kelimeler vardır; bunlar JSON'a "Linked Data" semantiği ekler. Klasik JSON sadece veri taşır; JSON-LD ise veriyi anlamlı entity grafikleri olarak ifade eder. - "Schema.org = JSON-LD'dir." Doğrusu: Schema.org, vocabulary'dir (kelime hazinesi); JSON-LD ise serialization format'tır. Aynı Schema.org vocabulary'si Microdata veya RDFa ile de işaretlenebilir; ama JSON-LD ile yapmak en yaygın ve Google tarafından resmi olarak önerilen yöntemdir.
- "JSON-LD sayfayı yavaşlatır." Doğrusu: JSON-LD
<script type="application/ld+json">bloğunda durur; tarayıcı render pipeline'ında execute edilmez, yalnızca crawler'lar parse eder. Tipik 5-15 KB payload, gzip sonrası 2-4 KB; Core Web Vitals üzerinde ölçülebilir negatif etki yoktur.
1.2 Schema.org: ortak kelime hazinesi
Schema.org, 2011'de Google, Microsoft (Bing), Yahoo ve Yandex'in ortak girişimiyle kuruldu. Amaç: web genelinde tek bir structured data vocabulary'si kullanmak. Bugün 800+ tip ve 1400+ property içerir. Haber yayıncılığı için en kritik tip ailesi Article ve onun alt sınıfı NewsArticle'dır.
1.3 W3C JSON-LD spec ve sürümler
JSON-LD'nin güncel sürümü JSON-LD 1.1 (2020 W3C Recommendation). Bu sürüm @graph, @nest, @included gibi gelişmiş özellikleri getirdi; 22+ entity'yi tek payload'da bağlamayı çok kolaylaştırdı. Modern haber CMS'lerinin tamamı 1.1 sürümüne göre çıktı üretmelidir.
2. Microdata, RDFa ve JSON-LD Karşılaştırması
Web tarihinde structured data için üç ana format kullanıldı: Microdata (HTML5 spec, 2011), RDFa (W3C, 2008) ve JSON-LD (W3C, 2014). Bugün yeni projelerde JSON-LD baskın hale geldi; ancak farkları bilmek migration kararları için önemli.
2.1 Format karşılaştırma matrisi
| Kriter | Microdata | RDFa | JSON-LD |
|---|---|---|---|
| Konum | HTML inline | HTML inline | Ayrı <script> bloğu |
| Spec yılı | 2011 (HTML5) | 2008 (W3C) | 2014 (W3C) |
| Render maliyeti | Yok (sadece markup) | Yok (sadece markup) | Yok (script type=ld+json) |
| HTML temizliği | Düşük (attribute kirliliği) | Düşük | Yüksek (HTML temiz) |
| Nested entity | Zor (deep nesting karmaşık) | Orta | Kolay (@graph ile) |
| @id ve cross-reference | Yok | Var | Var (Linked Data) |
| Google önerisi | Geçerli ama önerilmez | Geçerli ama önerilmez | Resmi önerilen |
| CMS-decoupled | Hayır (HTML'e bağlı) | Hayır | Evet (içerik bağımsız) |
| Validation kolaylığı | Orta | Orta | Yüksek |
| Geliştirici tercihi 2026 | %5 | %3 | %92 |
2.2 Microdata örneği (eski tarz)
<article itemscope itemtype="https://schema.org/NewsArticle">
<h1 itemprop="headline">Deprem Haberi</h1>
<span itemprop="datePublished" content="2026-05-04">4 Mayıs 2026</span>
<div itemprop="author" itemscope itemtype="https://schema.org/Person">
<span itemprop="name">Kağan Onaran</span>
</div>
</article>
Bu yaklaşımın problemi: HTML kirlenir, designer ve developer aynı dosyada çakışır, schema güncellemesi her seferinde HTML refactor gerektirir. Modern bir RSC (React Server Component) mimaride bu yaklaşım sürdürülebilir değildir.
2.3 JSON-LD örneği (modern tarz)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "Deprem Haberi",
"datePublished": "2026-05-04T08:00:00+03:00",
"author": {
"@type": "Person",
"name": "Kağan Onaran"
}
}
</script>
HTML temiz, schema güncellemesi tek dosyada (CMS'in JSON-LD builder'ı), validation kolaydır. Modern bir CMS bu pattern'i decoupled sunar.
3. Google'ın JSON-LD Tercihi (2014'ten Beri Resmi)
Google Search Central'ın resmi dokümantasyonu 2014'ten bu yana JSON-LD'yi birinci tercih olarak listeler. Google Structured Data Documentation sayfasında şu ifade öne çıkar: "Although Google can read both microdata and RDFa, JSON-LD is generally easier to implement and maintain at scale."
3.1 2014 önce: hreview microformats dönemi
2010 öncesinde Google, microformats (hReview, hCard, hCalendar) okuyordu. Bu format çok sınırlıydı: sadece review, kişi ve etkinlik için. 2011 Schema.org doğunca microformats yerini Microdata'ya bıraktı; 2014'te ise JSON-LD ile paradigma değişikliği yaşandı.
3.2 2014: Recipe rich result + JSON-LD'in resmî önerisi
Google, ilk kez Recipe rich result'ta JSON-LD'yi resmî tavsiye olarak yayınladı (2014 Aralık). Sonraki 18 ayda Article, Event, LocalBusiness, Product için JSON-LD önerisi yaygınlaştı. 2016'da Top Stories carousel lansmanı ile JSON-LD haber yayıncılığı için fiilî zorunluluk oldu.
3.3 2026: AI cevap motorları çağında JSON-LD
ChatGPT (OpenAI), Perplexity, Gemini (Google), Claude (Anthropic) ve Copilot (Microsoft) gibi cevap motorları, web içeriğini parse ederken structured data signal'ına ağırlık verir. Bir LLM crawler, sayfada NewsArticle schema'sı görüyorsa içeriğin doğrulanabilir entity'ler içerdiğini varsayar; bu sayfa LLM cevaplarında kaynak olarak gösterilme şansını belirgin biçimde artırır.
Sektör notu: 30 yıl tecrübemde, Google'ın resmî dokümantasyonunda 12 yıldır değişmeyen tek tavsiye "JSON-LD kullanın"dır. Microdata ve RDFa hâlâ valid olarak kabul ediliyor; ama yeni proje için tercih edenler 2026'da neredeyse kalmadı. Migration projesi planlıyorsanız direkt JSON-LD'ye geçin.
4. NewsArticle Schema ve 6 Subtype (Opinion/Analysis/Reportage/Blog/News/Article)
Schema.org NewsArticle sayfası, haber içeriklerinin temel @type'ını tanımlar. NewsArticle, daha üst tip olan Article'dan miras alır; Article ise CreativeWork'ten miras alır. NewsArticle'ın altında 5 ana subtype vardır:
4.1 NewsArticle (genel)
Olay bazlı, kısa-orta uzunlukta, fact-reporting ağırlıklı haberler için. Tipik kullanım: breaking news, günlük olaylar, kısa kurum açıklamaları.
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "İstanbul'da Metro Hattı Açıldı",
"datePublished": "2026-05-04T09:30:00+03:00"
}
4.2 OpinionNewsArticle (köşe yazısı)
Yazarın kişisel görüşünü, yorumunu, eleştirisini içeren content. Türk medya geleneğinde köşe yazısı olarak bilinen format için doğru @type budur.
4.3 AnalysisNewsArticle (derin analiz)
Veri + yorum + tarihsel bağlam birleşimi içeren uzun yazılar. Tipik 2000-5000 kelime, çoklu kaynak, grafik ve tablolar içerir.
4.4 ReportageNewsArticle (saha röportajı)
Muhabirin kendi gözlemini, saha izlenimini aktardığı first-hand reporting. Savaş muhabirliği, doğa felaketi sonrası saha ziyareti, yerel olay tanıklığı bu kategoriye girer.
4.5 ReviewNewsArticle (eleştiri)
Ürün, film, restoran, kitap, oyun eleştirisi. Genellikle Review schema ile birlikte kullanılır; reviewRating (Rating) zorunlu olur.
4.6 BackgroundNewsArticle (arka plan)
Bir olayın tarihçesini, bağlamını, açıklayıcı arka planını sunan içerik. "Açıklayıcı haber" olarak Türk medyasında karşılığı vardır.
4.7 İhmal edilen detay: BlogPosting
BlogPosting, NewsArticle'ın subtype'ı değildir; doğrudan Article'ın bir kardeş subtype'ıdır. Blog tarzı içerikler (kişisel yazı, hobi, lifestyle) için BlogPosting kullanılır; haberle karıştırılmamalıdır. Ancak LiveBlogPosting, BlogPosting'in subtype'ıdır ve canlı yayın için tasarlanmıştır.
5. Hangi Subtype Hangi Haber Tipinde Kullanılır? (Karar Matrisi)
30 yıl tecrübemde, NewsArticle subtype seçimi en sık atlanan veya yanlış yapılan karardır. Aşağıdaki karar matrisi, content director'lar ve editörler için pratik referanstır.
| İçerik Tipi | Doğru @type | Neden | Örnek |
|---|---|---|---|
| Son dakika olay haberi | NewsArticle |
Fact-reporting, kısa, güncel | "Deprem oldu" |
| Köşe yazarı yorumu | OpinionNewsArticle |
Subjektif görüş, kişisel tonu | "Bence hükümet..." |
| Veri+yorum, çoklu kaynak | AnalysisNewsArticle |
Derinlemesine, uzun, multi-source | "2026 Q1 ekonomi analizi" |
| Saha muhabir izlenimi | ReportageNewsArticle |
First-hand observation | "Felaket bölgesinden bildiriyorum" |
| Ürün/film/restoran eleştirisi | ReviewNewsArticle + Review |
Rating ile değerlendirme | "Yeni iPhone incelemesi" |
| Olayın tarihsel arka planı | BackgroundNewsArticle |
Açıklayıcı, eğitimci ton | "Ortadoğu çatışması neden başladı?" |
| Canlı olay (deprem, seçim) | LiveBlogPosting |
Sürekli güncellenir, timeline | "Deprem canlı blog" |
| Listicle (Top 10) | Article + ItemList |
Sıralı içerik | "İstanbul'un en iyi 10 restoranı" |
| Kişisel blog yazısı | BlogPosting |
Hobi/lifestyle | Kişisel seyahat günlüğü |
| Sosyal medya entry'si | SocialMediaPosting |
Twitter/Mastodon türevi | Tweet thread |
5.1 Subtype karışıklığını önleme kuralları
- OpinionNewsArticle, ReviewNewsArticle değildir. Köşe yazısı bir film hakkında yorum yapsa bile rating yoksa
OpinionNewsArticledoğrusudur. - AnalysisNewsArticle ≠ BackgroundNewsArticle. Analysis veri+yorum birleşimi; Background tarihsel/açıklayıcı arka plan. İkisi farklı semantic role'lere sahip.
- NewsArticle ≠ Article. Haber sitesi her makalesinde
NewsArticle(veya subtype) kullanmalı; jenerikArticleSEO sinyali zayıflatır.
5.2 Çoklu subtype kullanımı
Schema.org spec'i, bir node'un birden fazla type'a sahip olmasına izin verir. Örneğin bir film eleştirisi köşe yazısı şeklinde de yazılabilir:
{
"@context": "https://schema.org",
"@type": ["OpinionNewsArticle", "ReviewNewsArticle"],
"headline": "Yeni Marvel filmi neden hayal kırıklığı?"
}
Ancak Google bu çoklu type pattern'ini her zaman doğru parse etmez; production'da tek bir net subtype seçmek daha güvenlidir.
6. FAQPage: AEO için Vazgeçilmez
FAQPage schema, sayfanın FAQ section'ındaki Question/Answer çiftlerini makine-okunur biçimde işaretler. 2026 itibarıyla Answer Engine Optimization (AEO) için vazgeçilmez araçtır.
6.1 FAQPage @type yapısı
FAQPage'in mainEntity alanı bir Question dizisi içerir; her Question'ın acceptedAnswer alanı bir Answer node'u içerir. Tipik yapı şöyledir:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "JSON-LD ile Microdata farkı nedir?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD, structured data'yı HTML'den tamamen ayrı bir <script type='application/ld+json'> bloğunda JSON formatında tutar; Microdata ise structured data'yı HTML element'lerine itemscope, itemtype, itemprop attribute'ları ile gömer. JSON-LD daha temiz, daha kolay validate edilir ve nested entity graph'larını @graph anahtarıyla destekler."
}
},
{
"@type": "Question",
"name": "FAQPage neden ChatGPT için kritik?",
"acceptedAnswer": {
"@type": "Answer",
"text": "ChatGPT, Perplexity ve Gemini gibi cevap motorları kullanıcı sorgusuna yanıt üretirken kaynak siteleri seçerken structured data sinyallerine ağırlık verir. FAQPage schema, sayfada yer alan Question/Answer çiftlerini makine-okunur biçimde işaretler; bu da LLM'in 'bu sayfada doğrudan benim soruma cevap var' sinyalini güçlendirir."
}
}
]
}
6.2 People Also Ask (PAA) snippet zorunluluğu
Google arama sonuçlarında People Also Ask kutucuğunda görünmek isteyen sayfaların FAQPage schema'sı zorunludur. Google bu snippet'ı doldururken FAQPage.mainEntity dizisindeki Q/A'ları parse eder, kullanıcı sorgusuna en yakın olanı seçer.
6.3 LLM kaynak gösterme oranları
ChatGPT ve Perplexity gibi cevap motorları, FAQPage barındıran sayfaları daha sık kaynak gösterir. Bu istatistiksel ilişkiyi deneysel olarak doğrulamak mümkün: aynı içerikli iki sayfa hazırla, birinde FAQPage olsun, diğerinde olmasın; 30 gün boyunca AI cevap motoru citation oranlarını ölç. AEO çalışmalarında bu fark gözle görülür düzeydedir.
6.4 FAQPage anti-pattern'leri
- Promosyonel cevaplar. "Haberlendin CMS en iyisidir, hemen alın!" gibi cevaplar Google policy ihlali. Cevap, sorulan soruya bilgilendirici yanıt olmalı.
- Q ve sayfa içeriği uyumsuzluğu. FAQPage'de yer alan Q/A'lar sayfanın görünür içeriğinde de bulunmalı. Sadece schema'ya gizli Q/A koymak Google policy ihlalidir.
- Kelime tekrarı. Aynı Q'nun farklı varyasyonlarını eklemek (keyword stuffing) penalty riski yaratır.
7. Speakable Schema: Sesli Asistanlar için Optimize
Speakable schema (resmi adı SpeakableSpecification), sayfanın hangi paragraflarının sesli okuma asistanları (Google Assistant, Alexa, Siri) tarafından TTS ile seslendirilebileceğini işaretler.
7.1 SpeakableSpecification yapısı
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"headline": "Deprem Sonrası Yardım Çalışmaları Sürüyor",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [".article-headline", ".quick-answer"]
}
}
cssSelector veya xPath ile DOM'daki hedef düğümler işaretlenir. Best practice: headline + summary + quick-answer paragrafları işaretlenmeli; tüm makale değil.
7.2 Google Assistant TTS feed entegrasyonu
Google, 2020'den itibaren ABD pazarında Speakable'ı haber sitelerinde aktif kullanıyor. Türkiye pazarında 2026 itibarıyla Google Assistant haber okuma feature'ı yaygınlaşıyor; Speakable işaretlemesi olmayan haberler bu feed'e dahil edilmiyor.
7.3 data-speakable HTML attribute pattern
JSON-LD'deki cssSelector ile DOM'daki element'leri eşleştirmek için yaygın pattern:
<h1 class="article-headline" data-speakable="true">
Deprem Sonrası Yardım Çalışmaları Sürüyor
</h1>
<div class="quick-answer" data-speakable="true">
<p>Bugün sabah saatlerinde meydana gelen 6.2 büyüklüğündeki depremde...</p>
</div>
CSS selector'da [data-speakable="true"] veya class-based .quick-answer yaklaşımı tercih edilebilir.
8. BreadcrumbList: Navigasyon Hierarchy
BreadcrumbList, sayfanın site hiyerarşisindeki konumunu (Anasayfa > Kategori > Haber) makine-okunur biçimde işaretler. Google arama sonuçlarında URL yerine breadcrumb gösterimi sağlar; CTR'yi belirgin biçimde artırır.
8.1 Tam BreadcrumbList örneği
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Anasayfa",
"item": "https://haberyazilimpaketi.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://haberyazilimpaketi.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "JSON-LD Haber Sitesi Önemi Rehberi"
}
]
}
8.2 position: 1'den başlar
position alanı 1'den başlamalıdır (0'dan değil). Son ListItem'da item URL alanı opsiyonel olabilir (çünkü mevcut sayfayı gösterir); ancak name zorunludur.
8.3 Crawl budget optimizasyonu
BreadcrumbList, Google'ın site mimarisini daha hızlı çıkarmasına yardımcı olur. Büyük haber sitelerinde (10K+ sayfa) bu optimizasyon crawl budget etkili kullanımı için kritiktir.
9. LiveBlogPosting: Canlı Yayın Coverage
LiveBlogPosting, deprem, seçim, spor müsabakası, breaking news gibi süregelen olaylar için kullanılan dinamik schema'dır.
9.1 LiveBlogPosting tam örneği
{
"@context": "https://schema.org",
"@type": "LiveBlogPosting",
"headline": "İzmir Depremi Canlı: Yardım Çalışmaları Sürüyor",
"coverageStartTime": "2026-05-04T08:00:00+03:00",
"coverageEndTime": "2026-05-04T20:00:00+03:00",
"datePublished": "2026-05-04T08:05:00+03:00",
"dateModified": "2026-05-04T14:32:00+03:00",
"author": {
"@type": "Person",
"name": "Kağan Onaran"
},
"publisher": {
"@type": "NewsMediaOrganization",
"name": "K-On Tech Haber",
"logo": {
"@type": "ImageObject",
"url": "https://haberyazilimpaketi.com/logo.png"
}
},
"liveBlogUpdate": [
{
"@type": "BlogPosting",
"headline": "İlk müdahale ekipleri bölgeye ulaştı",
"datePublished": "2026-05-04T08:30:00+03:00",
"articleBody": "AFAD ekipleri 30 dakika içinde merkez üssüne ulaştı..."
},
{
"@type": "BlogPosting",
"headline": "Sağlık Bakanı bölgeye gidiyor",
"datePublished": "2026-05-04T09:15:00+03:00",
"articleBody": "Sağlık Bakanı, helikopterle bölgeye gidiyor..."
},
{
"@type": "BlogPosting",
"headline": "İlk hasar tespit raporu yayınlandı",
"datePublished": "2026-05-04T11:45:00+03:00",
"articleBody": "AFAD, ön hasar tespit raporunu paylaştı..."
}
]
}
9.2 coverageStartTime ve coverageEndTime kuralları
coverageStartTime: Olay başlama zamanı (canlı yayın başlangıç değil)coverageEndTime: Olay bitiş zamanı (live blog kapatılma zamanı)- Her ikisi de ISO 8601 formatında, timezone offset ile (Türkiye için
+03:00) - Olay devam ediyorsa
coverageEndTimeopsiyonel; ama tahmini bir değer vermek Google için yararlıdır
9.3 liveBlogUpdate dizisi sıralaması
liveBlogUpdate dizisindeki BlogPosting node'ları kronolojik sırayla olmalı (eskiden yeniye veya yeniden eskiye — site UI'ı ile tutarlı). Her güncelleme yeni bir BlogPosting ve yeni datePublished içerir.
9.4 Real-time recrawl davranışı
Google, LiveBlogPosting kullanan sayfaları gerçek-zamanlı carousel'a alır ve dakikalık güncelleme sıklığında recrawl eder. Bu, normal NewsArticle sayfalarının saatlik-günlük recrawl sıklığından çok daha yüksektir.
Sektör notu: 30 yıl tecrübemde, deprem haber coverage'ında LiveBlogPosting kullanan portallar Google gerçek-zamanlı carousel'da kalıcı yer ediniyor; kullanmayanlar ise breaking news momentumunu tamamen kaybediyor. 2023 Şubat depreminde bu fark net biçimde gözlemlendi.
10. ItemList: Listicle ve Top-X Makaleler için
ItemList schema, anasayfa manşet listesi, "en çok okunanlar" widget'ı, listicle makaleler ve kategori arşiv sayfaları için kullanılır.
10.1 ItemList ve ListItem yapısı
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "İstanbul'un En İyi 10 Kahvaltı Mekânı",
"itemListOrder": "https://schema.org/ItemListOrderAscending",
"numberOfItems": 10,
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Kahvaltı Evi Beşiktaş",
"url": "https://haberyazilimpaketi.com/mekan/kahvalti-evi-besiktas"
},
{
"@type": "ListItem",
"position": 2,
"name": "Kale Cafe Ortaköy",
"url": "https://haberyazilimpaketi.com/mekan/kale-cafe-ortakoy"
}
]
}
10.2 itemListOrder seçenekleri
Schema.org üç sıralama tipi tanımlar:
https://schema.org/ItemListOrderAscending— küçükten büyüğe (Top 10'da 10 → 1)https://schema.org/ItemListOrderDescending— büyükten küçüğe (Top 10'da 1 → 10)https://schema.org/ItemListUnordered— sıralama yok (alfabetik veya rastgele)
Listicle'larda doğru order'ı belirtmek Google'ın carousel format'ında doğru sıralamayı göstermesi için kritiktir.
10.3 Listicle CTR etkisi
ItemList ile işaretlenmiş listicle'lar, Google arama sonuçlarında rich carousel formatında gösterilebilir. Bu format CTR'yi belirgin biçimde artırır; özellikle "en iyi", "top 10", "X kategori en başarılı" tarzı sorgularda etkili.
11. Organization, Person, Author Linking
E-E-A-T (Experience, Expertise, Authoritativeness, Trust) sinyali için yazar ve yayıncı entity'lerinin doğru bağlanması zorunludur.
11.1 NewsMediaOrganization tam örneği
{
"@context": "https://schema.org",
"@type": "NewsMediaOrganization",
"@id": "https://haberyazilimpaketi.com/#organization",
"name": "K-On Tech",
"url": "https://haberyazilimpaketi.com",
"logo": {
"@type": "ImageObject",
"url": "https://haberyazilimpaketi.com/logo.png",
"width": 600,
"height": 60
},
"sameAs": [
"https://www.linkedin.com/company/k-on-tech",
"https://x.com/kontech_tr",
"https://github.com/kontech"
],
"diversityPolicy": "https://haberyazilimpaketi.com/cesitlilik-politikasi",
"ethicsPolicy": "https://haberyazilimpaketi.com/etik-ilkeler",
"correctionsPolicy": "https://haberyazilimpaketi.com/duzeltme-politikasi",
"actionableFeedbackPolicy": "https://haberyazilimpaketi.com/iletisim",
"missionCoveragePrioritiesPolicy": "https://haberyazilimpaketi.com/yayin-ilkeleri"
}
11.2 NewsMediaOrganization'a özel governance alanları
NewsMediaOrganization, Organization'ın subtype'ıdır ve haber kuruluşlarına özel governance alanları içerir:
diversityPolicy— çeşitlilik politikası URLethicsPolicy— etik ilkeler URLcorrectionsPolicy— düzeltme politikası URLactionableFeedbackPolicy— geri bildirim mekanizması URLmissionCoveragePrioritiesPolicy— yayın ilkeleri URLunnamedSourcesPolicy— anonim kaynak kullanımı URL
Bu alanlar Google News onboarding sürecinde zorunlu kontrol edilir. Eksikse haber sitesi Google News'e kabul edilmez.
11.3 Person ve sameAs
{
"@type": "Person",
"@id": "https://haberyazilimpaketi.com/yazar/kagan-onaran#person",
"name": "Kağan Onaran",
"jobTitle": "Lead Architect, K-On Tech",
"url": "https://haberyazilimpaketi.com/yazar/kagan-onaran",
"sameAs": [
"https://www.linkedin.com/in/kaganonaran",
"https://x.com/kaganonaran",
"https://github.com/kaganonaran"
],
"knowsAbout": [
"AI haber yazımı",
"JSON-LD",
"Schema.org",
"Next.js",
"PostgreSQL"
]
}
sameAs alanı LinkedIn, X (Twitter), GitHub gibi platformlardaki yazar profilleriyle Google Knowledge Graph'a kimlik bağlar. knowsAbout ise yazarın uzmanlık alanlarını işaretler — E-E-A-T sinyalini güçlendirir.
12. Breadcrumbs ve mainEntityOfPage Pattern
Modern haber CMS'lerinde JSON-LD payload'u tipik olarak @graph pattern'i ile çoklu entity'yi tek script bloğunda taşır.
12.1 @graph pattern: çoklu entity tek payload
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "NewsArticle",
"@id": "https://haberyazilimpaketi.com/blog/json-ld-haber-sitesi-onemi-rehberi#article",
"headline": "JSON-LD Haber Sitesi İçin Neden Kritik?",
"datePublished": "2026-05-04T09:00:00+03:00",
"dateModified": "2026-05-04T09:00:00+03:00",
"author": { "@id": "https://haberyazilimpaketi.com/yazar/kagan-onaran#person" },
"publisher": { "@id": "https://haberyazilimpaketi.com/#organization" },
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://haberyazilimpaketi.com/blog/json-ld-haber-sitesi-onemi-rehberi"
},
"image": {
"@type": "ImageObject",
"url": "https://haberyazilimpaketi.com/images/blog/json-ld-haber-sitesi-rehberi-2026.jpg",
"width": 1200,
"height": 630
},
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [".article-headline", ".quick-answer"]
}
},
{
"@type": "Person",
"@id": "https://haberyazilimpaketi.com/yazar/kagan-onaran#person",
"name": "Kağan Onaran",
"url": "https://haberyazilimpaketi.com/yazar/kagan-onaran",
"sameAs": [
"https://www.linkedin.com/in/kaganonaran"
]
},
{
"@type": "NewsMediaOrganization",
"@id": "https://haberyazilimpaketi.com/#organization",
"name": "K-On Tech",
"url": "https://haberyazilimpaketi.com",
"logo": {
"@type": "ImageObject",
"url": "https://haberyazilimpaketi.com/logo.png"
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Anasayfa", "item": "https://haberyazilimpaketi.com/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://haberyazilimpaketi.com/blog" },
{ "@type": "ListItem", "position": 3, "name": "JSON-LD Haber Sitesi Önemi Rehberi" }
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "JSON-LD ile Microdata farkı nedir?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD, structured data'yı HTML'den ayrı bir script bloğunda JSON olarak tutar; Microdata HTML element'lerine attribute olarak gömülür."
}
}
]
}
]
}
12.2 @id ve cross-reference
@id alanları, aynı entity'ye birden fazla yerde referans verme imkânı sağlar. Yukarıdaki örnekte NewsArticle'ın author alanı, ayrıca tanımlı Person node'unu @id ile cross-reference ediyor; veriyi tekrarlamadan bağ kuruluyor.
12.3 mainEntityOfPage: sayfa-entity bağı
mainEntityOfPage alanı, NewsArticle'ın hangi web sayfasında ana entity olduğunu işaretler. Bu, Google'ın sayfa-entity ilişkisini doğrulamasına yardımcı olur. Best practice: her makale için tanımlanmalı.
13. Validation: Schema.org Validator + Rich Results Test
JSON-LD yazıldıktan sonra iki ana resmi tool ile validate edilmelidir.
13.1 Schema.org Validator (validator.schema.org)
validator.schema.org, Schema.org'un kendi validator'ıdır. Spec uyumluluğunu kontrol eder:
- @type'ın geçerli olup olmadığı
- Property'lerin doğru type'a sahip olup olmadığı
- Required vs recommended alanların durumu
- Domain/range constraint ihlalleri
Workflow: önce buradan geçirin; spec hatalarını temizleyin.
13.2 Google Rich Results Test (search.google.com/test/rich-results)
search.google.com/test/rich-results, Google'ın eligibility-for-rich-results testidir. Schema.org'a göre valid olan bir payload, Google'ın ek zorunlu alan kurallarına uymayabilir. Örneğin:
- NewsArticle için
headline,image,datePublished,author,publisherzorunlu - FAQPage'de Q'lar 1000 karakter altında olmalı
- LiveBlogPosting için
coverageStartTimezorunlu
Workflow: Schema.org validator'dan sonra Rich Results Test'ten de geçirin.
13.3 CI/CD validation pipeline
Production'da her schema değişikliği otomatik validate edilmeli. Node.js için iki popüler paket:
- schema-dts — TypeScript types for Schema.org (compile-time validation)
- structured-data-testing-tool — programmatic Rich Results Test
Tipik CI step:
npm run build
npm run test:schema -- --url=http://localhost:3000/blog/json-ld-haber-sitesi-onemi-rehberi
13.4 Production monitoring
Live site için Google Search Console Enhancements sekmesinde:
- "Article" raporu — NewsArticle hatalarını listeler
- "Breadcrumbs" raporu — BreadcrumbList hatalarını listeler
- "FAQ" raporu — FAQPage hatalarını listeler
Bu raporlar haftalık kontrol edilmelidir; yeni schema hatası yayılırsa içeride yakalanır.
14. Yaygın Hatalar ve Çözümleri
30 yıl tecrübemde JSON-LD audit yaparken sık rastladığım 10 kritik hata ve çözümleri.
14.1 datePublished yerine string kullanımı
Yanlış: "datePublished": "4 Mayıs 2026"
Doğru: "datePublished": "2026-05-04T09:00:00+03:00" (ISO 8601 + timezone)
Schema.org Date veya DateTime tipi bekler. Türkçe tarih formatı parse edilemez.
14.2 Image obje yerine string
Yanlış: "image": "https://example.com/foto.jpg"
Doğru:
"image": {
"@type": "ImageObject",
"url": "https://example.com/foto.jpg",
"width": 1200,
"height": 630
}
NewsArticle için image zorunlu; ImageObject olarak verilmesi width, height, caption alanlarını da kazandırır.
14.3 Publisher logo eksik
Google, NewsArticle için publisher.logo zorunlu kılar; logo en az 600x60 px olmalı, AMP projesinde 600x60 px tam zorunlu, transparent PNG.
14.4 author = Person yerine string
Yanlış: "author": "Kağan Onaran"
Doğru:
"author": {
"@type": "Person",
"name": "Kağan Onaran",
"url": "https://haberyazilimpaketi.com/yazar/kagan-onaran"
}
E-E-A-T için Person node'u zorunlu; sadece string yetersiz.
14.5 FAQPage'de Q sayısının abartılması
20+ Q/A eklemek keyword stuffing sinyali yaratır. Optimal: 5-10 Q/A.
14.6 Sayfa içeriğinde olmayan FAQ Q/A
Google policy: FAQ Q/A'lar sayfanın görünür içeriğinde de bulunmalı. Sadece schema'ya gizli koymak penalty riskidir.
14.7 BreadcrumbList'te position 0'dan başlama
position alanı 1'den başlamalı, 0'dan değil.
14.8 LiveBlogPosting'de coverageStartTime eksik
LiveBlogPosting için coverageStartTime zorunlu; eksikse Google rich result vermez.
14.9 @context eksik veya yanlış
Her JSON-LD payload'unun kök seviyesinde @context olmalı:
{
"@context": "https://schema.org",
"@type": "NewsArticle",
...
}
http:// kullanmak (https:// yerine) deprecated; warning üretir ama valid sayılır.
14.10 Multi-language sitelerde inLanguage eksik
Çok dilli haber sitelerinde her makaleye inLanguage eklenmeli:
"inLanguage": "tr-TR"
Bu, Google'ın doğru dil kullanıcılarına makaleyi göstermesi için kritiktir.
30 yıl tecrübemde: Schema audit yaptığım 200+ Türk haber sitesinin %87'si yukarıdaki 10 hatadan en az 3'ünü yapıyordu. En sık ihmal edilen üçlü: publisher.logo eksik, author string olarak verilmiş, inLanguage tanımsız. Bu üç hata düzeltilince Google Search Console'da "Article" raporundaki error sayısı %70 düşüyor.
15. Sıkça Sorulan Sorular
Q: JSON-LD ile Microdata farkı nedir?
A: JSON-LD, structured data'yı HTML'den tamamen ayrı bir <script type="application/ld+json"> bloğunda JSON formatında tutar; Microdata ise structured data'yı HTML element'lerine itemscope, itemtype, itemprop attribute'ları ile gömer. JSON-LD daha temiz, daha kolay validate edilir, render maliyeti yoktur ve nested entity graph'larını @graph anahtarıyla destekler. Google 2014'ten bu yana JSON-LD'yi resmi olarak önerir; 2026 itibarıyla yeni kurulan haber sitelerinin neredeyse tamamı JSON-LD kullanır.
Q: NewsArticle subtype seçimi nasıl yapılır? A: Schema.org NewsArticle 6 subtype tanımlar: NewsArticle (genel haber), OpinionNewsArticle (köşe yazısı/yorum), AnalysisNewsArticle (derin analiz), ReportageNewsArticle (saha röportajı), ReviewNewsArticle (eleştiri/inceleme), BackgroundNewsArticle (açıklayıcı arka plan). Genel kural: olay-temelli kısa haberler NewsArticle; kişisel görüş içerenler OpinionNewsArticle; veri+yorum karışımı uzun yazılar AnalysisNewsArticle; muhabir kendi gözlemini aktarıyorsa ReportageNewsArticle; ürün/film/restoran eleştirisi ReviewNewsArticle; konunun tarihçesini açıklayan içerik BackgroundNewsArticle olur.
Q: FAQPage neden ChatGPT için kritik? A: ChatGPT, Perplexity ve Gemini gibi cevap motorları kullanıcı sorgusuna yanıt üretirken kaynak siteleri seçerken structured data sinyallerine ağırlık verir. FAQPage schema, sayfada yer alan Question/Answer çiftlerini makine-okunur biçimde işaretler; bu da LLM'in "bu sayfada doğrudan benim soruma cevap var" sinyalini güçlendirir. AEO (Answer Engine Optimization) çalışmalarında FAQPage barındıran sayfaların cevap motoru citation oranı barındırmayanlara göre belirgin biçimde yüksektir.
Q: Speakable schema Google Assistant'ta görünür mü? A: Evet. Speakable schema, sayfanın hangi paragraflarının sesli okuma asistanları (Google Assistant, Alexa, Siri) tarafından TTS ile seslendirilebileceğini işaretler. SpeakableSpecification içinde xPath veya cssSelector ile hedeflenen DOM düğümleri belirtilir. Google, 2020'den itibaren ABD pazarında Speakable'ı haber sitelerinde aktif kullanıyor; 2026 itibarıyla TR pazarında da Google Assistant haber okuma feature'ı yaygınlaşıyor. Speakable işaretlemesi olmayan haberler bu feed'e dahil edilmez.
Q: JSON-LD validation nasıl yapılır? A: İki ana resmi tool vardır: validator.schema.org (Schema.org'un kendi validator'ı, schema spec uyumluluğunu kontrol eder) ve search.google.com/test/rich-results (Google Rich Results Test, eligibility-for-rich-results testi yapar). Workflow şöyle olmalıdır: önce Schema.org validator ile spec hatalarını temizle, sonra Rich Results Test ile Google'ın istediği zorunlu alanları kontrol et. CI/CD pipeline için Node.js'te schema-dts veya structured-data-testing-tool paketleri kullanılabilir.
Q: LiveBlogPosting nasıl kurulur? A: LiveBlogPosting, deprem, seçim, spor müsabakası, breaking news gibi süregelen olaylar için kullanılan dinamik schema'dır. Temel yapısı: bir parent LiveBlogPosting node'u (coverageStartTime, coverageEndTime, headline) ve liveBlogUpdate dizisi içinde sıralanan BlogPosting child node'ları. Her güncellemede yeni bir BlogPosting eklenir, datePublished alanı zorunlu. Google, LiveBlogPosting kullanan sayfaları gerçek-zamanlı carousel'a alır ve dakikalık güncelleme sıklığında recrawl eder.
Q: BreadcrumbList neden gerekli? A: BreadcrumbList, sayfanın site hiyerarşisindeki konumunu (Anasayfa > Kategori > Haber) makine-okunur biçimde işaretler. Google arama sonuçlarında URL yerine breadcrumb gösterimi sağlar; bu CTR'yi belirgin biçimde artırır. Ayrıca crawl budget optimizasyonuna yardımcı olur — Google site mimarisini daha hızlı çıkarır. Her makale, kategori ve listeleme sayfasında BreadcrumbList tanımlı olmalıdır.
Q: ItemList ve manşet sıralaması nasıl bağlanır? A: ItemList schema, anasayfa manşet listesi, "en çok okunanlar" widget'ı, listicle makaleler ve kategori arşiv sayfaları için kullanılır. Her ListItem'ın position alanı (1'den başlayan) ve url + name alanları zorunludur. Google, doğru ItemList işaretlemesi olan listicle'ları (Top 10, En İyi X) carousel sunum formatında gösterir; bu da CTR'yi belirgin biçimde artırır.
Q: Organization, Person ve Author linking neden önemli? A: E-E-A-T (Experience, Expertise, Authoritativeness, Trust) sinyali için yazar ve yayıncı entity'lerinin doğru bağlanması zorunludur. Article.author bir Person node'u olmalı, Person.sameAs LinkedIn/X/kişisel site URL'lerini içermeli, Article.publisher bir Organization olmalı, Organization.logo ve Organization.sameAs alanları doldurulmalıdır. Bu graph, Google Knowledge Graph'a yazar/yayıncı kimliğini bağlar; haberin güvenilirlik skoru yükselir.
Q: JSON-LD eklemek site hızını yavaşlatır mı?
A: Hayır. JSON-LD, <script type="application/ld+json"> bloğunda tutulur ve tarayıcı render pipeline'ında HTML/CSS/JS execution'a girmez — yalnızca crawler'lar parse eder. Tipik bir 22+ @type @graph payload'u 5-15 KB civarındadır; gzip sıkıştırma sonrası 2-4 KB. Bu, modern haber sayfasının ortalama 2-3 MB toplam ağırlığında ihmal edilebilir bir yüktür. Core Web Vitals (LCP, CLS, INP) üzerinde ölçülebilir negatif etkisi yoktur.
16. Sonuç ve Öneriler
JSON-LD, 2026 itibarıyla haber sitesi yazılımı seçiminde tartışılmaz bir altyapı kalemidir. Schema.org vocabulary'sini doğru kullanmayan portallar Google Top Stories carousel'da yer bulamaz, People Also Ask snippet'larında görünmez, ChatGPT/Perplexity/Gemini cevaplarında kaynak gösterilmez. 22+ @type standardını sağlayan modern bir CMS, tek başına organik trafik ve AI cevap motoru citation açısından geleneksel CMS'lere kıyasla belirgin avantaj sağlar.
Hızlı karar matrisi:
- Yeni portal kuruyorum → JSON-LD native CMS seç (22+ @type minimum)
- Mevcut portal sahibiyim, schema yok → Schema migration paketi (Setup Pro ₺50.000)
- Mevcut portal, basit schema var → Audit + 22+ @type genişletme
- Live blog kullanıyorum → LiveBlogPosting schema zorunlu
Sonraki adımlar:
- JSON-LD özellik sayfasını incele — 22+ @type listesi + canlı kanıt
- Haber sitesi yazılımı 2026 rehberi — sektör pazar bakışı
- SEO uyumlu haber CMS seçimi — teknik SEO + Core Web Vitals
- Demo talep et — schema audit + 30 dakikalık görüşme
İlgili Makaleler
- Haber Sitesi Yazılımı 2026 Rehberi — AI-native vs geleneksel CMS karşılaştırma
- SEO Uyumlu Haber CMS Seçimi — teknik SEO + Core Web Vitals
- AI Haber Yazımı Nasıl Çalışır? — pipeline, kalite kontrol ve halüsinasyon önleme
- Haber Sitesi Yapay Zeka Entegrasyonu — LLM entegrasyonu rehberi
- Haber Portal Açmak İsteyenler İçin Tam Rehber — sıfırdan kuruluma adım-adım
- Özellikler — Haberlendin CMS — 22+ feature kataloğu
- Fiyatlandırma — Starter, Pro, Pro+, Enterprise T1/T2 + Pro Pilot tarifesi
Standart AI değil — Yapay zekâ herkesinki. Ses sizinki.
Bu teknik rehber Kağan Onaran (Lead Architect, K-On Tech) tarafından 2026 Mayıs ayında yayınlandı; Schema.org spec'i ve Google Search Central rehberleri sürekli güncellendiği için makale 6 aylık aralıklarla revize edilmektedir. Schema.org açık kaynak vocabulary'sinin teknik detayları için schema.org/NewsArticle, validator.schema.org ve search.google.com/test/rich-results referans alınmalıdır.
Sıkça Sorulan Sorular
FAQPageİlgili Makaleler
Tüm makalelerSEO Uyumlu Haber CMS Seçimi 2026: Modern Standartlar Rehberi
30 yıllık Türk pazar SEO/AEO/GEO architect tecrübesiyle hazırlanmış SEO uyumlu haber CMS seçim rehberi. Core Web Vitals, JSON-LD native destek, SSR/ISR/edge rendering, NewsArticle subtype'ları, hreflang, IndexNow ve schema.org standartları.
Haber Sitesi Yazılımı 2026: Hangi Sistem? AI Native vs Geleneksel
2026 yılında haber portalı kurmak isteyenler için 30 yıllık sektör tecrübesiyle hazırlanmış kapsamlı yazılım seçim rehberi. AI-native sistemler, JSON-LD, AEO/GEO standartları ve maliyet kıyaslaması.
AEO Uyumlu Haber Sitesi Kurma Rehberi: Yapay Zeka SEO Rehberi
Yapay zeka arama motorları ve yanıt motorları (AEO/GEO) çağında yerel ve genel haber sitelerinin hayatta kalması ve trafik çekmesi için gereken teknik altyapı rehberi.
Haberlendin CMS'i kendi haber portalınızda görmek ister misiniz?
30 dakikalık birebir demo + 14 gün ücretsiz değerlendirme + ROI raporu. K-On Tech ekibi 12+ kişiyle her sürecinizde yanınızda.
18 uzman makale · Türkiye'nin ilk AI-native haber CMS'i