How to Migrate From Kontent.ai to a Self-Hosted CMS
Escape enterprise headless pricing, own your content
Kontent.ai (formerly Kentico Kontent) is an enterprise headless CMS with structured content modeling, workflow, and a delivery API. It's aimed at larger organizations and priced accordingly. Teams migrate off Kontent.ai when the enterprise subscription outweighs their actual needs, when they want content on their own infrastructure, or when they want a simpler, self-hosted CMS without the platform overhead. This guide walks the move to a self-hosted CMS with SEO intact.
TL;DR: Export Kontent.ai content via its Delivery API, map content types to posts and pages, import into a self-hosted CMS like UnfoldCMS, preserve slugs, set up 301 redirects for changed URLs, and repoint your front end. Plan for flattening rich-text components and rewriting your delivery-client calls to plain REST.
Why migrate off Kontent.ai?
Clarify your driver:
- Enterprise cost. Kontent.ai pricing targets larger orgs; it's steep for a blog or mid-size site.
- Hosted-only. It's a SaaS platform. If self-hosting is a requirement, you must move.
- Data ownership. Content lives on Kontent's infrastructure. A self-hosted CMS puts it in your own database. See data ownership and your CMS.
- Over-scoped. If you need a CMS and a blog, not enterprise workflow and multi-environment modeling, it's more than the job requires.
If you need Kontent's enterprise workflow and structured modeling at scale, staying is reasonable. If it's over-scoped or too costly, read on.
What you're moving to
This guide targets UnfoldCMS, a self-hosted CMS on Laravel with a REST API at /api/v1/*, content in your own SQLite or MySQL database, and a one-time cost. It replaces Kontent's enterprise platform with a focused, self-hosted CMS.
Set expectations: Kontent.ai uses structured content with linked items and rich-text components. Flattening that into posts and pages with HTML bodies takes a transform step. And its delivery is via SDK/typed clients — you'll rewrite those as plain REST calls.
Step 1 — Export via the Delivery API
Kontent.ai exposes published content through its Delivery API. Pull all items of a type:
curl "https://deliver.kontent.ai/YOUR_PROJECT_ID/items?system.type=blog_post&limit=100"
Page through with skip/limit until you have everything. Each item returns its elements (fields) as structured JSON, including rich-text elements. Save the full export and download assets from the asset URLs.
Step 2 — Map content types
Kontent.ai content types are custom — you defined them. Map to the target CMS:
| Kontent.ai | UnfoldCMS |
|---|---|
| Content item (blog type) | Post |
| Content item (page type) | Page (content_type=page) |
| Rich-text element | Post body (HTML) |
| Linked items / components | Flattened into body HTML |
| Asset element | Media library (featured-image) |
| Taxonomy | Post categories |
| Publish date | posted_at |
| URL slug element | Slug (preserve for SEO) |
The work is flattening rich-text elements — which can embed linked components and content items — into clean HTML.
Step 3 — Convert rich text to HTML
Kontent.ai rich-text is structured, with embedded components and links. Convert it to plain HTML: resolve inline links, render embedded components to markup, and strip the Kontent-specific wrappers. Kontent provides a rich-text resolver concept in its SDKs; use it or a custom script to produce clean HTML. Verify headings, links, and images survive before bulk-importing.
Step 4 — Import into the CMS
Write a migration script that reads the Delivery API export and creates a post or page per item. UnfoldCMS stores body as HTML, so your converted content goes in directly. Preserve slugs, set posted_at from the publish date to keep chronology, map taxonomy to categories, and attach assets to the media library.
Step 5 — Preserve SEO with redirects
If URLs change, set up 301 redirects from old to new paths — the key to holding rankings. UnfoldCMS ships a redirects system. Preserve slugs to minimize changes; audit every path. Carry over any SEO metadata elements you modeled in Kontent to UnfoldCMS's SEO fields. See migrate a blog without losing SEO.
Step 6 — Repoint your front end
Your front end uses Kontent's Delivery SDK or typed client. Repoint it to UnfoldCMS's REST API and rewrite those calls as plain fetch:
// Before (Kontent.ai delivery client)
const response = await deliveryClient.items().type('blog_post').toPromise();
// After (UnfoldCMS REST)
const res = await fetch('https://cms.yoursite.com/api/v1/posts?per_page=20');
const { data: posts } = await res.json();
You lose Kontent's typed content models, but gain a simpler, dependency-free fetch layer.
Step 7 — Rebuild-on-publish
If you triggered rebuilds from Kontent webhooks, replicate with UnfoldCMS's outgoing HMAC-signed webhooks pointed at your deploy hook. Publishing fires the rebuild.
Migration checklist
- [ ] Export items via the Delivery API
- [ ] Download all assets
- [ ] Map content types to posts and pages
- [ ] Convert rich text (with components/links) to HTML
- [ ] Import content, preserving slugs and dates
- [ ] Map taxonomy to categories, carry over SEO metadata
- [ ] Attach assets to the media library
- [ ] Set up 301 redirects for any changed URLs
- [ ] Rewrite delivery-client calls to REST
- [ ] Replicate rebuild webhooks
- [ ] Verify sample pages before go-live
FAQ
Can I export my content from Kontent.ai? Yes. The Delivery API returns every published item with its elements as structured JSON, and assets are downloadable. You get a full, exportable copy.
Will I lose SEO migrating off Kontent.ai? Not if you preserve slugs, set up 301 redirects for changed URLs, and carry over any SEO metadata you modeled to the new CMS's SEO fields.
What's the hardest part of the migration? Flattening Kontent's structured rich-text — with embedded components and linked items — into clean HTML. Budget time for that transform, plus rewriting the delivery-client calls to plain REST.
Does UnfoldCMS keep typed content models like Kontent? No. Kontent offers strongly-typed content models via its SDKs; UnfoldCMS is a simpler posts-and-pages model consumed via plain REST. That's the tradeoff for self-hosting and a one-time cost.
Bottom line
Migrating off Kontent.ai means exporting via the Delivery API, flattening structured rich-text into HTML, mapping content types to posts and pages, and importing into a self-hosted CMS. Protect SEO with redirects and carry over metadata, and rewrite your delivery-client calls to plain REST. You trade an enterprise platform for a focused, self-hosted CMS with data ownership and no subscription.
See UnfoldCMS in the demo or read the blog migration SEO guide.
Related: Migrate from Contentful · How to migrate a blog without losing SEO · Self-hosted vs SaaS CMS
Free & Open Source
Own your CMS. No subscriptions.
Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.
Share this post: