WordPress Changes Not Saving: Updates Vanish After Publish (2026)
Disclosure: some links on this page are affiliate links. We may earn a commission at no extra cost to you. How we test and rate hosts.
Two different bugs produce the same symptom: your edit vanishes. Either WordPress never saved it (a real failure), or it saved and you're looking at a cached version (a display failure). Diagnose which one you have before fixing anything - the tests take 30 seconds.
Test First: Did It Actually Save?
Update the post, then open it in an incognito window or append ?v=123 to the URL. If the change appears: the save worked and you're fighting cache - skip to the cache section below. If the change is gone even uncached: the save genuinely failed.
Real Failure Cause 1: REST API Blocked
Gutenberg saves via /wp-json/wp/v2/posts. Security plugins, .htaccess rules, and CDNs that block wp-json kill saves while the UI claims success. Open DevTools → Network, click Update, watch for a 401/403 on wp-json. The invalid JSON guide covers REST API blocks in depth.
Real Failure Cause 2: mod_security
Saving content containing code, multiple URLs, or certain HTML triggers Apache mod_security and the POST dies at 403/406 - invisibly to the editor. Check your host error log for mod_security hits. Fix: ask the host to whitelist the rule, or save the content in smaller chunks to find the triggering element.
Real Failure Cause 3: Plugin/Permissions
A post-lock plugin, a revision plugin, a workflow plugin that requires "review" before publish, or a capability plugin that removed your edit_published_posts right - all produce silent save drops. Test by disabling the workflow/security plugins, and check your user role hasn't been demoted (see the access-denied guide for capability debugging).
Display Failure: The Cache Layer Cake
If it saved but doesn't show, purge in this order - each layer can serve stale content independently:
- Browser: hard refresh (Ctrl+F5) or incognito
- Page cache plugin: purge all caches (WP Rocket, LiteSpeed, W3TC)
- Host cache: server-side cache in your hosting panel - many hosts cache aggressively and it's the most-forgotten layer
- CDN: Cloudflare "Purge Everything" if enabled
If the fix is "purge cache after every edit," your cache plugin isn't auto-purging on save - enable post-update purge in its settings.
Page Builder Variant
Elementor/Divi saves go through their own AJAX, not the WP save. If the builder hangs on "Updating," the failure is admin-ajax.php - see the admin-ajax 400 guide for that diagnosis path.
Keep Reading
- Invalid JSON response - the REST API errors behind silent save failure
- admin-ajax.php 400 - the page-builder save endpoint
- 403 forbidden - mod_security and firewall blocks
- Stuck in maintenance mode
- Bluehost review 2026
- WP-Cron Not Working: Scheduled Tasks Never Run (2026)
What are you building?
Tell us about your project so we can match the perfect hosting plan.
Hosting Cost Calculator
See exactly how much you'll spend on hosting over time. Compare Bluehost vs popular alternatives and discover your potential savings.
Used to calculate transaction fees (Shopify charges 2% on sales)
Frequently Asked Questions
Why does WordPress show 'Updated' but the change is gone?
Two different problems look identical: the save itself failed silently (permission, plugin conflict, REST API blocked) OR the save worked but you're viewing a cached version. Test by checking the page in an incognito window or adding ?nocache=123 to the URL - if the change shows there, it saved fine and you're fighting cache, not WordPress.
What's the #1 cause of real save failures?
The REST API being blocked. Gutenberg and most page builders save via REST calls - if a security plugin, .htaccess rule, or firewall blocks /wp-json/, the editor reports success but nothing persisted. Check for 401/403 on wp-json requests in DevTools Network tab.
Can mod_security block saves?
Yes - aggressively. Saving content that contains code snippets, URLs, or HTML can trip mod_security rules, and the request dies with a 403 or 406 while the UI looks fine. Check your host's error log for mod_security hits on POST to wp-json or post.php.
Why would the Customizer save but not show?
The Customizer writes changes to a different store and requires 'customize' capability - a role problem saves nothing. If it 'saves' but reverts, the theme's stylesheet or a child-theme override may be forcing values. Also check for a second user editing simultaneously - autosave/lock conflicts drop edits.
Do page builders have their own save system?
Yes - Elementor, Divi, WPBakery save through their own AJAX, not the WP save path. A failed builder save usually shows as the editor hanging on 'Updating' rather than a clean success. The admin-ajax guide covers that failure mode - it's a different endpoint with the same diagnosis.
Ready to launch?
Get Bluehost from $3.99/month with a free domain, free SSL, and 30-day money-back guarantee.
Related Articles
Bluehost vs Competitors: The Technical Deep Dive
We ran 47 benchmarks over 90 days. Here's the raw data on why Bluehost dominates.
Fix ERR_TOO_MANY_REDIRECTS in WordPress (2026): The 6 Real Causes
ERR_TOO_MANY_REDIRECTS means an infinite redirect loop. Match your Site URLs, fix Cloudflare SSL mode, reset .htaccess, kill plugin conflicts - step-by-step with code.
WordPress 403 Forbidden Error: 7 Fixes That Actually Work (2026)
403 means the server understood you but refuses to serve the page. Fix file permissions (755/644), regenerate .htaccess, kill security plugin blocks - in the right order.
Fix 502 Bad Gateway in WordPress (2026): Diagnose First, Then Fix
502 means the gateway got a bad response from your server - usually PHP timeouts, CDN issues, or overload. A 9-step diagnostic workflow from browser checks to server logs.
Fatal Error: Maximum Execution Time Exceeded - 6 Fixes (2026)
max_execution_time kills slow updates at 30-60s. Fix the culprit plugin/theme first, then raise the limit via wp-config, .htaccess or php.ini - with exact code.
HTTP Error Uploading Images in WordPress: 9 Fixes Ranked (2026)
The vague 'HTTP error' on image upload usually means memory limits or Imagick. Fix order: rename the file, bump memory, force GD library, check permissions - with code.