SEO & Schema

JSON-LD Haber Sitesi İçin Neden Kritik? 2026 Tam Rehber: NewsArticle, FAQPage, Speakable, LiveBlogPosting ve 22+ Schema Type

Haber sitesi sahipleri için JSON-LD structured data zorunluluğunu, 22+ Schema.org @type'ını ve NewsArticle subtype karar matrisini 30 yıllık SEO/AEO/GEO tecrübesiyle anlatan derinlemesine teknik rehber. FAQPage, Speakable, LiveBlogPosting örnekleri dahil.

Kağan Onaran4 Mayıs 202622 dakika okuma
haberyazilimpaketi.comHaberlendin CMS · AI-Native Yerel Haber Yazılımı

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:

  1. "JSON-LD = JSON'dur, fark yok." Doğrusu: JSON-LD'de @context, @type, @id, @graph gibi ö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.
  2. "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.
  3. "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 OpinionNewsArticle doğ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ı; jenerik Article SEO 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 coverageEndTime opsiyonel; 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ı URL
  • ethicsPolicy — etik ilkeler URL
  • correctionsPolicy — düzeltme politikası URL
  • actionableFeedbackPolicy — geri bildirim mekanizması URL
  • missionCoveragePrioritiesPolicy — yayın ilkeleri URL
  • unnamedSourcesPolicy — 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, publisher zorunlu
  • FAQPage'de Q'lar 1000 karakter altında olmalı
  • LiveBlogPosting için coverageStartTime zorunlu

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:

  1. Yeni portal kuruyorum → JSON-LD native CMS seç (22+ @type minimum)
  2. Mevcut portal sahibiyim, schema yok → Schema migration paketi (Setup Pro ₺50.000)
  3. Mevcut portal, basit schema var → Audit + 22+ @type genişletme
  4. Live blog kullanıyorum → LiveBlogPosting schema zorunlu

Sonraki adımlar:


İlgili Makaleler#

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
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.

İlgili Makaleler

Tüm makaleler
Demo Talep Et

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