İç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ı:
- Herhangi bir frontend: React, Vue, Svelte, mobil uygulama, hatta dijital tabela — aynı içerik, farklı kanallar
- Performans: Frontend, statik site olarak deploy edilebilir — süper hızlı
- Güvenlik: CMS, public internet'e açık olmak zorunda değil
- Ölçeklenebilirlik: Frontend ve backend bağımsız ölçeklenebilir
- 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.
