NextWoo
Builder-to-storefront migration

Move from WPBakery to a Next.js storefront

Deactivate WPBakery and your pages become raw shortcode text. That single property shapes the entire migration plan.

WPBakery shortcodes parsed into structured storefront content

WPBakery is the builder people migrate away from for a reason that has nothing to do with taste. Its content model is shortcodes stored in post_content, which means the builder is not a layer over your content — it is the only thing that can read it. Turn the plugin off and product descriptions, landing pages and category intros render as visible bracket soup. There is no half-migrated state where some pages have moved and the rest still work normally, so the plan has to be all-or-nothing per template, and the parser has to be written before anything renders.

01

Shortcode lock-in decides the whole plan

Every other builder stores structured data somewhere retrievable. Elementor keeps a JSON tree in post meta. Divi and WPBakery both use shortcodes, but WPBakery's are broader and less consistent, because a decade of themes and add-on packs each registered their own. That has two consequences worth pricing honestly. First, the content cannot be read without a parser that knows every registered shortcode on your specific site, not on WPBakery in general. Second, you cannot run a partial migration where the old and new frontends coexist for a month — a page is either parsed and rebuilt, or it is broken. Migrations that assumed otherwise are the ones that stall.

02

Inventory your shortcodes before quoting anything

Run a scan across post_content and count distinct shortcode tags. Core WPBakery tags — vc_row, vc_column, vc_column_text, vc_single_image — are handled once and reused everywhere. The cost sits in the tail: shortcodes registered by your theme, by add-on bundles, and by whichever developer added a custom one in 2019 that renders the shipping table. Below about twenty distinct tags the parser is a couple of days. Past sixty, and especially past sixty with heavy nesting, a general parser stops paying and rebuilding the pages that matter by hand wins.

  • Count distinct shortcode tags across all post types, not just pages
  • Separate core vc_* tags from theme-registered and custom ones
  • Flag shortcodes with no matching render function — those pages are already broken
  • Check product descriptions specifically; shortcodes there are the ones most often forgotten
03

The theme that installed it matters more than WPBakery

Almost nobody buys WPBakery directly. It arrives bundled with a ThemeForest theme — Porto, The7, Betheme, Salient — and the theme registers its own element pack on top. So the real question at audit is which theme you are on, because that determines both the shortcode vocabulary and where the header, footer and product layouts are configured. A Porto store and a Betheme store both say "we use WPBakery" and need different work. If your theme also has its own theme-options panel driving the product page, that panel is a second content store the parser knows nothing about and it has to be transcribed by hand.

04

Grid Builder and post grids need reimplementing as queries

WPBakery's Grid Builder produces grids driven by queries — post type, taxonomy, ordering, item count — with the layout defined in a separate grid element that is referenced by ID. Two things break here in predictable ways. Grid definitions live apart from the pages that use them. A naive parse therefore produces a page referencing a grid template nobody migrated. And ordering set to custom maps to menu_order, so a rebuild sorting by date will silently reshuffle merchandised collections that someone arranged by hand. Enumerate every grid, map its query to the WooCommerce API, and check sort order against the live site rather than the settings screen.

05

What actually gets faster, and why

Every request parses shortcodes server-side and ships a bundle covering every element the theme could render, including those this page never uses. A Next.js storefront renders once and ships only what the template needs — on a category page, usually the largest single reduction in transferred bytes available to a WooCommerce store. Slowness rooted in a 4,000-product catalog on an unindexed database survives it untouched, because the API reads the same tables.

06

When staying on WPBakery is the honest answer

A store under about 150 products, selling steadily, with green CrUX vitals has nothing to gain here. We say so rather than take the work. Keeping WPBakery for the blog while moving only the shop cannot be done cleanly, because the shortcode boundary runs through your content rather than between your sections. Half-measures here produce a site nobody can edit. And if there is no one on the team who can maintain a Next.js application or a support contract covering it, the migration converts a maintainable-if-slow store into a fast store that goes stale. That trade is worse than it sounds two years out.

07

How the project is staged

Stage one is the shortcode inventory and a parser prototype run against your twenty highest-traffic URLs — this is where a quote becomes real, and where roughly one project in five turns out to be the hand-rebuild case instead. Stage two rebuilds templates: product, category, homepage. Stage three handles the long tail of content pages and the redirect map. Checkout stays on WooCommerce throughout. Launch with the old site intact behind a switch you have tested, and keep it there for two weeks — with shortcode content there is no partial rollback, so the whole-site switch is the only rollback you have.

Frequently asked questions

Still have questions?

Reach out and we'll get back to you within 24 hours.

Contact us
What happens if we just deactivate WPBakery?

Pages render as visible shortcode text. Content stored in post_content is only readable by the builder that wrote it, which is why there is no gradual migration path off WPBakery.

How is WPBakery content converted?

By parsing shortcodes into structured content, then mapping each tag to a component. The cost is driven by how many distinct tags your site registers — past about sixty, hand-rebuilding the important pages is cheaper than a general parser.

Can we migrate the shop but keep WPBakery for the blog?

Not cleanly. The shortcode boundary does not follow the shop/blog boundary, and this split reliably produces a site the team cannot edit on either side.

Does our ThemeForest theme change the work?

Substantially. Porto, The7, Betheme and Salient each register their own element pack and often drive product layouts from a separate theme-options panel that no parser can read.

Related reading
  • WPBakery тормозит WooCommerce

    Why WPBakery and WooCommerce stores become slow on mobile, how it differs from Elementor or WoodMart issues, and when a Next.js storefront helps.

  • The7 to Next.js

    The7 stores keep their design in a theme options panel rather than in page content, and often run two builders at once. What that means for extraction, and what it costs.

  • Betheme to Next.js

    Betheme benchmarks around 60/100 and stores content in Muffin Builder's own format. What that means for extraction, what the pre-built websites left behind, and when to stay.

  • Porto to Next.js

    Move a Porto WooCommerce storefront to Next.js: untangle WPBakery content and theme-option layouts while products, orders and checkout stay in WooCommerce.

See how many sales your store is losing

Start with a free speed audit. You'll get your store's real numbers and an honest recommendation — even if it's "you don't need us".

Anything you already suspect — checkout feels slow on phones, the category pages crawl, you were told the theme is the problem. Guesses are useful; we check them.

No sales call — you'll get a written report with your store's numbers.

By requesting an audit you accept our Privacy policy and Terms of service. We may publish an anonymised summary of the findings as an example of our work. We never name your business without your written consent.