WordPress Malware Removal
For confirmed infections: investigation, cleanup, entry point analysis, verification and a written report.
Explore this service →Most scanners tell you what they recognise. The infections that survive are the ones nobody recognises yet. Here is how to run a scan that finds those too, and how to tell a real detection from noise.
Scanning is not one activity. Someone who suspects an active compromise needs a different process from someone doing a routine health check, and running the wrong one wastes a day.
If a visitor reported a redirect, Google flagged the site, or the host suspended the account, you are doing incident detection: fast, focused on confirming and scoping the infection. If nothing is obviously wrong and you want to know where you stand, you are doing a security review: broader, slower, and as interested in vulnerable components as in active malware.
The rest of this guide covers the layers that matter in both cases. The order is deliberate, because each layer catches what the previous one misses.
The most reliable file level check is not a malware signature database, it is a comparison against known good source. WordPress core, and every plugin and theme from the repository, can be downloaded fresh and compared byte for byte against what is on your server.
Anything that differs falls into three buckets: legitimate customisation you know about, files that should not exist at all, and modified core or plugin files. The second and third buckets deserve immediate attention. A modified core file is almost never innocent.
wp-content/uploads. Nothing legitimate puts executable code there.wp-content/mu-plugins, which loads automatically and stays invisible in the plugin list.wp-includes and wp-admin.wp-blog-header.php in the wrong directory..htaccess files in subdirectories, which are easy to forget.Sort the whole tree by modification time. Attackers change timestamps on the payload they expect you to find, and forget the helper they wrote first.
This is the layer that separates a real scan from a plugin click. A large share of WordPress infections, including nearly every SEO spam and pharma hack, live entirely in the database, where file scanners never look.
Work through it in this order:
If you find spam content, note whether it is stored as plain text or generated at runtime. Generated spam means there is still code executing somewhere, and deleting the rows will not stop it.
Cloaked infections serve clean content to you and spam to everyone else. The only way to catch them is to request the site the way the target audience does.
Fetch the homepage and several inner pages three ways: as a normal browser, with a Googlebot user agent, and with a search engine referrer. Compare the raw HTML each time. Differences in the head section, unexpected outbound links and injected script sources are the tell. Then run the same URLs through the URL inspection tool in Search Console, which shows what Google genuinely received rather than what you asked a server to return.
Finish with a site: query for your domain. Indexed URLs you never created are proof of a live or recent infection, even when every file scan is clean.
Scanners tell you what is there now. Logs tell you when it arrived and who put it there, which is what you need to fix the root cause rather than the symptom.
Take the earliest modification timestamp among the suspicious files and pull every request in a window around it. You are looking for POST requests to unusual paths, requests to files that should never receive POST, long query strings containing encoded payloads, and successful administrator logins from addresses that do not match your team. Repeated failed logins on wp-login.php or xmlrpc.php before a successful one is a brute force that worked.
Log retention on shared hosting is often only a few days, which is a good argument for pulling them at the first sign of trouble rather than after a week of investigation.
A vulnerability scan and a malware scan answer different questions. The first asks what could be exploited, the second asks what already has been. Both matter, but confusing them causes bad decisions.
Check installed plugins and themes against known vulnerability data, including anything deactivated but still present, because inactive code is still on disk and still reachable in some attack paths. Note abandoned plugins with no update in years. Then check the boring configuration items: PHP version, directory listing, exposed readme.html, xmlrpc.php availability, whether the dashboard file editor is enabled, and whether database credentials in wp-config.php are shared across sites.
Prioritise findings by whether they are actually exploitable on your site rather than by the severity number in the report. A critical rated vulnerability in a plugin feature you never enabled matters less than a medium one on your checkout flow.
Manual scanning finds a problem after it has had time to do damage. Monitoring finds it while it is happening, and the difference in cost is large.
Continuous file integrity monitoring with alerting is the highest value single addition, because unexpected file changes are the earliest reliable signal. Add uptime and content monitoring so a defacement or redirect is noticed within minutes. Keep Search Console connected and check it, since Google frequently reports a security issue before anyone internally notices. Track failed and successful administrator logins.
Reducing the noise reaching the site in the first place also makes monitoring more useful. Rate limiting and bot controls at the edge cut the volume of automated probing dramatically, which means the alerts you do get are worth reading. The WAF setup guide covers how to do that without blocking real customers.
If a scan has already confirmed an infection, move to the malware removal process rather than deleting files one at a time.
Detection and cleanup are different jobs. These are the engagements that pick up where a scan leaves off.
For confirmed infections: investigation, cleanup, entry point analysis, verification and a written report.
Explore this service →Recurring updates, vulnerability checks and monitoring so problems surface on a schedule instead of by accident.
Explore this service →Continuous oversight for sites where an undetected compromise would be expensive.
Explore this service →There is no single best one, because they detect different things. Plugin based scanners are strongest on known file signatures. Remote scanners are strongest on what a visitor or crawler actually receives. Server side scanning catches things running outside WordPress. Using one from each category gives far better coverage than picking a favourite.
Routinely. Signature scanners miss obfuscated or novel payloads, database injections and malicious administrator accounts. Remote scanners miss anything that only serves to search engine crawlers or specific geographies. A clean scan result means nothing recognised was found, not that the site is clean.
Almost always cloaking. The payload checks the user agent or referrer and serves spam or a redirect only to crawlers or to visitors arriving from search. Compare a normal browser fetch against a fetch using a Googlebot user agent, and use the URL inspection tool in Search Console to see what Google actually received.
Automated file integrity monitoring should run continuously, since it is cheap and catches changes within minutes. A deeper review including database and users is reasonable monthly for a normal business site, and weekly for ecommerce or membership sites where a compromise costs money per day.
Live traffic filtering and full site scans both consume resources, and on shared hosting the effect is noticeable. Scheduling deep scans off peak and moving traffic filtering to the edge with a properly configured WAF usually gives better protection with less origin load.
Use this guide alongside the relevant commercial service: security services, WordPress security, Cloudflare security, and click fraud prevention.
Talk directly with Xequent about WordPress security, Cloudflare protection or click-fraud controls.
Xequent is operated by Rana Shahwaiz Aslam. The current professional profile shows 100% Job Success, Top Rated Plus, 37 jobs, and 851 hours on Upwork, with pricing scoped to the engagement rather than an open-ended hourly meter. Rana's profile title identifies him as CEH Certified and focused on managed Cloudflare security and cybersecurity.