MavionaMAVIONA
Ücretsiz Teklif Alın
Yazılım

Headless CMS Nedir? Strapi vs Sanity vs Contentful

Eray
3 Şubat 202615 dk
Headless CMS Nedir? Strapi vs Sanity vs Contentful

İçerik yönetimi, her web projesinin temel ihtiyacı. Geleneksel CMS'ler (WordPress, Joomla) frontend ve backend'i birleştirirken, headless CMS yaklaşımı ikisini ayırıyor. Bu yazıda headless CMS konseptini, popüler platformları ve doğru CMS seçim kriterlerini derinlemesine inceliyoruz.

Headless CMS Nedir?

Geleneksel CMS'te içerik yönetimi ve içerik sunumu tek bir sistem içindedir. WordPress hem içeriğinizi yönetir hem de web sitenizi render eder. Headless CMS'te ise:

  • Backend (CMS): İçerik oluşturma, düzenleme, yönetme — API üzerinden sunar
  • Frontend (Web/Mobil/Kiosk): İçeriği API'den çekerek istediği şekilde gösterir

Bu ayrımın avantajları:

  1. Herhangi bir frontend: React, Vue, Svelte, mobil uygulama, hatta dijital tabela — aynı içerik, farklı kanallar
  2. Performans: Frontend, statik site olarak deploy edilebilir — süper hızlı
  3. Güvenlik: CMS, public internet'e açık olmak zorunda değil
  4. Ölçeklenebilirlik: Frontend ve backend bağımsız ölçeklenebilir
  5. Geliştirici özgürlüğü: İstediğiniz teknolojiyi, istediğiniz şekilde kullanın

Strapi: Açık Kaynak ve Self-Hosted

Strapi, en popüler açık kaynak headless CMS. Kendi sunucunuzda barındırabilir, tam kontrol sahibi olabilirsiniz.

Güçlü Yanları

Tam kontrol ve özelleştirme:

// Strapi REST API ile veri çekme
async function getPosts(): Promise<BlogPost[]> {
  const res = await fetch(
    `${STRAPI_URL}/api/posts?populate=*&sort=publishedAt:desc`,
    {
      headers: {
        Authorization: `Bearer ${STRAPI_TOKEN}`,
      },
      next: { revalidate: 60 }, // ISR — 60 saniyede bir güncelle
    }
  );

  const data = await res.json();
  return data.data.map((item: any) => ({
    id: item.id,
    title: item.attributes.title,
    slug: item.attributes.slug,
    content: item.attributes.content,
    image: item.attributes.image.data?.attributes.url,
    publishedAt: item.attributes.publishedAt,
  }));
}

Plugin ekosistemi: SEO, i18n, media library, email — eklentilerle genişletilebilir.

Content Types Builder: Görsel arayüzden veya kod ile içerik tiplerini tanımlayın.

Türkçe desteği:

  • Admin paneli Türkçe
  • i18n plugin ile çoklu dil desteği
  • Türkçe karakter desteği sorunsuz

Zayıf Yanları

  • Hosting sorumluluğu: Kendi sunucunuzu yönetmeniz gerekir
  • Bakım: Güncelleme, yedekleme, güvenlik sizin sorumluluğunuzda
  • Performans: Yoğun trafikte veritabanı optimizasyonu gerekir
  • Media yönetimi: Büyük dosyalar için S3/R2 entegrasyonu gerekir

Maliyet

Kalem Maliyet
Yazılım Ücretsiz (açık kaynak)
Hosting (VPS) $10-50/ay
Veritabanı Dahil veya $10-30/ay
CDN (görseller) $5-20/ay
Toplam $10-100/ay

Kimin İçin Uygun?

  • Teknik ekibi olan projeler
  • Veri egemenliği önemli olan kurumlar (KVKK, GDPR)
  • Özelleştirme ihtiyacı yüksek projeler
  • Bütçe bilincinde ekipler (uzun vadede en ucuz)

Sanity: Gerçek Zamanlı ve Esnek

Sanity, bulut tabanlı headless CMS. Gerçek zamanlı işbirliği, GROQ sorgu dili ve son derece esnek içerik modelleme ile öne çıkıyor.

Güçlü Yanları

GROQ — Güçlü sorgu dili:

