GeneratePress troubleshooting
GeneratePress CSS Not Updating: Inline, File or Cache?
GeneratePress is so careful about speed that it saves its own CSS in the database instead of rebuilding it for every visitor. That thrift is rarely the culprit. The stale style is usually sitting one layer further out, in a file, a plugin or a cache that never heard you press Publish.
October 14, 2026 · 9 min read
The short answer
When GeneratePress CSS changes do not show, find which copy is stale. Customizer styles are cached in the database and refresh when you publish; the External File print method (GP Premium) writes them to uploads/generatepress/style.min.css; GenerateBlocks writes per-page files to uploads/generateblocks. Regenerate the one you use, then purge the page cache, host cache and CDN.
On this page
- The preview is right, and that is the clue
- Six places a GeneratePress style can live
- Inline Embedding or External File: which one is holding the old copy
- Edits the theme's CSS cache never hears about
- GenerateBlocks writes a file per page
- Forcing fresh GeneratePress CSS, in order
- A purge order everyone on the team can follow
- When every color change needs a cache ritual
The preview is right, and that is the clue
The pattern repeats on GeneratePress sites. The Customizer preview shows the new heading size. The block editor shows the new container padding. The live page, opened in a fresh tab, shows last week. Owners assume the save failed and change the setting three more times, which makes the eventual diagnosis harder.
The preview being right is useful information. In the theme's source, the Customizer preview skips the stored CSS and builds it fresh from your settings. GenerateBlocks does the same in post previews, printing its styles inline instead of using its file. So a correct preview proves the setting saved. What visitors receive is a stored copy, and the work is finding which one.
- Customizer changes missing live: suspect the External File, an optimizer's combined CSS or the page cache.
- Block styles missing live: suspect a GenerateBlocks file that has not been rebuilt.
- Child theme edits ignored: suspect the way the child theme loads stylesheets.
- Changes visible to you but not to a colleague: suspect a CDN or browser cache.
Six places a GeneratePress style can live
GeneratePress spreads its CSS across fewer places than most themes, but more than one. Before purging anything, find which row your missing change belongs to.
| Stored as | Refreshed when | |
|---|---|---|
| Customizer settings (colors, typography, layout) | Inline CSS built from a copy saved in the database | You publish in the Customizer, or the theme version changes |
| Customizer settings with External File (GP Premium) | wp-content/uploads/generatepress/style.min.css | Customizer publish, or the regenerate option in Customize > General |
| Mobile menu and sidebar width rules | Inline, built fresh on every request | Every page load; never cached by the theme |
| Additional CSS | WordPress core output, separate from the theme | On save; it is never part of the theme's file |
| Child theme style.css | A file, versioned by its last-modified time | When the file is saved; the version number changes |
| GenerateBlocks block styles | uploads/generateblocks/style-{page ID}.css, or inline | When the page is saved, or with Regenerate CSS Files |
Everything in that table then passes through whatever caching and optimization sits in front of WordPress. A page cache stores the HTML that names these files, and a CDN stores the files themselves. The general guide to theme CSS that will not load covers those outer layers for any theme.
Inline Embedding or External File: which one is holding the old copy
GP Premium's General module adds a setting called Dynamic CSS Print Method in Appearance > Customize > General. Inline Embedding, the default, prints the Customizer CSS inside each page's head. External File writes it to a stylesheet in your uploads folder that browsers can keep between page views. Each fails differently when a change does not appear.
Inline Embedding
- The CSS travels inside the HTML, so the only stale copy is a cached page
- Purging the page cache and CDN is usually the whole fix
- Nothing to regenerate, and nothing to exclude from optimizers
External File
- One more file to go stale, in uploads/generatepress
- Staff on the vendor's forum say CSS may need regenerating after changes; the option appears in Customize > General when required
- Some dynamic CSS stays inline either way, in the block labeled generate-style-inline-css
Optimizers make the External File trickier. In one thread on the vendor's forum, Customizer changes stopped appearing because Autoptimize, by default, treated the uploads folder differently from the theme's own files; removing that exclusion fixed it. Staff also describe the external file as only slightly better when an optimization plugin merges CSS anyway. If you run one, switching back to Inline Embedding is a fair test and often a fair permanent choice. The GeneratePress speed guide weighs both methods.
Edits the theme's CSS cache never hears about
Cache dynamic CSS, on by default under Customize > General, stores the Customizer's output in the database. Reading the 3.6.1 source, that copy is rebuilt in exactly two situations: when you publish in the Customizer, and when the theme's version number changes. A setting changed any other way leaves the old copy in place. That includes a database search and replace after a migration, settings written by a script, and child theme code that changes options or adds CSS through the generate_dynamic_css filter.
The test is quick. Untick Cache dynamic CSS, publish, and reload the live page with caches purged. If the change appears, the stored copy was stale. Tick the box again and publish; that publish rebuilds it with current settings. Leave caching on afterward, because the vendor describes it as a real speed gain.
Two more GeneratePress specifics catch people. Additional CSS is a WordPress feature, not part of the theme's dynamic CSS, so it never appears in the External File. And the vendor's troubleshooting guide warns that child themes which load the parent stylesheet a second time, through an @import line or their own enqueue function, stop some Customizer options from working. Remove that duplicate load; GeneratePress already loads the parent styles for you.
GenerateBlocks writes a file per page
Most GeneratePress layouts are built with GenerateBlocks, which keeps its styles apart from the theme. Its CSS Print Method defaults to External File, one stylesheet per page in uploads/generateblocks, named with the page ID. Saving the page marks that file for rebuilding, and the next visit writes it. The plugin throttles this to one file every five seconds, and falls back to inline CSS when it cannot write to the folder.
When block styles look right in the editor and wrong live, open GenerateBlocks > Settings and use Regenerate CSS Files, which forces each file to rebuild the next time its page loads. Then purge caches so visitors request the page again. If the folder is not writable after a move to a new host, fix the permissions rather than living on the inline fallback. When the trouble began with a plugin update, the cause is often markup rather than caching; GenerateBlocks layout broken after update covers that case, and the GeneratePress and Gutenberg guide explains how the two products divide the work.
Forcing fresh GeneratePress CSS, in order
- 1
Name the missing change
Write down which row of the table it belongs to: Customizer, Additional CSS, child theme or block. The fix depends on the row.
- 2
Confirm it in a clean browser
Open the live page in a private window with developer tools set to disable the browser cache. If it appears there, only your own browser was stale.
- 3
Rebuild the theme's copy
For Customizer changes, make a small edit and publish, or untick and re-tick Cache dynamic CSS. With External File, use the regenerate option in Customize > General if it is showing.
- 4
Rebuild block files
For GenerateBlocks styles, use Regenerate CSS Files under GenerateBlocks > Settings, then load the affected page once.
- 5
Clear the optimizer
Purge your optimization plugin's combined and minified files, and check it is not excluding or rewriting files in wp-content/uploads.
- 6
Purge the outer caches
Clear the page cache, the host's server cache and the CDN, in that order, so each layer refills from a fresh source.
- 7
Check the cascade
If the new rule is in the CSS but not applied, inspect the element. Theme dynamic CSS prints after the main stylesheet, so a weaker selector loses even when it loads.
A purge order everyone on the team can follow
Stale CSS on GeneratePress is almost always a process problem: the person who changed a color does not know which of four caches holds it. Write the order down once and pin it where editors work. Rebuild the source (Customizer publish or GenerateBlocks regenerate), then the optimizer, then the page cache, then the host, then the CDN.
- Pick one print method per product and record it, so nobody regenerates a file that does not exist.
- Keep custom CSS in the child theme or Additional CSS, never both, so there is one place to look.
- After a migration, publish once in the Customizer and regenerate GenerateBlocks files before testing anything else.
- Never test design changes while logged in to a cached site; use a private window.
If that list reads like a job description, it is one. Our hosting and maintenance plans run it for you, and our theme repair team fixes sites where the layers have already tangled. Other GeneratePress quirks live in the GeneratePress repair hub.
When every color change needs a cache ritual
GeneratePress did nothing wrong in most of these cases. It stores CSS sensibly and rebuilds it when told. The trouble is the number of independent layers between a setting and a visitor, each with its own idea of freshness. On a lean blog that is a small tax. On a site where marketing edits pages daily, it becomes a weekly support call, and CSS changes not showing becomes a bookmark.
A Next.js build compiles styles at build time and gives every stylesheet a new name when its contents change, so a deploy cannot serve last week's CSS. It costs more up front and needs a developer for layout changes. GeneratePress vs Next.js lays out the trade honestly, and migrating from GeneratePress to Next.js shows what the move involves. More fixes for other problems sit in the troubleshooting section.
Questions people ask before they call
With GP Premium's Dynamic CSS Print Method set to External File, staff on the vendor's forum give the location as wp-content/uploads/generatepress/style.min.css. Some dynamic CSS always remains inline in the page. GenerateBlocks keeps its own files separately in wp-content/uploads/generateblocks, one per page. Neither file contains your Additional CSS.
Only as a test. Turning it off makes the theme build its CSS on every page load, which shows whether the stored copy was stale. Once you know, turn it back on and publish, which rebuilds the copy. The vendor calls the cache a real speed gain, and our GeneratePress review explains why the theme leans on it.
Because Additional CSS belongs to WordPress, not the theme. GeneratePress's dynamic CSS contains only what its Customizer settings generate. Additional CSS prints separately, so it never appears in the External File and regenerating that file does not affect it. If Additional CSS seems ignored, check the page cache and selector strength instead.
Go to GenerateBlocks > Settings and use Regenerate CSS Files. It forces each page's stylesheet to rebuild the next time that page loads, so visit the affected pages afterward and purge your caches. If the files never appear in uploads/generateblocks, the folder may not be writable, and the plugin will fall back to inline CSS.
Yes, for the theme's own dynamic CSS. The theme stores the version number its cached CSS was built with and rebuilds the copy when the version changes. It does not clear your optimizer, page cache or CDN, and it does not touch GenerateBlocks files. If an update coincides with broken styles, see GeneratePress fonts not loading for typography and the mobile menu guide for navigation.
Keep reading
- GeneratePress troubleshootingGeneratePress Header Not Showing: Rules, Hooks and Hidden SwitchesGeneratePress header not showing? Check Element exclusion rules, Disable Elements, Site Header Block Elements, merged headers and hooks, with fixes for each.
- GeneratePress troubleshootingGeneratePress Mobile Menu Not Working: Find the Layer That BrokeGeneratePress mobile menu not working? Check script optimizers, the off-canvas panel, the Menu Plus mobile header and the 768px breakpoint, in that order.
- GeneratePress, fasterGeneratePress Speed: Tuning a Theme That Starts SmallGeneratePress speed, honestly: dynamic CSS caching, the print method, fonts, the 768px menu and the plugins that outweigh a sub-10kb theme, fixed in order.
- GeneratePress, reviewedGeneratePress Review (2026): A Theme That Wins by Doing LessGeneratePress review, checked October 2026: free vs GP Premium, the 768px menu, WooCommerce, the coming template engine and who should skip it.
- 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.
- GeneratePress migration guideGeneratePress to Next.js: Leaving the Cleanest Theme in WordPressGeneratePress to Next.js: why GP sites cost less to move, how Elements, hooks and GenerateBlocks CSS migrate, and the URL plan that keeps your rankings.
- Everything in WordPress TroubleshootingSee the section
Find out which copy of your CSS is stale
Tell us what you changed and where it is missing. We will trace the stale layer, fix it, and give you a purge order your team can follow.
Which of these sounds like you? (pick any)
Rather talk now? Call (210) 346-0848.