Case study 01
A national kids’ activity brand with real demand, a healthy budget and a site that had stopped growing. It didn’t need more content. It needed to stop competing with itself.
Part one
A chart that told the whole story before anyone said a word.
Let me show you the chart first.
A long climb through the 2010s. A new website in 2023. Then a cliff, when the French half of the site dropped out of Google’s index. After that, nothing. Two flat years.
When I picked up the account in June 2025, that flat line was the brief. Strong brand, real demand, content going out every month, and none of it moving.
The obvious answer was the de-indexing. Fix the French site, get the traffic back. Except the ceiling predated the drop and outlived it. This wasn’t one event. It was structural.
Worth saying where I stood. I’d just been hired. This was one of the first accounts I’d strategise for, and the client was the first through a rebuilt onboarding process.
So I crawled the site before the call and turned up with a picture of it.
The client’s marketing lead is sharp and runs her own SEMrush reports. But crawl budget isn’t something you hand someone as a spreadsheet and expect them to feel.
"Imagine walking into a market. Vendors everywhere pulling you in, and when you finally ask for what you came for, they say it's not here, try over there. You end up lost and exhausted. Now imagine you're Google, trying to index this site."
Me, first meeting, before showing them the crawl map
Then I put the crawl map on screen. Green for pages Google can index, red for pages it can’t. Theirs had red hanging off it in every direction, and whole clusters floating unattached to the main site. I said what the picture showed: no wonder the rankings had slipped.
I ran Screaming Frog over the site expecting to find a mess. What I found was worse than a mess, because a mess is visible. This was tidy on the surface and quietly broken underneath.
Then the duplicates. Filter and session parameters had spawned a shadow set of URLs, so one programme page was running against three or four copies of itself.
Two real pages were also fighting. A venue page and its parent city page chased the same queries, and rankings bounced between them for months. A page that never ranks has a relevance problem. A page that ranks, drops and ranks again has a competing-signal problem.
Those floating clusters were subdomains. The blog on one, a programme section on another. Years of content between them, and Google treats a subdomain as a separate property, so almost none of that authority reached the main site.
I asked why. The answer reframed the engagement.
"We don't have access to the website. It can take a long time to get any new pages built. On this platform we can make quick changes ourselves. Otherwise every update has to go through an external developer."
Client marketing lead, first meeting
The subdomains weren’t an oversight. They were a workaround. Marketing couldn’t get pages built on their own site quickly, so they built them somewhere they controlled.
So the technical and organisational problems were the same problem. I could merge every subdomain into the main domain and it would work, right until the next time marketing needed a page quickly.
Even the duplicate www sitemap had a cause. Their menu builder wouldn’t save a link without www in front. Nobody was careless. The tools pushed them there.
Months later, hunting for FAQ content to support AI search, I found another subdomain nobody had mentioned. An entire knowledge base, in the same wrong building as the rest.
Part two
Research, a hypothesis I could test cheaply, and a decision the client and I worked out together.
Fixing the duplicates was easy. Canonicals across the parameterised URLs, venue page pointed at its parent. Within weeks the camp terms climbed. That felt like progress.
It wasn’t enough. Nationally things improved. Locally they kept wobbling. And then the client’s marketing lead said something in a workshop that stuck with me:
"When we shared the report with her, the rankings didn't look as good."
Client marketing lead, reviewing what she saw when she searched herself
She was right and my report was right. That’s what made it interesting. Two accurate views of the same site that disagreed completely.
So I stopped looking at dashboards and traced individual queries in Search Console. One keyword, ninety days at a time, watching which URL Google picked.
The pattern came fast. On any city-plus-service query Google cycled between three candidates: homepage, national service page, city page. It held one for a fortnight, then swapped.
That gave me something to test. If Google couldn’t choose, none of the three had a clear authority advantage. So I measured where the site’s authority actually sat.
Someone on my own team asked me that in a workshop, fairly pointedly. The client asked a version of it a few weeks later.
Fair question, and I’d had the answer since June. It was deliberate. The client gave us one clear instruction at kickoff: swim is the flagship. So we went after the national service pages first, where the revenue was. City pages came second, on purpose.
I still think that was right. You build authority at the top and let it flow down. Start at city level and you’re asking new pages with no links and no history to beat council sites on their own ground.
By autumn that work had done its job and the ceiling had moved. Phase two could start.
Their leadership had asked about localised pages, and the team brought the question properly framed: by pool, or by city?
The case for pools was better than I expected. Their venues genuinely differ. Some are built for toddlers, shallow and warm. Others run cooler and suit stronger swimmers. Parents are making a real choice, and the website couldn’t help them make it.
The case against was volume. Dozens of near-identical pool pages is a duplicate content problem in a local SEO costume. And a city is something people search for. A pool name isn’t.
What settled it was the client raising the risk before I did. Someone on their side pointed out that three pages per location would compete with each other, which was exactly where my head had gone.
We landed on city pages carrying every programme, with pool detail inside them. Their idea, our shape. That’s usually the best version of this conversation.
Before committing, I wanted to know how granular Google expects you to be. So I searched the brand plus a major metro and watched what came back: results from four separate suburbs, all under the metro name.
Google already treated the metro as one place. A page per suburb would have split one strong page into several weak ones. That single search saved a quarter of pointless production.
The subdomain was the other half. We moved the whole knowledge base onto the main domain, redirects and all. Hundreds of pages that had spent years building relevance for a property nobody was trying to rank.
No new content. No new links. Just moving what already existed to where it counted.
The client wanted to grow a second activity line that had always sat behind the flagship. So I read the sites beating them. Same pattern on every one: not more content, but content in clusters, with the main service page broken into children by participant level.
So instead of a blog calendar, I designed a silo. One parent page, child pages by level, each brief carrying its own keywords, title, meta, H1 and target length. Links ran sideways between adjacent levels and back up to the parent.
Keyword selection ran on four criteria: relevancy, volume, difficulty and cost per click. CPC earns its place. A term with 90 searches that competitors pay two dollars a click for beats one with 5,000 that nobody bids on.
Partway through I spent an afternoon in the client's analytics rather than SEMrush, splitting revenue by channel. Paid search: 56% of sessions, under 30% of revenue. Organic: 19% of sessions, about 35% of revenue.
Organic converted about three times as efficiently as paid. That reframed every budget conversation for the year, and it came from a tool that isn't an SEO tool.
Part three
Including the bit where I couldn't ship anything for weeks at a time.
Here's the part most case studies skip. I never controlled the website. A third-party dev team did, and the model was agreed in that first meeting: we recommend, they ship.
We knew the cost going in. The client had already told me it was why half her content lived on subdomains. Knowing about a constraint and having a plan for it are different things.
Approved content waited weeks. When I audited the live site against every recommendation we’d delivered since January, not one title tag or meta description had been shipped. Not one.
I could have kept escalating. Instead I rebuilt the programme to fit the constraint, because a smaller plan that ships beats a bigger one that doesn’t.
Cadence dropped to two or three pieces a month, planned five months out. The growth activity jumped the blog queue because its pages had a season to hit. Metadata changes became their own deliverables, since a one-line change ships and a page rebuild doesn’t. Every recommendation went over as a build ticket with screenshots.
I tracked AI Overviews and Gemini alongside classic rankings. They diverged usefully: for one term the brand appeared in AI answers while its organic position had slipped. So I added AI visibility to reporting.
I didn't build a separate AEO strategy. AI search volume here is still small, and what feeds AI visibility is already on the roadmap: clean structure, real depth, reputation. The one genuinely AI-shaped move was publishing starting prices by region, because pricing is what people ask answer engines and this site had no answer.
Look at the order. Purchases grew faster than sessions. Revenue faster than purchases. That’s not a traffic win dressed up as a business win. The people arriving were better qualified.
Totals hide things. Look at which pages moved.
Every term below sat at zero when I started.
| Query | June | December | Volume | Difficulty |
|---|---|---|---|---|
| private [service] classes near me | unranked | #1 | 260 | 25 |
| [service] lessons classes | unranked | #2 | 1,600 | 27 |
| [service] lessons near me | unranked | #2 | 2,900 | 32 |
| kids [service] lessons near me | unranked | #3 | 260 | 34 |
| [service] lessons | unranked | #4 | 2,400 | 30 |
| children's [service] lessons | unranked | #5 | 880 | 39 |
| [service] classes near me | unranked | #15 | 4,400 | 32 |
By the six-month review the domain held 2,237 ranking keywords, 179 in the top three, on 839 referring domains.
While building the six-month deck, a colleague wanted to credit the province page’s growth to the page itself. Cleanest possible story. Would have looked great on a slide.
I asked them to take it out. That page didn’t grow alone. It grew because we’d optimised the homepage, added links, built citations, merged the subdomains and run months of technical fixes. Crediting one page makes a nice slide and bad measurement, and the first time a single-page change fails, the whole model loses credibility.
Worth remembering how this started. A strategist three weeks into a job, a client being run through a new onboarding process, nobody with a reason to trust anybody.
By September she was volunteering things I’d never have found. Which cities Google clusters together. Which of her locations was the flagship and why it mattered more than its search volume suggested. That’s a client doing strategy with you.
Eight months in, when they set the following year’s budget:
"We chose last year's strategy to prove out the SEO programme, that it's worth the investment. The results are super strong and warrant us continuing the relationship."
Client marketing lead, setting the next year's scope
Report revenue, not traffic. Purchases grew faster than sessions here, and that gap is the whole case for the work. A traffic chart would have undersold it.
And sequence beats speed. The pressure here, from my own team as much as the client, was to build city pages immediately. Holding them back until the flagship pages could carry them is why they worked. That's hard to argue for, because "not yet" sounds like "not done".
Sources. Figures come from the six-month client review deck and from recorded optimisation workshops. GA4, SEMrush and Google Search Console, read live in session. Nothing modelled, nothing estimated.
Client name, locations, personnel and vendor relationships withheld. Happy to talk through the reasoning in more detail.