Czym jest headless CMS? Jak działa, kiedy go wybrać i przykład ze Strapi

Mateusz Bogolubow

09-11-2026

Czym jest headless CMS, jak przekazuje treść przez API i kiedy lepiej go wybrać niż WordPressa. Z działającym przykładem w Strapi i listą typowych błędów.

Czym jest headless CMS? Jak działa, kiedy go wybrać i przykład ze Strapi
Headless CMS to system zarządzania treścią, który przechowuje i edytuje treści, ale nie ma własnej warstwy wyświetlania: udostępnia je przez API (najczęściej w formacie JSON), a stronę lub aplikację budujesz osobno, na przykład w Next.js. Opłaca się, gdy frontend i tak piszą programiści albo ta sama treść ma trafiać w kilka miejsc naraz. Dla prostej strony wizytówki tradycyjny CMS lub kreator jest zwykle tańszy.

Headless CMS to jedno z haseł, które najczęściej pojawia się obok Next.js i Reacta. Poniżej wyjaśniamy, czym jest i jak działa, pokazujemy działający przykład w Strapi, opisujemy najczęstsze problemy i podpowiadamy, kiedy się opłaca. Jeśli dopiero poznajesz systemy zarządzania treścią, zacznij od artykułu Czym jest CMS.

Czym jest headless CMS?

Headless CMS to system zarządzania treścią bez „głowy”, czyli bez gotowej warstwy, która zamienia treść na stronę widoczną w przeglądarce. Dostajesz panel dla redaktorów, bazę i API. Wygląd strony budujesz samodzielnie, w dowolnej technologii. To podejście bywa nazywane API-first.

W tradycyjnym CMS-ie, takim jak WordPress, panel, baza i wyświetlanie to jedna aplikacja. W headless CMS są to dwie osobne części, które łączy API:

EtapCo się dziejeKto za to odpowiada
1. Redakcjaredaktor pisze i publikuje treść w paneluCMS
2. Przechowywanietreść trafia do bazy według modelu treści (content model)CMS
3. UdostępnianieCMS wystawia treść przez REST API lub GraphQLCMS
4. Wyświetlaniefrontend pobiera dane i buduje stronęTwoja aplikacja, np. Next.js

Czym headless CMS różni się od tradycyjnego?

CechaTradycyjny CMS (np. WordPress)Headless CMS
Wygląd stronymotyw w samym systemiedowolny frontend pisany osobno
Dostarczanie treścistrona HTML z systemuJSON przez API
Wiele kanałów (www, aplikacja mobilna)trudniejszenaturalne, jedno źródło treści
Potrzebny programistaniekoniecznietak, do frontendu
Czas startukrótki, gotowe motywydłuższy, trzeba zbudować frontend
Powierzchnia atakupanel i wtyczki na tej samej domeniepanel osobno, frontend zwykle bez wtyczek

Zalety i wady wynikają z tej różnicy. Zyskujesz swobodę technologiczną, jedno źródło treści i możliwość zbudowania szybkiego frontendu. Płacisz dłuższym startem, koniecznością zbudowania wszystkiego samodzielnie (podglądu, wyszukiwarki, formularzy) i tym, że do każdej zmiany układu potrzebny jest programista.

Jak wygląda headless CMS w praktyce? Przykład ze Strapi

Najłatwiej zrozumieć to na działającym przykładzie. Użyjemy Strapi, otwartoźródłowego headless CMS-a napisanego w JavaScripcie. Przykład uruchomiliśmy w wersji 5.61.0 na Node 22 z bazą SQLite. Strapi wspiera obecnie Node 22, 24 i 26 (wersje nieparzyste nie są wspierane).

Jak utworzyć projekt?

npx create-strapi@latest blog-cms --non-interactive --skip-cloud --use-npm
cd blog-cms
npm run develop

