Home › Web Platform › WordPress White Screen of Death: Find the Cause
Beginner 5 min · September 23, 2026

WordPress White Screen of Death: Find the Cause

Enable WP_DEBUG first — the WordPress white screen hides a PHP fatal error, usually from a plugin update, a broken theme, or low memory..

N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Everything here is grounded in real deployments.

Follow
✓ Production
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
Before you start⏱ 20 min
  • ✓SFTP or file-manager access plus phpMyAdmin or database access
  • ✓Ability to edit wp-config.php and rename folders
  • ✓Know whether your host offers SSH with WP-CLI
 ● Production Incident 🔎 Debug Guide
⚡Quick Answer
  • The white screen hides a PHP fatal error — enable WP_DEBUG to reveal the file and line
  • Bisect plugins by renaming the plugins folder; if the site returns, reactivate one by one
  • Switch to a default theme via WP-CLI or the database to rule out theme faults
  • Raise the PHP memory limit if the log shows Allowed memory size exhausted
  • Turn WP_DEBUG back off and delete the log once the site renders again
✦ Definition~90s read
What is WordPress White Screen of Death?

The white screen of death (WSOD) is what you see when PHP hits a fatal error while loading WordPress and error display is turned off. Common triggers include a plugin update with a fatal bug, two plugins declaring the same function, a theme calling a function from a disabled plugin, an exhausted PHP memory limit, or a corrupted core file after a failed update.

★
Picture a stage play where the lights suddenly cut out mid-scene.

Because the failure happens before any HTML renders, you get zero output — just white.

Why no error message? Production PHP configs set display_errors to off so visitors never see stack traces. WordPress respects that. The error still gets written to the PHP error log or to wp-content/debug.log when WP_DEBUG_LOG is on — you just have to know where to look. That gap between hidden errors and a blank page is why beginners panic: the site looksfine in SFTP while serving nothing.

The fix strategy never changes: reveal the error, then isolate the component. WP_DEBUG names the file and line, which usually names the plugin or theme. If the log is unclear, the plugin bisect (deactivate all at once, reactivate one by one) and a switch to a bundled theme like Twenty Twenty-Four narrow it down mechanically.

Memory errors get a limit bump. Work the sequence and the white screen always talks.

Plain-English First

Picture a stage play where the lights suddenly cut out mid-scene. The actors (your content) are still there, but a blown fuse (a PHP fatal error) killed the lights. The audience sees nothing but white. Turning on WP_DEBUG is like bringing a flashlight — it shows you exactly which fuse blew so you can replace it instead of rebuilding the theater. The content and settings survive — only the rendering broke.

You load your site and get nothing — a blank white page where your homepage used to be. No error, no hint, just white. Sometimes wp-admin is white too, which makes it feel like the whole site has vanished. It's one of the most alarming things a site owner can see, and the silence is the worst part.

That silence is deliberate. When a PHP fatal error fires during page load, WordPress dies before it can render anything — including the error itself, which PHP hides from visitors by default. Under the white screen there's always a specific cause: a plugin update that fatals, a theme calling a missing function, or PHP running out of memory mid-render.

This guide gives you a fixed order of operations. You'll turn on WP_DEBUG to surface the real error, bisect plugins in minutes by renaming one folder, switch themes without wp-admin access, and bump the memory limit when that's the culprit. Follow the order and you'll go from blank page to named culprit fast. Keep SFTP and database access handy before you start — every step below uses one of the two.

Why the Screen Is White Instead of Helpful

PHP fatal errors stop script execution immediately — no shutdown HTML, no footer, nothing. When the fatal fires inside a plugin file loaded before the theme renders, WordPress dies with zero output. Production servers also set display_errors to off, so even the error text is swallowed. The result is a 200 OK response with an empty body: the infamous white screen.

This is actually a security choice. Showing stack traces to visitors would leak file paths and plugin versions to attackers. WordPress and PHP hide errors from the screen but still write them to logs. The information exists — it's in the PHP error log or wp-content/debug.log — waiting for someone with file access.

So the white screen is never the diagnosis; it's the absence of one. Your job isn't to stare at the white page but to fetch the hidden error text. A phone screenshot of white tells nobody anything — the log line tells everybody everything. Note the exact clock time of each white page next to the fatal line; matching timestamps across mirrored servers distinguishes a fleet-wide bad deploy from an isolated failure in seconds. Everything in this guide flows from that single move: turn on logging, read the fatal line, act on the filename it gives you.

