Gary Whitehead has been a plumber in CM2 for nineteen years. His Wix site had been live since 2019, had not ranked in years, and Wix's built-in analytics showed three visits a week. The trade was coming from word-of-mouth, a Yell.com Premium listing he was paying £140 a month for, and the occasional Checkatrade lead. Margin was fine; the marketing spend was not.
The brief
A quote-form-led landing page with a single dominant CTA, four service descriptions written to match the actual phrases customers in Essex search for (burst pipe Chelmsford, boiler service Colchester, drain clearance Brentwood, bathroom installation CM2), Trustpilot reviews pulled in via API, and the right Service + AggregateRating schema to make the local pack rank. No blog, no portfolio, no team page — Gary did not want anything he had to update.
What the Wix audit revealed
PageSpeed Insights mobile score: 41. LCP: 2.1 seconds on a fast 4G profile (would be ~4 seconds on a real Essex commuter train). CLS: 0.18 because three above-the-fold images had no width/height attributes. Schema: minimal LocalBusiness, no Service entities, no AggregateRating despite the 47 five-star Trustpilot reviews. Internal search ranking for "plumber Chelmsford": page 4. The site was, in technical terms, leaking customers.
What we built between 10 AM and 2 PM
A single-route Next.js page with a sticky header CTA that opened a quote form modal on click; a hero with a clear value-prop (24-hour response, Gas Safe registered, no call-out fee); four service blocks each with a 200-word description hand-written to target the search phrases above; a Trustpilot widget loading 30 of Gary's real reviews; an embedded Google Map showing the service area (CM, CO, IP, EN postcodes); a FAQ block answering the eight questions Gary said he was asked most frequently on phone calls; and a footer with the Gas Safe Register number, the company registration number, and a list of the towns served.
The schema layer
A ProfessionalService schema entity with the Plumber sub-type, the full address, the four service entries with Service schema, an AggregateRating fed from Trustpilot (4.9 / 47 reviews), three review blocks, and an areaServed array listing the eleven towns covered. The schema validated on the rich-results test and Google indexed the page inside 36 hours.
The launch and first lead
DNS swap at 1:50 PM. First inbound enquiry at 4:48 PM the same day, via the quote-form modal, for a burst pipe in CM2. Gary was on the job by 5:30 PM. Week one closed with 23 inbound enquiries against his average of two — eleven times the previous baseline. Search Console showed impressions on "plumber chelmsford" inside the first 72 hours; by the end of week three the site was ranking page-one for the primary keyword.
What we did not build
No blog. No portfolio gallery. No team page. No live chat widget. Each of those would have added build time, would have needed ongoing content from Gary, and none of them would have moved the needle on lead generation for a two-engineer trades firm working out of a van. The quote form on the homepage is the conversion path; everything else is decoration.
The Yell.com decision
Inside the first three weeks Gary had more inbound enquiries from the new site than Yell.com had sent him in the previous quarter. He cancelled Yell.com Premium the following billing cycle, saving £140 a month — £1,680 a year — against a one-off £499 build cost. The site recouped its build cost inside the first month and has been pure margin since.
What changed about how Gary runs the business
Twelve months in, the trade mix has shifted noticeably. Pre-launch, roughly 70% of jobs came from word-of-mouth and Yell. Post-launch, roughly 55% come from the new site (via the quote form), 30% from word-of-mouth, 10% from Checkatrade, and 5% from Google Business Profile direct calls. The site has effectively become the largest channel. Gary has hired a second-year apprentice to help cover the additional bookings; the apprentice is paying for himself inside the first quarter.
The maintenance footprint
Through twelve months the site has needed: one set of seasonal opening-hours adjustments (Christmas closure), two photo swaps as the company added a Gas Safe boiler-fitting line, and one schema update when Trustpilot moved to a new embed format. All three landed inside the standard support window or as 30-minute change requests. Gary has not had to touch the underlying code, has not paid a monthly subscription, and has not been chased for a renewal. The site does its job and otherwise stays out of the way — which is exactly what a plumber needs from a website.
The local-pack ranking trajectory
Week 1 of post-launch tracking: position 6 for "plumber Chelmsford" and position 11 for "boiler service Colchester". Week 4: positions 3 and 7. Week 12: positions 1 and 3, with the local pack three-pack regularly showing ProFix in the top slot for queries originating inside the CM2 postcode. The driver was not backlinks (Gary has approximately five inbound links from local trade directories) but a combination of clean LocalBusiness schema, a properly-claimed Google Business Profile with weekly photo uploads, the AggregateRating fed correctly from Trustpilot, and the local-content depth on the page (the actual postcode districts named in copy, the local plumbing-supplier mentions that gave the page a geographic fingerprint Google could match). Local SEO at the small-trade scale is unglamorous and repetitive; it is also reliable when done properly.
What we got wrong on the first launch
Two small misses that we corrected in week three. First, the quote-form modal opened above the fold on mobile but the close button was a tiny X in the top-right corner — accessibility audit feedback caught it before any user reported it, but the dismiss target should have been larger from day one. Second, the Trustpilot widget loaded synchronously on initial implementation, which dropped the mobile PageSpeed score from 98 to 89. We moved it behind a lazy-load IntersectionObserver in the same week and the score recovered. Neither blocked the conversion path or affected the launch-week lead numbers, but both should have been caught at build time. We folded both into the standard pre-launch QA checklist for subsequent trades clients.
If you have a similar business
If you are a one- or two-engineer UK trades firm currently spending more than £100 a month on a directory listing (Yell.com, Bark, Checkatrade Premium) and ranking outside the local pack three-pack, the ProFix template is roughly the answer: a single-page quote-form-led landing site (£499 Launch tier), a properly-claimed Google Business Profile with weekly photo updates, Trustpilot or Google reviews fed into schema, and the directory subscription cancelled the following month. The maths typically pays back the build cost inside the first or second month, then the saved subscription becomes pure margin or reinvestment budget. Pre-condition: a real and consistent NAP (name, address, phone) across every channel, plus a genuine review pipeline. Without those, the site ranks more slowly and the conversion rate from inbound traffic is lower.
The Trustpilot integration that did most of the work
A point worth a separate section because the impact is consistent across our trades-sector launches. Gary had 47 five-star Trustpilot reviews from the previous five years of trading — they had been sitting on his Trustpilot profile invisible to anyone who had not specifically searched for ProFix on Trustpilot. The integration pulled all 47 reviews into the page (with the most recent six surfaced visibly and the remainder collapsed), surfaced the aggregate 4.9-star rating in the hero, and fed both into the Service-level AggregateRating schema. The visible-reviews effect on inbound conversion is hard to overstate — A/B testing on subsequent trades-sector launches has shown the reviews-visible variant converts at roughly 1.6x the rate of the reviews-hidden variant, even when the underlying rating is identical. Reviews exist to be read at the moment of decision; hiding them in a tab the customer never clicks defeats the purpose.
The competitor landscape Gary used to operate in
Pre-launch, the "plumber chelmsford" SERP was dominated by Checkatrade and Yell.com directory pages, plus two larger plumbing groups with multi-engineer operations and significant ad budgets. The three independent plumbers ranking on page one had each been there for 3-7 years and had accumulated dozens of inbound links. Gary's expectation was that breaking into page one would take six months of compounding work. The actual timeline was three weeks — driven by the schema lift and the GBP completeness rather than by inbound links or content depth. The "small trade ranks fast against entrenched competitors" pattern repeats reliably across our trades-sector portfolio when the technical foundations are right; entrenched competitors rarely update their schema or refresh their GBP, so the relative-quality bar is lower than the absolute-quality bar suggests.
Final note on the Gas Safe schema field
A small but valuable detail. Plumber schema on the page declares Gary's Gas Safe Register number in a structured propertyValue rather than as plain text. The Gas Safe Register publishes a verifiable supplier check at gassaferegister.co.uk; Google's knowledge graph appears to cross-validate against that endpoint for plumbing-and-heating queries, which lifts trust signal in a sector where rogue traders are a documented problem. Several of our subsequent Gas-Safe-registered plumbing builds have shown a similar local-pack lift; we now treat the Gas Safe field as a default rather than an optional schema element for the category.