What's happening
Every WordPress update โ core, plugin, or theme โ starts by creating a hidden file called .maintenance in your site's root directory. While that file exists, WordPress shows visitors a holding page instead of a half-updated, potentially broken site.
Under normal conditions, WordPress deletes .maintenance the moment the update finishes. But if the update times out, fails mid-way, or you close the browser tab too early, the file stays behind. Your site is stuck:
Briefly unavailable for scheduled maintenance. Check back in a minute.
The fix? Delete that file. Nothing more.
Fix 1: Delete .maintenance via FTP/SFTP (fastest)
Open your FTP client โ FileZilla, Cyberduck, Transmit, whatever you use โ and connect to your server. Navigate to your WordPress root, the same folder that holds wp-config.php.
Hidden files are invisible by default. Turn them on first:
- FileZilla: Server โ Force Showing Hidden Files
- Cyberduck: View โ Show Hidden Files
You'll see .maintenance sitting there. Delete it. Reload your site โ it comes back immediately.
Fix 2: Delete via SSH
# Go to your WordPress root
cd /var/www/html
# (adjust path to match your server setup)
# Confirm the file is there
ls -la | grep maintenance
# Delete it
rm .maintenance
Verify it's gone:
ls -la | grep maintenance
# No output = you're done
Fix 3: Delete via cPanel File Manager
- Log into cPanel โ File Manager
- Navigate to your WordPress root (usually
public_html) - Click Settings (top-right corner) โ check Show Hidden Files โ Save
- Find
.maintenance, right-click โ Delete
Fix 4: Use WP-CLI
Got WP-CLI? One command handles everything:
wp maintenance-mode deactivate
This removes .maintenance and also checks whether WordPress is in maintenance mode through any other mechanism โ more thorough than a manual delete.
What if the file doesn't exist but the error persists?
Check these three culprits before digging deeper.
Cache serving a stale maintenance page
Cloudflare, WP Rocket, W3 Total Cache, and most hosting-level caches will happily serve the maintenance page to every visitor โ even after you've deleted the file. Purge everything:
- Cloudflare: Dashboard โ Caching โ Purge Everything
- WP Rocket: Dashboard โ Clear Cache
- Quick test: append
?nocache=1to your URL to bypass cache and see the actual site state
A plugin is forcing maintenance mode
Plugins like SeedProd, WP Maintenance Mode, and Coming Soon Page have their own maintenance switches โ completely separate from the .maintenance file. If /wp-admin is accessible, check those plugin settings and turn maintenance mode off there.
If wp-admin is also blocked, drop this line into wp-config.php temporarily:
define('WP_MAINTENANCE', false);
That bypasses plugin-based maintenance mode so you can get back in. Remove it once you've fixed the plugin setting.
Incomplete update left a corrupted state
After deleting .maintenance, head to wp-admin โ Dashboard โ Updates and manually re-run anything that failed. If the same update keeps failing, you're likely hitting a PHP timeout or memory limit. Enable debug logging in wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Then check wp-content/debug.log โ the actual error will be there.
Verification
- Open your site in a private/incognito window (skips browser cache)
- The homepage should load normally
- Log into
/wp-adminand confirm pending updates either completed or are queued to re-run - SSH or FTP: double-check that
.maintenanceno longer exists in the WordPress root
Prevention
An orphaned .maintenance file is almost always a PHP timeout during a large update. A few habits eliminate the problem:
- Raise
max_execution_timeto at least 300 seconds. In.htaccess:php_value max_execution_time 300. Inphp.ini:max_execution_time = 300. - Update plugins one at a time. "Update All" runs them sequentially in a single browser request โ one slow plugin can time out the whole batch.
- Use WP-CLI or MainWP for bulk updates on large sites. They handle timeouts far better than the browser-based updater.
- Backup before every update, without exception. UpdraftPlus and BackWPup both offer one-click pre-update snapshots.