📊 Production Insight
In production, check the HTTP status too — a white page with status 500 confirms a fatal error rather than an empty-content bug. Then go straight to the logs.
🎯 Key Takeaway
The white screen is a hidden fatal error — fetch the log text instead of guessing from the blank page.

Enable WP_DEBUG to Surface the Real Error

WP_DEBUG is the master switch. Setting it true in wp-config.php tells WordPress to report errors instead of hiding them. Pair it with WP_DEBUG_LOG so errors land in wp-content/debug.log, and keep WP_DEBUG_DISPLAY false on live sites so visitors still see nothing sensitive. Reload the white page once, then read the log's tail.

The fatal line follows a pattern: PHP Fatal error: Uncaught Error: Call to undefined function ... in /.../wp-content/plugins/some-plugin/file.php on line 42. The path is the diagnosis — wp-content/plugins names the plugin, wp-content/themes names the theme. Note the exact file and line; you'll need them when reporting the bug or editing around it.

One caution: debug.log grows fast on busy sites and can fill small disks. Read what you need, fix the issue, then set WP_DEBUG back to false and delete the log. On multisite, network-activated plugins log against every subsite, so check timestamps to match the error to the white page you just loaded. Never leave debugging on permanently — it slows the site and can leak paths if display ever flips on. While debugging, keep a second browser tab on the host file manager so each config change is one click from verification.

wp-config.phpPHP
1
2
3
4
5
6
7
// Enable logging (keep display off on live sites)
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

// Then reload the white page once and read the log:
// wp-content/debug.log — look for the last "PHP Fatal error" line
📊 Production Insight
Always pair WP_DEBUG_LOG with WP_DEBUG_DISPLAY false on production. You get the full stack trace in the file while visitors see nothing but the white page.
🎯 Key Takeaway
WP_DEBUG plus WP_DEBUG_LOG writes the fatal file-and-line to debug.log — that line is your diagnosis.

Bisect Plugins by Renaming One Folder

Plugins cause most white screens, and the fastest test disables all of them at once. Rename /wp-content/plugins to /wp-content/plugins-off over SFTP, then create a new empty /wp-content/plugins directory. WordPress sees no plugins and loads cleanly. If the white screen clears, a plugin is guilty — proven in under a minute with zero database edits.

Now find which one. Move plugin folders back from plugins-off one at a time, reloading the site after each. When the white screen returns, the last folder you moved is the culprit. With 30 plugins this takes a while, so use halves instead: move back half, test, and keep halving the guilty group. Binary search finds one bad plugin among 32 in at most 5 reloads.

WP-CLI users can do the same without renaming: wp plugin deactivate --all, confirm the site loads, then wp plugin activate one-slug at a time. Must-use plugins in wp-content/mu-plugins don't deactivate this way — rename that folder too if the screen persists. Leave the guilty plugin deactivated, restore everything else, and check for an update or a support thread about the fatal — popular plugins usually ship a fix within days. Document the culprit and version in the site runbook so the next update of that plugin gets staged first.

BASH
1
2
3
4
5
6
7
8
9
10
11
12
# Disable everything at once (no wp-admin needed)
wp plugin deactivate --all
# reload the site — if it works, a plugin is guilty

# Reactivate one by one until the white screen returns
wp plugin activate query-monitor
wp plugin activate wordfence
wp plugin activate broken-slug-here  # white screen? culprit found

# Leave the culprit off and bring back the rest
wp plugin deactivate broken-slug-here
wp plugin activate --all --exclude=broken-slug-here
📊 Production Insight
Deactivating all plugins at once proves guilt in one reload. Reactivating one by one (or by halves) then names the culprit with no log reading required.
🎯 Key Takeaway
Rename the plugins folder or deactivate all — if the site returns, reactivate one by one to name the culprit.

Rule Out the Theme via WP-CLI or Database

If the site stays white with plugins disabled, the theme is next. Active themes run functions.php on every load, and a single fatal there whites out everything. You can't use Appearance menus (wp-admin is white too), so switch themes from WP-CLI or the database.

WP-CLI is one command: wp theme activate twentytwentyfour (use whatever bundled theme your install has). Reload — if the site renders, your theme fatals. The debug.log line will point at the exact theme file, usually functions.php or a template part calling a function from a now-disabled plugin.

