Most WordPress errors come from a plugin conflict, a PHP memory limit, wrong file permissions or a corrupted file (.htaccess, wp-config.php). Before fixing anything, take a backup, enable WP_DEBUG and identify the exact message.
A site that’s down is money on hold. And the worst WordPress errors rarely show the cause — just a white screen, a bare 500, or an “error establishing a database connection”. This guide is the map: how to diagnose any error, the direct fix for the most common ones, and the honest sign of when the problem isn’t you — it’s the server.
Before you touch anything: 3 steps that save the site
Rushing breaks sites. Before any fix:
- Take a backup of files and database. Always. It’s the difference between a scare and a loss.
- Enable debug mode. In
wp-config.php, before/* That's all, stop editing! */:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // logs to wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // don't expose the error to visitors
- Test on staging, not production. If your host offers a test environment, reproduce the error there first.
How to diagnose any WordPress error
Before memorizing fixes, follow the flow. It isolates the cause in minutes:
- Does the site load? No → fatal error (white, 500, database). Yes, but broken → CSS/JS or a plugin.
- Does
wp-adminload? If the dashboard works and only the front-end breaks, the problem is a theme/plugin or.htaccess. - What’s the message? Check
debug.logor the server error log. No message (white screen) → almost always a fatal PHP error or memory. - Isolate: deactivate all plugins (rename
wp-content/plugins). Back up? Reactivate them one by one until you find the culprit. Not back? Switch to a default theme (Twenty Twenty-*). - Still broken with everything off? The problem is the server/host — jump to the final section.
Key tool: WP-CLI handles most of this from the command line (
wp plugin deactivate --all,wp theme activate), without depending on the dashboard.
Screen and execution errors
White screen of death (WSOD)
Symptom: a fully white page, no message, front-end and/or admin.
Root cause: a fatal PHP error — almost always a plugin conflict, a broken theme or exhausted memory.
Quick fix: on WordPress 5.2+, check the admin email — recovery mode sends a link. No email? Enable WP_DEBUG above and reload to see the real error. If it persists, rename wp-content/plugins to plugins_old via FTP; if the site returns, a plugin is the culprit — reactivate one by one.
500 Internal Server Error
Symptom: a generic “500 Internal Server Error”, no detail.
Root cause: a corrupted .htaccess, blown PHP memory, an incompatible PHP version or a plugin causing a server-level error.
Quick fix: rename the root .htaccess to .htaccess_old and reload. Back? Go to Settings → Permalinks and click Save to generate a clean .htaccess. If not, raise the memory (below) and deactivate plugins.
Exhausted PHP memory
Symptom: “Allowed memory size of X bytes exhausted” or a white screen on heavy pages.
Root cause: the site exceeded the PHP memory limit.
Quick fix: in wp-config.php, raise the limit:
define( 'WP_MEMORY_LIMIT', '256M' );
If that doesn’t help, the real limit is on the server (php.ini / host) — that’s where to escalate.
Database and connection errors
Error establishing a database connection
Symptom: “Error establishing a database connection” — site and admin fully down.
Root cause: wrong credentials in wp-config.php, an overloaded/down database or corrupted tables.
Quick fix: confirm that DB_NAME, DB_USER, DB_PASSWORD and DB_HOST in wp-config.php exactly match what the host set up. Correct and still failing? The database may be down (contact the host) or corrupted — repair it with:
define( 'WP_ALLOW_REPAIR', true );
Then visit yourdomain.com/wp-admin/maint/repair.php and remove the line when done.
HTTP errors (403 / 404 / 429 / 502 / 504)
404 on all posts (but the home loads)
Symptom: the home works, every post/page returns 404.
Root cause: a corrupted permalink structure or an .htaccess missing the rewrite rules.
Quick fix: go to Settings → Permalinks and click Save Changes (without changing anything) — this regenerates the rules. If it persists, confirm the .htaccess has the # BEGIN WordPress block and that mod_rewrite is active.
403 Forbidden
Symptom: “403 Forbidden — you don’t have permission to access”.
Root cause: wrong file/folder permissions, a restrictive .htaccess or a security plugin blocking.
Quick fix: confirm permissions — folders 755, files 644. Rename .htaccess to test. If a security plugin (firewall) is blocking your IP, deactivate it via FTP.
Content and operation errors
Stuck maintenance mode
Symptom: “Briefly unavailable for scheduled maintenance” that never clears.
Root cause: an update was interrupted and left the .maintenance file in the root.
Quick fix: connect via FTP, delete the .maintenance file in the site root. Reload — the site comes back instantly.
Scheduled posts miss their schedule
Symptom: scheduled posts stay stuck as “scheduled” and never publish.
Root cause: wp-cron.php isn’t firing — common on low-traffic sites or with cron disabled.
Quick fix: disable the virtual cron and use a real server cron. In wp-config.php:
define( 'DISABLE_WP_CRON', true );
Then set up a server cron job calling wp-cron.php every 5–15 minutes.
Images won’t load or appear broken
Symptom: images disappear, turn into a broken icon, especially after a migration.
Root cause: old URLs in the database (after a domain change) or wrong permissions on wp-content/uploads.
Quick fix: confirm 755 permissions on uploads. After a migration, update the URLs in the database with WP-CLI:
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --skip-columns=guid
Security: when an “error” is a hack
Not every “error” is a bug. A redirect to a strange site, an admin you didn’t create, Japanese spam on Google or a “this site may be hacked” warning in Chrome are not configuration faults — they are malware signs. If that’s the case, the flow is different: diagnosis and removal. See the dedicated guide: how to identify malware in WordPress.
When it’s not you (it’s the host/server)
The honest point tutorials avoid. If the error persists with all plugins deactivated, a default theme active and .htaccess regenerated, the problem isn’t in your WordPress. It’s probably:
- An incompatible PHP version (too old or too new for a plugin)
- Resource limits of the hosting plan exceeded (memory, CPU, processes)
- A database that’s down or overloaded on the server
- Server configuration (
php.ini, upload limits, timeouts)
How to confirm: the server error log (in the host panel) shows the low-level error. With it in hand, the hosting support fixes it fast — or it’s time to consider better hosting. When the diagnosis requires server access, PHP version and fine configuration, that’s the kind of work Pixelize does through its WordPress Specialist service.