Who is the client?
An e-commerce brand selling phone accessories to customers in the United States. The client is anonymous, so there is no name, logo or product list here. The work started in September 2023 and was still running when the 2024 results were written up in January 2025.
Where did the work start?
Not with content and not with links. It started with a technical audit and a full site analysis in September 2023, and with a look at where traffic and revenue were actually coming from before anything was planned. Fixing the technical issues began in October.
One rule framed everything after that: do not spend more on SEO than organic traffic earns. It is easy to agree with and easy to forget once a monthly retainer is running. Here it set the budget.
How was the budget set?
Against revenue, not against a wish list.
- $1,200 a month until the end of the third quarter of 2024.
- $1,800 a month from the fourth quarter of 2024, when the budget went up to pay for a blog.
- $16,200 in total for 2024: nine months at the first rate, three at the second. This is the cost used in the ROI calculation further down.
Planning ran in three-month windows. Longer plans kept being broken by technical problems, so the horizon came down to a quarter: long enough to finish something, short enough to change course when the site broke.
What happened, month by month?
Here is the log. Read it for the two migrations: everything else either prepares for them or cleans up after them.
| Month | What happened |
|---|---|
| September 2023 | Technical audit and site analysis |
| October 2023 | Fixing the technical issues started |
| January 2024 | Optimisation of product category pages began |
| March 2024 | First server migration. Technical errors, extra technical work, growth stalled |
| May 2024 | Navigation menu improved, category structure reorganised, removing and merging weak pages began |
| June 2024 | Post-migration fixes finished; category optimisation continued; educational articles started for one main product group |
| September 2024 | Second server migration. Category-optimisation progress lost, new technical issues |
| October 2024 | Budget raised to support the blog; content plan prepared and publishing started |
| November 2024 | Technical issues stable again; category descriptions restored |
| December 2024 | Descriptions improved for the main product group |
Categories before blog posts
On a store, the category page is where search traffic meets the product. So the work went there first: category pages optimised, the navigation menu tidied, the category structure reorganised so that it made sense to a shopper and to a crawler.
Fewer, better pages
Weak pages were removed or merged into stronger ones. Fewer pages, each with a clearer job, and visitors pointed at pages that could sell. The result was better-quality traffic and a better conversion rate, at the price of a lot of sessions (the numbers are below).
Content once the site could hold it
Educational articles started in June on one main product group. The real content push came in the fourth quarter, once the budget went up: a content plan, then steady publishing. The effect built on itself as the quarter went on. That is how content tends to behave when it is published consistently rather than in bursts.
How were the opportunities picked?
With a spreadsheet, not a hunch. A custom dashboard put Google Search Console data next to Ahrefs data, and every keyword got an Opportunity Score built from search volume, competitiveness and clicks. A tracking sheet logged what changed and when.
Here is a real excerpt of the working sheet, for one subtopic (clothing). Keywords are left out; the columns are what drove the order of work.
How a subtopic gets prioritised. Excerpt of the opportunity sheet, sorted by Opportunity Score (priority 1 = do first):
| Priority | Opportunity score | Search volume (Ahrefs) | Keyword difficulty (Ahrefs) | Clicks (Search Console) | Impressions (Search Console) | CPC |
|---|---|---|---|---|---|---|
| 3 | 1833.33 | 11000 | 5 | 0 | 0 | $0.25 |
| 1 | 1736.67 | 500 | 0 | 128 | 5210 | $0.40 |
| 2 | 1039.33 | 200 | 0 | 34 | 3118 | $0.30 |
| 1 | 488.67 | 100 | 0 | 28 | 1466 | $0.40 |
| 1 | 445.00 | 350 | 0 | 27 | 1335 | $0.30 |
| 3 | 400.00 | 4800 | 11 | 0 | 0 | $0.25 |
| 2 | 393.67 | 350 | 2 | 47 | 3543 | $0.30 |
| 2 | 272.67 | 150 | 0 | 14 | 818 | $0.30 |
Look at the top row. The highest score on the sheet, the biggest volume, and it sits at priority 3. The site had no clicks and no impressions for it, so it was a bet on a third-party estimate. The priority-1 rows are smaller but already showing up in the site's own Search Console data. A score sorts the list. It does not make the decision. Ahrefs and tools like it give estimates; Search Console is the site's own data. Putting them side by side is what made the estimates usable.
Sessions fell, revenue rose: why?
Removing and merging weak pages cost visits: organic sessions fell 37.65% year over year. What remained was better traffic. Over the same period, key events more than doubled and organic revenue rose 45.79%.
The trade, in one line:
Fewer visits, better ones. If your SEO report only shows sessions, this year looks like a failure. It was not.
The full year, organic search only:
| Metric | 2023 | 2024 | Change |
|---|---|---|---|
| Sessions | 248,221 | 154,762 | −37.65% |
| Engaged sessions | 132,465 | 90,721 | −31.51% |
| Engagement rate | 53.37% | 58.62% | +9.85% |
| Average engagement time per session | 45s | 1m 08s | +49.82% |
| Events per session | 6.18 | 7.83 | +26.61% |
| Event count | 1,535,064 | 1,211,730 | −21.06% |
| Key events | 11,185 | 24,972 | +123.26% |
| Session key event rate | 1.71% | 4.15% | +142.51% |
| Total revenue | $245,413.36 | $357,780.21 | +45.79% |
Session key event rate, full year:
The rate more than doubled while the number of sessions fell. That is what "better traffic quality" looks like when you can measure it.
| 2023 | 2024 |
|---|---|
| 1.71% | 4.15% |
What did the fourth quarter add?
The content push and the restored category work landed together. Comparing the fourth quarter of 2024 with the third, organic revenue went from $61,350.45 to $155,041.76: an increase of $93,691 in one quarter, up 152.71%. Sessions grew too this time, but far less than revenue.
GA4, organic search:
Q3 runs 2 July to 1 October 2024, Q4 1 October to 31 December 2024, as set in the report. The fourth quarter includes the holiday trading period, so part of the jump is likely seasonal; the quarter-on-quarter figure is not a year-over-year one.
| Q3 2024 | Q4 2024 |
|---|---|
| $61,350.45 | $155,041.76 |
| Metric | Q3 2024 | Q4 2024 | Change |
|---|---|---|---|
| Sessions | 33,873 | 42,464 | +25.36% |
| Engaged sessions | 21,791 | 28,252 | +29.65% |
| Engagement rate | 64.33% | 66.53% | +3.42% |
| Average engagement time per session | 1m 24s | 1m 26s | +2.44% |
| Events per session | 7.83 | 11.26 | +43.65% |
| Event count | 265,090 | 478,032 | +80.33% |
| Key events | 4,437 | 11,483 | +158.8% |
| Session key event rate | 4.12% | 5.06% | +22.59% |
| Total revenue | $61,350.45 | $155,041.76 | +152.71% |
What did search visibility look like?
Search Console, 22 December 2023 to December 2024:
- 124Ktotal clicks
- 5.75Mtotal impressions
- 2.2%average click-through rate
- 15.3average position
Daily clicks and impressions ran roughly level for most of the year and climbed from October, with the highest days in November and December. Over a longer horizon, a third-party tool's estimate of organic traffic shows the same late-2024 climb, to the highest level in its five-year view. That is an estimate, not the site's own data, so we use it for direction only.
What went wrong?
Plenty. This is the part most case studies leave out.
- Two server migrations in one year. The first, in March 2024, caused technical errors, pulled time into extra technical work and stalled growth; the clean-up was only finished in June. The second, in September 2024, wiped out the progress on category optimisation and brought new technical issues. Category descriptions had to be restored in November. Each one turned an SEO plan into a repair job.
- Revenue was heading the wrong way earlier in the year. The organic revenue trend was declining in the first part of 2024. The full-year growth was recovered later, not banked early.
- Sessions fell, hard. Down 37.65% for the year. It was the right trade, as the table above shows, but it is a trade you have to be ready to explain to anyone who reads traffic as the result.
What did 2024 add up to?
- Organic revenue: $357,780, up 45.79% on 2023.
- SEO cost: $16,200 for the year.
- Return attributed to SEO: $112,237.
- ROI: 593%, calculated as ($112,237 − $16,200) / $16,200.
How we calculated it, and what we'd double-check. The formula is the one published with the results, shown above as stated. The $112,237 was reported as "profit from SEO activities", but the SEO cost is subtracted from it in the formula, so we call it what it is: the return attributed to SEO, before the SEO cost. It is not bottom-line profit. Which revenue counts as "from SEO" follows the store's analytics setup; the attribution model behind it was not part of the published results. Before using 593% to set next year's budget, we would check two things: which model assigned the revenue to organic search, and how much of that return is margin after the cost of the products.
"Out of all the agencies we've had in my six years at this company, I feel the best about [us]."
What would we keep?
- Plan about three months ahead. Long plans did not survive contact with the infrastructure.
- Page quality beats page count. Pruning cost sessions and improved the numbers that pay.
- Be careful with mass AI-generated content. Volume without human input is the opposite of the pruning that worked here.
- Plan SEO around business goals and profitability. The budget rule did more for this project than any single tactic.
- Treat SEO tools as estimates. Combine them with first-party data before you make a decision on them.
What does this mean for your store?
If you cannot say what your organic traffic earns, you cannot say what SEO is worth paying for. Start there. Then set the budget against it and plan a quarter at a time.
Stop judging SEO on sessions alone. Here, a year with a third fewer visits was the best year for revenue. Read engagement rate, key events and revenue next to traffic, or you will reward the wrong pages.
And if a server migration or a re-platforming is on the roadmap, put SEO in the room before the date is set, not after the errors show up. Two migrations cost this project months of category work.
More on how we approach this on the SEO and AI visibility page, and on what ROI does and does not tell you in the glossary.
Traffic, engagement and revenue figures are from GA4, organic search channel: 1 January to 31 December 2024 against the same period of 2023, and 1 October to 31 December 2024 against 2 July to 1 October 2024. Search visibility figures are Google Search Console totals. Revenue attribution follows the store's analytics setup. The opportunity sheet is a real excerpt; keywords are omitted. The client quote is from a verified client review, with the agency's name replaced by [us]. The client is anonymous.