We create digital solutions that work for businesses
A 500 Internal Server Error means the server received a request but could not complete it because of an unexpected internal condition. The message does not identify a single cause. The same status may result from a fatal PHP error, an incompatible plugin, a broken .htaccess rule, exhausted memory, incorrect permissions, or a hosting-layer failure.
The worst response is to clear every cache, change PHP, disable all plugins, and overwrite files at the same time. If the website comes back, you will not know which action fixed it. If it gets worse, you will not have a clean rollback point. The reliable workflow is to record the symptom, preserve the current state, inspect the logs, test one hypothesis at a time, and repeat the same request after each change.
If the site processes orders, payments, or leads and you do not have file and log access, use professional website technical support. An uncontrolled emergency change on a live store can cost more than the original outage.
The HTTP specification defines 500 as a general response for an unexpected server condition. A browser sees the result, but it cannot tell which layer failed.
A typical WordPress request crosses several layers:
A failure at any stage can surface as a 500 response. That is why the browser message is rarely enough to diagnose the problem.
| Code | Typical meaning | First place to investigate |
|---|---|---|
| 500 | internal application or configuration failure | PHP/error log, recent changes, plugins, theme, .htaccess |
| 502 | proxy received an invalid upstream response | PHP-FPM, reverse proxy, container, backend process |
| 503 | service temporarily unavailable | maintenance, overload, limits, stopped process |
| 504 | gateway timed out waiting for upstream | long request, external API, database, timeout |
| 403 | access denied | permissions, WAF, server rules, IP blocking |
| 404 | resource not found | URL, rewrite rules, redirects, route |
You can confirm the initial code in browser DevTools or with the BB STUDIO HTTP header checker. Test the failing URL, not only the homepage.
Use this short incident sequence:
Before editing files, create a recoverable copy. The separate guide to website backups and tested restores explains how to preserve files, the database, and configuration properly.
Scope narrows the search immediately.
/wp-admin/ failLikely areas include an early fatal error, a damaged configuration file, PHP incompatibility, .htaccess, unavailable PHP-FPM, or a server incident.
Investigate the active theme, page templates, page cache, optimization plugins, and code that runs only on the frontend.
The cause may be an admin-only plugin, an import or backup process, the editor, insufficient memory, or a request that exceeds execution limits.
Look at that template, shortcode, widget, database query, external API, or damaged content. A local failure does not justify switching off the entire site.
Inspect the AJAX or REST request, memory, execution time, request size, PHP-FPM, webhook, and payment gateway response. In the browser Network panel, capture the failing URL, method, response code, and timestamp.
Start with evidence, not guesses. Hosting panels may label the relevant file Error Log, PHP Log, Apache Error Log, or Nginx Error Log. WordPress can temporarily write diagnostic events to wp-content/debug.log.
Add the following before the final “stop editing” line in wp-config.php:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
This records errors without showing technical details to visitors. After diagnosis, return WP_DEBUG to false and remove or protect the log. It may contain file paths, table names, request details, and other sensitive information.
PHP Fatal error: Uncaught TypeError ...
in /wp-content/plugins/example-plugin/file.php on line 184
Focus on:
Fatal error, TypeError, or Allowed memory size exhausted;Do not chase an old warning at the top of a large file. Reproduce the failure, refresh the log, and inspect the new events written at that moment.
A plugin is the leading candidate when the error begins immediately after an update, new installation, configuration change, or PHP switch.
Use SFTP or the hosting file manager to rename the suspected directory:
wp-content/plugins/example-plugin
wp-content/plugins/example-plugin.disabled
If there is no clear suspect, you can temporarily rename the whole plugins directory. That disables every regular plugin. On WooCommerce, it may affect cart, checkout, shipping, email, payment, and integrations. Restore the directory name and enable plugins one at a time.
Files in wp-content/mu-plugins load automatically and do not appear as ordinary deactivatable plugins. If the error remains after regular plugins are disabled, inspect MU plugins and drop-ins such as object-cache.php, advanced-cache.php, and db.php.
Unknown code, new administrators, injected links, or mobile-only redirects indicate a security incident rather than a normal conflict. Follow the separate website malware and security check and rotate hosting, SFTP, database, and WordPress credentials.
A theme may fail after an update, a manual edit to functions.php, a PHP change, or a call to a function provided by a plugin that is no longer active.
If WordPress Recovery Mode sends an email, use its protected link to enter the dashboard and deactivate the failing theme. Without that email, rename the active theme folder over SFTP. WordPress will attempt to fall back to an installed default theme.
Confirm that a default theme is available before testing. Do not delete the active theme or overwrite it with an arbitrary archive. Preserve the current version, local modifications, and child-theme relationship first.
If only one template fails, compare it with the last working revision. Common causes include:
.htaccess fileOn Apache, a syntax error or disallowed directive in .htaccess can return 500 before WordPress starts.
A safe test:
.htaccess..htaccess.old.Do not paste an entire .htaccess from another website. It may contain domain-specific redirects, a different PHP handler, caching rules, or directives your server does not permit.
Nginx does not use .htaccess. If that advice has no effect, inspect the virtual host configuration, Nginx error log, PHP-FPM, and reverse-proxy rules.
Allowed memory size exhausted directly indicates that one process exceeded its memory allowance. It does not automatically mean that raising the limit is the correct long-term fix. An infinite loop, large image, import, expensive query, or plugin conflict may be consuming the memory.
A temporary increase can help complete diagnosis, but record the existing settings first. On managed hosting, the effective limit may come from php.ini, .user.ini, the panel, a pool configuration, or plan policy rather than WordPress.
Related log messages include:
Maximum execution time exceeded — the request ran too long;upstream timed out — the web server did not receive a response from PHP-FPM;server reached max_children — every PHP worker was busy;MySQL server has gone away — the database connection was lost;No space left on device — storage space or inodes were exhausted.Recurring limits require profiling of the request, cron job, plugin, database, and hosting plan. A suitable website hosting environment matters, but a larger server cannot repair an infinite loop in application code.
An old plugin may call functionality removed from a newer PHP release. A new plugin may require a version the server does not provide. The outage often begins after a panel switch or an automated environment upgrade.
Check:
Do not switch production versions blindly. Reproduce the site on staging, update the incompatible component, and test key journeys. A temporary rollback may restore access, but it must not leave the site on an unsupported branch indefinitely.
This often follows a manual upload, archive extraction, migration, or command run by the wrong operating-system user. PHP cannot read a file, write cache, or create a temporary directory.
Do not use 777 as a universal fix. It expands access and hides an ownership or group problem. Exact values depend on the server model; common configurations often use 644 for files and 755 for directories, but your host’s policy is authoritative.
Compare the failing file with adjacent working files, inspect owner and group, and locate the exact Permission denied event in the log.
An interrupted update, disk issue, incomplete copy, or infection may damage core files. Before reinstalling, establish that the failure is not in wp-content or configuration.
A controlled process is:
wp-content or wp-config.php;If files change again after replacement, investigate malware or an automated process that is rewriting them.
When code has not changed and 500 appears intermittently or under load, investigate infrastructure:
A WAF may return 500 or 403 only for a particular payload, such as saving a page containing code. Do not disable protection globally. Find the rule ID in the audit log and create a narrow exception only after the request is understood.
If you are unsure whether DNS and the server are resolving and responding correctly, use the domain, hosting, and server diagnostic guide. A certificate or HTTPS failure should not be treated as a generic 500; use the separate SSL and HTTPS troubleshooting guide.
| Symptom | Likely area | First check |
|---|---|---|
| 500 immediately after plugin update | plugin or PHP compatibility | error log, deactivate that plugin |
white screen after editing functions.php |
theme syntax | PHP log, revert the one file |
| homepage works, internal URLs return 500 | rewrite or .htaccess |
temporarily rename .htaccess |
| 500 only during import | memory, timeout, upload size | PHP log, limits, batch size |
| 500 during checkout | gateway, webhook, session | WooCommerce log, PHP log, Network |
| failure at peak traffic | resources or PHP-FPM | CPU/RAM/I/O graphs, max_children |
| request works intermittently | multiple nodes or unstable upstream | logs on every node, CDN, health checks |
| failure after migration | PHP, ownership, paths, environment | versions, owner/group, env, rewrite |
Restoring the homepage is not enough for a store. Test:
Do not repeat a live payment without a controlled plan. Use the gateway sandbox or a documented test order and inspect the logs immediately.
You lose causality and cannot identify the correct rollback.
Absolute paths, directory structures, and request fragments help attackers as well as administrators. Log them privately.
Renaming is reversible. Deletion is not.
777 permissionsThat is an unsafe mask for the real ownership problem.
Save the current database first, identify the incident window, and plan how new transactions will be preserved.
Bulk updates add new variables. Isolate the cause and restore service first; modernize components in a controlled release afterward.
A 200 response on the homepage is only the beginning. Verify:
/wp-admin/, login, and saving a post;Run the website speed test after service is restored. If 500 is gone but TTFB has increased sharply or the server still fails intermittently, the root cause may remain and return under traffic.
Get help when:
Prepare the failing URL, incident time, screenshot, recent changes, hosting and WordPress access, and a log excerpt with secrets removed. That turns a vague outage into a focused investigation. For a controlled recovery, contact BB STUDIO. We will isolate the cause, restore service, test critical journeys, and document prevention steps.
WP_DEBUG_DISPLAY is not exposing errors;.htaccess saved before modification;
Let’s create something amazing together