Case Study 19 October 2026 19 min read

MC Transports: A Motorcycle Transport Website Priced From Two Postcodes

Sean Hamilton already ran Lockerfella and Brewood Removals with us when he started a third business: motorcycle collection and delivery from Brewood. It had no photos, no reviews and no history, and one rule from Sean: real photos and confirmed claims only. This is how we built a 28-page site that prices any job from two postcodes, the bugs we caught in our own work, and why the ranking results are still to come.

MM
Mark McNeece Founder & Lead Developer
The MC Transports website on a desktop browser and a phone: the headline "Motorcycle transport, priced from two postcodes" in heavy white type on black, a two-postcode price checker, red and white livery stripes cut at an angle and a white number board reading "From £99, local, one way"

The Headline Numbers

  • 28 indexable pages at launch
  • £99 local price, quoted from two postcodes
  • A+ security header grade, no unsafe-inline
  • 100 PageSpeed, mobile and desktop

This motorcycle transport website case study starts with a business that had nothing to show. MC Transports is Sean Hamilton's one-man motorcycle collection and delivery service from Brewood in Staffordshire: no photos of the van, no reviews of its own, no jobs on the record and no history in Google. What it did have was Sean's rule for the website, in his words: "Show real photos and confirmed claims only." So the site had to prove itself through what it does rather than what it says, and the first thing it does is price any job from two postcodes in a few seconds. Here is how we built it, the faults we found in our own work after launch, and why the ranking chapter of this story hasn't been written yet.

MC Transports: Sean Hamilton's Third Business With Us

Sean is not a new client. We built his locksmith business, Lockerfella, which reached number one on Google, ChatGPT and Gemini in 21 days, and then rebuilt Brewood Removals, a firm with great reviews and no rankings. When he started a third business, moving motorbikes, he came straight back. That says more about the first two projects than anything we could write about them, and it set the bar for the third: it had to be as good as both, and look like neither.

The brief was short. MC Transports collects and delivers motorcycles by van, covering the West Midlands and Staffordshire locally and anywhere in the country by quotation. The website's job is to make the phone ring, start WhatsApp conversations and bring in quote requests. And because the business was brand new, a lot of the usual material simply did not exist yet. The domain arrived on 17 October 2026. The van and its kit were still being set up, so there were no photos of either. There were no reviews of its own, and the prices had to be pinned down with Sean before a single figure could go on a page.

That last point mattered more than it sounds. On a site whose main feature is an instant price, every number has to be one Sean has agreed to honour. So the prices were confirmed with him first and live in one data file, and the whole site reads from it. When a price changes, it changes in one place. Everything we could not confirm, the van, the kit, the hours, how many bikes fit on a load, stays off the site until it is real. One more disclosure in the spirit of our editorial standards: the site is hand-built PHP, not WordPress. Most of what we build is WordPress, and every discipline in this study carries straight over to our motorcycle transport website design work on that platform.

The Launch Timing Sheet: Live Site, Then the Pit Stops

A brand-new business has no "before" to show, so the story of this build is a sequence: the steps to a live site, then the faults that only real use could find, each fixed and logged. The times below come from the project's commit history.

Timing sheet MC Transports launch, from the commit log

  1. L1 Domain in place, project scaffolded
  2. L2 Race livery chosen from three design directions; fonts and colours measured
  3. L3 Live: 28 indexable pages, the instant price and ten AI Discovery Files
  4. Pit 21:22 Quote-form photo previews unblocked: the new Content Security Policy had stopped them
  5. Pit 21:52 Mobile polish after the first look on a real phone

  1. Pit 05:37 Phone photos held under the 20 MB email ceiling
  2. Pit 05:48 Spam trap stops binning real enquiries; deploys made atomic
  3. Pit 12:17 Sean's own stories added to the guides; Search Console schema fixed

Laps are the build; pit stops are fixes after launch, timed from the commit that shipped them.