Without SSH, use phpMyAdmin: open wp_options, edit the rows named template and stylesheet, and set both to twentytwentyfour. Clear any object cache after the switch — stale cached theme paths can keep serving the white page after the database already points elsewhere. Reload and test. Child themes deserve a special check — a child calling a parent function removed in a parent update fatals identically, so test with the parent active too before blaming custom code. Snapshot the theme folder and export customizer settings before switching; some themes store per-theme mods that vanish on switch, and restoring them by hand wastes an afternoon.

BASH
1
2
3
4
5
6
7
8
9
10
# Switch to a bundled theme without wp-admin
wp theme activate twentytwentyfour
wp theme list --status=active

# No SSH? Run this in phpMyAdmin instead:
# UPDATE wp_options SET option_value = 'twentytwentyfour'
# WHERE option_name IN ('template', 'stylesheet');

# After the site returns, confirm what the theme broke
tail -n 20 wp-content/debug.log
📊 Production Insight
Theme fatals often blame a missing plugin function — the theme calls something only defined when a plugin is active. Read the debug line before rewriting theme code.
🎯 Key Takeaway
Activate a bundled theme via CLI or wp_options — if the site returns, the theme is guilty.

Raise the Memory Limit When PHP Starves

Some white screens are resource deaths, not code bugs. Page builders, multilingual plugins, and big WooCommerce catalogs can exceed the default 40–64M WordPress memory limit during render. The debug.log signature is unmistakable: Allowed memory size of X bytes exhausted. That line means the code is fine but the allowance is too small.

The first bump goes in wp-config.php: define WP_MEMORY_LIMIT as 256M. Reload and watch the log. If the error persists with a higher number, the host's PHP memory_limit ceiling is lower than your request — WordPress can't grant itself more than PHP allows. Check Site Health > Info > Server or ask the host what memory_limit is actually set to.

Treat repeated exhaustion as a smell, not just a number to raise. A plugin leaking memory per post will eat 256M as happily as 64M on large archives. Check the exhaustion byte count after the raise — if it now reads 256M, the code consumed your headroom and an audit is due. Use Query Monitor on staging to find the hungry component, and don't push WP_MEMORY_LIMIT past what your plan provides — on shared hosting, asking for 512M just moves the kill to the host's process watcher. Note the post-raise byte figure in the runbook; the next person compares ceilings instead of starting blind.

wp-config.phpPHP
1
2
3
4
5
6
// Give WordPress more headroom (place before "stop editing" line)
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' ); // admin-side limit

// If the host caps PHP below this, WordPress can't exceed it —
// check Site Health > Info > Server for the real PHP memory_limit.
🔥256M Fixes Most Cases
define('WP_MEMORY_LIMIT', '256M'); resolves the majority of memory white screens. If it doesn't, the host ceiling — not your config — is the wall.
📊 Production Insight
If raising WP_MEMORY_LIMIT changes nothing, the host's PHP memory_limit is the ceiling. No wp-config.php value can exceed it — open a ticket or upgrade.
🎯 Key Takeaway
Memory-exhaustion white screens need a WP_MEMORY_LIMIT bump — and a host-ceiling check if the bump fails.

Fix Corrupted Core After Failed Updates

Sometimes the white screen follows a core auto-update that died halfway — a timeout during unzip leaves half-written files in wp-admin or wp-includes. Every page then fatals on a missing class. The signature is a fatal naming a wp-includes or wp-admin path rather than a plugin or theme.

The fix is a clean core reinstall that preserves your content. Download the WordPress zip matching your version, extract it, and upload fresh copies of wp-admin and wp-includes, overwriting the damaged ones. Never touch wp-content or wp-config.php — your themes, plugins, uploads, and settings live there. Reload after the upload.

Verify with wp core verify-checksums, which compares every core file against wordpress.org hashes and lists anything modified or missing. If checksums pass but the screen persists, the damage sits in wp-content or the database — return to the plugin and theme bisect. Keep the downloaded release zip for a week in case the dashboard updater needs files the host firewall blocks. Then re-run the update from Dashboard > Updates with plugins disabled. To stop repeats, schedule updates for quiet hours and make sure PHP timeouts and disk space can handle the unzip — most half-written cores come from 30-second timeouts on slow shared hosts.