Pierwsze polecenie tworzy projekt z domyślną bazą SQLite, bez logowania do chmury Strapi i bez przykładowych danych. Po instalacji npm run develop uruchamia serwer pod adresem http://localhost:1337, a panel administracyjny jest dostępny pod /admin. Przy pierwszym wejściu tworzysz konto administratora.

Jak dodać typ treści?

W panelu wchodzisz w Content-Type Builder i tworzysz typ „Article” z polami title (tekst), slug (identyfikator URL), body (tekst) oraz relacją do typu „Author”. To właśnie jest model treści, czyli opis tego, jakie dane przechowujesz. Strapi na tej podstawie sam wystawia adres /api/articles.

Dlaczego dostaję błąd 403, zanim pobiorę jakiekolwiek dane?

To najczęstszy problem początkujących. Pierwsze zapytanie do świeżego projektu:

const res = await fetch("http://localhost:1337/api/articles");
console.log(res.status);

zwraca 403 Forbidden. Nie znaczy to, że serwer się zepsuł. Wszystkie typy treści są domyślnie prywatne. Masz dwie możliwości: nadać rolę Public uprawnienie find w Settings → Users & Permissions → Roles → Public albo wysłać zapytanie z tokenem w nagłówku Authorization: Bearer <token>. Po nadaniu uprawnienia to samo zapytanie zwraca 200 i listę opublikowanych wpisów.

Jak pobrać artykuły razem z autorem?

Funkcja, którą uruchomiliśmy w Node 22:

async function getArticles() {
  const res = await fetch("http://localhost:1337/api/articles?populate=author");
  if (!res.ok) throw new Error(`CMS HTTP ${res.status}`);
  const { data, meta } = await res.json();
  return {
    articles: data.map((a) => ({ title: a.title, author: a.author?.name ?? "brak autora" })),
    total: meta.pagination.total,
  };
}

console.log(await getArticles());

Wynik dla przykładowych danych to { articles: [{ title: 'Pierwszy wpis', author: 'Ola Nowak' }], total: 1 }. Odpowiedź ma trzy części: data z dokumentami, meta z paginacją (domyślnie 25 wpisów na stronę) i error tylko przy błędzie. Pola leżą na najwyższym poziomie dokumentu, a pojedynczy dokument pobierasz po jego documentId.

Przydatne parametry zapytania sprawdziliśmy w praktyce:

CelParametrWynik w naszym teście
Powiązane danepopulate=authordo wpisu dochodzi obiekt autora
Tylko wybrane polafields[0]=titleodpowiedź zawiera tytuł i identyfikatory
Filtrfilters[title][$contains]=Pierwszyjeden pasujący wpis
Sortowanie i stronasort=title:asc&pagination[pageSize]=1jeden wpis na stronę
Wersje roboczestatus=draftszkice zamiast opublikowanych

Jakie są najczęstsze problemy z headless CMS?

Pytania ze Stack Overflow pokazują, że w większości przypadków przyczyną jest konfiguracja, nie błąd w kodzie. W naszych testach powtórzyły się trzy objawy:

ObjawPrzyczynaCo zrobić
403 Forbiddentyp treści jest prywatnynadaj uprawnienie find roli Public albo użyj tokenu
Brakuje autora, obrazu lub komponenturelacje i media nie są domyślnie w odpowiedzidodaj populate
Brakuje wpisu, który widać w paneluwpis jest szkicemopublikuj go albo zapytaj z status=draft
ECONNREFUSEDserwer CMS nie działauruchom go przed frontendem

Dwie uwagi praktyczne. Po pierwsze, sprawdź, czy pole slug jest wypełnione: w naszym teście wpisy utworzone przez API miały slug: null, więc filtr po slugu nic nie zwrócił, a w panelu administracyjnym slug wypełnia się z tytułu. Po drugie, na forach często pojawiają się też pytania o wdrożenie Strapi na Vercel i o błąd modułu sharp na Windowsie. Tych przypadków nie testowaliśmy, więc sprawdź dokumentację przed wdrożeniem.

