Introduction
A site stuck on a maintenance page after deploy usually means the release process entered a protective state and never exited cleanly. Sometimes the maintenance page is served by the application, and other times it comes from the CDN, load balancer, or hosting platform while the backend tries to recover. The fastest way out is to identify which layer still believes the site should remain in maintenance mode.
Symptoms
- Visitors keep seeing a maintenance page long after deployment finished
- Admins believe the new release succeeded, but public traffic still sees downtime messaging
- The origin and cached public site show different versions of the page
- The issue started after a failed deploy, rollback, database migration, or manual maintenance toggle
- Health checks pass in one place while users still hit maintenance content
Common Causes
- The application never cleared its maintenance flag or lock file after deployment
- CDN or edge cache continues serving the maintenance page after the origin recovered
- A load balancer or hosting platform keeps routing traffic to a maintenance backend
- Release automation failed mid-sequence and left the system in a partial rollback state
- Database migrations or warm-up steps did not complete, so the site never promoted the healthy release
Step-by-Step Fix
- Confirm whether the maintenance page is coming from the application, CDN, load balancer, or platform layer.
- Review the latest deployment logs to identify where the release sequence stalled or failed to exit maintenance mode.
- Check for application-level maintenance flags, lock files, or environment toggles that persist after deploy completion.
- Compare public responses with direct-origin responses so you can tell whether cached maintenance content remains at the edge.
- Inspect load balancer, platform, or release orchestration state to verify traffic is pointed at a healthy backend.
- Validate database migrations, build artifact integrity, and startup health if the new release never fully became ready.
- Clear stale maintenance responses from cache only after the origin is confirmed healthy.
- Retest the real public routes users care about, not only internal health endpoints.
- Document the deploy exit path so future releases cannot leave maintenance mode enabled without alerting the team.