Haulage that does not fit the standard
Adam Fabijan's FHU FAB TRANS, based in Kalisz, has been moving what an ordinary lorry cannot take since 2010: construction machinery, tanks, steel structures, yachts and boats. Loads up to 36 tonnes with no dimension limit, including permits, route planning and pilot vehicles. Its customers are companies across Poland that often need a load moved from one day to the next.
The company had a site built in a website builder and Google Ads campaigns run by an agency. The site advertised "international" haulage although the business works domestically, and the ads were spending a budget whose results nobody could reliably assess. The client was in a hurry: a new site, proper measurement and a new campaign, on an express timeline.
New infrastructure instead of patching the old
We did not migrate the builder site. We set up a fresh WordPress instance on a new domain with a custom theme written from scratch, no visual page builder and no unnecessary plugins. All traffic reaches the server through Cloudflare only, and direct connections that bypass it are refused.
The company serves the domestic market only, so the site accepts traffic from Poland only. Search engine and advertising crawlers are the exception, so visibility in Google is not affected. Shutting out the rest of the world costs the client nothing and removes most automated break-in attempts and form spam.
- Geo-blocking: Poland only, plus Google and Bing crawlers
- Server unreachable without going through Cloudflare
- Admin panel at its own address, standard login URLs do not exist, login attempts rate-limited
- Bot protection on the form without CAPTCHA puzzles for people, with a submission limit
- Domain e-mail with SPF, DKIM and DMARC records
- Files from enquiries stored outside the public directory, downloadable from the admin panel only
A form that collects everything needed for a quote
One sentence from our call with Adam set the direction for the whole project: when customers see what we move, they stop hesitating. And when a haulier sees the load, he can quote straight away, without three follow-up phone calls. That is why the quote form does not stop at a name and a phone number.
Separate dimensions
Length, width and height in separate fields, plus weight in tonnes or kilograms. Above 36 tonnes the form warns immediately and the enquiry reaches Adam flagged
Route with postcodes
From and to as a town and a postcode, because permits and the route depend on the exact location
Photo or drawing
Up to 5 files, 15 MB in total: phone photos, including iPhone format, PDFs and DWG or DXF technical drawings
E-mail with attachments
The enquiry lands in Adam's inbox with all files and in the admin panel at the same time, so nothing gets lost. Deleting an enquiry deletes its files too
Right next to the form is the phone number with a simple message: no dimensions or photo, just call. In this trade some jobs always start with a conversation, and the site must not get in the way.
Google Ads audit: what actually counted as success
Before touching the ads, we checked what the account treated as a conversion. The answer was telling. Out of 17 configured actions, the bulk of "conversions" was a visit to the contact page. Google's algorithm was optimising the campaigns to get people to look at the contact page, not to call or ask for a quote.
17 conversion actions, around 70% of "successes" were a contact page view
Ads promising haulage across Europe for a company that drives within Poland
Campaigns targeting only some of the regions
An ad link pointing to a page that did not exist
Analytics linked to a different ad account than the one spending the budget
One primary conversion: a submitted quote form
Secondary: phone and e-mail clicks on the site, calls from the ad's call button
All of Poland, only people physically in the country
Every link leads to the new site
Analytics, Search Console, Tag Manager and Ads correctly connected
Measurement follows the law: nothing goes to Google until the visitor consents, and conversions carry no personal data from the site. We tested every path in a browser: consent, refusal, a form with files, a phone click. Copying the phone number or e-mail address also counts as contact, because that is what some customers actually do.
A new campaign built around one phone call
The old campaigns were paused only on the day the new one went live, in a single switch, so the company never disappeared from search results. The new campaign runs on Google Search only, during the hours when Adam answers the phone, and the ad has a call button.
A few hours after launch a caller interested in "transport services" rang. She wanted to send a large parcel by courier. The next contacts, early in the afternoon, were on target: a call from a company looking for pilot vehicles for abnormal loads, and at 13:31 a form enquiry for 22-metre steel pipes weighing 7.8 tonnes each, with documentation attached. The customer entered the dimensions in millimetres in a field labelled metres, so that same day the form gained a unit selector: mm, cm or m. The same day the negative list grew with courier terms and the generic "transport services", and the ad headlines switched from "carriage" to "transport", as the client asked. A campaign is not finished on launch day. The first weeks mean reading, every day, the searches people actually click on.
Technologies
Custom theme from scratch
PHP 8.4
Advanced Custom Fields
Cloudflare WAF and Turnstile
Google Tag Manager
GA4 with Consent Mode v2
Google Search Console
Google Ads API
Schema.org JSON-LD
Python
Playwright
Results
What this project teaches
In abnormal load haulage, customers are not looking for a pretty website. They are looking for someone who will answer the phone and take the load others turn down. Everything in this project serves that one contact: a form that gathers what is needed for a quote, a site open only to the market the company serves, and ads that count conversations rather than page views.
The audit delivered more than the new ads. An account that spent months learning from contact page views could not find customers, because nobody had told it who a customer was.