At launch the site carried 28 indexable pages: the home page, a services hub with five services, a prices page, an areas hub with ten towns, a guides hub with three guides, an about page, the quote page, and the editorial, privacy and terms pages. Ten AI Discovery Files went live with it, to the AI Discovery Files specification, so an assistant asked about motorcycle transport near Brewood has first-party facts to work from, including the prices and the area covered. We set out why that matters for a small local business in what a local business website needs in 2026.

The pit stops are the honest part. Launch is where a site meets real phones, real browsers and real customers, and four of the five fixes on that sheet came from exactly that. They are the subject of most of this case study.

An Instant Motorcycle Transport Price From Two Postcodes

Most motorcycle transport websites ask you to fill in a form and wait. MC Transports asks for two postcodes and answers in seconds, with one fixed price. The instant quote calculator behind it runs on a rule simple enough to publish in full, so the site does, on its prices page:

How a job is priced. Weekends add a flat £50. Sean is not VAT registered.
WhenPriceMeasured as
Both ends within 10 miles of Brewood£99Crow-fly distance
Both ends within 20 miles£129Crow-fly distance
Up to 100 total van miles£250Brewood to the bike, to its new home, and back
101 to 200 total van miles£299Same three legs
Over 200 total van milesFrom £399Priced by hand

Under the hood, the two postcodes go to postcodes.io to become coordinates, rounded to three decimal places, roughly 100 metres. Only those rounded coordinates go to openrouteservice for road miles; no name, email or postcode reaches the routing service. Results are cached for each pair of postcodes, the check is rate-limited to 30 a visitor in ten minutes, and every price carries a signed reference such as P-242CB7, so if a customer quotes a price back, Sean can see exactly what they were shown.

Brewood ST19 9AA to Wolverhampton WV1 1AA, run on the live site on 19 October 2026: £99, three legs and 22.9 van miles, with Book, WhatsApp and Call one tap away.

The answer arrives on a number board, the white race plate that runs through the whole design, with an odometer count-up that settles on the price. Under it, a route board shows the three legs with miles and minutes for each, and the total van miles. Then three buttons: book the job, open WhatsApp with both postcodes and the price already written, or call. One detail customers notice: a Telford to Wolverhampton job runs to 45.3 van miles and is still £129, because the local bands follow how far each end is from Brewood, not how long the drive is. That is the rule Sean wanted, and the site applies it the same way every time.

The Price Check That Failed in Cannock Chase

The first fault the price engine met was geographical. A postcode district such as WS15, the Rugeley district, is often located by its centre point, and the centre of WS15 sits in the middle of Cannock Chase, a forest. A routing engine has to snap each point to the nearest road before it can measure a drive, and by default it only looks 350 metres. In the middle of the Chase there is no road within 350 metres, so the route failed and so did the price.

The fix was to widen the snap radius to 5 kilometres for every point, then re-test every pre-filled route on the site: 23 of them across the area pages and the areas hub. It is a small change with a lesson in it. A price engine has to be tested against the awkward postcodes, not the convenient ones, and Staffordshire has plenty of awkward ones. A failed price check was also given a retry and an error log in the same round of fixes, so a fault like this one gets seen, not just suffered by a customer.

Race Livery: Designing a Motorcycle Transport Website

I chose the design direction from three on a design board: "Race livery", "Track map" and "Tie-down". Race livery won because it says motorbikes at a glance without a single stock photo, which mattered on a site that had none to use. Headings are set in Big Shoulders Display at its heaviest weight and body text in Familjen Grotesk, as three self-hosted font files totalling 37.7 KB. A black livery band runs across the hero, cut at the -14 degree lean of the MC wordmark, and the rest of the language follows from it: number-board price plates, pit boards, a starting-grid process and a chequer rule where a journey ends.

Every colour pair was measured for WCAG AA rather than estimated, as we did on Cordley Solutions: 31 of 31 gated pairs pass. And it deliberately looks like neither of Sean's other sites. Three businesses with one owner should not read as one brand in three colours.

The services hub as a pit lane. Pick a service and its garage shutter rolls up to show the price plate.

