Migrating from Kadence Blocks to native ACF blocks
Leaving Kadence Blocks for a bespoke ACF block library? How Kadence stores layout in Gutenberg, what breaks when you deactivate it, and the agency workflow…
verifiedReviewed by Tommy Smith,Content Director

Kadence Blocks stores layout as kb/* Gutenberg blocks in post_content — not ACF fields. To migrate: register your ACF block library, crawl the rendered Kadence pages, classify each section into your blocks, review confidence scores, import as drafts, then rebuild Kadence-only headers and forms before deactivating the plugin.
Kadence Blocks feels closer to a "real" block editor than Elementor or Divi — because it *is* Gutenberg. That makes some agencies assume an exit is trivial: export, switch theme, done. It isn't. Kadence still stores content in **kb/** block markup with its own design tokens, row layouts, and Pro-only sections — not in your ACF field keys. When you standardise a portfolio on a bespoke block library, Kadence sites need the same crawl-and-classify workflow as any other builder exit.
Kadence theme vs Kadence Blocks — scope the job
Clients say "Kadence site" when they mean three different stacks. Scope which parts you're retiring before you quote migration hours.
| Stack | What it is | Migration note |
|---|---|---|
| Kadence Blocks plugin only | kb/* blocks in post_content on any theme | Page-body migration into ACF blocks |
| Kadence Theme + Blocks | Theme header/footer + Kadence layouts | Rebuild theme templates *and* page content |
| Kadence Pro patterns | Design library, advanced forms, dynamic content | Patterns don't map 1:1 — classify rendered output |
| Kadence WooCommerce templates | Shop styling tied to Kadence | Pair with [WooCommerce rebuild guide](/blog/rebuild-woocommerce-site-acf-blocks) |
How Kadence Blocks stores content
Unlike Elementor's postmeta JSON, Kadence Blocks serialize into **post_content** as namespaced Gutenberg blocks (`kadence/rowlayout`, `kadence/column`, `kadence/advancedheading`, `kadence/infobox`, etc.). The front-end looks clean; the database is still Kadence-specific block comments and attributes — not your `hero_title` or `cards` repeater fields.
- arrow_right**Row / column layout:** nested `kadence/rowlayout` wrappers — map inner sections, not every wrapper div.
- arrow_right**Advanced heading & text:** heading level and copy live in block attributes — good candidates for hero and text blocks.
- arrow_right**Info box / icon list:** feature grids map cleanly to repeater-driven card blocks.
- arrow_right**Accordion / tabs:** FAQ and tab content map to accordion blocks — watch for duplicate panel IDs.
- arrow_right**Testimonials / pricing table:** repeaters with images and links — high value to automate, easy to mis-count manually.
- arrow_right**Forms (Kadence Form block):** capture is Kadence-specific — rebuild in Gravity Forms or CF7.
- arrow_right**Dynamic content (Pro):** query loops and linked fields need live queries on the new theme, not static HTML snapshots.
Why agencies leave Kadence Blocks
- arrow_right**Portfolio consistency** — one ACF block library across every client, not Kadence design tokens per site.
- arrow_right**Editor handover** — clients see only your blocks in the inserter, not Kadence + ACF + core blocks fighting for attention.
- arrow_right**Long-term ownership** — no dependency on Kadence Pro renewals for layout blocks you could own in PHP.
- arrow_right**Classifier-ready exports** — AIRA and similar tools learn from your ACF JSON spec; Kadence block JSON doesn't plug in.
- arrow_right**Performance** — Kadence is lighter than Elementor, but bespoke blocks still win when you control markup and asset loading per block.
Kadence block → ACF block mapping
Use this table as a starting spec when you register blocks or review classifier output. Adjust to your library naming.
| Kadence block | Typical ACF block | Field notes |
|---|---|---|
| Row layout / column | Layout wrapper (skip) or section | Map children, drop empty wrappers |
| Advanced heading | Hero or section heading | Preserve H1–H6; one H1 per page |
| Advanced text | Text / prose block | Watch for inline links and lists |
| Info box | Feature or card grid | Icon, title, body, link per repeater row |
| Icon list | Features block | Repeater: icon, label, description |
| Testimonials | Testimonial block | Avatar sideload; cite name/role |
| Accordion | FAQ block | Question + answer pairs |
| Tabs | Tabbed content or split blocks | Often simpler to flatten to stacked sections |
| Image / gallery | Hero or gallery block | Sideload; regenerate srcset on new theme |
| Advanced btn | CTA band | URL, label, style variant |
| Count up | Stats row | Number + label per column |
| Pricing table | Pricing block | Repeater: plan name, price, features, CTA |
| Form | Rebuild — not migrated | New handler + spam protection |
| Posts block (query) | Dynamic query block | Don't snapshot grid HTML — wire WP_Query |
What breaks if you just deactivate Kadence Blocks
- arrow_rightPages show **"Block contains unexpected or invalid content"** in the editor — kb/* blocks have no renderer.
- arrow_rightFront-end may print raw block comments or empty sections depending on theme.
- arrow_rightKadence global palette / typography classes vanish — spacing looks wrong even if text survives.
- arrow_rightHeader/footer built with Kadence Elements (Pro) disappear — they're not in post_content.
- arrow_rightForms stop submitting — Kadence Form handlers are plugin-bound.
The safe sequence matches every builder exit: **new content in ACF blocks on staging → QA → redirects → deactivate Kadence**. See the page builder exit guide for the full pre-flight checklist.
The Page Builder Exit Playbook
How Elementor, Divi, Kadence Blocks, WPBakery, Beaver and Oxygen store layout, what breaks if you just deactivate them, and the step-by-step approach to a clean exit.
- check_circleWhat each builder leaves behind
- check_circleThe section-by-section exit approach
- check_circleA pre-exit safety checklist
- check_circlePost-migration cleanup steps
Migration workflow (agency)
- 1**Discovery** — export sitemap; list Kadence Elements headers/footers; note forms, query loops, and WooCommerce templates.
- 2**Build destination** — register ACF blocks; export field groups as JSON; rebuild header/footer/archive templates in the theme.
- 3**Crawl rendered pages** — with Kadence active, crawl public URLs; classifier reads DOM sections, not kb block comments.
- 4**Review classifications** — fix low-confidence rows, query loops, and pricing tables in the review UI.
- 5**Import drafts** — sideload media, rewrite internal links; carry SEO meta per page.
- 6**Forms & dynamic blocks** — rebuild forms; wire live queries for post grids.
- 7**Redirects & QA** — redirect map, QA checklist, post-launch monitoring.
- 8**Deactivate Kadence** — only after every URL is accounted for and editors have training on your blocks.
Kadence vs Elementor / Bricks — migration effort
Kadence sits in the middle of the difficulty spectrum. Cleaner DOM than Elementor or Divi; more nested layout blocks than Bricks. Teams often see **higher classifier confidence** on Kadence marketing pages than on legacy WPBakery — but Kadence Elements and Pro dynamic content add scope that pure page crawls miss.
| Source | Storage | Typical classifier confidence | Hidden scope |
|---|---|---|---|
| Elementor | postmeta JSON | Moderate — heavy wrappers | Popups, theme builder |
| Kadence Blocks | post_content kb/* | Moderate–good — cleaner DOM | Elements, forms, query loops |
| Bricks | postmeta JSON | Good — lean HTML | Templates, popups |
| Divi | shortcodes + meta | Lower — verbose markup | Theme Builder layouts |
Blog posts and long-tail content
Marketing pages are the expensive part; blog archives are often faster via hybrid migration. If posts are native Kadence blocks in post_content, bulk conversion to core blocks may suffice for editorial content — see migrating blog posts to ACF blocks. Don't run the same page through both WXR import and AIRA crawl.
SEO during a Kadence exit
Kadence doesn't change the SEO playbook: preserve titles, meta descriptions, canonicals, and Open Graph images per URL. If you use Kadence's breadcrumb or schema blocks, reimplement schema in your theme or SEO plugin. Guides: Yoast preservation, Rank Math, SEOPress.
Pricing and quoting Kadence migrations
Count marketing URLs from the sitemap — not blog posts unless the SOW includes them. **1 credit = 1 page** on AIRA when you commit a crawl; crawling and preview are free. A 40-page Kadence brochure site is 40 credits — predictable enough to line-item separately from design. See scoping and pricing rebuilds and the 2026 time benchmark for labour comparisons vs manual copy-paste.
When manual migration still wins
- arrow_rightOne or two landing pages with heavy Kadence animations you won't recreate in ACF.
- arrow_rightA single homepage art-directed in Kadence Elements with no repeating patterns.
- arrow_rightAir-gapped staging the crawler cannot reach.
- arrow_rightClient insists on keeping Kadence Blocks on blog only — migrate marketing pages, leave blog on core blocks.
For everything else at scale, crawl-and-classify beats field-by-field copy-paste. Compare approaches in AIRA vs manual migration and migration tools compared. Walkthrough: how to use AIRA · for agencies.
What to read next on this rebuild
Kadence Elements headers and footers won't migrate with page crawls — rebuild theme templates before deactivating Kadence. Forms need Gravity/CF7 migration; query loops need CPT migration when grids pull custom records. Compare effort with Elementor and Bricks exits via the page builder exit guide.
Frequently asked questions
Is Kadence Blocks the same as the Kadence theme?expand_more
No. Kadence Blocks is a Gutenberg block plugin (kb/* blocks). Kadence Theme is a separate product that often pairs with it for headers, footers, and global styles. You can run Kadence Blocks on other themes. Migration scope depends on which parts you're replacing with your ACF theme.
Can I convert Kadence blocks to ACF blocks automatically in WordPress?expand_more
WordPress has no built-in Kadence-to-ACF converter. Kadence block comments don't map to your ACF field keys without a classification step. Tools like AIRA crawl the rendered page and assign sections to your registered block library using your ACF JSON export as the spec.
Do I need Kadence Pro migrated before deactivating?expand_more
You need equivalent functionality on the new site — not a licence transfer. Pro features (dynamic content, advanced galleries, Kadence Elements) must be rebuilt as theme templates, ACF blocks, or lighter plugins. Deactivate only after staging proves every URL and form works.
Is leaving Kadence easier than leaving Elementor?expand_more
Often slightly — cleaner HTML and real Gutenberg storage help classification. Hidden scope (Elements, forms, query loops) still requires manual work. The workflow is the same: blocks first, crawl second, redirects last.
What about Spectra or Stackable instead of Kadence?expand_more
Same principle: UAG/Spectra and Stackable are also namespaced Gutenberg blocks in post_content. Migrate from rendered output into your ACF library; see the [page builder exit guide](/blog/page-builder-exit-guide) for the shared sequence.

Ryan Hale
Head of Front End Development
Ryan Hale is Head of Front End Development at AIRA, where he leads the team building the engine that migrates WordPress sites into native ACF blocks. He has spent more than a decade building and rebuilding WordPress sites for agencies, with deep, hands-on expertise in Advanced Custom Fields, Gutenberg block development, and large-scale content migrations that protect search rankings. He writes about ACF, moving off page builders like Elementor and Divi, and the practical craft of shipping fast, maintainable WordPress rebuilds.
Reviewed to our editorial guidelines.

