Een headless CMS lijkt een technische keuze, maar het bepaalt voor jaren hoe makkelijk je team content beheert en hoe snel ontwikkelaars nieuwe features bouwen. WordPress en andere traditionele systemen koppelen editor en frontend in één pakket, een headless CMS scheidt die twee zodat je elke frontend technologie kunt gebruiken: Next.js, Astro, een mobiele app of zelfs een fysiek scherm. De vier opties die er voor het MKB in 2026 echt toe doen (zie ook onze gids over custom software laten bouwen) zijn Strapi, Payload, Sanity en Storyblok.
Wat is een headless CMS en waarom heb je het nodig?
Een headless CMS is een content-systeem zonder eigen frontend. Het levert content via een API (REST of GraphQL) aan welke frontend je ook gebruikt. Een traditioneel CMS zoals WordPress bevat zowel de editor als de website-rendering in één pakket. Bij een headless oplossing leeft de editor in het ene systeem, en bouwen developers een aparte frontend.
Voor het MKB worden vier redenen vaak doorslaggevend om naar headless te gaan. De site moet content voeden aan een mobiele app of kassasysteem. WordPress is traag en kwetsbaar voor plugins. Het ontwikkelteam wil moderne tooling (TypeScript, Git-flow). De site is onderdeel van een groter platform.
Welke headless CMS opties zijn er voor het MKB?
- Strapi: open-source, Node.js, self-hostable. Gratis Community-editie. Sterk in flexibiliteit en eigenaarschap. Site: strapi.io.
- Payload: TypeScript-first, code-driven, onderdeel van Figma sinds 2024. Self-hosted, MongoDB of PostgreSQL. Site: payloadcms.com.
- Sanity: hosted SaaS, real-time collaboration, eigen query-taal GROQ. Gratis tier ruim. Site: sanity.io.
- Storyblok: visual editor met live preview, marketing-team-vriendelijk. Hosted SaaS.
Strapi: voor wie en wanneer?
Strapi is het bekendste open-source headless CMS in Node.js. De community-editie is gratis, je host het zelf op een VPS. Wij kiezen Strapi typisch in drie scenarios: een klant wil expliciet self-hosting, hybride van content en custom data-modellen, of budget is krap. Reken op €4.500 tot €8.000 implementatie en €15 tot €40 per maand hosting.
Payload: voor wie en wanneer?
Payload is de nieuwste serieuze speler. TypeScript-first, code-driven, onderdeel van Figma. Voor ontwikkelaars vaak het prettigste werken. Wij kiezen Payload als er een eigen platform gebouwd wordt waar content één van de modules is. Zie custom platforms. Reken op €4.500 tot €8.000 implementatie en €20 tot €50 per maand hosting.
Sanity: voor wie en wanneer?
Sanity is hosted SaaS, real-time collaboration, eigen query-taal GROQ. Gratis tier is voor MKB-sites zeer ruim: 100.000 API-calls per maand, 3 gebruikers. Wij kiezen Sanity in 50 tot 60 procent van onze content-gedreven projecten. Marketing-sites, blogs, productcatalogi. Reken op €4.500 tot €8.000 implementatie.
Storyblok: voor wie en wanneer?
Storyblok onderscheidt zich met de visual editor. Redacteuren zien direct hoe een pagina eruit ziet. Wij kiezen Storyblok wanneer het marketing-team de driver is. Bijvoorbeeld een retail-keten waar 5 tot 10 marketeers wekelijks landingspagina’s bouwen. Reken op €4.500 tot €8.000 implementatie.
Vergelijkings-matrix: features, hosting en pricing
| Feature | Strapi | Payload | Sanity | Storyblok |
|---|---|---|---|---|
| Hosting | Self-host of Cloud | Self-host | SaaS (US/EU) | SaaS (US/EU) |
| Database | PostgreSQL/MySQL | MongoDB/Postgres | Sanity-eigen store | Storyblok-eigen store |
| Schema-definitie | UI of code | Code (TypeScript) | Code (JS/TS) | UI |
| Visual editor | Beperkt | Beperkt | Custom in React | Sterk visueel |
| Real-time collab | Nee | Beperkt | Ja | Ja |
| Gratis tier | Onbeperkt (self-host) | Onbeperkt (self-host) | 100k req/mnd | 1k entries |
| Learning curve dev | Laag | Middel (TS-kennis) | Middel (GROQ) | Laag |
| Learning curve redacteur | Middel | Middel | Laag | Zeer laag |
Wanneer kies je geen headless CMS?
- Eenvoudige bedrijfssite met 5 tot 15 paginas en kwartaal-updates: WordPress of een statische site volstaat.
- Marketing-site door één persoon: een statische site (Astro of Next.js) met content in Markdown werkt prima.
- Webshops met standaard producten: Shopify of WooCommerce dekken 80 procent beter dan headless.
Onze keuze in 80 procent van de gevallen
Van de vier opties kiezen wij in 80 procent van onze projecten voor Sanity of Payload. Strapi pakken we wanneer self-hosting een vereiste is. Storyblok zien we vooral bij retail- en hospitality-klanten met grote marketing-teams. Bekijk onze websites en dashboards en CMS oplossingspagina’s voor hoe wij deze stack inzetten.
Strapi diepe duik: versie 4 versus versie 5
Strapi v4 was de stabiele werkpaard versie tussen 2022 en 2024. Sinds eind 2024 is v5 de standaard. De grootste verandering is de Document Service API en native draft and publish workflow per locale. Voor bestaande v4 projecten is migratie geen druk-op-de-knop actie. De data structuur is anders, plugin compat is breekbaar en de admin UI is herschreven. Wij hebben in 2025 drie v4 projecten gemigreerd. Tijd per migratie: 40 tot 70 uur, afhankelijk van het aantal custom plugins.
- Strapi pros: open source, eigen hosting, sterke REST en GraphQL out of the box, grote community met meer dan 60 duizend GitHub sterren.
- Strapi cons: plugin ecosysteem is wisselend van kwaliteit, breaking changes tussen majors zijn pittig, admin UI voelt minder verfijnd dan Sanity of Storyblok.
- Wanneer v5: alle nieuwe projecten vanaf 2025, met name als je draft and publish per taal nodig hebt.
- Wanneer nog v4: alleen als je een lopend project hebt waar migratie pas in een volgend kwartaal past.
Payload diepe duik: TypeScript schema in code
Het sterkste argument voor Payload is dat je hele content model in TypeScript leeft, naast je app code, onder versie beheer. Geen los admin UI dat klikt en data muteert. Een schema definitie ziet er bijvoorbeeld zo uit voor een blog post collection.
import type { CollectionConfig } from 'payload/types'
export const Posts: CollectionConfig = {
slug: 'posts',
admin: { useAsTitle: 'title' },
access: { read: () => true },
fields: [
{ name: 'title', type: 'text', required: true },
{ name: 'slug', type: 'text', required: true, unique: true },
{ name: 'author', type: 'relationship', relationTo: 'users' },
{ name: 'body', type: 'richText' },
{ name: 'publishedAt', type: 'date' },
],
}
Voor ontwikkelaars is dit de prettigste werk ervaring van de vier opties. Voor redacteuren is de drempel iets hoger dan Sanity of Storyblok, omdat de admin UI minder visuele afwerking heeft. In ruil krijg je type safety in je hele stack en kan je het hele content model code reviewen in een pull request.
Sanity diepe duik: GROQ versus GraphQL
Sanity heeft zijn eigen query taal GROQ. Dat is op het eerste gezicht een drempel, maar in de praktijk een van de redenen waarom teams Sanity verkiezen. GROQ is expressiever dan GraphQL voor genest content werk en projecteert exact de velden die je nodig hebt, in een vorm die je zelf bepaalt. Voor klanten die alleen GraphQL kennen biedt Sanity ook een GraphQL endpoint, maar in 90 procent van onze projecten gebruiken wij GROQ direct.
| Onderwerp | GROQ | GraphQL |
|---|---|---|
| Leercurve | Middel (1 tot 2 dagen) | Laag voor wie het al kent |
| Geneste content | Sterk | Werkt, vraagt meer setup |
| Projectie van velden | Direct in query | Vraagt fragments |
| Tooling | Sanity Vision in studio | GraphQL Playground |
| Performance | Een API call, een response | Een API call met overhead |
Storyblok diepe duik: hoe werkt de visual editor in de praktijk?
De visual editor van Storyblok is de differentiator. Marketeers openen een pagina, zien de live preview links en een veld panel rechts. Wijzigingen verschijnen direct in de preview. Dat klinkt makkelijk maar vraagt aan de developer kant een component bibliotheek waar elk block een eigen Vue of React component is met een bijbehorend schema. Wij bouwen dat doorgaans in een aparte sprint van 2 tot 3 weken voor we content gaan modelleren.
- Wat werkt sterk: marketing teams werken zonder developer tussenkomst, A B tests via plugin, multi language out of the box.
- Wat minder werkt: ontwikkelaar moet voor elk block twee dingen onderhouden, het schema in Storyblok en de component in code.
- Wanneer Storyblok: marketing afdeling van 4 plus mensen, of een retail of hospitality keten met wekelijkse landing page lanceringen.
- Wanneer niet: ontwikkelaars werken het liefst in code, of het team is klein.
Wat kost een migratie tussen headless CMS providers?
In 2024 en 2025 hebben wij vier klanten gemigreerd. Tweemaal Strapi naar Sanity, eenmaal WordPress naar Payload, eenmaal Contentful naar Sanity. De kosten variëren stevig op basis van content volume, aantal content types en hoeveel custom logica in het oude systeem zat.
| Van | Naar | Content volume | Kosten | Doorlooptijd |
|---|---|---|---|---|
| WordPress | Payload | 500 posts | €8.500 tot €14.000 | 4 tot 6 weken |
| Strapi v4 | Sanity | 300 entries, 5 types | €7.000 tot €11.500 | 3 tot 5 weken |
| Contentful | Sanity | 1500 entries, 12 types | €12.000 tot €18.000 | 5 tot 8 weken |
| Storyblok | Payload | 200 pages met blocks | €10.000 tot €15.000 | 4 tot 7 weken |
Editor experience vergeleken: rollen, rechten, draft en preview
Voor het MKB wegen redactie functies vaak zwaarder dan de tech keuze. Een marketeer die geen preview heeft of geen draft kan opslaan stopt na een week met het CMS gebruiken. Hieronder de vier opties op de redactie features die in de praktijk het verschil maken.
| Feature | Strapi | Payload | Sanity | Storyblok |
|---|---|---|---|---|
| Draft en publish | Ja (v5) | Ja | Ja, real time | Ja, met visuele preview |
| Rol en rechten model | Granulair (Enterprise) | Granulair (code) | Granulair (UI) | Granulair (UI) |
| Preview functie | Werkt via custom setup | Werkt via custom setup | Real time naast editor | Visueel in editor zelf |
| Multi user collab | Beperkt | Beperkt | Real time multi cursor | Real time multi cursor |
| Versiebeheer | Beperkt | Versions plugin | History per document | History per pagina |
Hosting en infrastructuur: self hosted versus SaaS
Strapi en Payload zijn primair self hosted, Sanity en Storyblok zijn SaaS. Dat heeft gevolgen voor performance, beschikbaarheid en je maandlasten. Self hosted geeft je controle en lagere kosten op schaal, SaaS geeft je een team dat 24 op 7 paraat staat zonder dat jij dat hoeft te regelen.
- Strapi self host: een VPS bij Hetzner of Cloudflare met 4 GB RAM trekt 100 plus duizend page views per maand. Kosten 15 tot 40 euro per maand plus monitoring.
- Payload self host: zelfde profiel als Strapi, MongoDB of Postgres apart. Kosten 20 tot 50 euro per maand.
- Sanity SaaS: gratis tot 100 duizend API calls per maand, daarna 99 euro per maand. Multi region CDN ingebouwd.
- Storyblok SaaS: vanaf 99 euro per maand voor de Entry plan, hogere tiers voor teams of multi space.
Echte TopDevs klant case: welke CMS kozen we en waarom?
Voor een Nederlandse vastgoed klant in 2025 hebben wij Payload gekozen boven Sanity. De redenen waren concreet: de klant wilde alle data on premise houden vanwege contractuele afspraken met huurders, het content model had 14 types met diepe relaties, en het ontwikkelteam aan klantkant was TypeScript first. Hadden dezelfde criteria niet gegolden bij een MKB marketing site, dan was Sanity de keuze geweest. Voor Mastone was de afweging anders en kozen wij voor een combinatie van Payload met een eigen frontend.
- Klant profiel: vastgoed bedrijf, 8 medewerkers, 4 redacteuren.
- Doorslaggevende criteria: data on premise, complex content model, TypeScript expertise intern.
- Tijd tot live: 9 weken inclusief schema, migratie en frontend integratie.
- Kosten: 11 duizend euro implementatie, 35 euro per maand hosting bij Hetzner.
- Uitkomst: redacteuren publiceren wekelijks zonder developer hulp, code in eigendom in Git repository.
Hoe begin je concreet?
- Stap 1: schrijf op wie de editor gebruikt en hoe vaak. Eén marketeer die maandelijks publiceert is een andere wereld dan een team van 6 dat dagelijks lanceert.
- Stap 2: maak een mini-prototype. Sanity en Storyblok zijn binnen een dag opgezet.
- Stap 3: plan een intake-gesprek voor de definitieve keuze.
Plan een gratis intake-gesprek. Onze werkwijze en garanties staan in onze algemene voorwaarden.