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
  1. Why a GeneratePress database is the easiest one to read
  2. GenerateBlocks containers and where their CSS actually lives
  3. Elements: the theme builder you have to find before you can move it
  4. Every GeneratePress hook becomes a named slot in a layout
  5. Moving a GeneratePress site in eight steps
  6. A URL plan for sites that mostly got it right
  7. Why the quote comes in lower, and what pushes it back up
  8. 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.

GeneratePress building blocks and their Next.js equivalents
In GeneratePressIn the Next.js build
Customizer designgenerate_settings option: colors, typography, layout widthsDesign tokens in one stylesheet; fonts self-hosted with next/font
Dynamic CSSCached in the database; inline, or an external file with GP PremiumCompiled once at build time, with no regeneration step
Theme hooksNamed action hooks around header, content and footerSlots in the layout component, filled in code
Hook Elementsgp_elements posts with display rulesComponents placed by page type, conditions written in code
Block ElementsBlock-built headers, footers and templatesHeader, footer and template components
Mobile menuSwitches below 768px; Menu Plus adds sticky and off-canvasOne responsive navigation, breakpoint set by the design
Child theme functionsPHP filters and snippets in functions.phpReviewed; useful logic rewritten in the codebase
Site Library contentStarter site pages, patterns and imagesKept 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.

and 12 more agents. Two come with Athena; the rest are monthly add-ons.

The Athena CMS editor: plain fields with AI rewrite, a Publish box and revisions

Moving a GeneratePress site in eight steps

  1. 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. 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. 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. 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. 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. 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. 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. 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

Free · No obligation

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.

CallGet a quote