Back to blog

How to measure SEO ROI (and actually prove it)

Ask most agencies to prove their SEO worked and you get a screenshot of a line going up. The problem: rankings and traffic drift up and down for reasons that have nothing to do with the work. Seasonality, a competitor dropping off, a Google update, a brand campaign running in parallel. If you can not separate those from the changes you actually made, you can not prove ROI. You can only claim it.

Here is how to measure it properly.

The standard formula, and where it falls short

Every guide starts with the same equation, and it is a fine place to begin:

SEO ROI = (revenue from SEO - cost of SEO) / cost of SEO.

The cost side is whatever you put in: salaries or the hours you spend, any agency or freelancer fees, and your tools. The revenue side comes from tracking organic conversions, usually in Google Analytics 4, and multiplying them by what a conversion is worth to you. If SEO cost $2,000 and produced $5,000 in tracked revenue, that is a 150% return.

Worth noting where that data lives, because it is the practical obstacle. The visibility half sits in Search Console and in whatever you use to check AI answers; the revenue half sits in Analytics. Most SEO tools only hold the first half, so joining the two is a manual export-and-match job every month. Argrow connects Search Console and Analytics on the same account, which is what makes the join possible at all.

The formula is not wrong. The trouble is the revenue side. “Revenue from SEO” quietly assumes every organic gain was caused by your work, and that assumption is what inflates almost every SEO report. The rest of this guide is about earning that number honestly.

Start with the change, not the chart

The unit of SEO ROI is a single change on a single page: a rewritten title, a new section, a fixed canonical, a published page. Tie every result back to a specific change with a date. If you can not point at what you did and when, you have nothing to measure.

This is the opposite of how most reporting works. Most reports start with the outcome (traffic went up) and work backwards to a story. Start with the change instead, and the measurement almost writes itself.

It also reframes the question everyone asks about output. “Thirty articles a month” is thirty changes to measure, not thirty results, and the honest version of that number is however many of them earned a measurable lift. We work through that trade-off in depth versus volume.

Measure before and after on the exact page and keyword

For each change, record where the affected page and keyword sat before, then watch the same page and keyword after. Not sitewide traffic. The specific page you touched, on the specific queries it targets. A sitewide number hides the pages that dropped behind the pages that rose.

Pick a sensible window. Four weeks after a change is usually enough to see movement without waiting so long that other factors muddy the result. Record the position, the impressions and the clicks for that page and query, before and after.

Strip out the trend you did not cause

This is the step almost everyone skips. Your whole site moves with the season and the algorithm. So compare each changed page against your site’s baseline trend over the same window and subtract it.

Here is a worked example. Say you rewrote a page’s title and it went from an average position of 12 to 7, and clicks on that query rose from 40 to 90 a month. That looks like a 50-click win. But over the same four weeks your whole site rose too, because it was a busy season. If comparable pages you did not touch rose about 20% on their own, then roughly 8 of those extra clicks would have arrived anyway. The change earned around 42 clicks, not 50. Smaller, but real, and now you can defend it.

That baseline-adjusted number is the honest one. It is almost always lower than the headline figure, which is exactly why so few reports bother to calculate it.

Convert to money with real inputs

Once you have the lift a change caused, turn it into value with your own numbers:

Extra clicks x conversion rate x average value per conversion.

Use your real rates, not a benchmark you found online. Carrying the example above: 42 extra clicks a month, a 3% conversion rate and $400 average order value works out to roughly $500 a month from one title rewrite. Annualised, that is one small change paying for a lot of the tool that surfaced it. A defensible ROI figure is built from your data, labelled clearly, with the assumptions written down.

Common mistakes that inflate the number

  • Crediting the trend to the change. The single biggest one, fixed by the baseline step above.
  • Measuring sitewide instead of per page. Wins and losses cancel out and you learn nothing about which work to repeat.
  • Cherry-picking the window. Choosing the month that flatters the result is marketing, not measurement. Use the same window rule every time.
  • Ignoring what went backwards. A page that dropped after a change is data, not something to hide.

Be honest about what did not work

A report that only shows wins is a sales document, not a measurement. Some changes do nothing. Some go backwards. Showing those builds more trust than hiding them, and it is the only way you learn which work is worth repeating. The goal is not to look good this month. It is to know what to do more of next month.


This before-and-after, baseline-adjusted approach is exactly how Argrow’s Proof of Work reporting is built: every change is measured on its own page and keyword, with your sitewide trend removed, so the lift you see is the lift you caused. See how the proof works.

Frequently asked questions

What is a good ROI for SEO?

There is no single benchmark, because it depends on your margins and how much a customer is worth. The honest way to judge it is per change: did the lift a change caused, converted to revenue at your own rates, exceed what it cost to make? Measure that consistently and the picture builds over time.

How long does SEO take to show ROI?

Individual changes can move a page within weeks, but compounding results usually take three to six months. That is why measuring per change matters: you can see early wins landing long before the sitewide trend looks impressive.

Why can't I just use total organic traffic?

Sitewide traffic rises and falls for reasons that have nothing to do with your work, like seasonality or a competitor dropping off. It hides the pages that fell behind the pages that rose, so it can not tell you which specific work paid off.

See what's actually moving your rankings.

We show you what worked and what didn't. No smoke and mirrors, just real results.

7-day trial · cancel anytime

Free SEO audit - Free report, no payment details needed

  • Approve every change
  • No lock-in contract
  • Proof on every update