The interactions earn their place by doing a job. On the services hub, picking a service rolls up its garage shutter to reveal the price. On the track day and event transport page, each circuit has its own row with the miles and minutes from Brewood and a "Price it" button that drops its postcode into the checker.

The track day and event transport page: rows for NEC Birmingham, Donington Park, Oulton Park and Cadwell Park, each with a dotted route from Brewood, a small motorbike icon, the miles and minutes in number plates, and a Price it button
Circuits and venues from Brewood. Each row prices itself: "Price it" drops the venue's postcode into the checker.
The pre-ride check. Each tick lights one start light; when the gantry is green, the page says "Lights out" and offers the price.

The pre-ride check is the one I like most. Each item you tick lights one start light on a gantry, and when all four are green the page tells you you're ready and offers the price. It saves Sean a phone call about keys, fuel and who will meet him at the venue, and it makes the boring part of booking feel like the start of a race. The prices page goes further, with a ring map of the £99 and £129 bands and a "drop a pin" box that shows where your bike sits on it.

The MC Transports prices page: the £99, £129 and van miles bands explained on the left, and a ring map on the right with Brewood at the centre, a 10-mile £99 ring and a 20-mile £129 ring, nearby towns marked, and a red pin dropped for a WS11 postcode
The ring map on the prices page. Drop a pin and you can see which band your bike is in before you ask for a price.

Even the menu does a job. The Areas panel is a drive-time ladder: every town with a bar for the time from Brewood, red where the town centre is in the £99 band. An early version was a map, and it was too busy to read at a glance, so it became a ladder. On a phone, a sticky bar keeps call, WhatsApp and quote one tap away on every page. And the 404 page is a road-closed sign with the price checker on it, because a lost visitor is still a customer.

The MC Transports Areas menu open on desktop: Drive times from Brewood, with a ladder of ten towns from Cannock at 15 minutes to Shrewsbury at 43 minutes, red bars for towns in the £99 local band and black bars for towns priced on mileage
The Areas menu as a drive-time ladder: Cannock 15 minutes to Shrewsbury 43, red where the £99 local price applies.
The MC Transports 404 page: the heading Wrong turn, a number board reading Page 404, road closed, a motorbike icon stopped at a red and white road barrier, and the two-postcode price checker
"Wrong turn". Even the 404 page carries the price checker.

Ten Area Pages Built From Real Roads and Real Dealers

Area pages are where a lot of local sites go wrong, and Sean has seen what happens: his removals site had sprawled into around 160 near-identical town pages before we rebuilt it. So MC Transports has ten, one for each town it genuinely serves, and none of them shares body copy. Each one carries the real route from Brewood, the real drive time, named dealers and MOT centres, and something about riding there.

The route strip on the MC Transports Cannock page: a black road from Brewood to Cannock with A5 and A4601 road signs, notes reading east past Gailey and over the M6 at junction 12 and into Cannock town centre, a 7.3 mile scale, a chequered finish and a card reading 15 minutes by car
The Cannock page route strip: the A5 past Gailey, over the M6 at junction 12, then the A4601. 7.3 road miles, about 15 minutes by car.

The Cannock page is typical. It names CMC Cannock, a Yamaha dealer and DVSA motorcycle MOT centre, along with Speedway Motorcycles, Chase Superbike Centre and Haywood Garage, and it covers Rugeley, Hednesford, Heath Hayes and Huntington. Every business was checked on its own website before it went in, and closed businesses were left out: a Harley-Davidson dealer in Wolverhampton that closed at the end of September 2026 is not listed. A dealer list that sends a rider to a closed showroom is worse than no list at all.

Experience Content From a Business With No History Yet

A new business has no case studies, no reviews and no portfolio, so where does first-hand experience come from? From the owner. We emailed Sean ten short prompts about his own riding and moving bikes, and asked for his answers in his own words. Two real stories came back, and both now sit where they help a reader.

