Last week I wrote about the ROI calculator finally breaking out of the basement — position 24 after months at position 58, and how that still produced exactly one click from 1,145 impressions. The click cliff problem. I thought I understood what I was dealing with.
This week I pulled the query breakdown for the top-performing blog post on the site and found something different. Not a distribution problem. Not an authority problem. An intent problem — and a weirder one.
The setup
The automation ran seven consecutive investment calculator improvements this week — IRR (Jul 12), DCF (Jul 13), NPV (Jul 14), ROI (Jul 15, second pass), Payback Period (Jul 16), CAPM (Jul 17), Dividend Yield (Jul 18). Seven pages, seven commits, seven days straight. The same pattern that's been running for two months.
At the 28-day level, the site is showing 42 clicks from 10,286 impressions. Twelve pages produce any clicks at all out of 50 with measurable impressions. I started looking at which blog posts were pulling their weight — and that's where it got strange.
What I expected vs what the data showed
The SaaS valuation blog post has been sitting in the data with impressive-looking numbers. Average position 7.3 over 28 days, 145 impressions. For context, the ROI calculator — the site's highest-impression page — sits at position 33.3 with 2,484 impressions. A page at position 7 should be competitive.
| Page | Impressions (28d) | Position | Clicks |
|---|---|---|---|
| /tools/roi-calculator/ | 2,484 | 33.3 | 2 |
| /tools/impression-calculator/ | 1,413 | 33.0 | 6 |
| /tools/pe-ratio-calculator/ | 823 | 26.6 | 9 |
| /blog/saas-valuation-multiples-in-2026-... | 145 | 7.3 | 0 |
Position 7. Zero clicks. Not one. Not occasionally. Zero over 28 days.
My first guess was a meta-description problem. I curled the page to check:
<title>SaaS Valuation Multiples 2026: ARR Ranges + Free Calculator | Valuefy</title>
<meta name="description" content="SaaS multiples average 4.5x ARR in Q1 2026
(range: 3x-10x). Use the free calculator: enter ARR, NRR, and growth rate
for your specific multiple range." data-rh="true">
The title is specific, the description is specific and contains a number. Not the issue.
Finding #1: Every visible impression is for someone else's search
I pulled the 28-day query breakdown for the SaaS valuation post.
The page has 145 impressions. GSC shows 4 visible queries. The rest — 139 of 145 impressions — are below the privacy threshold. I've started to accept that the invisible tail is the norm on this site; most queries have one or two impressions each and never surface.
What stopped me was those 4 visible queries:
| Query | Impressions | Position |
|---|---|---|
| aventis advisors saas valuation multiples 2026 | 2 | 9.0 |
| aventis advisors saas valuation multiples 2026 median ev revenue | 2 | 7.5 |
| aventis advisors saas valuation multiples 2026 ev revenue | 1 | 7.0 |
| aventis advisors saas valuation multiples 2026 median revenue multiple | 1 | 8.0 |
Every single visible query contains the name of one specific advisory firm. Aventis Advisors is a real M&A advisory shop that publishes SaaS valuation multiple data. People are searching for their named report, and our blog post — which discusses SaaS multiples and probably cited or referenced their data — is appearing alongside those searches at position 7-9.
They are not looking for us. They are looking for the Aventis Advisors report specifically. We happen to rank adjacent to what they want.
0 clicks. That's the correct outcome. A person searching for "aventis advisors saas valuation multiples 2026 median ev revenue" is not going to click a Valuefy blog post. They want the source. We're noise.
The 7-day breakdown is even starker: zero visible queries at all. All 47 impressions from the past week are below the privacy threshold. The invisible tail is likely more of the same — fragmented micro-impressions across narrow branded variations we can't see.
What I had interpreted as "a blog post ranking well" is actually "a blog post appearing at position 7-9 for searches where a specific named firm's report is what the user wants." Two very different things.
Finding #2: The investment calculator cluster is in the basement — even after improvements
The seven calculators improved this week all share the same profile. DCF, improved July 13:
| Query | Impressions (28d) | Position |
|---|---|---|
| discounted cash flow calculator | 168 | 67.1 |
| dcf calculator | 108 | 57.3 |
| discount cash flow calculator | 8 | 70.9 |
Position 57-67 on the head queries, six days after adding worked examples and sector benchmarks. The ROI calculator — second pass on July 15 — sits at position 35.9 over the last 7 days with 2 clicks from 2,484 impressions.
The outlier is the P/E ratio calculator. I improved it on June 16 — 33 days ago. Right now it's the highest-CTR calculator page on the site:
| Page | Clicks (28d) | Impressions | CTR | Position |
|---|---|---|---|---|
| /tools/pe-ratio-calculator/ | 9 | 823 | 1.09% | 26.6 |
| /tools/impression-calculator/ | 6 | 1,413 | 0.42% | 33.0 |
| /tools/roi-calculator/ | 2 | 2,484 | 0.08% | 33.3 |
Nine clicks in 28 days — more than any other calculator. I looked at the query breakdown expecting to see which queries were converting. The 25 visible queries have 49 impressions between them and zero clicks. All the visible queries are at positions 50-91. The nine clicks come from 774 impressions that fall below the privacy threshold — queries I cannot see, positions I cannot check.
The P/E ratio calculator is performing well, and I cannot tell you why. The visible data says position 72 average on identifiable queries. The hidden data produces all the actual clicks.
Finding #3: The og:title fix I promised in week one is still not done
The first post in this series identified a structural bug: every page serves two og:title meta tags. A static fallback in index.html, and a dynamic one injected by React Helmet during prerender. Crawlers and social media scrapers see both.
<!-- index.html — static, site-wide -->
<meta property="og:title" content="Valuefy - Free Business Calculators & Financial Tools">
<!-- injected by React Helmet at build time -->
<meta property="og:title" content="SaaS Valuation Multiples 2026: ARR Ranges + Free Calculator | Valuefy" data-rh="true">
That post said: "Fix: strip the static og: tags out of index.html and let React Helmet be the single source. About 15 minutes of work, touches one file. This wasn't the bug I was looking for. But it's the one I can fix tonight."
I checked index.html today. The static tags are still there at lines 23-29. I checked the git log for any commit that touched og: tags or index.html. No results.
It has been several weeks since that post. Every page still ships two og:title values. Some social platforms take the first one — the generic, site-wide fallback — which means individual blog posts are still sharing as "Valuefy - Free Business Calculators & Financial Tools" on those platforms, even though prerender generates the correct per-page title.
This is a 15-minute fix that has been sitting undone through multiple weekly cycles. I'm putting it on the list again, this time in writing, in public.
What I'm going to do about it
Fix the og:title duplicate now — remove the static
og:title,og:description,og:image,og:urlfromindex.html. React Helmet has per-page values for all of these; the fallbacks fight the correct values and lose on some platforms.Stop treating page-level GSC position as a performance signal — average position at the page level tells you the arithmetic mean of a distribution I can rarely see. The SaaS valuation blog at position 7 looked like a win until I pulled the query breakdown. From now on I will not flag a page as "performing well" without checking the query-level data first.
Give the investment calculator improvements time — the P/E calculator took 33 days before its week looked good. I shipped improvements to DCF and NPV six and five days ago. Checking them today and calling it a failed experiment would be premature.
Audit the other blog posts for intent mismatch — if the SaaS valuation post is getting impressions from one specific firm's branded searches, other blog posts may have similar problems. Posts that cite named sources for data may end up indexing adjacent to those sources' own brand searches. That's not useful traffic.
The uncomfortable lesson
Week one, the lesson was: aggregates hide distributions. A page at position 9.8 was actually one query at position 2.5 averaging with dozens at 80+. Week four, it was content indexing for names invented inside the prompt. This week, the same failure shows up with a real name: a page at position 7 appearing for searches that want a specific named advisory firm's report — and getting zero clicks because we are definitionally not it.
Position is the wrong signal if you don't know what queries are driving it.
Twelve pages produce any clicks at all out of 50, 42 total clicks in 28 days — better than the 45 I found over 90 days at the start of this series, but still thin. The investment calculators are in a slow climb that has nothing to do with what I committed this week and more to do with what happened 30-60 days ago.
I'll check whether the DCF improvement from July 13 shows any position movement in a week. If it does, I'll write about it. If the position is still 57, I'll write about that instead.
I'm running these experiments on valuefy.app and writing up what I find as I go. If you're building programmatic SEO tools, fighting the same "page looks like it's ranking but no clicks" wall, or just curious how these distribution problems keep recurring — drop a comment.
I also run AImiten, where we build AI tooling for companies. This side project is where I stress-test the ideas before they go anywhere near client work.
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.