Zero-Click Search ROI: My Content Payback Math
My site earned 22 clicks from 4,553 impressions in 85 days, a 0.48% CTR. I put that number through a content payback model. At my real impression yield the programme would need a 42.5% CTR to break even.
Table of contents
Zero-click search does not shave content ROI proportionally. It moves the payback date, and past a threshold it deletes the payback date. My own case: 22 clicks from 4,553 impressions in 85 days on santoshpaudel.me, a 0.48% CTR against the 3-5% most content models still assume. At $325 a post and $4.00 of gross margin per click, one post has to earn 81 clicks to repay itself. At 0.48% that is 16,928 impressions. My blog drew 3,965 impressions in that quarter across the 267 posts published at the time, which works out at 5.3 impressions per post per month. The programme never pays back. Below is the model, the sensitivity table, the break-even CTR line, and the script that produced all three.
What the click rate actually collapsed to, with named sources
I only used research I could open and read the methodology of. Four sources survived that filter.
| Source | Published | Finding | Sample |
|---|---|---|---|
| Pew Research Center (Chapekis & Lieb) | 22 Jul 2025 | Users clicked a traditional result in 8% of visits with an AI summary vs 15% without. Links inside the summary: 1%. | 68,879 searches, 900 US adults, March 2025 |
| Ahrefs (Ryan Law) | 17 Apr 2025 | Position-1 CTR 34.5% lower where an AI Overview appeared | 300,000 keywords, Mar 2024 vs Mar 2025 |
| Ahrefs update (Law & Guan) | 4 Feb 2026 | Position 1 down 58.0%, position 2 down 50.8%, position 3 down 46.4% | 300,000 keywords, Dec 2023 vs Dec 2025 |
| SparkToro (Rand Fishkin) | 9 Jun 2026 | 68.01% of US Google searches ended without a click in Jan-Apr 2026, up from 60.45% of US searches in 2024 | Similarweb US desktop + mobile clickstream panel |
That last row measures the United States alone. Every number in this table is scoped to a panel, a market and a date range, and the scope does as much work as the percentage.
One thing I wanted and could not get: a quotable current CTR-by-position benchmark. Advanced Web Ranking publishes one, but the numbers live inside an interactive tool and are not in the page text, so I am not quoting a figure I could not read. The nearest thing I can cite is the raw baseline inside the Ahrefs April 2025 study: position-1 CTR on informational keywords fell from 0.056 to 0.031 over twelve months for keywords with no AI Overview, and from 0.073 to 0.026 for keywords that had one. That is a 45% fall on keywords Google left alone, and a 64% fall where an AI Overview turned up. Compare each cohort against its own baseline — the two started in different places. Mind the direction of that comparison: 0.056 is itself a March 2024 measurement, not the 5-6% your 2023 spreadsheet assumed. The spreadsheet was already optimistic before AI Overviews touched anything.
Why the aggregate number is not your number
A 58% drop from position 1 is a headline about position 1. Most content programmes do not rank at position 1. Mine averaged position 38.8 in the United States across 970 impressions in the quarter, for zero clicks. There is no CTR study for position 38.8 because there is no click behaviour to study. Whatever the aggregate collapse is, the number that governs your model is the one in your own Search Console export.
My site is the worked case, and it is not flattering
Search Console, 85 days ending 2026-09-03: 4,553 impressions, 22 clicks, 0.48% CTR across the 182 URLs that ranked for anything at all. Russia contributed 1,320 impressions and zero clicks. The United States contributed 970 impressions at average position 38.8 and zero clicks. Nepal, where I am a known name, produced 8 clicks from 74 impressions at position 9.2, a 10.8% CTR that proves the click mechanism still works fine when a page ranks and the reader recognises you.
The impression yield nobody puts in the model
Every content ROI model I have seen asks for traffic per post. Nobody asks the prior question: how many impressions does a published page actually collect?
- —
/blogdrew 3,965 of those 4,553 impressions. Divided across the 267 posts published during the window, that is 5.3 impressions per published post per month - —Only 103 blog URLs drew a single impression all quarter. Score the same 3,965 against those alone and you get 13.8 impressions per ranking post per month, the flattering cut, and still far short of what the model needs
- —111 of the 182 ranking URLs earned 5 or fewer impressions in the entire quarter
The outlier I have to declare before I use the mean
One page carries that mean. starting-podcast-2026-still-worth-it took 1,467 impressions, 32% of the site total, from a single query at position 10.3 that has nothing to do with what I sell. Remove it and the other 266 posts averaged 3.4 impressions a month, which pushes the break-even CTR from 42.5% to 67.2%.
So 5.3 is the generous reading, and the median ranking page saw five impressions in a quarter. I run the model on 5.3 anyway because it is the number I can defend from the export. The honest form of the argument is that the two cuts most flattering to me, 13.8 for pages that ranked and 5.3 across everything published, both still fail.
Those are the real inputs, rather than the 500 or 2,000 monthly sessions a template pre-fills. I wrote up the full autopsy in 389 pages, 22 clicks; this post is the finance half of it.
The payback model, in five inputs
Five numbers. Three are assumptions and I am labelling them as such. Swap them for yours before you believe any output.
- —Cost per published post: $325. Assumption: 6.5 hours at a $50/hour self-rate. Model cost is rounding error next to that.
- —Visitor to enquiry: 2%. Assumption.
- —Enquiry to paying client: 10%. Assumption.
- —Gross margin per engagement: $2,000. Assumption.
- —CTR and impressions per post: from your Search Console export. Not an assumption. Do not guess these.
Multiply the middle three and you get the only derived number that matters:
Value per click = 0.02 x 0.10 x $2,000 = $4.00
So a $325 post has to earn 81.25 clicks across its entire lifetime to repay itself.
Now put the CTR in. At the 3.5% a healthy top-three ranking used to produce, 81 clicks needs 2,322 impressions. At 0.6%, it needs 13,542. At my 0.48%, it needs 16,928 impressions for a single post. My best-performing page did not see 16,928 impressions. My entire site did not see 16,928 impressions.
If you want to run this against your own margin and close rate without copying the arithmetic by hand, the content ROI and payback calculator runs the same model and returns the payback month. It asks for sessions per ranking piece rather than impressions and CTR, so convert first: impressions x CTR = sessions.
The sensitivity table
Payback in months for one $325 post, at $4.00 per click. Rows are CTR, columns are impressions the post collects per month. "Never" means past 120 months, at which point the answer is no.
| CTR | 100 imp/mo | 400 imp/mo | 1,500 imp/mo | 5,000 imp/mo |
|---|---|---|---|---|
| 3.50% | 23.2 | 5.8 | 1.5 | 0.5 |
| 2.00% | 40.6 | 10.2 | 2.7 | 0.8 |
| 1.20% | 67.7 | 16.9 | 4.5 | 1.4 |
| 0.60% | never | 33.9 | 9.0 | 2.7 |
| 0.48% | never | 42.3 | 11.3 | 3.4 |
Read the 3.50% row against the 0.60% row at 400 impressions a month: payback slides from 5.8 months to 33.9. Same post, same cost, same close rate. The only thing that changed is the SERP.
The line where it stops paying back at all
Fix a 36-month horizon, beyond which a post needs a refresh anyway, and ask what the lowest survivable CTR is at each impression volume:
| Impressions/post/month | Break-even CTR over 36 months |
|---|---|
| 100 | 2.257% |
| 400 | 0.564% |
| 1,500 | 0.150% |
| 5,000 | 0.045% |
| 13.8 (only posts that ranked) | 16.393% |
| 5.3 (all 267 published) | 42.495% |
| 3.4 (podcast outlier removed) | 67.198% |
Those last three rows are the whole post. At my real impression yield a page would need to convert 42.5% of its impressions into clicks to repay $325 inside three years. No page does that. Even the flattering cut, counting only the 103 posts that ranked for anything, sets the bar at 16.4%, half again the 10.8% CTR that Nepal, my single best market, produces for me at position 9.2. The programme was never CTR-limited. It was impression-limited, and no amount of title-tag work fixes a page that five people a month see.
The script
Python 3, standard library, no dependencies. It produced every number above, and the assertions at the bottom fail if the model drifts.
"""Content payback under a collapsed CTR. Python 3 stdlib only."""
from math import ceil
COST_PER_POST = 325.00 # assumption: 6.5 h at a $50/h self-rate
LEAD_RATE = 0.02 # assumption: visitor -> enquiry
CLOSE_RATE = 0.10 # assumption: enquiry -> paying client
MARGIN = 2000.00 # assumption: gross margin per engagement
HORIZON_MONTHS = 36
VALUE_PER_CLICK = LEAD_RATE * CLOSE_RATE * MARGIN
# santoshpaudel.me Search Console export, 85 days to 2026-09-03, /blog rows only
BLOG_IMPRESSIONS = 3965
DAYS = 85
POSTS_PUBLISHED = 267 # blog posts published during the window
POSTS_RANKING = 103 # blog URLs with at least one impression
OUTLIER_IMP = 1467 # one podcast post, one query, position 10.3
def payback_months(impressions_per_month: float, ctr: float) -> float:
"""Months until one post repays its build cost. inf if never."""
monthly = impressions_per_month * ctr * VALUE_PER_CLICK
return COST_PER_POST / monthly if monthly > 0 else float("inf")
def breakeven_ctr(impressions_per_month: float, horizon: int = HORIZON_MONTHS) -> float:
"""Lowest CTR that still repays the post inside the horizon."""
denom = impressions_per_month * horizon * VALUE_PER_CLICK
return COST_PER_POST / denom if denom > 0 else float("inf")
def yield_per_post(impressions: int, posts: int) -> float:
"""Impressions per post per 30.4-day month."""
return impressions / posts * (30.4 / DAYS)
def fmt(m: float) -> str:
return "never" if m > 120 else f"{m:.1f}"
if __name__ == "__main__":
print(f"value per click = ${VALUE_PER_CLICK:.2f}")
print(f"clicks needed per post = {COST_PER_POST / VALUE_PER_CLICK:.2f}")
all_published = yield_per_post(BLOG_IMPRESSIONS, POSTS_PUBLISHED)
ranking_only = yield_per_post(BLOG_IMPRESSIONS, POSTS_RANKING)
no_outlier = yield_per_post(BLOG_IMPRESSIONS - OUTLIER_IMP, POSTS_PUBLISHED - 1)
ctrs = [0.035, 0.020, 0.012, 0.006, 0.0048]
vols = [100, 400, 1500, 5000]
print("CTR | " + " | ".join(f"{v:>6}" for v in vols))
for c in ctrs:
row = " | ".join(f"{fmt(payback_months(v, c)):>6}" for v in vols)
print(f"{c*100:5.2f}% | {row}")
for v in vols:
print(f"{v:>6} imp/mo -> break-even CTR {breakeven_ctr(v)*100:.3f}%")
for label, y in (("only posts that ranked", ranking_only),
("all published", all_published),
("outlier removed", no_outlier)):
print(f"{label:>22}: {y:.1f} imp/post/mo"
f" -> break-even {breakeven_ctr(y)*100:.3f}%")
for c in ctrs:
need = ceil((COST_PER_POST / VALUE_PER_CLICK) / c)
print(f"CTR {c*100:5.2f}% -> {need:,} lifetime impressions per post")
assert abs(VALUE_PER_CLICK - 4.0) < 1e-9
assert abs(payback_months(400, 0.035) - 5.804) < 0.01
assert 0.005 < breakeven_ctr(400) < 0.006
assert 0.42 < breakeven_ctr(all_published) < 0.43
assert 0.16 < breakeven_ctr(ranking_only) < 0.17
assert payback_months(all_published, 0.0048) > 120
print("self-check ok")
Change five constants at the top and the tables regenerate for your business.
What I did about it, and what I got wrong
The wrong instinct is to try to raise CTR. I ran the model in the other direction first and it told me something blunter: at 5.3 impressions per post per month, the binding constraint is the volume of qualified impressions, and CTR barely enters the arithmetic.
So in September 2026 I cut the published count from 267 to 103, a 61% cut. Roughly 150 of the seeded posts averaged 380 words with no table, no code, no internal link and no image, and those were the ones dragging the yield down. I scored them before cutting, and that scoring model is written up in content pruning: the scoring model.
Two clusters on this domain earn their positions: the dev and build logs, and the behavioural-maths posts. Both are the ones with worked arithmetic in them, and between them they rank from position 2.8 (a deploy-pipeline walkthrough) to 15.5 (a variable-reward-schedule breakdown). The generic "[industry] content marketing" posts rank 46 to 81. Same author, same domain, same quarter, same CTR environment. What separates them is what is on the page.
Two things I still got wrong. A 404 at /for was orphaning all 20 persona pages, and those 20 sit inside a non-blog landing surface of roughly 130 pages: 20 personas, 40 locals, 60 industries, 13 services. And 164 of 453 built pages shipped with no og:image, which does nothing for Google and everything for the share click. Neither of those shows up in a CTR study. Both were suppressing the impression count the whole model runs on.
If you want the spreadsheet version of this arithmetic rather than the script, I laid it out in the content marketing ROI model, and the reporting layer that keeps it honest is in 5 SEO metrics that matter.
FAQ
Is content marketing still worth it with zero-click search?
It is worth it where the arithmetic clears. Per the table above, a post collecting 1,500 impressions a month still pays back in 9 months at a 0.6% CTR. A post collecting 100 impressions a month does not pay back at any CTR under 2.26% over three years. The question worth asking is which specific pages clear their own cost.
What CTR should I use in a content ROI model in 2026?
Use your own, from Search Console, filtered to the pages and countries you actually sell into. If you have no history, the most defensible public anchor I found is the Ahrefs April 2025 figure of 0.026 position-1 CTR on informational keywords with an AI Overview present. Anything above 3% is a 2022 assumption.
How do I calculate content marketing payback period?
Cost per post divided by (monthly impressions x CTR x value per click), where value per click is lead rate x close rate x gross margin. Mine: $325 / (5.3 x 0.0048 x $4.00), which lands past 3,000 months and prints as "never" in the script above.
Do AI Overviews reduce clicks or reduce impressions?
Both, in different places, and they are separate line items in the model. Pew measured the click side: 8% of visits produced a result click with an AI summary present versus 15% without. The impression side is a ranking problem, because at position 38.8 you were never getting clicks regardless. Diagnose which one you have before spending on either. How long SEO actually takes covers the timeline side of the same question.
Does your content programme actually pay back at your real CTR? Put your own cost per post, close rate and sessions per ranking piece in and find out in about ninety seconds. Run the content ROI calculator or get in touch.
Get the AI-SEO Content Checklist
A practical checklist for getting your own content cited by Google AI Overviews, ChatGPT, and Perplexity — not just ranked.
Browse all free guides →Run this on your own numbers
Content ROI & Payback Calculator — free, no signup, runs in your browser.
Want to implement this with guidance?
Santosh helps founders turn insights like this into real systems.
External Resources
Further Reading & Tools
Google Search Central
Official Google documentation on indexing, ranking, and Core Web Vitals
Ahrefs Blog
In-depth SEO research, keyword strategy, and link-building studies
Moz Learn SEO
Comprehensive SEO learning hub covering technical and on-page fundamentals
Search Engine Journal
SEO news, algorithm updates, and strategy guides