The first is a near miss. In his early twenties Sean was selling his own Honda CX500 and took it to the buyer on a borrowed trailer, strapped down over the handlebars. When he released one side at the buyer's, the forks sprang back and nearly threw the bike over. It didn't go down, but he never strapped a bike that way again, and the story now explains exactly why in the guide to collecting a privately bought motorbike. The second is a Yamaha R1 moved from Penkridge to Oxford on a Brewood Removals house move: a steep drive assessed before loading, the removals van's tail lift, a three-point turn into the van, then a wheel chock, four straps and blankets either side. That one lives in the guide to preparing your motorbike for transport, beside the tick-off checklist.

Google asks a pointed question of content like this:

"Does your content clearly demonstrate first-hand expertise and a depth of knowledge (for example, expertise that comes from having actually used a product or service, or visiting a place)?"

Google Search Central, Creating helpful, reliable, people-first content

A brand-new business can't answer that with a portfolio, but it can answer it with a person. The CX500 story is the kind of detail nobody would invent, and it does more for a nervous owner than a paragraph of reassurance. I've ridden motorcycles for forty years, passed my IAM advanced test in 2002, and ride a BMW K1600 GT now, so I know what an owner is weighing up when they hand over the keys: does the person loading this bike understand how it sits on its suspension? Sean's story answers that before they ask, which is the kind of non-commodity content Google rewards and no competitor can copy. Both stories are told in his voice, lightly edited, and we were careful about what they don't claim: the tail lift and chock in the R1 story belong to Brewood Removals, so the site never presents them as MC Transports kit.

The guide to collecting a privately bought motorbike: a lap counter reading Lap 4 of 9 beside the contents, and a photo of a motorbike in a garage with six numbered hotspots; hotspot 1 is open and explains checking the frame number at the headstock against the V5C
The private-sale guide's numbered hotspots. The photo is labelled on the site as an illustration, not a customer's bike.

The Honeypot Spam Trap That Binned Real Enquiries

This is the bug I most want other web designers to read about, because the textbook told us to build it. A honeypot is a form field hidden from people and left visible to bots. A person never fills it in, so if it arrives filled in, the form assumes a bot and throws the message away. OWASP's bot-management guidance describes the pattern like this:

"Server side: if company_url is non-empty, silently drop the request or route to a tarpit."

OWASP, Bot Management and Anti-Automation Cheat Sheet

That is exactly what our quote form did, and on launch night it threw away real enquiries. Sean sent test enquiries from his phone. Samsung Internet's autofill saw a hidden field labelled "Company website" and helpfully filled it with "Lockerfella Locksmiths", his other business. The form saw a filled honeypot, dropped four of his messages silently, and told him each one had been "sent". If Sean hadn't been testing, the first sign of the problem would have been customers who never heard back.

"Silently drop" was the fault. An autofilled field is a person, not a bot, and silence means nobody ever finds out. So we changed four things. The field was renamed to something autofill leaves alone, with the usual hints telling password managers to ignore it. Every trip of the trap is now logged with its time and a copy of the form. An enquiry is dropped only if the trap is filled and it also fails the timing check: no valid signed timestamp, or sent in under four seconds. Anything else reaches Sean, flagged as a possible autofill. A spam trap that can fail must fail loudly. That was already the written rule on the Splat Decorating form we had built a few days earlier, which is why this one stung, and it now goes into every form we build, including the WordPress sites we harden as part of our WordPress security work.

The MC Transports quote form: collection and delivery postcodes, bike make and model, roughly what it's worth, when would suit you, working-order switches for it rolls, it steers, it brakes and keys will be there, a box for access notes and a photo upload area, with a What happens next panel and a £99 price plate beside it
The quote form: working-order switches, access notes and up to four photos, with the price plate alongside.

Phone Photos, Security Headers and Deploys That Can't Break a Price

Three more faults belong on the record, because each one came from real use rather than a checklist.

