[ Case study ]
Google had flagged the contractor's site for serving spam pages injected by malware; leads dropped by half in six weeks, the host threatened suspension, and a previous 'fix' had removed the visible spam while leaving the injection mechanism in place.
CLIENT a commercial roofing contractor — FOCUS Find the mechanism, not just the symptom
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
Commercial roofing — flat roofs, repairs, replacement contracts for property managers — is how this contractor earns its living, and it wins work almost entirely through search. The site ranks for the region's commercial roofing queries, built over a decade of steady content and project photos. The office is a project manager, an estimator, and an office administrator; the website was set up years ago by a relative and maintained irregularly since. When the website needs anything, the administrator emails the relative and waits.
Google had flagged the contractor's site for serving spam pages injected by malware; leads dropped by half in six weeks, the host threatened suspension, and a previous 'fix' had removed the visible spam while leaving the injection mechanism in place.
We proposed finding the mechanism, not just the symptom: a file-integrity diff and log review to locate the backdoor and the cron re-injecting spam, then a full cleanup performed on staging, verified with malware scanners, Search Console, and content diffs, and cut over in a short rehearsed window with rollback ready. Rankings, URLs, and content survive exactly — no fresh start, because search equity is the business's main channel. The reconsideration request would document root cause, cleanup, and the monitoring now in place, in plain language the owner could stand behind.
Just as important is what we ruled out, and why:
A file-integrity diff and log review located the backdoor and the cron that re-injected spam, so cleanup removed the cause — the prior fix had removed only the symptom.
The staged cleanup was verified with malware scanners, Search Console, and content diffs, then cut over in a rehearsed window with rollback ready.
The reconsideration request documented the root cause, the cleanup, and the monitoring now in place, and rankings recovered over the following weeks.
Delivered by the systems pod — engineer over 5 weeks, with working increments reviewed with the client every week.
Obstacle
Two days after the first staged cleanup, flagged pages reappeared: the backdoor's re-injection cron had survived the file restore, exactly the mechanism the previous fix had missed.
Handled: We stopped trusting file snapshots, diffed the filesystem against a known-good core, and pulled the backdoor and cron from the logs before re-running the full cleanup.
Obstacle
A reused password on an old admin account — the likely original entry point — surfaced on the final day, after the cleanup had already been verified clean twice.
Handled: Every credential was rotated, including the database user and hosting account, and the rotation was documented in the evidence file the reconsideration request later cited.
The headline: spam flag lifted after review, with the injection mechanism removed and monitored — Flagged → clean reconsideration, read from Search Console status. A second check: lead-form submissions in the two months post-recovery vs during the flag at +38%.
The office trusts the inquiry log again — the slope that first alerted them is now the same chart they watch weekly. The owner can explain the incident to a customer in two sentences, which matters in a trade that sells trust. Search visibility recovered without the fresh-start conversation ever returning, and the site's upkeep stopped depending on a relative's goodwill. The scariest part of the whole episode — not knowing — is now a file diff away from an answer.
The result was read from Search Console status against the pre-engagement baseline over the stated window, with a guardrail check on lead-form submissions in the two months post-recovery vs during the flag. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would change every credential including the database user before declaring clean — one reused password was the likely entry, and rotating it belonged in the first hour, not the last day.
[ Related service ]
[ Related builds ]
Shared host per-site preview deploysAll five brands live on Vercel with preview-deploy reviews and tested rollbacks
Bot buyouts protected on-salesSubsequent on-sale days completed with bots challenged at the edge and origin load flat
[ Next step ]
Next case study