A towing service is found in the worst moment of someone's day. Nobody browses: they search, look for a number they can trust, and call. Everything in this project follows from that, from the order of the buttons on a phone to which searches the company pays for.
- Search
- Ad or listing
- Owned website
- Call, WhatsApp or form
- Tracked as a real contact
01 — The starting point
A website the company could not take with it
The old site lived inside the previous provider's hosted website builder. The company could not move it, and if the relationship ended, the website would stay behind. The advertising had the same problem in a different form: reports combined phone calls, contact form submissions and general website visits into a single “conversion” figure, and a large share of the budget went to ad formats that are not search results at all. The numbers could not say what was working.
So the brief came down to three things:
- A website that is theirsOn hosting in the company's name, so nobody else can switch it off or hold it back.
- Ads aimed at the work that paysBudget follows the service that earns the money, not whatever is cheapest to buy.
- Numbers they can checkCalls and enquiries counted separately and reported in plain language, never blended into one figure.
02 — The migration
Same content, same URLs, nothing for Google to lose
Everything search engines had learned about the old site had to survive the move. The new site is a rebuild, not a redesign of the content: same pages, same words, same addresses, in both languages.
- Every page text carried over in German and English
- Page titles and meta descriptions kept, with the typos in the old titles fixed
- Identical URLs: German at the root, English under /en-gb, same slugs
- hreflang pairs for de, en-gb and x-default, plus canonical URLs
- The three blog posts kept at their old addresses
- Permanent redirects for the old addresses that no longer exist
- Exactly one H1 on every page
- Watermarked stock previews on the old blog replaced with the company's own photos
The contact form needed the same care. The old builder sent enquiries through its own mail system, which would stop working the moment the domain moved. The new form delivers every enquiry to the company inbox, sends the visitor a confirmation in the old site's wording, and only says “thank you” once delivery is confirmed.
Enquiry
- Name and phone
- Delivered to the company inbox
- Confirmation to the visitor
- Thank you + lead counted
Spam is filtered without ever blocking a real customer: anything that looks automated is still delivered, but marked, and never triggers a confirmation email.
03 — Built around the call
On a phone, the only job is to start the call
The phone layout removes everything between the visitor and the call. Tablets and desktops get the call button next to a direct link into the contact form, with the service already selected.
- Header with only the logo and menu
- Call and WhatsApp right under the headline
- A call bar that slides in once the hero buttons scroll away
- The number printed on every call button
- WhatsApp opens with a message prefilled for the page's topic
- A WhatsApp QR code on desktop, to continue on the phone
- Contact form with only name and phone required
- “Free for you as the client” shown where the decision is made
Speed and accessibility got the same attention. The hero photo loads with high priority, animations are CSS only and respect reduced-motion settings, and the green used for actions passes WCAG AA in every combination. A heavy chat widget and a full-screen cookie wall were replaced by a small consent card. One idea was measured and dropped: inlining the CSS made the mobile page slower to paint, so it is not used.
Nothing new was claimed. Every number, insurer and promise on the new site comes from the old one.
04 — Measurement
Conversions that mean real contacts
The website pushes its own events, and Google Tag Manager passes them on to Google Analytics 4 and Google Ads. Nothing is hard-coded, and a page view never counts as a conversion.
- Tap or form
- Website event
- Tag Manager
- GA4 + Google Ads
- Call clickA tap on the phone number, wherever it appears on the site.
- WhatsApp clickTagged with the topic the visitor chose: wrong parker, breakdown, transport or other.
- Contact formCounted only after the server confirms the enquiry was delivered.
- Call from an adCalls of 60 seconds or more from the call button in the ad itself.
Consent Mode v2 sets every Google storage signal to denied until the visitor accepts. Visitors who decline are only modelled, so the ad reports will always show fewer leads than really came in. That is why the numbers are checked against the jobs the company actually received, every month.
05 — Google Ads, rebuilt
Search only, aimed at the work that pays
The company's own job records were clean where the old ad reports were not. They showed plainly which work carries the business: removing wrongly parked cars from private ground, almost all of it within the city and canton of Zürich. The new account, in the company's own name, is built around exactly that. Breakdown and transport searches are deliberately excluded.
Wrongly parked cars
The core · 6 ad groups
Generic towing
3 ad groups
Region
5 ad groups
Brand
1 ad group
- Search network only
- No Performance Max or Display
- Exact and phrase match only
- Targeting by presence, not interest
- Auto-applied recommendations off
- Breakdown and transport terms excluded
- Call asset with call reporting
Every ad carries the same set of headlines. Only the first line is pinned per ad group, so what people read matches what they just searched for. On generic “towing” searches, that pinned line also tells breakdown searchers this is not their service before they click.
06 — Ongoing management
We run the account every month
The launch is the start of the work, not the end of it.
- Search terms reviewed daily in the first week, with new exclusions added
- Budgets launched below full and raised only once the search terms run clean
- Bidding moves to conversion-based once there is enough data to learn from
- Growth comes from new search terms, never from higher bids on the same ones
- A monthly report in plain German: what was spent, what came in, what changed and why
- Results measured in francs per new customer, checked against the job sheet
The management fee is fixed rather than a share of the ad spend, so there is never a reason to spend more of the client's money than the results justify.
07 — Technology stack
What it is built on
- Next.js & TypeScriptEvery page pre-rendered, German at the root and English under /en-gb
- Tailwind CSSThe client's navy, green and hazard-stripe design system
- RailwayHosting, with a fresh deploy on every change
- CloudflareDNS and the redirect from the root domain
- ResendEnquiry delivery and the confirmation email
- Tag Manager, GA4 & Consent Mode v2Consent-aware measurement of calls, WhatsApp and enquiries
- Google Ads & Search ConsoleSearch-only campaigns and indexing, linked to each other
- llms.txt & schemaA fact sheet and service markup so AI assistants can find and cite the company
08 — Outcome
Owned, measurable, and built for the moment of need
Before
Website inside a provider's system → one blended “conversion” number → budget spread across formats that are not search
After
Website in the company's name → calls, WhatsApp and delivered enquiries tracked separately → search-only ads built around the service that pays
The company now owns its website, its hosting, its ad account and all of its data outright. If we ever parted ways, it would keep every piece of it, which was exactly the problem it came to us with.
The campaigns went live in September 2026. They are judged the only way that matters to a towing company: francs per new customer, checked every month against the jobs that actually came in.