Phone photos and a 20 MB email ceiling. The quote form takes up to four photos of the bike, and a modern phone photo can be enormous, while the email that carries an enquiry to Sean has a hard size limit. So the browser shrinks each photo to 2,000 pixels on its long edge before it uploads, and the server checks every file by type and content, rejects anything over 36 megapixels, strips the location data and steps the quality down until each photo is under 2.5 MB. In testing, a worst case of 110.9 MB of original photos went up as 5.0 MB.

Security headers, from grade D to A+. The first header report gave the site a D. We added HSTS, a cross-origin opener policy and a permissions policy, and a Content Security Policy with no unsafe-inline anywhere, for scripts or styles. That meant auditing every page for inline scripts, inline styles, style attributes and inline event handlers, and moving all of them into files. We checked 28 pages in a real browser with no violations, with the price popup, the map pin and a live reCAPTCHA token all still working. Then, the same evening, a review on a phone found the one thing the audit had missed: the policy was blocking the quote form's photo previews. One directive fixed it at 21:22. The scanners now agree: Security Headers grades it A+, and 365i's HTTP header checker scores it 100 out of 100, with all eight security headers present.

"Allowing 'unsafe-inline' in the script-src directive of CSP is obviously dangerous and can lead to an almost infinite number of bad things happening, but as it turns out, the damage that can be done with styles is quite limited."

Scott Helme, creator of Security Headers, A Balanced Approach: New Security Headers Grading Criteria, November 2023

That post is worth reading closely, because it changes what an A+ proves. Since late 2023 the grade no longer requires styles to be free of unsafe-inline, so an A+ on its own says nothing about styles. MC Transports allows unsafe-inline in neither scripts nor styles, which is why we quote the policy and not just the grade. One honest limit: this is an allowlist policy, which trusts named sources such as Google's reCAPTCHA paths, rather than the nonce-based "strict CSP" that Google's own guidance on mitigating cross-site scripting prefers. reCAPTCHA v3 loads only when someone starts the quote form, and a failed check flags an enquiry for Sean rather than blocking it, because a false positive must never cost him a customer.

Deploys that couldn't break a live price check. On 18 October a price check failed during a deploy: it had run against a PHP file that was only half uploaded. Now every file is uploaded beside the live one under a temporary name, then renamed into place in a single step, so a visitor gets the old file or the new one and never half of each. Live price checks run during the next deploy passed 14 out of 14.

Search Console Schema Warnings, Fixed the Next Day

The day after launch, Google Search Console reported two kinds of structured data problem. The About page's ProfilePage markup had an "Invalid datetime value" for dateModified, because it carried a date without a time. Every date in the site's schema now goes out as a full ISO 8601 datetime with the UK offset, the format Google's structured data documentation recommends. And the track day guide had described Motorcycle Live, the big show at the NEC, as an Event. Google expects Event markup from the organiser, not from a business mentioning the show, so it became a Thing. Both fixes shipped on 18 October, with Sean's stories, in the last pit stop on the timing sheet.

What This Motorcycle Transport Website Case Study Can't Claim Yet

The site went live on 17 October 2026, two days before this study was written. Here is everything we can measure honestly so far.

  • Search Console: the home page is submitted and indexed, and Google's chosen canonical matches ours. There is no performance data yet: no impressions, no clicks, no queries. That is normal for a site this new, and the data lags two to three days in any case.
  • PageSpeed, mobile: a PageSpeed Insights run on 19 October 2026 at 7:14 am scored 100 for Performance, Accessibility, Best Practices and SEO, with First Contentful Paint 1.1 s, Largest Contentful Paint 1.4 s, Total Blocking Time 0 ms, Cumulative Layout Shift 0 and Speed Index 1.1 s.
  • PageSpeed, desktop: a Lighthouse 12.8.2 desktop run the same morning scored 100 in all four categories: First Contentful Paint 0.3 s, Largest Contentful Paint 0.4 s, Total Blocking Time 0 ms, Cumulative Layout Shift 0, Speed Index 0.5 s.
  • Security headers: A+ on Security Headers, 100 out of 100 on 365i's checker.

