Errors
"Technical Difficulties" in WordPress: Every Fix Explained
The message "This site is experiencing technical difficulties" is WordPress's polite way of saying a fatal PHP error has crashed the site — and the good news is that WordPress usually emails your admin address a recovery link the moment it happens. If that link didn't arrive, or you're looking at a broken site and an empty inbox, this guide walks through every cause and fix in the right order.
What You're Actually Seeing
Since WordPress 5.2, the platform ships with a built-in fatal error handler. When PHP throws an error severe enough to stop execution — an uncaught exception, a call to an undefined function, a memory exhaustion — WordPress intercepts it before the white screen can appear and shows visitors a generic "technical difficulties" message instead. Simultaneously, it sends a recovery-mode email to the address in Settings → General → Administration Email Address containing a magic link that lets you log back into wp-admin with the offending plugin or theme auto-paused.
If you see this message, something in your PHP execution chain has fatally failed. The site isn't hacked (usually), the database isn't corrupted, and you haven't necessarily lost anything. You just need to find and neutralise the broken component.
Step 0: Check Your Email First
Before touching anything, search your inbox — including spam — for an email from WordPress with the subject line "Your Site is Experiencing a Technical Issue." Click the link inside. It routes you directly to a special wp-admin session with the problem plugin or theme deactivated. From there you can deactivate it permanently and return your site to normal in under two minutes.
If the email never arrived (wrong admin address, broken mail configuration, it bounced), move to the steps below.
Likely Causes
- A plugin or theme update introduced a fatal error — by far the most common trigger.
- A PHP version change — your host upgraded PHP and an older plugin now contains incompatible syntax.
- Memory limit exhaustion — a plugin is consuming more RAM than your server allows.
- A corrupted core file — rare, but possible after a failed auto-update.
- A conflicting mu-plugin or drop-in — less common but harder to spot.
Fix 1: Use the Recovery-Mode Link
If you received the email, click the link, log in, and look at the banner across the top of wp-admin. It will name the exact plugin or theme WordPress identified as the problem. Click Deactivate on that item, then exit recovery mode. Check your site — in most cases it's back online immediately.
Fix 2: Enable Debug Mode and Read the Log
If you don't have the recovery email, enabling debug logging is the fastest way to find out exactly which file and line number threw the error.
- Connect to your site via FTP or your host's file manager.
- Open
wp-config.phpin the root of your WordPress install. - Find the line
define( 'WP_DEBUG', false );and change it to:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
- Save the file. WordPress will now write errors to
wp-content/debug.log. - Reload your broken site once to trigger the error, then download and open
debug.log. - Look for lines starting with
PHP Fatal error. The message will include a file path — something like/wp-content/plugins/some-plugin/some-file.php on line 42.
That path tells you exactly which plugin or theme to deal with. Our guide on how to read the WordPress debug log walks through interpreting the output if you get stuck.
Important: Once you've identified the problem, set WP_DEBUG back to false. Leaving debug output enabled on a live site can expose sensitive paths.
Fix 3: Deactivate Plugins via FTP (No wp-admin Needed)
If you can't get into wp-admin at all and the recovery email never came, you can disable plugins directly on the server — no admin access required.
- Connect via FTP/SFTP or your host's file manager.
- Navigate to
wp-content/plugins/. - Rename the folder of the plugin you suspect (e.g. rename
woocommercetowoocommerce_DISABLED). WordPress can no longer load it. - Reload your site. If it's back, you found the culprit. Rename the folder back, then deactivate it properly from wp-admin.
- If renaming one plugin doesn't fix it, rename the entire
pluginsfolder toplugins_DISABLED. This deactivates every plugin at once. If the site loads, re-enable plugins one at a time (rename the folder back, rename individual plugin folders out) until the error returns.
Fix 4: Switch to a Default Theme
If deactivating all plugins doesn't resolve it, the active theme may be the source. Navigate to wp-content/themes/ and rename your active theme folder. WordPress will fall back to the most recent default theme it finds (Twenty Twenty-Four, Twenty Twenty-Three, etc.). If the site loads, the theme is broken — update it, reinstall it, or contact the theme developer.
Fix 5: Raise the PHP Memory Limit
If your debug log shows PHP Fatal error: Allowed memory size of X bytes exhausted, the fix is increasing the memory ceiling. Add this line to wp-config.php above the /* That's all, stop editing! */ comment:
define( 'WP_MEMORY_LIMIT', '256M' );
Some hosts set a hard cap server-side that overrides this setting. If the error persists, open a support ticket with your host and ask them to raise the PHP memory limit for your account. 256 MB is a reasonable request for most shared plans; resource-heavy setups (WooCommerce, page builders) often need 512 MB.
Fix 6: Reinstall WordPress Core
If the debug log points to a file inside wp-admin/ or wp-includes/ rather than a plugin or theme, a core file may have been corrupted during a failed update.
- Back up your site first — files and database.
- Download a fresh copy of WordPress from wordpress.org matching your current version.
- Via FTP, upload and overwrite
wp-admin/andwp-includes/. Do not delete or overwritewp-content/orwp-config.php. - Reload your site.
This replaces only core files and leaves your content, plugins, themes, and settings completely untouched. If you recently ran a WordPress core update that seemed to fail or time out, this is the right fix. See our related guide on WordPress sites broken after an update for more depth on this scenario.
Fix 7: Check for a PHP Version Mismatch
If your host recently bumped your PHP version and the error appeared immediately afterward, a plugin using deprecated or removed PHP syntax is the culprit. In your debug log, look for messages like Parse error: syntax error or Call to undefined function in a plugin file. The fix is either updating that plugin (if an update exists that adds PHP compatibility) or temporarily reverting your PHP version in your host's control panel while you sort out the replacement.
How to Prevent This From Happening Again
- Keep a staging site. Test updates there before pushing to production. Our guide on setting up a WordPress staging site covers the workflow.
- Verify your admin email is accurate. The recovery-mode email is useless if it's going to an old address. Check Settings → General now.
- Keep plugins, themes, and core updated. Most fatal errors come from code that's already been fixed in a newer version.
- Run daily backups. A restore point makes every error situation dramatically less stressful.
- Test PHP compatibility before upgrading. Tools like the PHP Compatibility Checker plugin (a real, free plugin in the WordPress repository) scan your installed plugins before you switch PHP versions.
When to Call a Professional
The steps above resolve the vast majority of "technical difficulties" errors within 20–30 minutes. You should consider getting professional help if:
- The debug log points to a file you don't recognise and you suspect a compromise.
- You've deactivated everything and the error still appears (suggesting a core, server, or database problem).
- This is a revenue-generating site and every minute of downtime costs real money.
- You've tried the steps above and something got worse, not better.
If any of those apply, request a free Mend diagnosis. A senior engineer will triage the site, identify the root cause, and quote a flat price before touching anything. Most fixes are same-day, and every job ships with a plain-English explanation of what broke and what changed — so you're not left guessing. If it's an active emergency, the Emergency Rescue service gets a senior engineer on it immediately.
The "technical difficulties" screen feels alarming but it's actually WordPress protecting your visitors from a raw PHP crash page. The built-in recovery system, combined with the debug log, gives you a clear path from broken to fixed — as long as you work through it methodically and back up before making changes.
Frequently asked questions
Why didn't I receive the WordPress recovery-mode email?
The most common reasons are a wrong administration email address in Settings → General, a server without outbound mail properly configured (common on cheap shared hosting), or the email landing in spam. Check all three. If your admin email is wrong, you can correct it directly in the database via phpMyAdmin by editing the `siteurl` row — or connect via FTP and use the debug log method instead.
Can I use the recovery-mode link after it expires?
Recovery-mode links expire after one hour by default. If yours has expired, go back to wp-config.php, enable WP_DEBUG and WP_DEBUG_LOG as described above, trigger the error, read the log to identify the broken plugin or theme, and deactivate it via FTP by renaming its folder.
Will deactivating all plugins delete my data?
No. Deactivating a plugin — whether from wp-admin or by renaming its folder via FTP — does not delete its database tables or settings. Your data stays intact. When you reactivate the plugin, everything will be as you left it.
My site shows "technical difficulties" only on certain pages. What does that mean?
A page-specific error usually means a plugin or widget that only loads on that page type (a shortcode, a block, a sidebar widget) is throwing the error. Enable the debug log, visit the broken page, and check the log entry immediately. The file path in the error will point directly to the component causing the problem on that specific page.