// GROQ ile veri çekme
import { createClient } from "@sanity/client";

const client = createClient({
  projectId: "your-project-id",
  dataset: "production",
  useCdn: true, // CDN ile hızlı okuma
  apiVersion: "2026-01-01",
});

// GROQ sorgusu — GraphQL'den daha esnek
async function getPosts() {
  return client.fetch(`
    *[_type == "post" && !(_id in path("drafts.**"))] | order(publishedAt desc) {
      _id,
      title,
      slug,
      excerpt,
      publishedAt,
      "author": author->{ name, image },
      "categories": categories[]->{ title, slug },
      "mainImage": mainImage.asset->url
    }
  `);
}

// İlişkisel veri çekme — tek sorguda
async function getPostWithRelated(slug: string) {
  return client.fetch(`
    *[_type == "post" && slug.current == $slug][0] {
      ...,
      "author": author->{ name, bio, image },
      "related": *[_type == "post" && slug.current != $slug &&
        count(categories[@._ref in ^.^.categories[]._ref]) > 0
      ] | order(publishedAt desc) [0...3] {
        title, slug, excerpt, mainImage
      }
    }
  `, { slug });
}

Gerçek zamanlı işbirliği: Google Docs benzeri — birden fazla editör aynı anda aynı dokümanda çalışabilir.

Portable Text: Zengin metin içeriği, yapılandırılmış veri olarak saklanır. Her frontend kendi render'ını yapabilir.

Sanity Studio: React tabanlı, tamamen özelleştirilebilir admin paneli. Kendi sitenize embed edebilirsiniz.

Zayıf Yanları

  • Fiyat artışı: Ücretsiz plan sınırlı, büyüdükçe maliyet artar
  • Öğrenme eğrisi: GROQ ve Portable Text yeni kavramlar
  • Vendor lock-in: İçerik formatı Sanity'ye özgü (export edilebilir ama dönüşüm gerekir)

Maliyet

Plan Fiyat Dataset API İstek Kullanıcı
Free $0 2 500K/ay 3
Growth $15/kullanıcı/ay 5 2.5M/ay Sınırsız
Enterprise Özel Sınırsız Sınırsız Sınırsız

Kimin İçin Uygun?

  • İçerik ekibi birden fazla kişiyse (gerçek zamanlı işbirliği)
  • Esnek ve yapılandırılmış içerik modeli gerekiyorsa
  • Geliştirici deneyimi öncelikliyse
  • Orta-büyük bütçe mevcutsa

Contentful: Kurumsal Standart

Contentful, kurumsal dünyada en yaygın kullanılan headless CMS. Güçlü API'ler, zengin ekosistem ve kurumsal özelliklerle öne çıkıyor.

Güçlü Yanları

İçerik modelleme:

Contentful'un içerik modelleme aracı, karmaşık içerik yapılarını görsel olarak tasarlamanızı sağlar. Alan türleri: kısa metin, uzun metin, sayı, tarih, medya, referans, JSON, konum ve daha fazlası.

GraphQL ve REST API:

// Contentful GraphQL API
const GET_POSTS = `
  query GetPosts($limit: Int!, $skip: Int!) {
    blogPostCollection(
      limit: $limit
      skip: $skip
      order: publishedAt_DESC
    ) {
      total
      items {
        title
        slug
        excerpt
        publishedAt
        featuredImage {
          url
          width
          height
        }
        author {
          name
          avatar {
            url
          }
        }
        contentBody {
          json
          links {
            assets {
              block {
                sys { id }
                url
                description
              }
            }
          }
        }
      }
    }
  }
`;

