“There Has Been a Critical Error on This Website” — What It Means and How to Fix It
This isn't a blank page and it isn't a raw server crash — it's WordPress itself catching a fatal error and telling you about it, sometimes with a way back in already sitting in your inbox. Here's what's actually failing and how to get past it.
What is the problem?
“There has been a critical error on this website” is a specific message with a specific meaning: it's WordPress itself, not your web server, catching a fatal PHP error and stepping in before it can print a raw, unstyled crash straight to the screen. It usually comes with a “Learn more about troubleshooting WordPress” link, and if your site can send email, an admin recovery-mode notice lands in your inbox with a one-time login link built specifically to get you back into a working dashboard.
Quick answer: WordPress's fatal-error protection (built in since version 5.2) is doing its job here — it's not letting a broken plugin or theme take the whole site down without a way back in. The fastest fix usually starts in your email inbox, not your FTP client.
That distinction is worth sitting with for a second, because it changes where you start. A raw 500 error means the server crashed before WordPress had any say in the matter. A blank white screen usually means WordPress died silently, with error reporting turned off. This message means WordPress caught something breaking, wrapped it in a friendly notice, and is actively trying to hand you a route back in. It's the most “recoverable-looking” of the site-down failures, and in practice it usually is the fastest to resolve, once you know where to look.
Common symptoms
- The front end shows WordPress's own styled message, not a bare browser or server error page, often including the “Learn more about troubleshooting WordPress” link
- The wp-admin login screen itself frequently still loads and lets you log in, even while the rest of the site is down
- An email titled something like “Your Site is Experiencing a Technical Difficulty” may already be sitting in your inbox (or spam folder) with a recovery-mode login link
- The error appeared right after a plugin auto-updated overnight, or right after you or someone else edited a theme file
- Sometimes only the front end is affected while the dashboard works completely normally, because the fatal only triggers on a template a visitor loads
- Reloading the page shows the exact same message every time, with no variation
Why does this happen?
Since WordPress 5.2, core ships with fatal-error protection specifically so that one broken plugin, one bad theme edit, or one PHP incompatibility doesn't leave a site owner staring at a wall of raw code with no way to log in and fix it. When PHP hits a fatal error — calling a function that doesn't exist, redeclaring a class, referencing a method that was removed — WordPress's error handler intercepts it, logs what it can, shows this message instead of the raw error, and, if outgoing mail works, sends the site's admin a recovery-mode link that temporarily works around the broken code long enough to log in safely.
The underlying cause is almost always a mismatch introduced somewhere in the stack: a plugin that updated itself to a version your PHP release doesn't support, a theme file edited directly without testing, or two extensions independently trying to use the same function or class name. None of that is a WordPress bug — it's WordPress's safety net catching a bug that lives somewhere else.
Common technical causes
- A fatal PHP error inside a specific plugin or theme — an undefined function, a redeclared class, or a call to a method that no longer exists after an update
- A plugin auto-updated to a version that dropped support for your site's current PHP version, which is common when a site has been running an older PHP release for a long time
- Two plugins independently declaring the same function or class name, which PHP cannot resolve and fails outright rather than picking one
- A theme's
functions.phpedited directly — through the old built-in Theme Editor or via FTP — with a typo or a missing bracket - A plugin update shipping genuinely broken code, rarer but not unheard of, especially with smaller or less actively maintained plugins
- PHP's memory limit being exhausted hard enough that WordPress's own handler catches it as a fatal, rather than the process dying before WordPress gets a chance to respond, which is more typical of a raw server-level 500 error
- A corrupted plugin file left behind by a partial or interrupted auto-update, often after a hosting timeout mid-update
How to diagnose it
- Check your email first, including spam. This is the fastest and safest starting point, and it's unique to this specific error — a working recovery-mode link means you can skip straight to a guided fix inside wp-admin.
- If
WP_DEBUG_LOGis enabled, openwp-content/debug.logand look for a line startingPHP Fatal error:, which names the exact file and line number responsible. - If there's no debug log, check your host's raw PHP error log instead, through your hosting control panel or via FTP/SSH — the same fatal-error line will be there.
- Use the recovery-mode dashboard once you're logged in via the email link — WordPress often names the specific plugin or theme it flagged directly on that screen, so you may not need to dig any further.
- Note the timing. If the error appeared overnight or first thing in the morning, check which plugins are set to auto-update; that timing is rarely a coincidence.
How to fix it, step by step
- Open the recovery-mode email link if one arrived. It puts you into a safe version of wp-admin where the failing plugin or theme is temporarily paused, and gives you a direct Manage Plugins / Manage Themes panel to deactivate the flagged extension — no FTP required.
- If no email arrived, connect via FTP or your host's File Manager and rename the suspect plugin's folder inside
wp-content/plugins(for example, add-offto the folder name). This deactivates it instantly without needing to log in first. - Read the exact fatal-error line from the log before guessing which plugin is at fault — it will name the file and often the exact function that failed.
- Check that plugin's changelog or support page for a known PHP-compatibility issue against your site's current PHP version, which is the single most common root cause of this specific error.
- Update the plugin to its latest release if the fatal is already patched upstream, or roll it back to the last known-working version if the newest release is itself the problem.
- If the fatal traces to a theme's
functions.phpfrom a direct edit, restore the previous version of that file via FTP or your host's automatic file backups. - Turn on
WP_DEBUG_LOGby addingdefine('WP_DEBUG_LOG', true);towp-config.phpif it wasn't already active, so any future fatal leaves a specific trace instead of only the generic message. - Confirm outgoing email is actually configured using an SMTP plugin, since a large share of sites never receive the recovery email at all because PHP's default mail function is blocked or unreliable on their host.
- Clear any object cache or opcode cache once the fix is in place, so the corrected code is what's actually being served rather than a cached copy of the broken version.
When this needs professional help
Plenty of these resolve in minutes once you find the flagged plugin. It's worth bringing in a developer when:
- No recovery-mode email ever arrives and there's no FTP or File Manager access already set up
- The fatal traces into a core WordPress file rather than a plugin or theme, which is rare but needs careful, precise correction
- Fixing one fatal error reveals a second one underneath it, suggesting more than one thing broke at once
- You're not confident reading a PHP stack trace or safely rolling a plugin back to a previous version
- The site is business-critical and you'd rather not test fixes live without a staging copy first
How I can help
This is one of the more solvable-looking WordPress failures, and also one where guessing wastes real time — deactivating plugins at random when the log already named the culprit. I read the actual fatal-error line first, confirm the plugin or PHP version combination that caused it, and apply the smallest fix that gets the site fully back, whether that's a version rollback, a compatibility patch, or a proper rebuild of a theme file that was edited directly. That's been the day-to-day reality of eleven years of WordPress and web development work: most of it isn't glamorous, it's reading logs correctly and not guessing.