📊 Production Insight
wp core verify-checksums settles it in seconds: if core files fail checksums, reinstall core before blaming any plugin.
🎯 Key Takeaway
Half-written core files need a fresh wp-admin/wp-includes upload — then verify checksums and re-run the update.
● Production incidentPOST-MORTEMseverity: high

Auto-Update Fatals 12 Client Sites for 3 Hours Overnight

Symptom
At 07:15 the agency's inbox held 41 tickets: homepages blank on 12 client sites, wp-admin white on 9 of them. All 12 ran the same page-builder plugin, all had auto-updates on, and all went white between 02:03 and 02:11. Checkout, booking forms, and contact pages were dead — roughly 200 lost form submissions by estimate.
Assumption
The on-call dev first suspected a hosting outage because 12 sites failed at once. They checked the server, found it healthy, then assumed a WordPress core auto-update had broken. Twenty minutes went to core version comparisons before anyone opened a PHP error log.
Root cause
Page-builder version 4.9.2 called a function removed in PHP 8.1, fatally erroring on every front-end load. The agency had enabled plugin auto-updates fleet-wide a month earlier, and the vendor shipped 4.9.2 at 02:00. Twelve sites updated within 8 minutes, and each one died on the next cached-page expiry. The log line named the plugin file and line number on every site.
Fix
They disabled plugin auto-updates fleet-wide, rolled the builder back to 4.9.1 via WP-CLI on all 12 sites in one loop, and confirmed homepages returned within 20 minutes. Then they pinned PHP 8.0 on the fleet until the vendor shipped a compatible 4.9.3, staged it on 2 sites for 48 hours, and only then re-enabled updates with a staging-first policy.
Key lesson
  • Never auto-update plugins fleet-wide without staging. One bad release multiplied by 12 sites turned a minor bug into an agency-level incident with 41 tickets.
  • Read the PHP error log before theorizing. The log named the plugin, file, and line in seconds — the 20 minutes on server and core theories were pure waste.
  • Pin PHP versions and test plugin updates against them. A plugin that works on PHP 8.0 can fatal on 8.1, so version compatibility belongs in your update checklist.
Production debug guideFive steps in order — reveal the error, then isolate the component.5 entries
Symptom · 01
Blank white page with no error text on front end or admin
→
Fix
In wp-config.php set WP_DEBUG to true, WP_DEBUG_LOG to true, and WP_DEBUG_DISPLAY to false. Reload the white page once, then open wp-content/debug.log and read the last 20 lines. The fatal error line names the plugin or theme file plus the line number — that name is your prime suspect for every step below.
Symptom · 02
debug.log names a plugin file, or names nothing conclusive
→
Fix
Rename /wp-content/plugins to /wp-content/plugins-off via SFTP, create a fresh empty /wp-content/plugins folder, and reload. If the site returns, move plugins back from plugins-off one folder at a time (or rename back and deactivate via WP-CLI), reloading after each until the white screen returns. The last one moved is the culprit — leave it out and restore the rest.
Symptom · 03
Site still white with all plugins disabled
→
Fix
Switch to a bundled theme without wp-admin: run wp theme activate twentytwentyfour, or update the template and stylesheet rows in wp_options to twentytwentyfour via phpMyAdmin. Reload. If the site returns, your theme fatals — check its functions.php against the debug.log line, or leave the default theme active while you fix it.
Symptom · 04
debug.log shows Allowed memory size exhausted
→
Fix
Raise the limit in wp-config.php with define('WP_MEMORY_LIMIT', '256M'); and reload. If it persists, check the real PHP ceiling in Site Health or phpinfo — hosts often cap memory_limit below what WordPress asks for. Open a ticket to raise it, and audit heavy plugins while you wait.
Symptom · 05
White screen appeared during or right after a core update
→
Fix
Re-upload a fresh copy of wp-admin and wp-includes from the WordPress release zip for your version, leaving wp-content and wp-config.php untouched. Failed auto-updates leave half-written core files that fatal on every load. After replacing, reload, then run wp core verify-checksums to confirm nothing else is damaged.
White Screen Causes Compared
Root CauseHow to ConfirmFixPrevention
Faulty plugin updatedebug.log names a file under wp-content/pluginsRoll back or deactivate that plugin; update when fixedStage plugin updates; delay auto-updates on production
Broken active themeWhite persists with plugins off; log names wp-content/themesActivate a bundled theme; fix functions.phpTest theme updates on staging with plugins as configured
Exhausted PHP memoryLog shows Allowed memory size exhaustedRaise WP_MEMORY_LIMIT; raise host limit if cappedAudit heavy plugins; cache pages to cut render memory
Corrupted core filesFatal names wp-includes/wp-admin; checksums failRe-upload fresh core; re-run the updateSchedule updates off-peak; ensure timeouts and disk space
⚙ Quick Reference
4 commands from this guide
FileCommand / CodePurpose
wp-config.phpdefine( 'WP_DEBUG', true );Enable WP_DEBUG to Surface the Real Error
wp plugin deactivate --allBisect Plugins by Renaming One Folder
wp theme activate twentytwentyfourRule Out the Theme via WP-CLI or Database
wp-config.phpdefine( 'WP_MEMORY_LIMIT', '256M' );Raise the Memory Limit When PHP Starves

