Deep cleaning · Sarajevo · 14 pages · client since 2024

Two years, two phases: reviews first, then the site

Live site: cleanteam.ba

The situation

Clean Team's first problem was not their website. It was that nobody could find them. The work started with their Google Business Profile: cleaning it up, and then building a system that collects reviews from satisfied customers as a matter of routine rather than as an occasional favour.

Today that profile carries 5.0 stars from 106 reviews — an extraordinary count for a small cleaning company in a city the size of Sarajevo, and independently checkable by anyone in five seconds.

Then, in September 2026, phase two: a company with a genuine reputation and a website that could not tell you what anything cost. The prices existed; they were locked inside a widget that did not survive being read, so even the old site's own text did not contain them.

What I did

Got the facts before writing a word.

The owner confirmed prices, opening hours, service area and address. All of it now lives in one content file that fills the hero, the homepage, the price list, every service page and the structured data — one source, so the site cannot contradict itself.

Found the site was targeting the wrong word.

Keyword Planner across Sarajevo Canton and Bosnia returned 8,500 searches a month, 6,667 of them in Sarajevo. The phrase the site used for carpet cleaning gets 10–100 searches a month; the near-identical phrase customers actually type gets 1,000–10,000. For car interiors, the formal word for "vehicle" returned no data at all, while the everyday word for "car" returned 100–1,000. Both pages were retitled.

Measured the competition's shelf space

through a classifieds marketplace's public API: 70 listings in cleaning services with a median of 81 views a month, against only 32 listings in car detailing with a median of 84 and a top quartile of 233 — a visibly emptier shelf.

Told them when to advertise.

Five years of Trends data show June at 61 against January at 10 — summer runs about 3.5× winter. The recommendation was to start advertising in March, so the season arrives with rankings already settled rather than being bought at peak.

Made the form actually work.

It sends through an authenticated relay with the domain signed, and every enquiry is also written to a log above the web root so nothing is lost if the mail provider fails. Verified with a real submission: it arrived in the inbox, not spam.

100/100/100/100
Lighthouse desktop, 96/100/100/100 mobile, on the live site
3.54 → 1.86s
mobile FCP, after a CSS rule hiding the hero on a dynamically injected animation library
460 → ~200ms
TBT, after finding a scroll animation creating 125 scroll triggers
What I'm willing to be judged on

Six claims were cut from the site before launch because nothing could source them — same-day service, free rescheduling, pet hair, weekend availability. Three statistics bars reading 95%, 90% and 100% were removed: they came from the old site and had never been measured by anyone. A WhatsApp number appeared in four places; the client only uses Viber. And counters that were supposed to show real figures were rendering "0%".

What is being measured next

Search Console impressions and position, from end of September 2026.

Search Console history from mid-October 2026 will go here.