As case study
SEO: from 12 clicks to 5K a quarter
How Royal Subz went from 12 search clicks in its first month to 5,000+ in three months, with no agency and no budget, and why I traded impressions for clicks.
At a glance
The constraint
Running a SaaS reseller means your product catalogue is ChatGPT, Claude, Grammarly, Cursor — products backed by companies with world-class SEO teams and years of domain authority. Competing on “ChatGPT subscription” or “Claude AI pricing” is a dead end before it starts. OpenAI, Anthropic, and every major review site already own those keywords. Difficulty scores in the 80s. No route in.
The real question was different: what are people searching for that the official channels don’t answer?
The answer was in the friction I’d already built the product to solve. People in Bangladesh and South Asia weren’t searching “what is Claude AI” — they were searching “can I get Claude without an international card”, “how do I buy ChatGPT Plus cheap”, “does Claude have a student discount”. The official sites don’t address those questions. That gap was the opening.
The foundation
Before writing a single word of content, I audited the site — SEMrush and Ahrefs both. Four issues would have quietly blocked progress:
Static sitemap
Every new product and blog post required a manual sitemap edit to get indexed.
Fix
Built a Supabase edge function that generates the sitemap in real time from the live database. No manual edits ever again.
robots.txt blocking
Essential pages — products, blog posts — were blocked from Googlebot crawl entirely.
Fix
Unblocked all public-facing pages. Restricted only admin and auth routes.
Duplicate H1
One page had two H1 tags. Google picks one and ignores the rest of the structure.
Fix
Fixed the markup. One H1 per page, across the entire site.
2.4 MB JS bundle
Every page visit shipped the full JavaScript bundle — including code for all 40+ products — to the browser upfront.
Fix
Refactored to route-based code splitting. Unvisited sections never load. Faster first paint, better Core Web Vitals.
The most involved fix was performance. SEMrush flagged that every page visit was shipping 2.4MB of JavaScript to the browser upfront — the entire product catalog, all 40+ products, regardless of where the user landed. I refactored the build to split the bundle by route. Unvisited sections stay unloaded. Faster first paint, better Core Web Vitals score, and Google’s crawl budget goes further.
The sitemap fix got its own edge function. The original was static — every new product or blog post
required a manual edit. I built a Supabase edge function that generates the sitemap in real time
from the live database. /sitemap.xml now fetches current products, blogs, and pages on every
request. No manual maintenance.
The keywords
The research phase used three tools and produced one insight. SEMrush and Ahrefs for volume and difficulty data. Keyword Tool IO for surfacing question-pattern variants — the “how do I”, “can I”, “is it worth it” long-tail variations that tools like Ahrefs often undercount.
The insight: a reseller can’t win on branded head terms, but it can win on the questions that friction creates. I filtered for keywords with real search volume and low-to-medium difficulty — the overlap a new domain can actually compete in. Then I looked at intent: not “what is X” but “how do I get X without Y” or “is X worth it for [my situation]”.
The first breakout came directly from this logic: “Claude Student Discount 2026” had real search volume, Anthropic’s site doesn’t answer it, and anyone searching it is close to buying. For months it drove more impressions than anything else on the site.
Today the best post is a different one, built on the same logic: “How to get Claude Pro cheap”. Over the last three months, the pages that bring the most clicks all answer a price question the official sites won’t:
| Page | Clicks | Impressions | CTR | Position |
|---|---|---|---|---|
| How to get Claude Pro cheap | 1,557 | 77,467 | 2.0% | 8.2 |
| How to get ChatGPT Plus cheap | 1,205 | 45,678 | 2.6% | 9.0 |
| Claude student discount | 495 | 42,076 | 1.2% | 12.2 |
| How to get Adobe Creative Cloud cheap | 149 | 8,508 | 1.8% | 9.6 |
| Claude AI (product page) | 149 | 2,377 | 6.3% | 10.4 |
The product pages are where intent shows. CapCut’s page is clicked by 13% of the people who see it and ChatGPT’s by 8%, against about 2% for the guides. And “royal subz” itself is now the top query by clicks, clicked 63% of the time: people search for the store by name.
The content engine
I built the blog publishing dashboard into the Royal Subz admin panel before writing the first post. The intent was simple: make the right structure unavoidable. Every blog has to clear every field before it goes live — not as a rule imposed after launch, but as a constraint baked into the interface.
Discoverability
Social & Open Graph
Content structure
Media
Taxonomy
Internal linking
The format matters as much as the keyword. Google doesn’t just index words — it reads structure. Summary box with at least five bullet points at the top. Meta title distinct from the H1. Canonical URL set. OG image with alt text. Two internal links to related posts, one link to the product being discussed. Sidebar CTA. Every post ships with all of it, or it doesn’t ship.
First blog published: March 27. Submitted to Google Search Console the same day via manual index request. Three weeks of silence. Then impressions started climbing — exponentially, not gradually.
There are now 17 posts. Since June 2026 a content writer has worked on them with me. Search Console counts 75 pages indexed and 48 not indexed.
From impressions to clicks
The first version of this case study ended with 39,900 monthly impressions and an honest problem: a 0.3% click-through rate. Almost everyone who saw a Royal Subz listing scrolled past it.
Impressions kept climbing, to 126,000 in the 30 days from mid-June. Then they fell, to about 51,000 by September. Over the same months, clicks rose from 186 a month to more than 1,800, and click-through rate from 0.3% to 2.7%. Average position barely moved, from 9.3 to 8.8. The site was not being shown to more people; more of the people it was shown to chose it.
Search impressions and clicks, month by month
Google Search Console, web search. Each bar is 30 days starting on the 16th of that month; the data begins on 16 February 2026, when I added Search Console.
Impressions
Clicks
All the numbers
| 30 days from | Impressions | Clicks | CTR | Avg position |
|---|---|---|---|---|
| 16 Feb 2026 | 50 | 12 | 24% | 43.7 |
| 16 Mar 2026 | 694 | 22 | 3.2% | 10.7 |
| 16 Apr 2026 | 63,400 | 186 | 0.3% | 9.3 |
| 16 May 2026 | 99,000 | 635 | 0.6% | 9.2 |
| 16 Jun 2026 | 126,000 | 1,610 | 1.3% | 10.4 |
| 16 Jul 2026 | 84,000 | 1,820 | 2.2% | 10.1 |
| 16 Aug 2026 | 67,500 | 1,830 | 2.7% | 9.5 |
| 16 Sep 2026 | 51,400 | 1,380 | 2.7% | 8.8 |
That trade is the right one for a store. Impressions don’t pay for anything. Clicks from people looking for a cheaper way to buy ChatGPT or Claude do: about 70% of Royal Subz sales start with a search.
Outcomes
From 12 clicks in Search Console's first month, most of them me checking my own site.
Up from 0.3% in April. Click-through, not reach, has been the focus since.
From 43.7 in the first month. 8.8 over the last 28 days.
Roughly seven in ten Royal Subz sales start with a search. SEO budget: $0.
What the numbers mean
The first version of this case study led with 39,900 monthly impressions and admitted a 0.3% click-through rate. Impressions kept climbing to a peak of 126,000 in the 30 days from mid-June, then fell to about 51,000. If impressions were the goal, the last four months would look like a decline.
They weren't the goal. Over the same period, clicks went from 186 a month to more than 1,800, and click-through rate from 0.3% to 2.7%. Fewer people see a Royal Subz result than in June; far more of them choose it. And search is where the business comes from: about 70% of sales start there.
What I’d do differently
Start the content engine before launch
The site went live on 15 November 2025. The first blog post went live on 27 March 2026, more than four months later. I waited until the storefront felt "done." SEO compounds from day one, and those four months are indexing time I can't recover. Next time the content calendar starts the same week as the first commit.
Impressions are easier than clicks
Reaching 126,000 impressions a month felt like proof the strategy worked. But at a 0.3% click-through rate, 99.7% of the people who saw a listing scrolled past it. Impressions measure visibility, not intent. Once click-through became the focus, it climbed to 2.7% and clicks rose almost tenfold, even as impressions fell. I should have been treating the title and description as the product from the first post.
Mix in transactional keywords from the start
The first 8 posts were informational — "does X have a student discount", "is Y worth it." Good for impressions, weak for conversions. Transactional long-tail ("buy Cursor AI with bKash", "get ChatGPT Plus in Bangladesh") sits closer to purchase intent. I front-loaded the informational phase without realising I was building an audience that wasn't ready to buy. The early signal agrees: "capcut pro buy bkash" is clicked by 23% of the people who see it, against about 2% for the big informational posts. It's a small sample (99 impressions) at a better position (4), but it points the same way. Next time: transactional keywords in the mix from week one.