Key takeaways

1
The white screen is a hidden PHP fatal
enable WP_DEBUG logging to name it.
2
Bisect plugins by disabling all at once, then reactivating in halves.
3
Switch to a bundled theme via CLI or database when admin is dead.
4
Memory errors need WP_MEMORY_LIMIT plus a host-ceiling check.
5
Failed core updates need fresh wp-admin/wp-includes, never touching wp-content.
6
Turn debugging off and delete the log when the site is back.

Common mistakes to avoid

5 patterns
×

Leaving WP_DEBUG on permanently after the fix

Symptom
debug.log grows to hundreds of megabytes, slows backups, and risks filling the disk — which causes a fresh outage months later.
Fix
Set WP_DEBUG back to false and delete debug.log as soon as the white screen is fixed. Debugging is a flashlight, not a porch light.
×

Deactivating plugins one by one from the start

Symptom
With 30 plugins you reload 30 times and still aren't sure, because some fatals only trigger in combination with another plugin active.
Fix
Disable all at once first to prove a plugin is guilty, then reactivate in halves. Binary search names the culprit in a handful of reloads.
×

Editing the live theme's functions.php blind

Symptom
A typo in the fix whites out the site worse than before, and with no backup of the file you can't undo the edit that broke it.
Fix
Copy functions.php aside before editing, or better, switch to a default theme first and fix the broken theme on staging. Read the debug.log line before changing code.
×

Raising memory to 512M on a capped shared plan

Symptom
The white screen persists because the host kills processes above its own limit, and the high request can get the account throttled for resource abuse.
Fix
Check the real PHP memory_limit in Site Health first. Match WP_MEMORY_LIMIT to what the plan allows, fix the hungry plugin, and upgrade only if the site genuinely needs more.
×

Reinstalling WordPress over wp-content

Symptom
Uploading a fresh WordPress zip over everything wipes custom themes, plugins, and uploads if you overwrite wp-content with the zip's empty folders.
Fix
Replace only wp-admin and wp-includes from the fresh zip. Never overwrite wp-content or wp-config.php during a core repair.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What is the WordPress white screen of death?
Q02JUNIOR
How do you enable debugging to reveal the hidden error?
Q03SENIOR
How do you find the guilty plugin without wp-admin access?
Q04SENIOR
How do you switch themes when wp-admin is also white?
Q05SENIOR
debug.log shows memory exhaustion but raising WP_MEMORY_LIMIT doesn't he...
Q01 of 05JUNIOR

What is the WordPress white screen of death?

ANSWER
It's a blank page caused by a PHP fatal error during load with error display turned off. The error text exists in the PHP log or debug.log — the screen is white because production PHP hides errors from visitors. Common triggers are plugin fatals, theme errors, memory exhaustion, and corrupted core files.
FAQ · 6 QUESTIONS

Frequently Asked Questions

01
Why is the screen white instead of showing an error?
02
Can I debug without SSH or WP-CLI access?
03
Is it safe to leave WP_DEBUG on?
04
The white screen shows only on one page. Is that still WSOD?
05
Can a full disk cause a white screen?
06
Should I just reinstall WordPress?
N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Everything here is grounded in real deployments.

Follow
✓ Verified
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
🔥

That's WordPress. Mark it forged?

5 min read · try the examples if you haven't

←
Previous
WordPress Error Establishing a Database Connection
2 / 5 · WordPress
Next
WordPress Fatal Error: Allowed Memory Size Exhausted
→