GeneratePress migration guide
GeneratePress to Next.js: Leaving the Cleanest Theme in WordPress
Of all the popular WordPress themes, GeneratePress leaves the least behind when you go. That is not flattery. It is a description of the database, and it is the main reason a GeneratePress site usually costs less to move to Next.js than the same site built on a page builder.
October 7, 2026 · 11 min read
The short answer
To migrate GeneratePress to Next.js, read the Customizer values from the generate_settings option, list every GP Premium Element with its display rules, parse core and GenerateBlocks content into fields, rebuild theme hooks as layout slots, then keep every URL and redirect the rest. With no builder format to decode, it is among the cheaper WordPress moves.
On this page
- Why a GeneratePress database is the easiest one to read
- GenerateBlocks containers and where their CSS actually lives
- Elements: the theme builder you have to find before you can move it
- Every GeneratePress hook becomes a named slot in a layout
- Moving a GeneratePress site in eight steps
- A URL plan for sites that mostly got it right
- Why the quote comes in lower, and what pushes it back up
- Editing a former GeneratePress site in Athena CMS
Why a GeneratePress database is the easiest one to read
Open the database of a site built on a heavy builder theme and the pages are written in a private language: shortcodes, JSON blobs, settings only the builder can draw. Open a GeneratePress site and you mostly find WordPress. The theme keeps its design choices in Customizer settings, stored in one option. The pages are core blocks or GenerateBlocks. Icons are SVG rather than an icon font. The vendor says a fresh install adds less than 10kb gzipped to a page, and the same restraint shows in what it leaves in your content.
- Less to decode. Content parsing is a script, not a reconstruction. The hours a builder migration spends rebuilding layouts from screenshots mostly do not exist here.
- A smaller design surface. GeneratePress sites tend to have a handful of templates rather than dozens of one-off page designs, so the component list stays short.
- Fewer stowaways. No bundled slider, no builder add-on pack, no theme-specific content format to untangle.
- Lean starting markup. The old pages are already tidy, so the visual comparison at launch is about matching, not excavating.
The exception is a GeneratePress site where someone installed Elementor or Beaver Builder on top, which the theme supports. Those pages move like any builder page; Elementor to Next.js covers them. The rest of this page assumes the usual GP stack: the theme, GP Premium and GenerateBlocks. The GeneratePress review explains that stack in full, and GeneratePress vs Next.js asks whether you should leave it at all.
GenerateBlocks containers and where their CSS actually lives
GenerateBlocks is where a GP site's layouts live, and it comes in two generations that often share one site. Version 1 blocks (Container, Grid, Headline, Button, Image) save their settings as attributes with a unique ID, and the plugin generates the CSS when the page loads. That CSS is printed inline or written to external files in wp-content/uploads/generateblocks, depending on the plugin's print setting. Copy the post HTML alone and you lose every margin, background and column width.
GenerateBlocks 2.0 rewrote the blocks. One Element block replaced Container and Grid, a Text block replaced Headline and Button, and a Media block replaced Image. The new blocks generate their CSS as you build in the editor, so the styles travel inside the content. Version 1 blocks keep working wherever they were used, which is why a site that has been running a few years usually holds both. Our migration script reads both formats.
Version 1 containers
Attributes are mapped to a short list of section and grid components. Odd one-off paddings are snapped to the design scale instead of copied.
Version 2 elements
The saved CSS is read and translated into component options, so a two-column element with a tinted background stays exactly that.
GB Pro global styles
Shared styles are the closest thing a GP site has to a design system. They become tokens and component variants almost one to one.
Query loops
Post grids built with the query blocks become Next.js listings fed by Athena CMS, prerendered and refreshed on a schedule.
If version 1 layouts have been breaking after updates, or styles refuse to refresh (GeneratePress CSS not updating), those are side effects of generated CSS files and cached dynamic CSS that has to be regenerated. A Next.js build compiles its CSS once, at build time, and ships it with the deploy.
Elements: the theme builder you have to find before you can move it
GP Premium's Elements module is the part of a GeneratePress site most likely to be forgotten, because it never appears in the page list. Elements are stored as their own post type, gp_elements, and each carries display rules: which pages, which post types, which users, and which pages to exclude. Three kinds matter for a migration.
- Hook Elements insert content at a theme hook. They can hold HTML, scripts, shortcodes and, if the Execute PHP box was ticked, PHP. Analytics tags and affiliate disclosures often live here.
- Block Elements build site headers, footers, post meta areas and content templates out of blocks, which makes them GP's block-based theme builder.
- Page Hero elements draw the large title areas above content, sometimes filled with dynamic post data.
There is one known trap. A wordpress.org user reported that when a page listed in an element's exclusions is deleted or unpublished, the rule goes blank and the element is excluded from every page, with no warning. So an inventory sometimes finds elements that quietly stopped showing months ago, which is worth knowing before rebuilding them, and which explains some cases of Elements not displaying. We record what each element outputs on the live site, not only what its settings claim.
Every GeneratePress hook becomes a named slot in a layout
Developers like GeneratePress for its hooks: named places in the page where code can attach, such as generate_before_header, generate_after_header, generate_before_content and generate_before_footer. Child themes add filters too, like generate_mobile_menu_media_query, used by free-version owners who wanted to move the 768px mobile breakpoint without GP Premium's slider. In Next.js, the same idea survives in a cleaner form: the layout has named slots, and what fills them is written and tested in code.
| In GeneratePress | In the Next.js build | |
|---|---|---|
| Customizer design | generate_settings option: colors, typography, layout widths | Design tokens in one stylesheet; fonts self-hosted with next/font |
| Dynamic CSS | Cached in the database; inline, or an external file with GP Premium | Compiled once at build time, with no regeneration step |
| Theme hooks | Named action hooks around header, content and footer | Slots in the layout component, filled in code |
| Hook Elements | gp_elements posts with display rules | Components placed by page type, conditions written in code |
| Block Elements | Block-built headers, footers and templates | Header, footer and template components |
| Mobile menu | Switches below 768px; Menu Plus adds sticky and off-canvas | One responsive navigation, breakpoint set by the design |
| Child theme functions | PHP filters and snippets in functions.php | Reviewed; useful logic rewritten in the codebase |
| Site Library content | Starter site pages, patterns and images | Kept where used, retired where it was demo filler |
The mobile menu row deserves a sentence. GP's navigation turns into the mobile menu below 768px, and the Mobile Header, Sticky Navigation and Off-Canvas Panel are all GP Premium features. Sites that mixed them sometimes end up with a mobile menu that will not open or a header that disappears. The new build has one header component, tested on real phones before launch.
The third option
Athena CMS, with AI agents on staff.
Not a theme and not a blank Next.js repo. The content system we put behind every custom site: plain fields, a real preview, every version kept, and AI agents that handle the chores a plugin only nags you about.
- PicassoImages
- ApolloSite analysis
- AresCompetitor watch
- PrometheusContent holes
- AtlasPage depth and structure
- DelphiAI search visibility
and 12 more agents. Two come with Athena; the rest are monthly add-ons.