Most transport company website case studies end at launch with a screenshot, and this one has to stop short of results too. All of those are lab and build measurements, and Largest Contentful Paint and layout shift sit well inside Google's Core Web Vitals thresholds in the lab. Chrome's field data from real visitors says "No Data" for now, and there are no rankings, leads or AI citations to report. When real figures arrive we will add them here, dated, whichever way they point. It is the same standard we hold Lincolnshire Chauffeur Services and Tickdoc to, and the reason the Lockerfella study still lists the head term it hasn't won.

Results log

  1. Published. Home page indexed; no Search Console performance data yet. PageSpeed 100 on mobile and desktop; security headers A+.

New entries are added as Search Console data arrives.

Frequently Asked Questions

How does an instant motorcycle transport price work from two postcodes?

On the MC Transports site, the collection and delivery postcodes are turned into coordinates, then the price follows two rules. If both ends sit within 10 miles of Brewood as the crow flies, it is £99, or £129 within 20 miles. Beyond that it is priced on total van miles, Brewood to the bike, the bike to its new home and back, using road distances from a routing service. The customer sees the price, the three legs and the van miles in a few seconds, with buttons to book, WhatsApp or call.

What should a motorcycle transport website include?

A price the customer can get without phoning, the area actually covered, clear conditions (does the bike roll, steer and brake, is access normal), a quote form that takes photos from a phone, and proof that the person loading the bike knows what they are doing. MC Transports adds a pre-ride checklist, guides written from the owner's own experience, and ten area pages built from the real roads and dealers around Brewood.

Can a honeypot spam trap block real customers?

Yes. A honeypot is a hidden field that only bots should fill, but browser autofill can fill it too. On MC Transports, Samsung Internet put the text "Lockerfella Locksmiths" into a hidden field labelled "Company website", and four of the owner's own test enquiries were silently dropped while the form said "sent". The fix: rename the field so autofill leaves it alone, log every trip, and only drop an enquiry that also fails the timing check. Anything else reaches the owner, flagged.

Is the MC Transports website built on WordPress?

No. It is hand-built PHP with vanilla CSS and JavaScript, hosted on 365i behind its CDN. That suited a 28-page site whose prices live in one data file and whose instant price needs server-side code. The same disciplines, measured design, honest content, full schema and performance budgets, are what we build into WordPress sites, which make up most of our work.

What does a Content Security Policy with no unsafe-inline mean?

It means the browser will refuse to run any script or apply any style that is written inline in the page, so an injected script cannot run. Getting there meant auditing every page for inline scripts, styles, style attributes and event handlers and moving them into files. MC Transports scores A+ on security headers with no unsafe-inline anywhere. It is an allowlist policy rather than a nonce-based strict CSP, which we say plainly on the page.

How do you write experience content for a brand-new business?

Ask the owner, not a template. We emailed Sean ten short prompts and asked for his answers in his own words. Two real stories came back: nearly dropping his own Honda CX500 strapped to a borrowed trailer, and moving a Yamaha R1 from Penkridge to Oxford on a Brewood Removals job. Both now sit in the guides where they help a reader, lightly edited and still in his voice.

Why are there no customer reviews on the MC Transports site?

Because the business is brand new and has none of its own yet. The owner's other businesses have strong Google reviews, but they belong to Lockerfella and Brewood Removals, so the site never presents them as MC Transports reviews. Its rule from day one was real photos and confirmed claims only, and borrowed reviews would break it.

Has the MC Transports website ranked yet?

Not yet, and we will not pretend otherwise. The site went live on 17 October 2026. Search Console shows the home page is indexed but has no performance data yet. We will add real figures to this case study as they arrive, logged with their dates, whichever way they point.

Starting Something New?

No photos, no reviews, no history: that is where every business starts. We will build you a site that proves itself through what it does, with prices you can stand behind and nothing you can't confirm. Tell us about it and we'll quote within 24 hours.

Get a Free Quote

Sources & Evidence