Securing a WordPress Site: The Complete Checklist
WordPress is the most frequent target of automated attacks, simply because it is the most widespread. This checklist covers the measures that actually block the majority of compromises.
· 5 min read
A 500 error says only one thing: the server failed. Finding out why takes a method, not luck. Here is the one we apply, whatever the technology.
by Agencei · Published on · Updated on · 5 min read
The HTTP status code 500 (Internal Server Error) indicates that the server encountered an unexpected condition that prevented it from responding. It is a generic message, deliberately uninformative so as not to expose internal details to visitors. The real cause is in the logs, never on the error page.
It must be distinguished from its neighbours in the 5xx family: 502 (Bad Gateway) means an intermediary, such as a reverse proxy, received an invalid response from the application server; 503 (Service Unavailable) signals overload or maintenance; 504 (Gateway Timeout) indicates the application server did not respond in time. Each code points somewhere different.
A 500 error can be permanent (every page), intermittent (one request in ten), or targeted (a single feature, a single user). This profile is the first piece of information to gather: it immediately narrows the space of possible causes and directs the search.
Before digging through logs, ask the right questions. Since when? On which pages or actions? For all users or only some? What changed recently: a deployment, a plugin update, a configuration change, a certificate renewal, a migration, a traffic spike?
The question "what changed" alone resolves a large share of incidents. Check the deployment history, the administration logs, the host's automatic updates. If a recent deployment is responsible, rolling back is often the first action to consider, even before understanding the cause.
Reproduce the error reliably if possible, noting the URL, the HTTP method, the parameters and the exact time. That precision then lets you find the matching line in the logs among thousands of others, and verify the fix.
Start with the web server's error log (Nginx or Apache), then the application process manager's log (PHP-FPM, Gunicorn, uWSGI, PM2, the systemd service of your Java or Node.js application), then the application's own log. Each layer adds details the previous one lacks.
First look for the stack trace matching the error's timestamp. It shows the file, the line and the call chain. On PHP, a fatal error, an exceeded memory limit or a missing extension shows up here. On Java or Node.js, an unhandled exception appears with its full stack.
If the application logs are empty, that is a clue in itself: the process is not starting, or the error occurs before logging is initialised (unreadable configuration file, missing environment variable, missing dependency). Then check the service log and the system log (journalctl, dmesg).
A surprising number of 500 errors have nothing to do with the code. A full disk prevents writing sessions, caches and logs. Exhausted memory leads the system to kill processes. An expired certificate or token makes a call to an external service fail. An unreachable database or one that has run out of connections blocks every request.
So check disk space, memory, load, the number of database connections and the reachability of the services the application depends on (database, cache, queue, third-party APIs). Also check file permissions, which are often altered by a deployment or a restore.
On containerised applications, examine the state of pods or containers: restart loops, memory limits reached, failing health probes. A container that restarts constantly produces intermittent errors that are very hard to understand without that information.
When the trace points to a component, isolate it: disable the suspected plugin, bypass the cache, run the suspicious SQL query directly, call the third-party API manually. The goal is to confirm the hypothesis with a simple experiment before modifying anything.
On WordPress and PrestaShop, the classic method is to enable debug mode on a test environment, then disable plugins or modules one by one and switch back to the default theme. On a custom application, you reproduce the request locally with the same data.
Resist the temptation to change several things at once. One change, one measurement, then the next. Otherwise you will not know what fixed the problem, and you risk creating another one without realising it.
The fix must address the cause, not the symptom. Raising PHP's memory limit hides a leak; restarting the service hides connection exhaustion. These measures are acceptable to restore service, provided the real fix is scheduled afterwards.
After the fix, verify on the reproduced scenario, then watch the 5xx error rate for a few hours. An alert on that rate, with a reasonable threshold, is the simplest protection against silent incidents: many 500 errors last for days before a customer reports them.
Finally, write a short report: cause, detection, fix, what would have prevented it. That is what turns an incident into lasting improvement: more complete logging, additional tests, a missing alert, a deployment procedure to correct.
If the site is in production and the error is blocking sales or operations, time matters more than learning. An experienced engineer recognises the classic error profiles on WordPress, PrestaShop, Node.js, Java or Python within minutes, and knows how to restore service before fixing things in depth.
Also call a specialist if the error is intermittent and the logs are not enough: diagnosis then relies on observability tools (distributed tracing, profiling), which require tooling and experience.
We step in quickly to restore service, identify the real cause and set up the alerts that will prevent it from happening again.
WordPress is the most frequent target of automated attacks, simply because it is the most widespread. This checklist covers the measures that actually block the majority of compromises.
· 5 min read
A slow PrestaShop store loses sales and search rankings. Here are the causes we most often find during audits, and the fixes that produce a measurable effect.
· 5 min read
A well-designed CI/CD pipeline turns deployment into a routine, stress-free operation. Here is how we build one with Docker and Kubernetes, step by step.
· 4 min read
Reproduction, root cause and tested fix on your web, mobile, API and CMS applications.
See this serviceApplication and server support, incident handling and clear service commitments.
See this serviceWhite screen, 500 error, hack, broken after an update: fast diagnosis and recovery.
See this serviceIndependent review of code, architecture and infrastructure, with a prioritised report.
See this serviceDescribe your need in a few lines: we come back to you with a first analysis and the next steps.