async function getPosts(page = 1, perPage = 10) {
  const res = await fetch(
    `https://graphql.contentful.com/content/v1/spaces/${SPACE_ID}`,
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${CONTENTFUL_TOKEN}`,
      },
      body: JSON.stringify({
        query: GET_POSTS,
        variables: { limit: perPage, skip: (page - 1) * perPage },
      }),
      next: { revalidate: 60 },
    }
  );

  const data = await res.json();
  return data.data.blogPostCollection;
}

Kurumsal özellikler: Rol bazlı erişim kontrolü, iş akışları (draft → review → publish), webhook'lar, çoklu ortam (staging, production), audit log.

SDK ve entegrasyon zenginliği: JavaScript, Python, Ruby, PHP, .NET SDK'ları. Gatsby, Next.js, Nuxt resmi entegrasyonları.

Zayıf Yanları

  • Pahalı: Kurumsal planlar aylık binlerce dolar
  • İçerik giriş deneyimi: Editörler için WordPress kadar sezgisel değil
  • Rich text rendering: Karmaşık olabilir (Portable Text'e kıyasla)
  • API rate limitleri: Yoğun kullanımda sınırlara takılabilirsiniz

Maliyet

Plan Fiyat İçerik Modeli Kayıt API İstek
Free $0 48 25K Sınırlı
Basic $300/ay 48 50K 2M/ay
Premium Özel ($2.000+) Sınırsız Sınırsız Sınırsız

Kimin İçin Uygun?

  • Büyük kurumsal projeler
  • Çok kanallı içerik dağıtımı (web, mobil, IoT)
  • Karmaşık iş akışları ve onay süreçleri gereken organizasyonlar
  • Bütçesi geniş ekipler

Kapsamlı Karşılaştırma

Özellik Strapi Sanity Contentful
Tür Açık kaynak, self-hosted Cloud (managed) Cloud (managed)
Fiyat (başlangıç) Ücretsiz Ücretsiz Ücretsiz
Fiyat (production) $10-100/ay (hosting) $15+/kullanıcı/ay $300+/ay
API REST + GraphQL GROQ + GraphQL REST + GraphQL
Gerçek zamanlı Webhook ile Yerleşik Webhook ile
i18n Plugin ile Yerleşik Yerleşik
Media yönetimi Temel (S3 ile gelişmiş) Yerleşik (Sanity CDN) Yerleşik (Images API)
Özelleştirme Çok yüksek (kaynak koda erişim) Yüksek (Sanity Studio) Orta (App Framework)
Veri sahipliği Tam (kendi sunucunuz) Sanity cloud Contentful cloud
Türkçe admin Var Kısmen Kısmen
Next.js entegrasyonu İyi Mükemmel İyi

CMS Seçim Rehberi

Strapi'yi seçin eğer:

  • Veri egemenliği ve gizlilik kritikse (KVKK)
  • Teknik ekibiniz var ve self-hosting yapabilirsiniz
  • Bütçe sınırlı ama uzun vadeli düşünüyorsanız
  • Tam özelleştirme istiyorsanız

Sanity'yi seçin eğer:

  • Birden fazla editör aynı anda çalışacaksa
  • Esnek içerik modelleme istiyorsanız
  • Geliştirici deneyimi öncelikliyse
  • Orta bütçeniz varsa

Contentful'u seçin eğer:

  • Büyük kurumsal bir projeyse
  • Çok kanallı içerik dağıtımı gerekiyorsa
  • Karmaşık iş akışları ve roller gerekiyorsa
  • Kurumsal destek ve SLA istiyorsanız

Maviona'nın Yaklaşımı

Maviona olarak proje gereksinimlerine göre farklı CMS'ler kullanıyoruz. Ancak çoğu müşteri projemizde dosya tabanlı içerik yönetimi (MDX/Markdown + Git) tercih ediyoruz. Bu yaklaşım:

  • Sıfır hosting maliyeti (CMS sunucusu gereksiz)
  • Git ile versiyon kontrolü (her değişiklik takip edilir)
  • Geliştirici dostu (IDE'de düzenleme)
  • Sınırsız ölçeklenebilir (statik dosyalar)

Ama non-teknik editörlerin aktif içerik girişi yapması gereken projelerde Strapi veya Sanity öneriyoruz.

Sonuç

Headless CMS seçimi, projenizin büyüklüğüne, ekibinizin teknik kapasitesine, bütçesine ve içerik yönetimi ihtiyaçlarına bağlı. Her üç platform da güçlü ve olgun. Önemli olan, projenizin gerçek ihtiyaçlarını doğru analiz edip ona göre seçim yapmak.

CMS seçimi ve entegrasyonu konusunda yardıma ihtiyacınız varsa, Maviona ile iletişime geçin.

Paylaş

Bu Konudaki Hizmetlerimiz

Profesyonel destek almak ister misiniz?

WhatsApp ile yazın