You may see "Internal Server Error: The server encountered an internal error or misconfiguration and was unable to complete your request", or in Chrome "This page isn't working ... HTTP ERROR 500". Either way the web server started on the page and gave up, and the screen does not say why. The reason is written down in one place, the server's error log, and on a WordPress site it is nearly always one of five things: a bad line in .htaccess, a plugin or theme that crashes, a PHP version change, wrong file permissions, or a typo in wp-config.php. Below is a rebuilt example (not a real client), then how to find which one it is and fix it without making things worse.
error_log may also sit in the site's main folder or in wp-admin. The newest line at the time you loaded the page usually names the cause outright: a file and line number, "Invalid command", "Permission denied", or "PHP Fatal error"./wp-admin points at .htaccess, wp-config.php or the PHP version. Only the front of the site, or only one form or button, points at a plugin or the theme..htaccess and wp-config.php before touching them. Every step below is a rename or a small edit you can undo..htaccess. In the file manager (turn on "show hidden files"), rename .htaccess in the site's main folder to .htaccess-old and reload the home page. If the home page comes back, the file was the cause. Log in, go to Settings, Permalinks and click Save without changing anything: WordPress writes a fresh, correct file. Then look in the old file for what was added; lines starting php_value or php_flag are the usual culprit, because many servers do not allow them there. If inner pages now 404, see the pages 404 guide.wp-content/plugins to plugins-off. If the site loads, rename it back, then switch plugins on one at a time (or rename single plugin folders) until the error returns; the plugin conflict guide has the method. Renaming keeps every plugin's settings.wp-content/themes; WordPress falls back to a default theme such as Twenty Twenty-Four if one is installed. Site loads: the theme needs an update or its last edit undone.wp-config.php 640 or 600 if the host recommends it. Many hosts refuse to run files set to 777 and answer with a 500.wp-config.php if it was edited: a missing semicolon or quote there breaks every page. Compare with the copy you downloaded, or with wp-config-sample.php for the shape of each line.wp-admin and wp-includes folders from the same WordPress version (this does not touch wp-content, so posts, photos and settings stay), or send the host the exact log line and the time: some causes, like a server module or a memory cap on the plan, only the host can change.| What you find | What it means | Usual fix |
|---|---|---|
| "Invalid command 'php_value'" or "php_flag" in the log | A line in .htaccess this server does not allow | Remove the line; set the value in the host's PHP settings instead |
Site back after renaming .htaccess | A broken or foreign rule in that file | Settings, Permalinks, Save to write a clean one |
"PHP Fatal error" with a path in wp-content/plugins/name | That plugin crashed | Update it, or switch it off and replace it |
| Started after the host changed PHP | Old code that does not run on the new version | One version back for today, then update the plugin or theme |
| "Permission denied", or right after a site move | Files the server will not read or run | Folders 755, files 644, nothing at 777 |
"syntax error" in wp-config.php | A typo in the last edit | Restore the downloaded copy, redo the edit carefully |
| "Allowed memory size ... exhausted" | The page ran out of memory | See the memory guide |
.htaccess or a plugin folder. Rename them: the site's rules and the plugin's settings stay recoverable.Most 500 errors are one of steps 2 to 4 and the site is back in fifteen minutes. If the log says something you cannot place, or the host is pointing at your site while you are pointing at the host, that is what the box below is for. Related: "redirected you too many times" and "the link you followed has expired", whose upload-size fix is where many of these php_value lines come from.