Moving a GeneratePress site in eight steps
- 1
Back up, then save the settings
Database and uploads copied, plus the generate_settings option and GP Premium module settings kept with the project for reference.
- 2
Pull every Element into a list
Each gp_elements entry recorded with its type, hook, display and exclusion rules, and what it actually renders on the live site today.
- 3
Crawl the site and read the search data
Every URL matched with Search Console clicks and impressions, so the posts that earn traffic are checked first and hardest.
- 4
Build tokens from the Customizer and global styles
Colors, type, widths and GB Pro global styles become the design system, compared against the live pages before content goes in.
- 5
Parse posts and pages
Core blocks and both generations of GenerateBlocks are read into Athena fields. Hook Element content that belongs on specific pages moves with them.
- 6
Rewrite the hooks that still matter
Scripts, disclosures and banners are placed in layout slots; child theme PHP is rewritten in the codebase or retired.
- 7
Map URLs and carry the images
Every address kept or redirected; images moved from the uploads folder and served through next/image at the sizes each layout needs.
- 8
Launch, then watch
DNS switches, redirects go live, and Search Console is watched for crawl errors while the new pages are indexed.
A URL plan for sites that mostly got it right
GeneratePress attracts a particular owner: bloggers, publishers, affiliate sites and small businesses who picked it for speed. Their permalinks are usually tidy already, so the URL plan is mostly about keeping things exactly as they are. Permalinks are a WordPress setting, not a GeneratePress one, and Next.js can reproduce any pattern in its routes.
- Posts and pages keep their slugs, including date-based or category-based patterns if that is what the site uses.
- Category archives are rebuilt with real introductions where they earn traffic, and redirected where they never did.
- Paginated archives and feeds are reproduced or redirected on purpose, so subscribers and crawlers keep working.
- Images under /wp-content/uploads/ stay reachable or are redirected, which matters for recipe, how-to and review sites that draw image search traffic.
- Site Library leftovers that were published by accident are redirected to the real pages.
For a content-heavy GP site, the blog migration guide is the closest match. The method behind each redirect is in WordPress to Next.js redirects, naming choices in URL structure, and image handling in moving WordPress images. Titles, descriptions, canonicals and schema carry over field by field, following the SEO-safe migration checklist.
Why the quote comes in lower, and what pushes it back up
Migration cost follows effort, and effort mostly goes into decoding layouts and rebuilding things nobody documented. GeneratePress removes most of the first and keeps the second small. So a GP site of a given size usually quotes lower than the same site on a builder theme. A few things still raise it.
- WooCommerce. GP's shop controls all come from GP Premium's WooCommerce module, and the catalog, checkout and order history move like any store. See WooCommerce to Next.js.
- Hook Elements running PHP. Logic written straight into an element has to be understood before it can be rewritten.
- A page builder layered on top. Elementor or Beaver Builder pages are rebuilt, not parsed.
- Big archives with custom fields. Thousands of posts move by script, but custom fields and taxonomies need mapping and checking.
The drivers, and how quotes are structured, are in WordPress to Next.js cost and the migration timeline. On the other side of the ledger, GP's licenses are already cheap: as of October 2026, GP Premium is $59 a year and GeneratePress One is $149 a year, each covering up to 500 sites, with no lifetime plan. Nobody leaves GeneratePress to save on licenses. They leave because the business needs things WordPress makes them assemble from plugins.
And many should not leave at all. A GP blog that loads fast and earns well is a good WordPress site. Tune it with the GeneratePress speed guide or our speed optimization service, and keep the GeneratePress repair team in mind for license and update trouble. We would rather tell you that after an audit than sell you a rebuild you do not need.
Editing a former GeneratePress site in Athena CMS
GP owners tend to be hands-on. Many have edited a hook or pasted a filter into functions.php. After the move, everyday work happens in Athena CMS: posts and pages as plain fields, a real preview, every version kept, nothing to update. Structural changes, such as a new template or a different header, go to a developer and through a tested build. That is the trade for never again regenerating CSS after a settings change.
Publishers get the most from Athena's agents. Calliope drafts articles for your review. Ariadne finds and inserts internal links across the archive. Delphi watches how the site shows up in AI search. Prometheus finds customer questions no page answers yet and drafts the page. Argus catches broken links and slow pages. Most agents draft and wait for approval. The handover is in switching from WordPress, the full process sits under WordPress to Next.js, and if you want us to carry it out, that is our Next.js rebuild service.
Questions people ask before they call
Usually. The theme stores its design in Customizer settings and leaves content as core blocks or GenerateBlocks, with no builder format to decode. That shortens the most expensive part of a migration, which is reconstructing layouts. The exceptions are sites with Elementor or Beaver Builder added on top, heavy WooCommerce use, or Hook Elements running custom PHP. A free site audit tells you which kind you have.
Their content moves into Athena fields and their structure is mapped to components. Version 1 blocks store settings as attributes and generate CSS when the page loads; version 2 blocks save their CSS as you build. We read both, translate them into a small set of section, grid and card components, and rebuild the styling once. Layouts that were broken get fixed along the way rather than copied.
Only if you plan to stay on WordPress. The Template Engine in GP Premium 3.0, announced but not released as of October 2026, is meant to replace Elements for fully block-built sites, so staying probably means reworking your Elements once it arrives. If you are leaning toward Next.js, the move replaces Elements anyway, and waiting buys nothing.
Yes. Permalinks belong to WordPress, not to GeneratePress, and Next.js routes can reproduce date, category or plain slug patterns. We keep your URLs and redirect every old one that has to change, including feeds and paginated archives. The blog migration guide covers archives, categories and featured images in detail.
Yes, until launch. Elements, the mobile header, the WooCommerce module and the local font library all depend on it, and the live site keeps running on GeneratePress while the new one is built. If license or update trouble is getting in the way, see GP Premium license and update problems.
Keep reading
- WordPress at its leanestGeneratePress vs Next.js: The Fairest Fight WordPress Can OfferGeneratePress vs Next.js, argued fairly: a sub-10kb theme, a $59 license for 500 sites, the coming template engine, and where a custom build still wins.
- Astra migration guideAstra to Next.js: Migrate an Astra Site Layer by Layer, Rankings IntactMigrate Astra to Next.js without losing rankings: what happens to astra-settings, Site Builder layouts, Spectra blocks and Elementor pages, step by step.
- Kadence migration guideKadence to Next.js: Moving Kadence Blocks, Shop Kit and MembersKadence to Next.js, step by step: parse Kadence Blocks, map the global palette, rebuild Hooked Elements, move Shop Kit stores and members, keep every URL.
- Leaving BlocksyBlocksy to Next.js: Moving the Customizer, Content Blocks and Shop ExtrasMove a Blocksy site to Next.js: Customizer settings, header builder, Content Blocks, Post Types Extra fields and Shop Extra features, mapped one by one.
- Leaving Hello and ElementorHello Elementor to Next.js: Migrating a Site That Lives Inside ElementorMigrate a Hello Elementor site to Next.js: Theme Builder headers and templates, Site Settings globals, popups, forms and submissions, with every URL kept.
- Bricks migrationBricks to Next.js: A Precise Migration for a Developer-Built SiteMigrate a Bricks Builder site to Next.js: page meta, templates, components, global classes, query loops and custom code, mapped exactly, with URLs kept.
- Everything in WordPress to Next.jsSee the section
See what your GeneratePress site would take to move
Send us the address. We will list your Elements, GenerateBlocks layouts, hooks and URLs, then give you a fixed quote, or tell you to keep the site you have.
Which of these sounds like you? (pick any)
Rather talk now? Call (210) 346-0848.
