Introduction
A site can be fully recovered while visitors still see the old maintenance page for hours. That happens when the outage response was cached somewhere along the delivery path and continues to be served after the origin is healthy again. Browsers, CDNs, reverse proxies, and application caches can all keep that stale response alive. The fix is to prove the origin is actually back and then clear the cache layer that is still replaying the maintenance page.
Symptoms
- The origin is healthy, but some visitors still see a maintenance banner or outage page
- One device shows the recovered site while another still sees the old response
- CDN cache purge or deploy happened, but the stale page remains for some users
- Monitoring says the site is back even though support tickets keep reporting downtime
- The issue started after a planned maintenance window, deploy rollback, or incident response page
Common Causes
- A CDN cached the maintenance response and did not purge it everywhere
- Reverse proxy or edge cache rules treat the outage page as normal cacheable content
- Browser cache or service worker still serves the old maintenance asset bundle
- Application-level page cache holds the temporary response after the origin recovered
- Multiple cache layers were involved, but only one of them was cleared
Step-by-Step Fix
- Confirm the origin now serves the correct live page directly before focusing on cache layers.
- Compare direct-origin behavior with the public hostname so you can see whether the stale response starts at the edge or closer to the user.
- Purge CDN, reverse proxy, and full-page caches that may still hold the maintenance response.
- Check whether any service worker, static asset cache, or browser cache continues to serve the old page shell.
- Review cache-control headers on the maintenance response and on the recovered page to understand why the stale content persisted.
- Verify any load balancer or failover layer is no longer routing users to a maintenance backend.
- Re-test from multiple regions, resolvers, and clean browser sessions to confirm the stale response is truly gone.
- Remove temporary outage rules, banners, or rewrites that were added during the incident and may still match some requests.
- Adjust future maintenance workflows so temporary responses are explicitly non-cacheable unless you deliberately want them cached.