Shopify development, diagnosed by the person running your ads.
I don’t build the store myself. I work out what’s wrong, spec the fix, and check the work before you ever see it — my developer, someone I’ve worked with for years, does the build. That’s the part most projects are missing: a diagnosis made by someone who has to live with the conversion rate afterwards.
New builds, rebuilds, the ongoing work that usually sits in a queue for three months, and the housekeeping nobody books until something breaks.
Revenue generated by a UK jewellery brand built on Shopify from launch — tracking, paid and SEO from week one
Cost per lead after Home Build Doors’ Shopify store was rebuilt around getting a quote
Conversion rate on the same build
A site is the second half of every ad campaign.
You can win the auction and still lose the sale. The click is bought and paid for by the time anyone sees your page, so everything after that point — how fast it loads on a phone, how obvious the next step is, whether the checkout asks for things it doesn’t need — is decided by the build, not the bid.
When those two jobs sit with different companies, nobody owns the result. The agency says the site isn’t converting. The developer says the traffic isn’t qualified. Both are half right and nothing changes for a quarter.
And it isn’t only the conversion rate at stake. A store can lose you the sale. Left alone long enough, it can lose you the ad account.
The fix isn’t finding one person who can do both jobs. It’s making sure the diagnosis and the ad spend sit with the same person.
I diagnose. He fixes.
I’m not a Shopify developer and I’m not going to pretend otherwise. What twenty years in search has made me good at is working out what’s actually wrong with a site and what it would take to put right — which products need their own template, where the checkout is losing people, why a page that ranks well converts badly anyway, what the tracking has to capture for the bidding to work at all.
I’m not a stranger to the code, either. The static HTML sites in my portfolio — Innov8 Security, the London appliance repair micro-sites, this site — I build myself. Shopify is where I hand over.
Shopify goes to the same person every project, not whoever’s free that week.
Then I check it. Nothing reaches you until I’ve been through it and had the tweaks done — you’re not the one finding the problems, and you’re not the one relaying them.
It’s the opposite of the usual arrangement, where the person writing the brief never has to live with the numbers it produces.
Stores, rebuilds, and the work in between.
New store builds
A complete Shopify build — theme, structure, product templates, checkout, and the tracking wired in from the first day rather than bolted on after launch.
Custom functionality where the catalogue demands it: Pura Gems runs a ring builder that prices live as the buyer changes diamond, metal and size, because you can’t sell a made-to-order ring from a standard product page.
And where a store needs something Shopify doesn’t do and no app does properly, we build a private app for it, in our own Shopify developer store. One app that does your job, rather than three from the app store that half do it — and one less thing leaving code in your theme.
Rebuilds
Most of what I’m asked to look at isn’t broken, exactly — it was built to a brief that no longer matches the business.
Collections that grew organically into a mess, product pages written for a catalogue half the size, a theme carrying five years of app code nobody can safely remove. A rebuild keeps what earns its place and starts again on the rest.
Ongoing development
New pages, new templates, feed and Merchant Center work, and the small changes that decide whether a test actually happens.
Most stores have a list of jobs that never get done because each one is too small to justify a project and too fiddly to do in an afternoon. That list is the work.
Keeping it healthy
The jobs nobody books until something breaks — and the reason the next section of this page exists.
- An audit of every app on the store: what it does, what it costs, whether anything still uses it
- Removing the ones that don’t earn their keep — properly, including the code they left in the theme
- Theme and app updates, on a schedule rather than after an incident
- Checking what the storefront actually loads, and what it’s sending out
- A dated theme backup you can roll back to
Not selling online? The same diagnosis applies to a service business, but the answer is usually a fast static site or landing pages built per campaign rather than a store — and those I build myself. That’s covered under enquiry work →
The ads went down. The site looked fine.
A Shopify store had its Google Ads campaigns disabled overnight under Google’s compromised site policy. Merchant Center followed. The owner did what anyone would do — asked the developer, then Shopify’s own technical support, to check the site over. Both came back clean. The theme files were clean. The appeals kept failing anyway.
Everyone was looking in the right place for the wrong thing. The store wasn’t serving malicious code. It was fetching it. Seven external domains, called at runtime by script tags left behind by apps that had been uninstalled months earlier.
Uninstalling a Shopify app revokes its permissions. It does not always remove the snippet that app wrote into your theme. And these scripts were set to fire for Google’s crawler rather than for someone browsing the admin — so looking at the store proved nothing, which is exactly why looking at the store kept proving nothing.
“The result is that the URL is Not Clean and as detected Malicious domain… The malicious domains were found on home page only.”
Google Ads Support, on the diagnostic call
It took a live diagnostic scan on a support call to get the actual list of domains. By then the store had been off paid search for weeks. Top of funnel was gone and it didn’t come back. The business closed.
<!-- theme.liquid, line 412 --> {% comment %} app removed 14 months ago {% endcomment %} <script src="//[redacted].com/stat.js" async></script>
Nine lines in a 2,000-line file, sitting under a comment that made them look accounted for. The domain is redacted here on purpose — publishing a live malicious host on a page that runs ads is how you inherit the problem.
When you remove an app, check the theme
Open theme.liquid, the layout files and the snippets folder, and delete what the app left behind. Most uninstalls leave something. Almost nobody looks.
Keep a copy you can roll back to
A dated theme export costs nothing and turns a fortnight of diagnosis into an afternoon. Do it before every app install, not after the first incident.
Watch what the storefront calls out to
Not just what’s in it. The code was clean the entire time. The problem was the requests it made — and those only show up if someone is looking at the network, not the files.
That last one is why this sits under ongoing work rather than under a project. There’s nothing to quote for. It gets caught because the same person is watching the ad account and the store, and notices when one starts behaving oddly on behalf of the other.
Builds that earned their keep.
Click any of them to see the full page.
UK jewellery brand · Shopify, built from launch · anonymous, no screenshot — Built on Shopify from launch — tracking, paid and SEO from week one — and scaled to £35M in revenue across UK and US storefronts, holding #1 organic in both markets for core moissanite terms. Held those rankings for six months after the exit, with no new content and no new links.
Away from Shopify I build the sites myself. Innov8 Security came off WordPress onto static HTML I wrote myself in June 2026 — eleven pages at 100/100 PageSpeed, mobile LCP from 8.5 seconds to 1.9, hosting from £600 a year to nothing. That’s the standard the Shopify work gets held to. See all nine builds →
Nothing gets built until we agree what’s wrong.
Diagnose
I go through the site properly — what the analytics say people actually do on it, where they leave, what the ads are paying for and what they get. I test it myself on a phone, not just in a report. And I look at who you’re losing to: the competitors bidding on the same terms, what their pages do that yours doesn’t, where they’re making it easier to buy. Most build briefs are written without anyone once looking at the sites the customer is comparing you against. I also look at what the store is loading — leftover app code, scripts calling out to domains nobody can account for, tags still firing for apps that were removed a year ago.
Agree it with you
You get the diagnosis before anything is specced — what’s wrong, what it’ll take to fix, and what I’d leave alone. Plenty of it usually isn’t worth doing. If we don’t agree on the problem, there’s no point discussing the solution, and that conversation is a lot cheaper before the build than during it.
Spec it and build it
Once it’s agreed, I write it up properly and it goes to my developer. Tracking goes in as the build happens rather than after launch — analytics, conversions, feed and Merchant Center where there’s a catalogue. A site that goes live untracked is a site nobody can improve.
Check it, then hand it over
I go through the finished work myself and get the tweaks done. You see it when I’m happy with it, not before — which means you’re not doing QA on your own project, and you’re not the go-between when something’s wrong. Then launch: redirects mapped, rankings held, nothing switched over on a Friday, and the first weeks watched properly.
Quoted with the engagement.
Development is priced per project, because a new store, a rebuild and a set of landing pages are three different jobs and none of them has a shelf price. What moves the number is the size of the catalogue, how much of the existing site can be kept, whether anything custom needs building, and how much of the content still has to be written.
You get a fixed quote after the call, not before. I’m not going to price a build I haven’t looked at.
Where the ads are running alongside, management typically runs £595 to £3,000+ a month, depending on ad spend and how much of the week the account takes.
Before you ask.
Who actually writes the code?
My ads were disapproved for a "compromised site" but Shopify says my store is clean.
Do I have to run ads with you to get a site built?
Can you work on an existing store rather than rebuilding it?
Is it only Shopify?
What about the migration — will I lose my rankings?
How long does it take?
Tell me what isn’t working.
Fifteen minutes on a call and I’ll tell you whether the site is the problem, the ads are the problem, or it’s the gap between them. No pitch, and you keep the findings either way.
Rather just ask a question first? Get in touch →