Jakie headless CMS-y są dziś najpopularniejsze?

CMSModelCo warto wiedzieć
Strapiotwarte źródło, hostujesz samok. 73 tys. gwiazdek na GitHubie, wersja 5.61.0
Payloadotwarte źródło (MIT), działa w aplikacji Next.jsok. 46 tys. gwiazdek, wymaga nowszego Node (^22.23.4 lub 24.22.1+)
Sanitychmura, edytor Studio na otwartej licencjiplan Free: 20 miejsc, 250 tys. zapytań API miesięcznie
Contentfulplatforma chmurowapopularny w dużych firmach, płatny
Directusotwarte źródło, nakładka na istniejącą bazę SQLok. 39 tys. gwiazdek
Ghostotwarte źródło (MIT), nastawiony na blogi i newsletteryok. 56 tys. gwiazdek

Liczby z GitHuba pochodzą z 8 listopada 2026 i rosną z dnia na dzień, a ceny planów chmurowych pomijamy, bo często się zmieniają. Przetestowaliśmy tylko Strapi, więc opisy pozostałych opierają się na ich dokumentacji. Pełniejsze porównanie z systemami tradycyjnymi znajdziesz w artykule o CMS-ach.

Kiedy warto wybrać headless CMS?

SytuacjaLepszy wybór
Frontend w Next.js lub Reakcie piszą programiściheadless
Ta sama treść ma trafiać na stronę, do aplikacji mobilnej i innych miejscheadless
Zależy Ci na minimalnej liczbie punktów ataku na stronie publicznejheadless z frontendem generowanym wcześniej
Prosta strona firmowa bez programistyWordPress lub kreator
Mały sklep bez programistyShopify lub Wix

Nasza prosta reguła: headless wybierz wtedy, gdy frontend i tak piszą programiści, a nie dlatego, że jest modny. Jeśli redaktor chce tylko zmienić tekst na stronie wizytówki, WordPress lub kreator będzie tańszy i szybszy do uruchomienia, a headless dołoży Ci pracy bez widocznej korzyści. Zaczyna się opłacać, gdy masz programistę i zależy Ci na swobodzie. W sklepach działa to podobnie: Shopify oferuje podejście headless w ramach frameworka Hydrogen, o czym piszemy w artykule o zawodzie Shopify developera.

Czy headless CMS wymaga znajomości Next.js i Reacta?

Nie musi, bo API jest niezależne od technologii, a pobierać dane możesz z dowolnego języka. W praktyce headless CMS najczęściej łączy się z Next.js i Reactem, bo dobrze radzą sobie z tworzeniem stron wcześniej, co jest ważne dla szybkości i indeksacji w wyszukiwarkach. Jeśli chcesz pójść tą drogą, zacznij od czym jest React, potem przejdź do Next.js, a podstawy HTML, CSS i JavaScript możesz utrwalić w naszym kursie frontendu.

Masz pytanie do artykułu? Chcesz zgłosić błąd?

Pytaj ogólnie o temat artykułu albo napisz, co poprawić. Jeśli chcesz omówić swój konkretny przypadek, umów się na rozmowę. Ze względów bezpieczeństwa nie przeglądamy ani nie publikujemy żadnych linków. Wiadomości z linkami nie są zapisywane. Limit: 2 pytania na godzinę.

Wyślemy na niego link do potwierdzenia pytania i odpowiedź.

Ostateczną decyzję o opublikowaniu pytania podejmuje administrator.

Konsultacja i warsztaty devmentor.pl

Masz pytania?

Partnerzy

Firmy, z którymi współpracujemy

To partnerzy odpowiedzialni za staże po naszych kursach. Organizują je dla najlepszych absolwentów.

Zobacz wszystkich partnerów →
  • VR Medical
  • Sophona
  • Robot Force