<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aimiten</title>
    <description>The latest articles on DEV Community by Aimiten (@aimiten).</description>
    <link>https://dev.to/aimiten</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3564405%2F885e284a-ca65-47f2-9ac5-71eb37fe871a.png</url>
      <title>DEV Community: Aimiten</title>
      <link>https://dev.to/aimiten</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aimiten"/>
    <language>en</language>
    <item>
      <title>Three Clicks I Can't Explain. One Ranking Drop I Can't Diagnose.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 05 Jul 2026 07:09:16 +0000</pubDate>
      <link>https://dev.to/aimiten/three-clicks-i-cant-explain-one-ranking-drop-i-cant-diagnose-3k</link>
      <guid>https://dev.to/aimiten/three-clicks-i-cant-explain-one-ranking-drop-i-cant-diagnose-3k</guid>
      <description>&lt;p&gt;Three real clicks arrived on the discount calculator this week. I went to look at which queries drove them. GSC returned 25 rows. Every single one of them showed zero clicks.&lt;/p&gt;

&lt;p&gt;The clicks happened. I just can't see where they came from.&lt;/p&gt;

&lt;p&gt;That's been the week in a sentence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The daily automation ran every day this week — one tool page improved per day, the same pattern as the past six weeks. This week's batch: Conversion Rate (June 28), Runway (June 29), Engagement Rate (June 30), CAC Payback (July 1), CAC (July 2), LTV (July 3), MRR (July 4). Each commit adds verified benchmarks, worked examples, and internal links. Each one gets pushed, deployed, and submitted to GSC.&lt;/p&gt;

&lt;p&gt;Seven pages improved. On paper, a productive week.&lt;/p&gt;

&lt;p&gt;When I pulled the data, the useful signal was hard to find — and what I did find wasn't what I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: I improved the engagement rate calculator. Its position got worse.
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/engagement-rate-calculator/" rel="noopener noreferrer"&gt;engagement rate calculator&lt;/a&gt; was in Monday's automation queue. The commit is there: verified benchmarks for Instagram, TikTok, LinkedIn, and YouTube, ERF vs ERR examples, updated internal links.&lt;/p&gt;

&lt;p&gt;GSC for the 7-day window ending today shows the page at position &lt;strong&gt;39.3&lt;/strong&gt;. Over the prior three weeks (backing out the 7-day data from the 28-day window), the implied average position was around &lt;strong&gt;33.6&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's a drop of roughly 5–6 positions in the week following a content improvement.&lt;/p&gt;

&lt;p&gt;I want to be careful here. Position can swing several points week to week from normal SERP volatility — one page shuffles, five shift around it. A single week's comparison isn't diagnostic. And GSC has a 2–3 day data lag, which means some of this week's positions reflect pre-improvement crawls.&lt;/p&gt;

&lt;p&gt;But I can also look at the query-level breakdown. The head term "engagement rate calculator" — 54 impressions over 28 days — sits at position &lt;strong&gt;43.8&lt;/strong&gt;. That's page 4–5. The content improvement didn't move it out of there.&lt;/p&gt;

&lt;p&gt;The prior post covered a similar dynamic: pages we'd improved once, improved again, still not moving. This week is the freshest version of that — a page improved five days ago that GSC currently shows at a worse position than before we touched it.&lt;/p&gt;

&lt;p&gt;I don't know if the improvement hurt, helped, or had no effect yet. That's the honest answer. The signal window is too narrow and too noisy to say more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: Three clicks from queries I cannot name
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/discount-calculator/" rel="noopener noreferrer"&gt;discount calculator&lt;/a&gt; had its best week on record. &lt;strong&gt;3 clicks, 397 impressions, position 13.3.&lt;/strong&gt; The prior three-week weekly average was near zero — roughly 0 clicks and 61 impressions per week.&lt;/p&gt;

&lt;p&gt;The discount calculator last got a real content update in May. It wasn't in this week's automation queue. Nothing changed on the page.&lt;/p&gt;

&lt;p&gt;So I pulled the query-level breakdown to understand what drove the spike.&lt;/p&gt;

&lt;p&gt;GSC returned 25 queries. Here's the sample:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10% off 70$&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;7.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35% off $42&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;11.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;discount check&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;37.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;discounted price&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;check discount&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;46.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Twenty-five queries. &lt;strong&gt;43 total visible impressions. Zero visible clicks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The page had 397 impressions and 3 clicks this week. The visible queries account for 43 of those impressions — about 11%. The remaining &lt;strong&gt;354 impressions and all 3 clicks are below GSC's privacy threshold.&lt;/strong&gt; They exist; they just don't show up.&lt;/p&gt;

&lt;p&gt;This is the graveyard I keep hitting from different angles. Week 1 of this series was about the loan payment calculator with "average position 9.8" that turned out to be one query at 2.5 and dozens of invisible long-tails. The second post found the same pattern in blog impressions. This week it's showing up as actual &lt;em&gt;clicks&lt;/em&gt; — real sessions, real people, real conversions from queries I literally cannot read.&lt;/p&gt;

&lt;p&gt;The clicks came from somewhere specific. Someone typed something, saw the page in the results, clicked it. GSC has the data. I'm just not allowed to see it.&lt;/p&gt;

&lt;p&gt;I don't have a clean answer for what drove the spike. It could be a news cycle around a specific discount query. It could be a bot that happens to click. It could be one person with an unusual search pattern who stumbled on the page. I can't tell. What I can say is that an untouched page had a better week than the seven pages we polished — and the reasons are invisible to us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: Position 7.4. Zero visible queries. Zero clicks.
&lt;/h2&gt;

&lt;p&gt;The blog post &lt;a href="https://valuefy.app/blog/saas-valuation-multiples-in-2026-why-profitability-now-trumps-growth-at-all-costs" rel="noopener noreferrer"&gt;saas-valuation-multiples-in-2026-why-profitability-now-trumps-growth-at-all-costs&lt;/a&gt; appeared in the 7-day data this week for the first time. &lt;strong&gt;27 impressions, position 7.4, zero clicks.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Position 7.4 is good. For a blog post that wasn't showing any impressions in the prior three weeks, breaking into the top 10 is the kind of number that should be encouraging.&lt;/p&gt;

&lt;p&gt;I pulled the query-level breakdown to see which terms were driving it.&lt;/p&gt;

&lt;p&gt;Zero rows returned.&lt;/p&gt;

&lt;p&gt;Not low-volume rows. Not a handful of long-tail queries. Zero. Every one of the 27 impressions came from queries below the threshold — meaning each individual query had fewer than 2 impressions over the period, and GSC's privacy filter removed all of them.&lt;/p&gt;

&lt;p&gt;This is the clearest version of the measurement problem I've seen. A page is effectively ranking on page 1 for something. Someone is searching for something, seeing it, and not clicking. I can't see the query. I can't write for the intent. I can't tell if "not clicking" means the title is wrong for the query or the query is so specific that someone just read the title and got what they needed.&lt;/p&gt;

&lt;p&gt;The 0% CTR at position 7.4 is what I'd expect from an informational query where the title answers the question. Or from a position that looks better than it is because it's averaging across a distribution with one good spot and a dozen bad ones. I genuinely don't know which.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run the automation another week&lt;/strong&gt; — the 7-page batch from this week will show up in GSC in 10–14 days. The engagement rate calculator comparison needs more data before any conclusion is valid. I'll pull the same metrics next week.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Curl the discount calculator queries&lt;/strong&gt; — the 25 visible queries include "discounted price" at position 6.7 and "35% off $42" at position 11. I want to check the live HTML for both to see if there's anything specific drawing ultra-niche calculation queries to this page that I could amplify.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watch the SaaS valuation blog for two more weeks&lt;/strong&gt; — if it's genuinely near page 1 for specific queries, clicks should start appearing within 2–3 weeks as GSC's threshold unlocks some rows. If it stays at 0 CTR with zero visible queries, the distribution is too long-tail to do anything with.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Leave the untouched pages alone&lt;/strong&gt; — the discount calculator had a better week without being touched. The purchase order generator has consistently been the top-clicks tool without any content automation. The pattern of "untouched pages winning" has now shown up across three different measurement weeks. I'm not going to automate those pages.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The measurement problem
&lt;/h2&gt;

&lt;p&gt;Here's what bothers me about this week's data.&lt;/p&gt;

&lt;p&gt;Seven pages got improved. I know exactly what changed — the git log is specific, the diffs are readable, the content is better by any reasonable standard. What I don't know is whether "better" is doing anything in Google's model, and I won't know for weeks.&lt;/p&gt;

&lt;p&gt;Meanwhile, a page that hasn't been touched in six weeks had its best week yet. The traffic came from queries I can't read.&lt;/p&gt;

&lt;p&gt;The feedback loop is supposed to work like this: you improve a page, you measure the result, you adjust. But when GSC hides 89% of your impressions and 100% of your clicks behind a privacy threshold, and when position averages are arithmetic means across distributions that span position 2 to position 100, the feedback loop is barely functional.&lt;/p&gt;

&lt;p&gt;This isn't a complaint about GSC — the privacy thresholds exist for good reasons. But it means the standard "improve content → wait → check metrics → iterate" loop runs on extremely noisy data. The only honest conclusion I can draw from this week is: the automation ran, something shifted somewhere, and I don't know what caused what.&lt;/p&gt;

&lt;p&gt;That's not a comfortable place to be six weeks in. It's also not surprising. I knew going in that the measurement lag in SEO is weeks to months, not days. What I didn't fully appreciate until I started pulling query-level data every week is how much of the signal is simply not accessible, even in principle, under current tooling.&lt;/p&gt;

&lt;p&gt;Next week I'll check the same pages. If the engagement rate calculator is still at 39.3 or worse, I'll have more confidence that something is genuinely wrong with the approach — and I'll say so.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing up what the data actually shows, week by week. If you're building programmatic SEO or fighting the same measurement wall, drop a comment — I'd like to compare notes on what's working for you.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where I stress-test the ideas before they reach client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>80 Impressions. Every Visible One Is for a Company I Invented in a TypeScript File.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 28 Jun 2026 07:10:34 +0000</pubDate>
      <link>https://dev.to/aimiten/80-impressions-every-visible-one-is-for-a-company-i-invented-in-a-typescript-file-3bl</link>
      <guid>https://dev.to/aimiten/80-impressions-every-visible-one-is-for-a-company-i-invented-in-a-typescript-file-3bl</guid>
      <description>&lt;p&gt;80 impressions. Our best-performing blog page in the last 28 days — by far. I pulled the query breakdown expecting to see what people were actually searching for when they found it.&lt;/p&gt;

&lt;p&gt;Every visible query contained the name of a company that does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Blog generation on valuefy.app is automated. A scheduled routine picks a topic, hits a Supabase edge function, and the edge function calls Gemini with a large system prompt assembled from &lt;code&gt;prompt-builder.ts&lt;/code&gt;. That prompt contains, among other things, a block of fictional case study companies — examples injected so the AI produces naturalistic-sounding content instead of abstract theory.&lt;/p&gt;

&lt;p&gt;One of those companies is TechFlow Solutions: an IT consulting firm in Stockholm, revenue SEK 22M, shifted from services to SaaS, hybrid model confused buyers, eventually split the business and sold the services side at 4x.&lt;/p&gt;

&lt;p&gt;TechFlow Solutions does not exist. It was written into the prompt template so the AI would write concrete stories instead of generic advice.&lt;/p&gt;

&lt;p&gt;The blog post "The valuation reset: navigating lower exit multiples in today's M&amp;amp;A market" was generated using that prompt. The AI apparently used TechFlow Solutions as an example. Google read the post, indexed the company name alongside the M&amp;amp;A due diligence language surrounding it, and decided: this is the right page to show when someone searches for TechFlow Solutions' financial data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs. what the data showed
&lt;/h2&gt;

&lt;p&gt;The valuation reset post sits at average position 7.1 with 80 impressions over 28 days. That's the most visible blog page in GSC right now. I expected the query breakdown to show something like "exit multiples 2024" or "lower valuation M&amp;amp;A" — the actual topic of the post.&lt;/p&gt;

&lt;p&gt;Here's what came back:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"techflow solutions" "normalized ltm ebitda" or "qoe" or "quality of earnings"&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;7.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"techflow solutions" "qoe" or "quality of earnings" or "normalized ltm ebitda"&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;7.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two rows. Eleven impressions total. Out of 80.&lt;/p&gt;

&lt;p&gt;The other 69 impressions don't appear in the query breakdown — they're below GSC's privacy threshold, one or two impressions each, invisible. But based on the two that surface, the pattern is clear: someone is searching for "TechFlow Solutions" alongside specific M&amp;amp;A due diligence terms. That's not a person looking to understand exit multiples. That's due diligence research on a specific company — combined with the kind of financial language a quality-of-earnings analyst would use.&lt;/p&gt;

&lt;p&gt;A company that was invented inside a TypeScript file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: Fictional names in prompts become real search keywords
&lt;/h2&gt;

&lt;p&gt;The chain, traced through the code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;supabase/functions/_shared/prompt-builder.ts&lt;/code&gt; contains a fictional case studies block&lt;/li&gt;
&lt;li&gt;TechFlow Solutions is one of five fictional companies at line 157: Stockholm, IT consulting, SEK 22M revenue, hybrid model problem&lt;/li&gt;
&lt;li&gt;The blog generation prompt injects this block for every valuation-type content request&lt;/li&gt;
&lt;li&gt;The AI used "TechFlow Solutions" in the generated post alongside real M&amp;amp;A vocabulary — "normalized LTM EBITDA," "QoE," "quality of earnings"&lt;/li&gt;
&lt;li&gt;Google indexed those phrases together&lt;/li&gt;
&lt;li&gt;The post now ranks at position 7 for search queries that combine the fictional company name with professional due diligence terminology&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The impressions are not from people interested in exit multiples. They're from people — or more likely automated research tools — that encountered "TechFlow Solutions" somewhere and went looking for more. Position 7 for a fictional company is not a success. It's 80 impressions from completely the wrong audience, plus zero clicks because the page can't give those searchers what they actually want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The advertising cluster follows the familiar pattern
&lt;/h2&gt;

&lt;p&gt;This week the automation improved seven more calculator pages: Valuation Multiple (June 21), CPC (June 22), CTR (June 23), ROAS (June 24), CPA (June 25), Ad Spend (June 26), Burn Rate (June 27). Five of the seven are marketing calculators — the advertising cluster.&lt;/p&gt;

&lt;p&gt;The CTR calculator is the only one with any GSC presence in the 28-day window. The page data shows 19 impressions, position 5.5, one click, and a 5.26% CTR. Position 5.5 on a competitive marketing term. That looks promising.&lt;/p&gt;

&lt;p&gt;Then the query drill came back with zero rows.&lt;/p&gt;

&lt;p&gt;Not low positions — no visible queries at all. All 19 impressions are below GSC's threshold: dozens of micro-impressions from long-tail variants, none large enough to appear. The average position 5.5 is arithmetic across an invisible distribution, the same pattern that's appeared for five consecutive clusters now. The other five advertising calculators don't appear in the top 50 pages even in the full 28-day window.&lt;/p&gt;

&lt;p&gt;One note on the CTR calculator specifically: it does have a decent title from the automation — "CTR Calculator: Click-Through Rate &amp;amp; Benchmarks | Valuefy" — and a meta description that mentions specific platform benchmarks. The content improvement is real. The traffic just isn't there yet, and may not be given the competition for those terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: 42 days, one complete cycle, now on the second pass
&lt;/h2&gt;

&lt;p&gt;The daily automation has run without interruption since May 16: 42 consecutive commits, one per day, one calculator page per commit. The commit on June 27 was the Burn Rate calculator — same page as the very first commit on May 16. The queue has cycled back to the beginning.&lt;/p&gt;

&lt;p&gt;That means we now have one complete pass through 42 pages, and the second pass has started. Whether improving a page for a second time — now that it's been indexed and potentially settled into a position — produces different results from the first pass is the question I don't have data to answer yet. I'll check back once the second pass is a few weeks in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Replace named fictional companies with anonymous descriptions&lt;/strong&gt; — "a Scandinavian IT consultancy with SEK 22M revenue" creates no searchable artifact. "TechFlow Solutions" does. The fix is to remove the names and let the financial details carry the example. Audit all five fictional companies in &lt;code&gt;prompt-builder.ts&lt;/code&gt; before the next content generation run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check whether other blog posts rank for the other fictional company names&lt;/strong&gt; — TechFlow Solutions is one of five. Brightside Care, TechCo, and two others are also in the prompt. If other posts are ranking for "Brightside Care" plus healthcare M&amp;amp;A terms, this is a site-wide pattern, not a one-post anomaly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hold judgment on the second automation pass&lt;/strong&gt; — the useful question now isn't "did improving 42 calculators work?" It's "does a second improvement on an already-indexed page move positions?" That data arrives in a few weeks. I'll report what it shows.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;The fictional company names were put into the prompt to make the output sound better. Not to deceive anyone — there's no intent to mislead — but because "a company called TechFlow Solutions solved this exact problem" reads more naturally than "imagine a company that solved this exact problem." Concrete examples. Specific details. The usual advice for good writing.&lt;/p&gt;

&lt;p&gt;The problem is that "better-sounding content" and "well-indexed content" pull in different directions when the named examples are invented. Content that sounds naturalistic to a human reader creates exact-match fingerprints in the search index. Google doesn't know TechFlow Solutions was typed into a prompt last year and that no actual business by that name exists. It sees a document containing "TechFlow Solutions" and "normalized LTM EBITDA" together and decides: when someone searches for both, show this page.&lt;/p&gt;

&lt;p&gt;Named fictional entities in AI prompts are an SEO liability, not just a content-quality concern. Every invented company name, product name, or made-up case study is a potential keyword anchor that might attract queries for the wrong audience. For a valuation blog post trying to rank for "exit multiple trends," phantom impressions from TechFlow Solutions research queries are noise at best and a ranking dilution signal at worst.&lt;/p&gt;

&lt;p&gt;The fix is narrow: strip the names, keep the numbers. The lesson is broader: when you're writing prompts for content that will be indexed, every named entity is a keyword decision — including the ones you invented.&lt;/p&gt;

&lt;p&gt;I'll pull the query data again in four weeks. If the renamed prompt clears out the phantom impressions, that's a data point worth publishing. If the page is already permanently associated with TechFlow Solutions in Google's index and the queries persist, I'll say that too.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing up what actually happens, including the parts that go sideways. If you're building with AI-generated content, debugging unexpected impressions, or working through the same "content looks right but rankings don't follow" problem, I'd love to compare notes — drop a comment or reach out.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where I stress-test ideas before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>The Second Lap. Three Calculators Got Improved Twice. Here's What the First Pass Left.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 21 Jun 2026 07:13:03 +0000</pubDate>
      <link>https://dev.to/aimiten/the-second-lap-three-calculators-got-improved-twice-heres-what-the-first-pass-left-4c1g</link>
      <guid>https://dev.to/aimiten/the-second-lap-three-calculators-got-improved-twice-heres-what-the-first-pass-left-4c1g</guid>
      <description>&lt;p&gt;On June 16, the automation improved the P/E Ratio calculator for the second time. The first time was May 13. In the 34 days between those two commits, the page collected &lt;strong&gt;2 clicks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's what the first pass left for the second to work with.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The automation has been running since May 11 — one calculator page per evening, 21:00 UTC, without missing a day. Forty-three commits total. Each one follows the same pattern: pull a page from a queue, write in verified benchmarks, add worked examples, insert internal links, push. The message is always the same: "SEO: improve [X] calculator content — add verified benchmarks, examples, internal links."&lt;/p&gt;

&lt;p&gt;This week something different happened. Three of the seven pages in this week's queue had already been through the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;P/E Ratio calculator&lt;/strong&gt;: first improved May 13, second pass June 16 — 34 days apart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS Valuation calculator&lt;/strong&gt;: first improved May 14, second pass June 18 — 35 days apart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Book Value calculator&lt;/strong&gt;: first improved May 14, second pass June 20 — 37 days apart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The other four (EBITDA, CPM, Google Ads, Occupancy Rate) were genuine first passes. But for these three, this week's commits were the second lap.&lt;/p&gt;

&lt;p&gt;I've been writing about this automation for several weeks now — the equity cluster that collected almost nothing, the real estate cluster with 3 combined impressions across 7 pages, the pre/post split that showed the rankings predated the commits. What I hadn't done yet is ask a different question: what does 5 weeks of "first pass result" actually look like when you go back and look at the same page again?&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs what the data showed
&lt;/h2&gt;

&lt;p&gt;My expectation was that P/E Ratio — the oldest of the three, with the most time since the first pass — would show at least some movement. The content improvements are real: verified benchmarks, a reference to S&amp;amp;P 500 forward P/E (~21x as of 2026), sector comparisons. It's better content than it had before. The meta description is specific. The H1 matches the title tag. I curled the page and it renders cleanly.&lt;/p&gt;

&lt;p&gt;What I got back from GSC:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;28-day impressions&lt;/th&gt;
&lt;th&gt;28-day clicks&lt;/th&gt;
&lt;th&gt;Avg position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P/E Ratio calculator&lt;/td&gt;
&lt;td&gt;711&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;18.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SaaS Valuation calculator&lt;/td&gt;
&lt;td&gt;17 (visible)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Book Value calculator&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three pages. Two content improvements each. About two clicks between them over 28 days.&lt;/p&gt;

&lt;p&gt;The P/E Ratio number is the most interesting because it looks almost respectable — 711 impressions, position 18.8 — until you pull the query breakdown. When I did, 10 queries accounted for only 62 of those 711 impressions. The remaining 649 impressions are in GSC's privacy graveyard: queries with one or two impressions each that never surface in the report. The 18.8 average position is the arithmetic mean of that invisible distribution.&lt;/p&gt;

&lt;p&gt;The one query I could see that matters is "forward pe calculator" — 4 impressions, position 6.5, sitting near the bottom of page 1. The content improvement didn't move it to a click. The second improvement probably won't either.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The second pass inherits whatever the first pass left
&lt;/h2&gt;

&lt;p&gt;This is not a surprise, but it's worth stating precisely. The automation's job is to improve content. It does that well. The commits are clean, the data is verified, the examples are real. But what the content improvements can't do is change Google's prior assessment of the page's authority level.&lt;/p&gt;

&lt;p&gt;When P/E Ratio got its first pass in May, the page already existed in Google's index with a certain trust level. The content got better. The trust level didn't change. So 5 weeks later, when the second pass runs, it's improving content on a page that Google has already filed away at position 18 to 22 — and the new content lands on that same authority baseline.&lt;/p&gt;

&lt;p&gt;The SaaS Valuation and Book Value data are more direct about it. Zero and near-zero impressions after the first improvement means Google either hasn't indexed the updated content yet, or has indexed it and decided it belongs somewhere below page 5 across essentially all relevant queries. Either way, the second improvement goes into the same hole.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The pages that were never in the queue keep climbing
&lt;/h2&gt;

&lt;p&gt;I checked the current position data against the 28-day averages for the pages that actually generate traffic.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/purchase-order-generator/" rel="noopener noreferrer"&gt;purchase order generator&lt;/a&gt; sits at position &lt;strong&gt;21.3&lt;/strong&gt; in the last 7 days — down from an average of 29.2 across the full 28-day window. That's an 8-position improvement inside a single week. It has 20 clicks in 28 days, which makes it the single best-performing page on the site by a wide margin. It has never been in the automation queue.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/impression-calculator/" rel="noopener noreferrer"&gt;impression calculator&lt;/a&gt; has 10 clicks and 1,041 impressions in 28 days, sitting at position 34.7 in the most recent week (down from 37.2 over the full month). Also never touched by the automation.&lt;/p&gt;

&lt;p&gt;I'm not claiming the automation is hurting these pages by not touching them. I'm noting that neither page needed the automation to move in the right direction. Whatever is driving the improvement — organic crawl budget, external links I'm not aware of, query intent alignment, something else — it is not the content-improvement routine.&lt;/p&gt;

&lt;p&gt;The automation made 43 commits. The two pages that are actually delivering clicks didn't receive any of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The query match for the CPM calculator deserves a mention
&lt;/h2&gt;

&lt;p&gt;The CPM calculator got its first improvement this week, on June 17. That's too recent to draw any conclusions from — only four days of post-improvement data are in the window. But while I was pulling the query breakdown, one entry stood out:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2000000x1000&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;7.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"2000000x1000" — 2 million times 1,000. The CPM calculator happens to do arithmetic involving millions and thousands (budget divided by CPM gives impressions in thousands). Google apparently decided that a query asking to multiply 2,000,000 by 1,000 is answered by the CPM calculator. Position 7.1. Twelve impressions. Zero clicks.&lt;/p&gt;

&lt;p&gt;The content improvement will add better explanations of CPM math. It will not fix the fact that someone searching "2000000x1000" is looking for a calculator, not a CPM marketing tool. The query intent and the page intent are orthogonal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Let the second passes run.&lt;/strong&gt; The automation will keep improving pages on schedule. I'm not going to interrupt it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a checkpoint for July 21.&lt;/strong&gt; In four weeks, I'll pull the 28-day GSC data for P/E Ratio, SaaS Valuation, and Book Value specifically. If the second pass moved anything, I'll report exactly what moved. If it didn't, I'll report that too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Investigate the purchase order generator more carefully.&lt;/strong&gt; Position moving 8 points in a week without any content change is worth understanding. I want to know what queries drove it and whether the pattern shows up in external link data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check whether the automation queue has a stop condition.&lt;/strong&gt; If it cycled back to three pages after 40+ days, it may be working through an inventory that's smaller than I thought. I'd rather it skip pages it's already done than run indefinitely on diminishing returns.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable question
&lt;/h2&gt;

&lt;p&gt;Here's the thing that keeps surfacing in these weekly checks.&lt;/p&gt;

&lt;p&gt;The automation selects pages by cluster logic — it works through a group, moves to the next group, apparently loops back when it runs out of new pages. Google selects pages to rank by signals that are almost entirely orthogonal to that logic: authority, backlinks, domain trust, query intent match, user engagement signals.&lt;/p&gt;

&lt;p&gt;Forty-three commits in, the pages that are performing are exactly the pages the automation never touched. The pages the automation improved most — three of them twice now — are sitting at zero to two clicks and still drifting sideways.&lt;/p&gt;

&lt;p&gt;I don't have a clean answer for why the untouched pages are climbing while the improved pages aren't. Possibly the content improvements are fine but the pages are in categories (P/E ratio, SaaS valuation, book value) where established financial-media sites dominate and a new domain can't break through regardless of content quality. Possibly the purchase order generator happens to target a more fragmented query landscape where a new domain can compete. I'll test the checkpoint in July before drawing conclusions.&lt;/p&gt;

&lt;p&gt;For now: the second lap has started. The data will tell us whether doing something twice is better than doing it once.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing up what I find. If you're building programmatic SEO, fighting the "good content, bad rankings" wall, or running automation that might be improving the wrong pages — I'd be glad to compare notes in the comments.&lt;/p&gt;

&lt;p&gt;I also work on &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where the ideas get stress-tested first.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>43 Days of Automation. The Pages That Win Are the Ones I Haven't Touched.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 14 Jun 2026 07:10:36 +0000</pubDate>
      <link>https://dev.to/aimiten/43-days-of-automation-the-pages-that-win-are-the-ones-i-havent-touched-38je</link>
      <guid>https://dev.to/aimiten/43-days-of-automation-the-pages-that-win-are-the-ones-i-havent-touched-38je</guid>
      <description>&lt;p&gt;The automation has been running for 43 days without missing once. Every evening at 21:00 UTC, it picks a calculator page, writes in verified benchmarks, adds worked examples, inserts internal links, and commits. One page per day. Every single day since May 3.&lt;/p&gt;

&lt;p&gt;This week it finished the real estate cluster: Cap Rate, Rental Yield, NOI, DSCR, Cash-on-Cash, GRM, and WACC. Seven commits across seven days. Each one clean, each one improving real content with real numbers.&lt;/p&gt;

&lt;p&gt;Combined GSC impressions for all seven pages in the past 28 days: &lt;strong&gt;3&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The automation's job is straightforward. It picks a calculator page from a queue, improves the body content with verified data points, rewrites any thin sections, and adds internal links to related pages. The commits all follow the same message format: "SEO: improve [X] calculator content - add verified benchmarks, examples, internal links."&lt;/p&gt;

&lt;p&gt;The pages it has worked on form three clusters so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Advertising/SaaS metrics&lt;/strong&gt; — CPM, CTR, CPC, ROAS, CPA, EBITDA, Burn Rate, Runway, LTV, CAC, ARR, MRR, Churn Rate (this was weeks 1–2 of the automation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Equity/finance&lt;/strong&gt; — DCF, IRR, NPV, Payback Period, Vesting, Cap Table, Dilution, CAPM, Dividend Yield, Debt-to-Equity, Gross Margin, EPS, Retention Rate, Valuation Multiple, ROI (this was the block that ran through most of May)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real estate investment&lt;/strong&gt; — Cap Rate, Rental Yield, NOI, DSCR, Cash-on-Cash, GRM, WACC (this week, June 7–13)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Forty-three pages improved. Forty-three daily commits. The question I went into this week's data review asking: is any of it working?&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs what the data showed
&lt;/h2&gt;

&lt;p&gt;My expectation was incremental. Not a breakthrough — I knew the equity cluster produced almost nothing visible in GSC when I wrote about it two weeks ago. But I thought the real estate cluster might be different. These are more specific tool queries. Cap rate calculators, DSCR calculators — these serve a niche audience, real estate investors, and maybe that niche has less competition.&lt;/p&gt;

&lt;p&gt;Here's what I found when I pulled the 28-day query-level breakdown for each of the seven pages:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Impressions (28d)&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/tools/cap-rate-calculator/&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/rental-yield-calculator/&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/noi-calculator/&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/wacc-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/dscr-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/cash-on-cash-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/grm-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three impressions. Across seven pages. The single impression on the cap-rate page came from the query "cap calculator real estate investment radius" — position 61. The rental yield one: "rental yield calculation for property" — position 54. The NOI page: "free net operating analysis" — position 32. None of these are the head terms these pages were built to target.&lt;/p&gt;

&lt;p&gt;That's the third cluster now with this result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The pages are technically solid. That's what makes this interesting.
&lt;/h2&gt;

&lt;p&gt;I curled the &lt;a href="https://valuefy.app/tools/cap-rate-calculator/" rel="noopener noreferrer"&gt;cap-rate calculator&lt;/a&gt; as Googlebot to check what Google actually sees. The page isn't thin. It has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Cap Rate Calculator: Compare Investment Properties | Valuefy&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free cap rate calculator for real estate investors. Calculate NOI yield, compare properties side-by-side, and benchmark market rates by property type."&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Cap Rate Calculator for Real Estate Investors&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's a full FAQPage schema with 10 questions, a HowTo schema, a WebApplication schema, canonical URLs, hreflang. The meta description is specific. The H1 is descriptive. The content after the commit includes real cap rate benchmarks by property type — multifamily, retail, industrial — with source citations.&lt;/p&gt;

&lt;p&gt;By any on-page checklist, this is a good page. That's the thing: it's not a thin-content problem. The automation is producing legitimate, useful content. It's just not producing search impressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: 43 commits, and only 2 targets broke through
&lt;/h2&gt;

&lt;p&gt;Looking across all 43 automation targets in the 28-day GSC data, only two appear in the top 50 pages by impressions: CAPM (1 click, 281 impressions) and DCF (1 click, 390 impressions). Both from the equity cluster, both with 1 click.&lt;/p&gt;

&lt;p&gt;Everything else — 41 other pages that were improved by the automation over the past six weeks — either doesn't appear in the top 50 at all or has zero impressions in the query-level breakdown.&lt;/p&gt;

&lt;p&gt;I checked the data twice because I wanted to be wrong about this. I wasn't.&lt;/p&gt;

&lt;p&gt;The two that broke through (CAPM and DCF) are both established finance concepts with a small but real query stream. But even then — 390 impressions and 1 click in 28 days is not movement. It's barely a signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The pages that actually get clicks are a completely different category
&lt;/h2&gt;

&lt;p&gt;Here's the part that shifted my thinking.&lt;/p&gt;

&lt;p&gt;The 28-day page-level data for the whole site shows which pages are actually generating traffic. The top performers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Clicks (28d)&lt;/th&gt;
&lt;th&gt;Impressions (28d)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/tools/purchase-order-generator/&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;2,584&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/impression-calculator/&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;957&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/ (homepage)&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;693&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/balance-sheet-generator/&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/conversion-rate-calculator/&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The purchase order generator wasn't touched by the automation. Neither was the balance sheet generator. The impression calculator wasn't on the queue.&lt;/p&gt;

&lt;p&gt;I pulled the query breakdown for the purchase order generator to understand why it works when the financial metric calculators don't. It has 25 distinct queries with impressions, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"purchase order generator" — 2 clicks, 365 impressions, position 18.2&lt;/li&gt;
&lt;li&gt;"po maker" — 2 clicks, 60 impressions, position 7.0&lt;/li&gt;
&lt;li&gt;"free po generator" — 1 click, 62 impressions, position 18.2&lt;/li&gt;
&lt;li&gt;"free purchase order generator" — 1 click, 89 impressions, position 14.7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are real queries. People searching for them want to generate a purchase order right now — not read about what one is. The cap-rate calculator's 1 impression came from a query so oddly phrased it suggests an almost accidental match.&lt;/p&gt;

&lt;p&gt;The difference isn't content quality. It's user intent. A purchase order generator serves someone who needs to do something now. A cap rate calculator serves someone who wants to know something — and for financial knowledge queries, high-authority financial-media sites dominate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The og:title bug is still there, on every single one of these pages
&lt;/h2&gt;

&lt;p&gt;While curling the pages, I checked the og:title tag count. Every real estate calculator page returned 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp;amp; Financial Tools"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Cap Rate Calculator: Compare Investment Properties | Valuefy"&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first tag is the static fallback in index.html. The second is the one React Helmet injects during prerender. Both land in the rendered HTML. This was the bug I found in week 1 of these posts, confirmed again last week. Still live. Still on every page.&lt;/p&gt;

&lt;p&gt;I'm noting it because it's a clean double-check for anyone reading this series. It has not been fixed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit which pages are generators vs metric calculators&lt;/strong&gt; — count how many generator-type pages exist on the site versus metric calculator pages. The current ratio matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reorder the automation queue&lt;/strong&gt; — if generators serve immediate intent and have real query distributions, the automation should be improving those pages first. Not leaving them untouched while working through financial-metric calculators that compete against established financial sites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't kill the metric calculator work&lt;/strong&gt; — the content is legitimate and will matter if the site's authority grows. But it's wrong to treat it as the priority when there's a category that's already getting traffic signals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the og:title bug.&lt;/strong&gt; This is the third time I've written a sentence like that.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Forty-three days of daily automation, and the signal is clear enough to name: the automation is getting very good at improving a category that Google isn't currently surfacing for this domain.&lt;/p&gt;

&lt;p&gt;The financial metric calculators — Cap Rate, WACC, LTV, IRR, DCF and their relatives — compete for knowledge queries in a space where established financial-media sites have years of authority. A daily content improvement routine on a low-DR domain doesn't change that ranking calculus quickly, if at all.&lt;/p&gt;

&lt;p&gt;The generators — purchase orders, balance sheets, and similar tools — serve do-it-now queries. The competition is different. The intent match is cleaner. The domain-authority gap matters less when someone just needs to create a document.&lt;/p&gt;

&lt;p&gt;I'd convinced myself that improving content quality across the calculators was a reasonable long-term bet. It might still be. But the data I'm reading today says I've been improving the wrong category first. The automation was doing exactly what I told it to do. I just told it to do the wrong thing for 43 days.&lt;/p&gt;

&lt;p&gt;I'll check what happens when the queue shifts to generators. I'll report back with whatever the numbers say.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings as I go. If you're building programmatic SEO or watching your automation produce technically-good pages that Google ignores, I'd genuinely like to compare notes — drop a comment.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where the ideas get stress-tested first.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>The Code Left a Comment Explaining the Bug. The Bug Is Still Live Seven Weeks Later.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 07 Jun 2026 07:12:23 +0000</pubDate>
      <link>https://dev.to/aimiten/the-code-left-a-comment-explaining-the-bug-the-bug-is-still-live-seven-weeks-later-4cm2</link>
      <guid>https://dev.to/aimiten/the-code-left-a-comment-explaining-the-bug-the-bug-is-still-live-seven-weeks-later-4cm2</guid>
      <description>&lt;p&gt;13 clicks. The top-performing tool on the site this month. The automation never touched it.&lt;/p&gt;

&lt;p&gt;Not once in 30 days of daily commits does a "SEO: improve Purchase Order Generator content" message appear. The page runs on whatever it shipped with — no verified benchmarks added, no worked examples, no internal linking pass. And yet &lt;code&gt;purchase-order-generator&lt;/code&gt; leads every other page on valuefy.app by clicks in the last 28 days: 13 clicks, 1,538 impressions, and one real page-1 ranking for "po maker" at position 7.2.&lt;/p&gt;

&lt;p&gt;Meanwhile, seven financial calculators were improved this week — ROI, CAPM, Dividend Yield, Debt-to-Equity, Gross Margin, EPS, Retention Rate. Combined clicks across those seven in 28 days: zero.&lt;/p&gt;

&lt;p&gt;There's a lot going on this week. The purchase order generator irony is just the opening act.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The daily automation has now run for well over a month. The commit history for this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May 31 — ROI calculator (a second pass — this page was also the first one improved at the start of the routine)&lt;/li&gt;
&lt;li&gt;Jun 1 — CAPM calculator&lt;/li&gt;
&lt;li&gt;Jun 2 — Dividend Yield calculator&lt;/li&gt;
&lt;li&gt;Jun 3 — Debt-to-Equity calculator&lt;/li&gt;
&lt;li&gt;Jun 4 — Gross Margin calculator&lt;/li&gt;
&lt;li&gt;Jun 5 — EPS calculator&lt;/li&gt;
&lt;li&gt;Jun 6 — Retention Rate calculator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each commit adds verified benchmarks, worked examples, and internal links. Each tool page gets a meaningful content pass. And per GSC, none of them have crossed the impression threshold in 28 days — Google has not served any of them to anyone at a visible volume.&lt;/p&gt;

&lt;p&gt;The ROI calculator is the most striking case. It was the very first calculator the routine improved, weeks ago. Then the routine came back to it again this week for a second pass. In 28 days: 0 clicks. Query breakdown spans 20 queries, every position between 40 and 96. Nothing moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The top page by clicks was never on the automation's list
&lt;/h2&gt;

&lt;p&gt;I pulled the 28-day leaderboard across all pages on the site:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/tools/purchase-order-generator/&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;1,538&lt;/td&gt;
&lt;td&gt;40.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/ (homepage)&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;747&lt;/td&gt;
&lt;td&gt;7.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/impression-calculator/&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;776&lt;/td&gt;
&lt;td&gt;47.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/balance-sheet-generator/&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;13.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/conversion-rate-calculator/&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;10.8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The purchase-order-generator leads by 5 clicks. Second place is the homepage. Third is the impression calculator. None of these three pages were part of the automation's current sequence.&lt;/p&gt;

&lt;p&gt;The query breakdown for the purchase-order-generator explains why it outperforms. It has a real, dominant query: "purchase order generator" at position 20 with 211 impressions and 2 clicks, plus "po maker" at position 7.2 with 42 impressions and 1 click. That's page one. There's a definite user intent — somebody wants to make a PO document — and the page is the answer Google sometimes picks.&lt;/p&gt;

&lt;p&gt;The ROI calculator has no equivalent. Its query spread covers everything from "3 year roi" to "accounts receivable roi calculator" to "annualised roi calculator" — dozens of overlapping phrasings of a head term that every financial site in the world targets. No single query dominates. No query is above position 40.&lt;/p&gt;

&lt;p&gt;The difference isn't content quality. It's intent clarity and competition density. "Po maker" is a real long-tail with lower competition. "Roi calculator" is a head term with a thousand incumbents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The code left a note explaining the bug. Then left the bug in place.
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://dev.to/aimiten/i-ran-a-full-seo-audit-on-my-side-project-45-clicks-in-90-days-bn2"&gt;the first post in this series&lt;/a&gt;, I found that every page on valuefy.app had two competing &lt;code&gt;og:title&lt;/code&gt; meta tags — one static in &lt;code&gt;index.html&lt;/code&gt;, one injected by React Helmet during prerender. I said I'd fix it that night.&lt;/p&gt;

&lt;p&gt;Seven weeks later, I curled the homepage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"Mozilla/5.0 (compatible; Googlebot/2.1)"&lt;/span&gt; &lt;span class="s2"&gt;"https://valuefy.app/"&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-cE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;meta property="og:title"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Two tags. Still. I curled the purchase-order-generator page to double-check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp;amp; Financial Tools"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free Purchase Order Generator &amp;amp;amp; PO Maker | Valuefy"&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also two. Every page on the site is shipping two &lt;code&gt;og:title&lt;/code&gt; tags. Which one wins in a social share depends on the platform — most crawlers take the last tag, some take the first. For any individual tool page, some previews show the page-specific title, others show the generic site-wide one.&lt;/p&gt;

&lt;p&gt;Then I opened &lt;code&gt;client/index.html&lt;/code&gt; to understand what happened with the fix. Here's what's in the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Open Graph defaults (overridden by SEOHelmet per page) --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp; Financial Tools"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"150+ free business calculators and AI generators..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Meta description intentionally omitted — React Helmet injects the correct
     page-specific description at runtime and during prerendering. A static tag
     here would create a duplicate that Google reads instead of the real one. --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The comment is accurate and well-written. A static &lt;code&gt;&amp;lt;meta name="description"&amp;gt;&lt;/code&gt; was removed because someone understood that a duplicate description tag means Google reads the wrong one. The comment explains exactly why.&lt;/p&gt;

&lt;p&gt;That comment is two lines below a &lt;code&gt;&amp;lt;meta property="og:title"&amp;gt;&lt;/code&gt; tag with the same problem — also static, also getting duplicated by React Helmet, also causing Google and social crawlers to see two competing values.&lt;/p&gt;

&lt;p&gt;The explanation for why the bug matters is sitting inside the file that still has the bug.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;og:title&lt;/code&gt; and &lt;code&gt;og:description&lt;/code&gt; tags in &lt;code&gt;index.html&lt;/code&gt; have a comment above them: "Open Graph defaults (overridden by SEOHelmet per page)." The word "overridden" is the misunderstanding. Having two tags isn't an override — it's a conflict. The second tag doesn't cancel the first; they coexist in the HTML, and each crawler resolves the conflict on its own terms.&lt;/p&gt;

&lt;p&gt;This is a one-line fix repeated twice: delete the static &lt;code&gt;og:title&lt;/code&gt; and the static &lt;code&gt;og:description&lt;/code&gt; from &lt;code&gt;index.html&lt;/code&gt;. The regular &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; tag can stay as a fallback — that's fine, there's only one of those. It's the og: duplicates that are the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The homepage is partly ranking for the wrong Valuefy
&lt;/h2&gt;

&lt;p&gt;While reviewing homepage performance, I pulled the query-level breakdown for the "/" path in GSC to understand what's behind 747 impressions at position 7.9. The expected answer was brand queries for "valuefy." Here's what was there:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;valuefy&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;251&lt;/td&gt;
&lt;td&gt;7.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;valuefy app&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;valuefy official website&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;5.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;valuefy dfsa reporting&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;9.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;valuefy 50+ custodian integrations&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;valuefy technologies private limited&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;37.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"DFSA reporting" and "50+ custodian integrations" are product features of a wealth management platform — Valuefy Technologies Private Limited, an Indian fintech company with a similar name. Their searches are showing up in our GSC data as impressions for the homepage.&lt;/p&gt;

&lt;p&gt;Our homepage appears in their brand searches — near page one, in some cases — because we share a name. None of those impressions will ever click. The user is looking for enterprise wealth management software.&lt;/p&gt;

&lt;p&gt;This is a small volume effect (maybe 20-25 of the 747 impressions). But it does mean the "7.9 average position" for the homepage is partly pulled from searches that have nothing to do with our product, which makes the headline metric mildly misleading.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Finish the og:title fix.&lt;/strong&gt; Delete &lt;code&gt;&amp;lt;meta property="og:title"&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta property="og:description"&amp;gt;&lt;/code&gt; from &lt;code&gt;client/index.html&lt;/code&gt;. Same logic as the description fix that already happened. Same file. Two lines removed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit the automation queue against the click leaderboard.&lt;/strong&gt; The purchase-order-generator, balance-sheet-generator, and impression-calculator are generating real clicks without automation. The ROI, CAPM, and EPS calculators have been improved multiple times with zero return. Check whether the queue can be reordered toward pages that already have some query demand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add Organization schema to the homepage.&lt;/strong&gt; A proper &lt;code&gt;@type: Organization&lt;/code&gt; block with &lt;code&gt;sameAs&lt;/code&gt; links to any social or directory listings that exist. It won't erase the naming overlap with Valuefy Technologies, but it gives Google a cleaner signal about what this site is and who operates it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;The og:title bug has been live for seven weeks because fixing it never broke anything. No error, no alert, no test failure — the site works fine with two og:title tags. The duplicate just silently corrupts social previews for every page on the site.&lt;/p&gt;

&lt;p&gt;This is what technical debt actually looks like most of the time. Not a visible failure. A quiet mismatch between what the code says it's doing ("Open Graph defaults, overridden by SEOHelmet") and what it's actually doing (shipping two competing tags to every crawler that visits).&lt;/p&gt;

&lt;p&gt;The automation ran every night this week. The bug ran alongside it. Every CAPM calculator improvement that ships to Google also ships with a duplicated og:title, which means any social share of that page has a coin-flip chance of showing the wrong title. They've been running in parallel for over a month.&lt;/p&gt;

&lt;p&gt;I'll fix it this week. I'll check the og: tags again in the next post. If fixing them shows up in any measurable metric — social shares, referral traffic, anything — I'll report that too. If the data says it made no difference, I'll say that instead.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings here as I go. If you're building programmatic SEO, debugging React meta tag issues, or watching automation run alongside unfixed technical debt — drop a comment, I'd be glad to compare notes.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where I stress-test ideas before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>7 Days of Automation on Pages Google Has Never Seen</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 31 May 2026 07:14:12 +0000</pubDate>
      <link>https://dev.to/aimiten/7-days-of-automation-on-pages-google-has-never-seen-28h4</link>
      <guid>https://dev.to/aimiten/7-days-of-automation-on-pages-google-has-never-seen-28h4</guid>
      <description>&lt;p&gt;The automation ran every night this week. Seven commits, seven calculator pages polished with verified benchmarks and worked examples. The equity and startup finance cluster: DCF, IRR, NPV, Payback Period, Vesting, Cap Table, Dilution. One per night, 21:15 UTC like clockwork.&lt;/p&gt;

&lt;p&gt;When I pulled the GSC data to see what had changed, I got an answer I hadn't seen before.&lt;/p&gt;

&lt;p&gt;Five of the seven pages have zero impressions in 28 days. Not a low position. Not privacy-threshold queries hiding behind GSC's anonymization. Empty rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The automation has been running for over 40 consecutive days at this point. If you've been following this series, the arc of the last two weeks matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Last week's cluster&lt;/strong&gt; was SaaS and marketing calculators — CPM, CTR, ROAS, Churn, Burn Rate, ARR, MRR, and several others. When I checked those pages in GSC, they appeared at near-page-1 positions. Then I drilled into the query-level breakdown and those positions dissolved — they were arithmetic averages across dozens of one-impression long-tail queries scattered between position 2 and position 95. Not real top-10 rankings. A mean of a graveyard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This week's cluster&lt;/strong&gt; was equity and startup finance calculators.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools look polished. Specific titles, contextual meta descriptions, worked examples, internal links. Here's what GSC shows for the 28 days covering the improvement window:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;28d Impressions&lt;/th&gt;
&lt;th&gt;28d Clicks&lt;/th&gt;
&lt;th&gt;Avg Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/tools/dcf-calculator/&lt;/td&gt;
&lt;td&gt;~12 (query drilldown)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;57.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/dilution-calculator/&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;72.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/irr-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/npv-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/payback-period-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/vesting-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/tools/cap-table-calculator/&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Five pages with no data at all. Two with single-digit impressions. Seven pages improved this week. Combined: 0 clicks across the entire cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The escalation — from fake positions to no positions
&lt;/h2&gt;

&lt;p&gt;Last week, the SaaS calculators had the decency to show up in GSC with positions between 9 and 12. That turned out to be an illusion — GSC's page-level average flattened a distribution of invisible long-tail queries into something that looked like "almost page one." Not useful, but at least it existed.&lt;/p&gt;

&lt;p&gt;This week is a step down from that.&lt;/p&gt;

&lt;p&gt;The IRR, NPV, Payback Period, Vesting, and Cap Table calculators don't collapse under query-level inspection — they return empty responses. When I query GSC for those specific page URLs, the API comes back with &lt;code&gt;"responseAggregationType": "byPage"&lt;/code&gt; and no rows. No queries, no positions, no data at all.&lt;/p&gt;

&lt;p&gt;I curled all five pages as Googlebot to confirm they're actually live and rendering. They are. The &lt;a href="https://valuefy.app/tools/irr-calculator/" rel="noopener noreferrer"&gt;IRR calculator&lt;/a&gt; serves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Free IRR Calculator with MIRR &lt;span class="ni"&gt;&amp;amp;amp;&lt;/span&gt; Hurdle Rate | Valuefy&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free IRR calculator that computes MIRR and compares against your hurdle rate. Enter cash flows, get IRR, Modified IRR, and a clear go/no-go verdict."&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;IRR Calculator with MIRR &lt;span class="ni"&gt;&amp;amp;amp;&lt;/span&gt; Hurdle Rate Comparison&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well-formed title, specific description, clean H1. The page is there. Googlebot can render it. Google just hasn't decided it's worth returning for any query above the privacy threshold in 28 days.&lt;/p&gt;

&lt;p&gt;The SaaS cluster had fictional rankings. The equity cluster has no rankings at all. Week over week, the automation is running against pages with less and less Google surface area.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The page driving 24% of site traffic was never automated
&lt;/h2&gt;

&lt;p&gt;Over the past 28 days, &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; got 42 clicks total across all pages. One page contributed 10 of them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/tools/purchase-order-generator/
10 clicks | 1,048 impressions | position 46.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's 24% of the site's clicks from a single page — one the automation has never touched. The query breakdown is the clearest I've seen on the entire site: specific terms with real user intent. &lt;code&gt;po maker&lt;/code&gt; at position 7.8 (29 impressions, 1 click). &lt;code&gt;purchase order generator&lt;/code&gt; at position 22.6 (117 impressions, 2 clicks). &lt;code&gt;free purchase order generator&lt;/code&gt; at position 14.9 (16 impressions, 1 click). &lt;code&gt;purchase order maker&lt;/code&gt; at position 18.5 (16 impressions, 1 click).&lt;/p&gt;

&lt;p&gt;Five distinct clicks from five distinct queries. Actual people searching for a concrete thing, finding the page, clicking it.&lt;/p&gt;

&lt;p&gt;The seven equity calculators improved this week combined for 14 impressions and zero clicks.&lt;/p&gt;

&lt;p&gt;The automation picks the next page from an internal queue. The purchase-order-generator is apparently not in that queue. The pages getting the least Google attention are — which is either very principled (improving weak pages to bring them into the index) or exactly backwards (spending effort where Google has already signaled no interest). Right now the data doesn't support the principled interpretation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: India clicks 7.5x harder than the USA per impression
&lt;/h2&gt;

&lt;p&gt;In the 28-day country breakdown, the United States generated 6,630 impressions. That's about 72% of all country-attributed impressions for the month. The average position for US traffic is 60.5. The US delivered 2 clicks.&lt;/p&gt;

&lt;p&gt;India generated 734 impressions — roughly 8% of the total. Average position 18.5. India delivered 15 clicks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Avg Position&lt;/th&gt;
&lt;th&gt;CTR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;USA&lt;/td&gt;
&lt;td&gt;6,630&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;60.5&lt;/td&gt;
&lt;td&gt;0.03%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;India&lt;/td&gt;
&lt;td&gt;734&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;18.5&lt;/td&gt;
&lt;td&gt;2.04%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The US market generates enormous impression volume because the absolute search volume for finance and calculator terms is enormous there. But we're ranking at position 60 for almost all of those US queries — page 6, where the crawlers operate and humans don't. India gets our pages at positions where a 2% CTR is achievable because those queries are less contested.&lt;/p&gt;

&lt;p&gt;This isn't a hreflang problem or a geo-targeting problem. It's the authority gap with a geographic filter on it. Wherever the site happens to rank in the top 20, CTR is normal. Everywhere else, it's 0.03%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The og:title duplicate is still there
&lt;/h2&gt;

&lt;p&gt;I curled each page as Googlebot to verify meta tags as part of this week's check. Every page — IRR, NPV, DCF, purchase-order-generator, the homepage — returns two &lt;code&gt;og:title&lt;/code&gt; tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp;amp; Financial Tools"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free IRR Calculator with MIRR &amp;amp;amp; Hurdle Rate | Valuefy"&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was identified in Week 1. Week 3 explained why it wasn't fixed quickly — a deliberate architecture decision with one wrong assumption about React Helmet's behavior during prerendering. Since that post: no change across any route.&lt;/p&gt;

&lt;p&gt;I'm not relitigating the decision here. I'm noting it because the automation now ships improved content on pages that carry this conflict. Whatever click-through value a page-specific &lt;code&gt;og:title&lt;/code&gt; provides for social sharing is partially undercut by the generic sitewide tag that loads first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gate the automation on GSC existence&lt;/strong&gt; — before the bot improves a page, check whether that page has any impressions in the last 28 days. Zero impressions means skip and move to the next candidate. Improving pages Google can't see generates no useful signal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit why the equity cluster is absent from GSC&lt;/strong&gt; — five live, well-structured pages with zero GSC presence. Most likely causes in order of probability: not internally linked from anywhere (so Googlebot hasn't crawled them), missing from the sitemap, or simply not yet indexed despite being crawled. Check all three before writing off the pages entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Protect the purchase-order-generator from the automation queue&lt;/strong&gt; — it's the only page with consistent, identifiable traffic from real queries. I need to understand what Google likes about it before the automation inadvertently changes it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stop improving pages ranked at 50+&lt;/strong&gt; — better content can lift rankings, but not from position 60. The constraint at that depth isn't on-page quality. It's authority.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;The automation moves through clusters in sequence: SaaS calculators last week, equity calculators this week, something else next week. Each cluster has connected worse to actual Google visibility than the last one. SaaS pages had fictional page-1 positions. Equity pages have no positions at all.&lt;/p&gt;

&lt;p&gt;There's something odd about running a content improvement loop on pages that are invisible to the index. The pages get genuinely better — more specific titles, real benchmarks, worked examples. Nobody reads them. Google doesn't surface them. The loop runs again tomorrow night at 21:15 UTC.&lt;/p&gt;

&lt;p&gt;The positive signal: 15 clicks in the last 7 days against a 28-day average of roughly 10.5 per week. Site-level traffic is trending up slightly. It's just not coming from the pages being improved — it's coming from the purchase-order-generator and a handful of others that the automation has apparently passed over.&lt;/p&gt;

&lt;p&gt;I'll check in four weeks whether any of the equity calculators have developed GSC presence — not positions, just existence. Impressions above zero. If they're still empty at that point, improving them was the wrong activity entirely, and the automation needs a different filtering step before it picks the next page.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings as I go. If you're building programmatic SEO, debugging an automation that runs on its own priorities, or stuck on the gap between "content improved" and "traffic improved" — I'd be glad to compare notes. Drop a comment or reach out.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where I stress-test ideas before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>Six SaaS Calculators at Position 10. None of Them Actually Rank for Anything.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 24 May 2026 07:18:23 +0000</pubDate>
      <link>https://dev.to/aimiten/six-saas-calculators-at-position-10-none-of-them-actually-rank-for-anything-3kgb</link>
      <guid>https://dev.to/aimiten/six-saas-calculators-at-position-10-none-of-them-actually-rank-for-anything-3kgb</guid>
      <description>&lt;p&gt;The automation ran every single day this week. Seven SaaS calculators landed in the repo on schedule — Runway on Monday, CAC on Tuesday, LTV on Wednesday, ARR on Thursday, MRR on Friday, Churn Rate on Saturday, Funding on Sunday. The commit messages are uniform: "SEO: improve [X] calculator content — add verified benchmarks, examples, internal links." Seven out of seven days. No misses.&lt;/p&gt;

&lt;p&gt;When I pulled the 28-day GSC data this morning to see what that cluster looks like from Google's side, the numbers looked encouraging. Then I pulled the query breakdown for two of them.&lt;/p&gt;

&lt;p&gt;The same thing I found in Week 1 is back — except this time it isn't one page. It's the whole cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Here's where the SaaS calculator cluster stands after this week's improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Runway calculator&lt;/strong&gt; — how much time before you run out of money, improved May 17&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAC calculator&lt;/strong&gt; — cost to acquire a customer, improved May 18&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LTV calculator&lt;/strong&gt; — lifetime value, improved May 19&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ARR calculator&lt;/strong&gt; — annual recurring revenue, improved May 20&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MRR calculator&lt;/strong&gt; — monthly recurring revenue, improved May 21&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Churn Rate calculator&lt;/strong&gt; — customer attrition, improved May 22&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding calculator&lt;/strong&gt; — how much to raise and at what dilution, improved May 23&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each improvement follows the same pattern: pull the existing page, add verified benchmarks (sourced, not invented), add a worked example with real numbers, tighten the internal link structure. The automation has been running this routine since late March — 37 consecutive days now, one calculator per day.&lt;/p&gt;

&lt;p&gt;The 28-day GSC data showed all six of the SaaS-focused calculators appearing in Google's index with aggregate positions that looked like near-page-1 territory. I expected to need to write a boring update post about flat metrics. Then I drilled in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs what the data showed
&lt;/h2&gt;

&lt;p&gt;Here's what the 28-day page-level data says about the SaaS cluster:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Calculator&lt;/th&gt;
&lt;th&gt;Impressions (28d)&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Avg Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ARR calculator&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runway calculator&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CAC calculator&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LTV calculator&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MRR calculator&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;30.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Churn Rate calculator&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;10.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ARR at position 10.2. Runway at position 8.4. Most of the others clustering around 10–11. On the surface that looks like a cluster approaching page 1 with some volume behind it.&lt;/p&gt;

&lt;p&gt;On the surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The ARR calculator's invisible 69
&lt;/h2&gt;

&lt;p&gt;ARR calculator: 70 impressions, position 10.2 in the 28-day window. That sounds like a page flirting with page 1. I pulled the query-level breakdown.&lt;/p&gt;

&lt;p&gt;GSC returned one query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mrr / arr hesaplayıcı    1 impression    position 28.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One query. One impression. In Turkish. Position 28.&lt;/p&gt;

&lt;p&gt;The other 69 impressions are below GSC's privacy threshold — queries with one or two impressions that don't surface in the query breakdown at all. Dozens of tiny long-tail variations, each generating a crumb of signal, each arriving from a different position scattered somewhere between 2 and 100.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "position 10.2" is the arithmetic mean of that invisible distribution.&lt;/strong&gt; There is no ARR calculator query where the page actually ranks at position 10. The aggregate hides a graveyard of sub-threshold queries averaging out to look like progress.&lt;/p&gt;

&lt;p&gt;The ARR page title — "ARR Calculator: MRR to ARR, NRR &amp;amp; SaaS Multiples" — is fine. The content quality went up after the May 20 improvement. None of that is the issue. The issue is that the average position metric is lying again, and it's the same lie Week 1's loan payment calculator told.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: Runway has the same disease
&lt;/h2&gt;

&lt;p&gt;Runway calculator: 61 impressions, position 8.4. Even more promising than ARR — position 8 would mean top-of-page-1 territory. I pulled the query-level breakdown.&lt;/p&gt;

&lt;p&gt;GSC returned one query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;startup runway calculation    1 impression    position 49.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One query. One impression. Position 49.&lt;/p&gt;

&lt;p&gt;Sixty impressions below the threshold. The "position 8.4" is the average of one query at 49 and dozens of queries from positions I can't see — some of which are probably in the top 5, which would pull the average sharply upward. A single query at position 2 plus 59 queries at position 50 would produce an average somewhere around 10. That's what I'm looking at.&lt;/p&gt;

&lt;p&gt;The Runway calculator isn't ranking at 8.4. It's ranking at different positions across dozens of undetectable searches, and the mean of those positions happens to be 8.4. Those are different sentences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: None of the improved pages showed up in 7-day data
&lt;/h2&gt;

&lt;p&gt;Here's the detail that ties it together. The seven calculator improvements this week landed May 17–23. I pulled the 7-day GSC data (May 16–24) expecting to see at least some of them with new impressions.&lt;/p&gt;

&lt;p&gt;None of the SaaS tool pages appear in the 7-day window. Zero impressions across all seven pages in the week they were improved.&lt;/p&gt;

&lt;p&gt;The two "runway" and "funding" entries that did show up in the 7-day data were blog posts — &lt;code&gt;/blog/how-to-calculate-and-manage-your-startup-runway-effectively&lt;/code&gt; (1 impression, position 72) and &lt;code&gt;/blog/digital-health-ma-how-a-48-funding-drop-creates-acquisition-opportunities&lt;/code&gt; (3 impressions, position 31). Not the tool pages.&lt;/p&gt;

&lt;p&gt;This doesn't mean the improvements were wasted. Google hasn't crawled, re-rendered, and re-evaluated all seven pages in a week — that's not how the indexing cycle works. The 28-day data showing them at position 10 was from before the improvements. Whether the new content moves anything won't show up for another 2–4 weeks, minimum.&lt;/p&gt;

&lt;p&gt;What it does mean: I'm evaluating the SaaS cluster on pre-improvement data. The "near page 1" aggregate is the baseline, not the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The clicks are flat
&lt;/h2&gt;

&lt;p&gt;Overall: 9 clicks this week from 853 impressions. The prior week — May 8–15, before this week's improvements — was 11 clicks from 852 impressions. Almost identical numbers, essentially flat.&lt;/p&gt;

&lt;p&gt;The 28-day total is 42 clicks. Week 4's published post noted 52 clicks in the equivalent 28-day window. Whether the 10-click decline is signal or noise is unclear — the sample sizes are small enough that it could be either. What I can say is that the growth that was visible through Week 4 has not continued into the past two weeks.&lt;/p&gt;

&lt;p&gt;The homepage continues to generate the most clicks: 3 this week from 188 impressions at position 7.8. The purchase order generator came in second at 2 clicks from 194 impressions. Everything else was 0 or 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;p&gt;The cluster-building strategy is working in one narrow sense: the automation is consistent, the pages are in Google's index, and the aggregate position numbers have moved upward from the depths they were at in Week 1. But "position 10 on average" does not mean "ranking for anything useful."&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick one calculator and verify a real ranking.&lt;/strong&gt; For a page to generate clicks, it needs a dominant intent query where it actually holds a top-10 position — not an averaged fiction across a long tail. I'll identify which of the SaaS calculators has the most concentrated query distribution rather than the most diffuse, and focus improvement effort there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wait for the May improvements to settle before re-measuring.&lt;/strong&gt; Pulling GSC data on pages that were updated in the same week tells me nothing about impact. I'll check the same 6 pages again in 4 weeks with a split at the improvement date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stop counting "average position" as a signal.&lt;/strong&gt; Every week the aggregate position for a new page looks promising; every week the query breakdown shows the same distribution problem. At this point I should treat page-level average position as noise until I can see at least 5 queries with meaningful impressions each.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check whether any click-generating query is consistent week-over-week.&lt;/strong&gt; The homepage and purchase order generator are getting clicks, but I haven't verified whether those clicks come from stable recurring queries or different one-off searches each week.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Week 1's version of this lesson was: aggregate position averages hide query distributions. I wrote it, published it, and moved on.&lt;/p&gt;

&lt;p&gt;Seven weeks later, the same trap ran on six pages simultaneously — an entire content cluster — and it nearly produced a false-positive "cluster is working" headline in this post. The only thing that stopped it was pulling the query drilldown. Not every week, not for the first time: specifically this week, specifically because I remembered to.&lt;/p&gt;

&lt;p&gt;The pattern doesn't go away just because you've seen it before. It shows up every time there's a new page with impressions below the privacy threshold, which is every page with less than a few hundred impressions on any given query. For a new domain without authority, that's nearly everything.&lt;/p&gt;

&lt;p&gt;The automation is real. The 37-day streak of improvements is real. The positions averaging around 10 are not real — they're arithmetic on a distribution I can't fully see. I'll check back when those distributions have had a month to respond to the content changes. If the ARR and Runway calculators stay at position 10-with-nothing-visible, I'll say that too.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; — a set of SaaS and finance calculators I've been building and optimizing through automated content routines. The weekly data usually punches holes in what I thought I knew about how the experiment was going. If you're fighting the same "the aggregate looks fine but nothing is clicking" problem, drop a comment.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where the ideas get stress-tested before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>31 Pages, 30 Days. I Split the Pre/Post Data. The Win Predated the Work.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 17 May 2026 07:20:17 +0000</pubDate>
      <link>https://dev.to/aimiten/31-pages-30-days-i-split-the-prepost-data-the-win-predated-the-work-pa2</link>
      <guid>https://dev.to/aimiten/31-pages-30-days-i-split-the-prepost-data-the-win-predated-the-work-pa2</guid>
      <description>&lt;p&gt;The 28-day data for &lt;a href="https://valuefy.app/tools/pe-ratio-calculator/" rel="noopener noreferrer"&gt;/tools/pe-ratio-calculator/&lt;/a&gt; showed "forward pe calculator" sitting at position 6.7. The page was improved on May 13 — new forward P/E benchmarks sourced from FactSet, a HowTo JSON-LD schema block, and an AI-citeable answer section added to help with AI Overviews. Position 6.7 on the exact sub-query the improvement had targeted. I was 200 words into a success post when I thought to split the data by improvement date.&lt;/p&gt;

&lt;p&gt;The ranking was already there. Before the commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The automation has now run 41 times across the tool library — one page per night, no missed days since mid-April. This week's run covered P/E Ratio (May 13), SaaS Valuation (May 14), Book Value (May 14), Valuation Multiple (May 15), Burn Rate (May 16). The pattern is consistent: pull current benchmark data, add worked examples, add HowTo structured data, wire in internal links. 31 pages improved in the last 30 days alone.&lt;/p&gt;

&lt;p&gt;The question I've been trying to answer for six weeks is whether any of this is measurable in GSC. This week I had what looked like a candidate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs. what the data showed
&lt;/h2&gt;

&lt;p&gt;The 28-day page-level data looked encouraging for the P/E calculator:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Impressions (28d)&lt;/td&gt;
&lt;td&gt;516&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clicks (28d)&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg. position (28d)&lt;/td&gt;
&lt;td&gt;20.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When I pulled the query-level breakdown, "forward pe calculator" showed at position 6.7 — the exact sub-query the May 13 improvement had directly targeted by adding a forward P/E benchmark table and a dedicated answer block.&lt;/p&gt;

&lt;p&gt;This looked like evidence. The automation added forward P/E content. A forward P/E query surfaced near page 1. Clean cause-and-effect.&lt;/p&gt;

&lt;p&gt;Then I ran the narrow windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The ranking existed before the improvement
&lt;/h2&gt;

&lt;p&gt;Pre-improvement window (May 6–12 — the full week before the May 13 commit):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;forward pe calculator&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;p/e ratio calculator&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;36.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pe ratio calculator&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;60.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"Forward pe calculator" was at position &lt;strong&gt;4.5&lt;/strong&gt; the week before the improvement went live. One click. Already on page 1.&lt;/p&gt;

&lt;p&gt;Post-improvement window (May 13–17):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;pe ratio calculator&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;50.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peg ratio calculator&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;43.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;forward pe calculator&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12.0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ratio calculator&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;price earning ratio calculator&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;11.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"Forward pe calculator" dropped from 4.5 to 12.0 after the improvement. The 28-day aggregate had averaged them together — 4 impressions at 4.5, plus 1 at 12.0, plus one earlier impression somewhere around 10 — and produced position 6.7. Which looked like a result the change caused.&lt;/p&gt;

&lt;p&gt;It wasn't. The sequence I had constructed from the aggregate was backwards.&lt;/p&gt;

&lt;p&gt;This is the same trap as the loan payment calculator from Week 1: an aggregate position metric telling a plausible story that the underlying distribution immediately contradicts when you open it. There, the "average position 9.8" hid a distribution from position 2.5 to position 98. Here, the "position 6.7 after improvement" hid a timeline where the best result predated the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The improvement did something — just different
&lt;/h2&gt;

&lt;p&gt;The post-improvement window does show real effects.&lt;/p&gt;

&lt;p&gt;"Pe ratio calculator" — the head term — moved from position 60.0 to 50.3. Ten positions. Small sample (3 impressions each), but a directional movement on the competitive query. Three queries appeared that weren't present in the pre-improvement week: "ratio calculator" at 9.0, "price earning ratio calculator" at 11.0, "debt to earnings ratio calculator" at 21.0.&lt;/p&gt;

&lt;p&gt;"Ratio calculator" at position 9.0 is notable — it's a broad, generic query, and the page apparently matched it more strongly after the sector benchmark table and structured data were added. One impression. Too small to act on. But it wasn't there the week before, and a broad classification query appearing at position 9 is a different outcome than a specific long-tail query holding a position it already had.&lt;/p&gt;

&lt;p&gt;The improvement created new query surface on generic and related terms. It didn't create the specific "forward pe calculator" result I was about to credit it for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: 78% of the P/E calculator's impressions are invisible
&lt;/h2&gt;

&lt;p&gt;The 28-day page-level data: 516 impressions for the P/E calculator. The query-level breakdown: 113 visible impressions across 25 queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;403 impressions — 78% of the total — are below GSC's privacy threshold.&lt;/strong&gt; Individual queries with 1–2 impressions each. GSC counts them in the aggregate and won't tell you what they are.&lt;/p&gt;

&lt;p&gt;This matters for the attribution question. "Forward pe calculator" was visible because it accumulated 4 impressions in a single week. Everything below the threshold is invisible — could be sitting at position 2.0 on a query I'll never see, or at position 90. The pre/post split I ran above only reveals the above-threshold queries. The 403 impressions below could contain a dozen more latent near-page-1 results — or none.&lt;/p&gt;

&lt;p&gt;The query breakdown for the 28-day window returned 25 visible queries. The page is matching at least 403 additional search variations that never surface. Some of those were there before any improvement. Some might be new. I can't tell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The og:title tag is confirmed still live
&lt;/h2&gt;

&lt;p&gt;While verifying the P/E calculator's HTML state after the improvement, I ran the standard og:title count:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"Googlebot/2.1"&lt;/span&gt; &lt;span class="s2"&gt;"https://valuefy.app/tools/pe-ratio-calculator/"&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-cE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;meta property="og:title"'&lt;/span&gt;
2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two tags. Static generic one in &lt;code&gt;index.html&lt;/code&gt;, React Helmet one in the rendered output. Eight weeks since it was first flagged. Still there.&lt;/p&gt;

&lt;p&gt;I won't relitigate this — Week 5 covered why it exists and what the wrong assumption was. But it's worth noting that every improvement the automation commits — including the structured data additions and benchmark updates on the P/E page — lands on a page that still ships a generic site-wide title as its first og:title signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run pre/post splits before claiming attribution.&lt;/strong&gt; From now on: whenever an improved page appears in the weekly GSC data, the pre-improvement window check runs first. The aggregate is for trend-watching; the narrow window is for attribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check "ratio calculator" in two weeks.&lt;/strong&gt; It appeared post-improvement at position 9.0 with 1 impression — too thin to act on, but if it appears consistently in the next cycle, it means the structured data additions are catching broader classification queries. That would be the actual story of what the automation builds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run the same analysis on three prior improvements.&lt;/strong&gt; The April batch covered EBITDA, ROAS, CTR, CPC, DCF, Cap Rate, and a dozen others. Some of those pages are generating impressions. I want to know whether the rankings on those pages were latent before the improvements or created by them — same method, pre/post split on the commit date.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fix the static og:title.&lt;/strong&gt; Not because it's clearly blocking anything — the P/E calculator is generating clicks and position movement despite it. But eight weeks is long enough. It's one line removed from &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Aggregate time windows are good for tracking trends. They are bad for attribution.&lt;/p&gt;

&lt;p&gt;When I saw "forward pe calculator" at position 6.7 in the 28-day data after a May 13 improvement that explicitly added forward P/E content, my brain completed the pattern: &lt;em&gt;improvement → ranking&lt;/em&gt;. The temporal overlap made it feel true. The aggregate was doing nothing wrong — it was accurately reporting a 28-day average. I was the one reading sequence as causation.&lt;/p&gt;

&lt;p&gt;Every improvement the automation makes now has to be verified with a pre/post split before I write about it. Not as a final check, but as the first step. If the ranking was already there, the post isn't about that ranking. If the ranking appeared cleanly after the commit, then we have something to say.&lt;/p&gt;

&lt;p&gt;The good news: the improvement did real work. "Ratio calculator" at position 9.0. "Pe ratio calculator" moving from 60 to 50. New query surface that wasn't there before. That's a more modest story than "the automation hit page 1" — but it's a true one, and it'll compound if the pattern holds across 30+ pages.&lt;/p&gt;

&lt;p&gt;I'll come back in two weeks with the pre/post analysis on the April batch. Either the rankings were latent and the automation is revealing them, or the improvements are actually creating new surface. That's a question the data can answer.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings as I go. If you're building programmatic SEO or fighting the same "the aggregate looks fine but the distribution is hiding something" problem, I'd like to compare notes — drop a comment or reach out.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where ideas get stress-tested before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>52 Clicks in 28 Days. One Page Has a 26% CTR. I Can't See What It Ranks For.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 10 May 2026 07:20:07 +0000</pubDate>
      <link>https://dev.to/aimiten/52-clicks-in-28-days-one-page-has-a-26-ctr-i-cant-see-what-it-ranks-for-2k01</link>
      <guid>https://dev.to/aimiten/52-clicks-in-28-days-one-page-has-a-26-ctr-i-cant-see-what-it-ranks-for-2k01</guid>
      <description>&lt;p&gt;52 clicks in 28 days. That's 1.79 per day — and compared to the Week 1 baseline of 45 clicks in 90 days (0.5 per day), it's a genuine 3.5x improvement. I'll take it.&lt;/p&gt;

&lt;p&gt;But as soon as I started drilling into which pages moved and why, the clean narrative fell apart. The best-performing page has a 26% CTR driven by queries I can't see. The commitments I made in Week 5 — reorder the automation queue, fix the og:title bug — didn't happen. And the biggest English-language search market in the world is showing us 6,967 impressions per month and handing back 3 clicks.&lt;/p&gt;

&lt;p&gt;The click rate tripled. The story is messier than that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The automation has been running every day since early April — one calculator page per night, verified benchmarks added, worked examples, internal links. 40+ pages improved over 90 days. Week 5's post identified that 8 of those pages weren't even getting impressions from Google, and committed to four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reorder the queue by impressions — hourly rate calculator first (880 impressions at the time)&lt;/li&gt;
&lt;li&gt;Use the WACC calculator as a two-week control for whether on-page changes move positions&lt;/li&gt;
&lt;li&gt;Watch the ROI calculator for position recovery&lt;/li&gt;
&lt;li&gt;Fix the duplicate og:title tags on every page — treated as a build blocker&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's what the 28-day GSC data shows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs. what the data showed
&lt;/h2&gt;

&lt;p&gt;I expected the pages the automation touched in early April to start showing movement. And I expected the four action items from Week 5 to have been executed.&lt;/p&gt;

&lt;p&gt;What happened:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Expected&lt;/th&gt;
&lt;th&gt;Actual&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Early-April pages (PE ratio, Funding, Cap Table)&lt;/td&gt;
&lt;td&gt;Some position gain after 4-6 week crawl lag&lt;/td&gt;
&lt;td&gt;PE ratio: 29 → 18.7. Funding: position 11.5, 2 clicks. Cap Table: position 9.5, 1 click.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recent improvements (CPM, CTR, ROAS, CPA, EBITDA)&lt;/td&gt;
&lt;td&gt;Still too early&lt;/td&gt;
&lt;td&gt;Confirmed buried at position 60-90&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Queue reordered to hourly rate first&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;td&gt;Automation ran CPM, CTR, ROAS, CPA, EBITDA, AdSpend, ConversionRate instead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;og:title bug fixed&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;td&gt;Still 2 og:title tags on every page (curled and confirmed)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two of four action items sat idle for another week. The automation kept running the queue it had.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The best-performing page is hiding its traffic from me
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/business-plan-generator/" rel="noopener noreferrer"&gt;business plan generator&lt;/a&gt; showed up in the 28-day data with &lt;strong&gt;5 clicks, 19 impressions, 26.32% CTR, position 12.2.&lt;/strong&gt; A 26% CTR would be extraordinary for any page. At position 12 — the top of page 2 — it's essentially impossible under normal distributions.&lt;/p&gt;

&lt;p&gt;So I pulled the query-level breakdown. Here's what GSC returned:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;business plan generator&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;97.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's it. One query, two impressions, position 97, zero clicks. The remaining 17 impressions and 5 clicks are below GSC's privacy threshold — queries with fewer than 16 impressions that don't show up in the breakdown at all.&lt;/p&gt;

&lt;p&gt;The 26% CTR isn't what it sounds like. There isn't a single query where one in four searchers clicks our result. What it means is: this page ranks high (probably top 3) for some specific queries that I can't identify, those high-position queries generate clicks, and meanwhile a cloud of long-tail queries at position 50-97 pulls the aggregate position down to 12.2. The aggregate math hides a bimodal distribution. Again.&lt;/p&gt;

&lt;p&gt;The week 1 post had the loan-payment calculator sitting at "position 9.8" that turned out to be a fiction. This is the same trap from the other side — a "26% CTR" that's actually a few invisible top-3 rankings averaged with a long tail of zeros.&lt;/p&gt;

&lt;p&gt;The page is working. I just can't see for what. The title Google is using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI Business Plan Generator — 7 Sections | Valuefy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The live H1: "Free AI Business Plan Generator — 7 Sections, Instant Output." Those seven-sections hooks are probably matching something specific in the query tail. I won't know until the queries break above the threshold.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: PE ratio shows improvements work — on a 5-6 week delay
&lt;/h2&gt;

&lt;p&gt;The PE ratio calculator was last improved on &lt;strong&gt;April 2&lt;/strong&gt; — 38 days ago. No automation has touched it since. The 7-day GSC position: &lt;strong&gt;18.7&lt;/strong&gt;. The 28-day average: &lt;strong&gt;21.1&lt;/strong&gt;. Week 1 baseline: roughly position 29 across the 90-day window.&lt;/p&gt;

&lt;p&gt;That's a genuine ~10 position gain. From the back of page 3 to the front of page 2. With 4 clicks and 517 impressions in the 28-day window, it's the second-highest click earner among tool pages.&lt;/p&gt;

&lt;p&gt;The query that moved:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;pe ratio calculator&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;25.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;forward pe calculator&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;18.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;p/e ratio calculator&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;35.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The "forward pe calculator" query landing at position 18 is why the 7-day average looks better than the 28-day average — it's a low-impression query that happens to be ranking well right now, and it's skewing the recent average toward a better number than the distribution actually represents.&lt;/p&gt;

&lt;p&gt;But the directional trend is real: position moved from ~29 to ~21 over 38 days after a single improvement commit. No follow-up automation. No link building. Just on-page content changes — and then 5-6 weeks of waiting.&lt;/p&gt;

&lt;p&gt;The implication for everything else in the queue: CPM, CTR, ROAS, CPA, EBITDA — improved in early May — shouldn't show anything visible until mid-June. We're flying blind on last week's work for another month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The US is our biggest impression market and worst converter
&lt;/h2&gt;

&lt;p&gt;Country-level 28-day data, sorted by impressions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Avg Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;United States&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;6,967&lt;/td&gt;
&lt;td&gt;45.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;India&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;734&lt;/td&gt;
&lt;td&gt;17.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canada&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;441&lt;/td&gt;
&lt;td&gt;53.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indonesia&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;166&lt;/td&gt;
&lt;td&gt;13.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pakistan&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;156&lt;/td&gt;
&lt;td&gt;21.7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The US has 9.5x India's impressions and 3x fewer clicks. At position 45.6 average, we're buried on page 4-5 for US searches — deep enough that even 7,000 impressions converts to almost nothing. India's 17.4 average position is page 2, and at that depth the clicks start coming.&lt;/p&gt;

&lt;p&gt;This isn't a geo-targeting problem. It's an authority problem expressed geographically. The US markets we're showing up in (finance, SaaS, business calculators) are the most competitive on Earth. We get impressions because the search volumes are so large that even position 45 accumulates visibility. We don't get clicks because nobody scrolls to page 5.&lt;/p&gt;

&lt;p&gt;The 3 US clicks in 28 days did come from somewhere — the query data doesn't show which — but at $0 in ad spend and domain authority barely above zero, 3 is what page 4-5 looks like in English at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Actually run the hourly rate calculator next&lt;/strong&gt; — it was first on the Week 5 priority list and still hasn't been touched. This needs a manual queue intervention, not an assumption that the automation will self-correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't interpret ROAS, CTR, CPM, or EBITDA results before mid-June&lt;/strong&gt; — the PE ratio example shows the lag is real. Mark the calendar and check those pages on June 15th.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try to surface the business plan generator queries&lt;/strong&gt; — narrow the GSC query filter by date to find if any query broke the 16-impression threshold in a single week. If not, wait.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the og:title tags&lt;/strong&gt; — this is the fourth post mentioning this. At this point the commitment is meaningless until there's a commit that proves it happened.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Writing action items in a blog post and then not doing them is a specific kind of self-deception. The items go onto a list, the list gives the impression of progress, and the automation keeps running its queue while the list sits there.&lt;/p&gt;

&lt;p&gt;None of Week 5's four action items made it into git. The WACC calculator — which was supposed to be a controlled experiment — is at position 55.8 with 1 click and 653 impressions. The queue wasn't reordered. The og:title fix didn't ship. The ROI calculator is at position 41.1, still drifting.&lt;/p&gt;

&lt;p&gt;The click rate did triple, which is the genuine good news this week. But the tripling came from early-April improvements starting to surface — not from anything decided or built this week or last week. The lag is long enough that cause and effect barely feel connected.&lt;/p&gt;

&lt;p&gt;The experiment running in the background is working. The promises running in the foreground aren't.&lt;/p&gt;

&lt;p&gt;I'll check back in June on the pages improved in May. If the PE ratio pattern holds, ROAS should be somewhere around position 55-65 by then. If it's still at 74, the pattern doesn't generalize and I'll say that.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing them up as they happen. If you're building programmatic SEO, watching Claude automate your content queue, or trying to make sense of GSC's privacy threshold noise, I'd be glad to compare notes in the comments.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This project is where I pressure-test the ideas before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>30 Days of Daily Automation. The Bot Improved the Wrong Pages.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 03 May 2026 07:27:30 +0000</pubDate>
      <link>https://dev.to/aimiten/30-days-of-daily-automation-the-bot-improved-the-wrong-pages-1ag</link>
      <guid>https://dev.to/aimiten/30-days-of-daily-automation-the-bot-improved-the-wrong-pages-1ag</guid>
      <description>&lt;p&gt;The daily automation has been running for 30 consecutive days. One calculator page per day, every day since April 3rd — verified benchmarks, worked examples, internal links added, body content rewritten. 28 different pages touched.&lt;/p&gt;

&lt;p&gt;This week I pulled the GSC data to see what actually happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 of those pages don't appear in the 200-page snapshot of the last 28 days.&lt;/strong&gt; Not low impressions. Absent entirely.&lt;/p&gt;

&lt;p&gt;The automation ran every day, made measurable improvements, and spent most of its effort on pages Google isn't showing to anyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The routine picks a calculator from a queue, fetches the current page, asks Claude to add verified benchmarks and worked examples, commits the result. Runs at 9 PM UTC. Has not missed a day since April 3.&lt;/p&gt;

&lt;p&gt;This week's batch: NOI (Apr 26), DSCR (Apr 27), Cash-on-Cash Return (Apr 28), GRM (Apr 29), Occupancy Rate (Apr 30), WACC (May 1), CPC (May 2). All real estate and finance metrics. Each one is genuinely a better page now — the content is real, the benchmarks are verified.&lt;/p&gt;

&lt;p&gt;The question I didn't ask until this week: which pages should have been first?&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs what the data showed
&lt;/h2&gt;

&lt;p&gt;I expected the earliest-improved pages — improved in the first week of April, now four weeks old — to show some position movement. Google crawl cycles at this authority level run roughly 2–4 weeks. Four weeks should be enough to see something.&lt;/p&gt;

&lt;p&gt;Here's what the 28-day GSC data shows for the early-April batch:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Improved&lt;/th&gt;
&lt;th&gt;Impressions 28d&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;arr-calculator&lt;/td&gt;
&lt;td&gt;Apr 10&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;8.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cac-calculator&lt;/td&gt;
&lt;td&gt;Apr 8&lt;/td&gt;
&lt;td&gt;115&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;22.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;burn-rate-calculator&lt;/td&gt;
&lt;td&gt;Apr 6&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ltv-calculator&lt;/td&gt;
&lt;td&gt;Apr 9&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mrr-calculator&lt;/td&gt;
&lt;td&gt;Apr 11&lt;/td&gt;
&lt;td&gt;not in top 200&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;runway-calculator&lt;/td&gt;
&lt;td&gt;Apr 7&lt;/td&gt;
&lt;td&gt;not in top 200&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Zero clicks across all of them. The pages that appear have positions between 6.5 and 22.5 — but at impression volumes this low, average position is again the arithmetic mean of a ghost distribution. The query-level breakdown for ARR returns zero visible queries. For LTV, the same.&lt;/p&gt;

&lt;p&gt;No movement. Four weeks of crawl time, and the positions are where they were before the improvements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The site's highest-impression tool page hasn't been touched
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/hourly-rate-calculator/" rel="noopener noreferrer"&gt;hourly rate calculator&lt;/a&gt; has &lt;strong&gt;880 impressions&lt;/strong&gt; in the last 28 days. That's the highest impression count of any tool page on the site. It sits at position 57.4 — page 6 of Google — generating a steady drip of impressions and converting none of them into clicks.&lt;/p&gt;

&lt;p&gt;The automation has never touched it.&lt;/p&gt;

&lt;p&gt;Git log confirms: no commits to &lt;code&gt;hourly-rate-calculator.tsx&lt;/code&gt; in at least 90 days. I also curled the live page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hourly Rate Calculator for Freelancers | Valuefy&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free hourly rate calculator for freelancers and
  consultants. Convert salary to hourly, add overhead and taxes, and set a rate
  that covers every cost."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reasonable title. Reasonable description. The page also carries the og:title duplicate bug — two competing &lt;code&gt;og:title&lt;/code&gt; tags, one static from the shell HTML, one injected by React Helmet. Every page on the site has this; I've now verified it on the homepage, the WACC calculator, and the hourly rate page. It's been there since Week 1.&lt;/p&gt;

&lt;p&gt;The automation queue did not sort by impression count. It ran through a list. The list didn't cross-reference GSC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: The five pages that should have been first
&lt;/h2&gt;

&lt;p&gt;When I sorted tool pages by 28-day impressions and filtered for pages the automation hasn't touched, this is what came out:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Page&lt;/th&gt;
&lt;th&gt;Impressions 28d&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;hourly-rate-calculator&lt;/td&gt;
&lt;td&gt;880&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;57.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pe-ratio-calculator&lt;/td&gt;
&lt;td&gt;546&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;22.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;purchase-order-generator&lt;/td&gt;
&lt;td&gt;395&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;39.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;roas-calculator&lt;/td&gt;
&lt;td&gt;357&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;62.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;markup-calculator&lt;/td&gt;
&lt;td&gt;345&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;43.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These five pages together have 2,523 impressions and 11 clicks in 28 days. The four with clicks have CTR between 0.5% and 0.8%. The hourly rate page has 880 impressions and zero clicks — meaning someone searched, saw the result, decided not to click. A title or meta description problem, not a ranking problem. All of them sit between position 22 and 62 — basement-level, but visible. If any one of them converts at even 2% instead of sub-1%, that's a measurable weekly click increase from pages that already exist in Google's view.&lt;/p&gt;

&lt;p&gt;The automation improved pages that averaged fewer than 30 impressions per month. These five averaged 505.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The ROI calculator — the Week 1 flagship — has nearly disappeared
&lt;/h2&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/aimiten/i-ran-a-full-seo-audit-on-my-side-project-45-clicks-in-90-days-heres-what-i-found-41pl"&gt;Week 1 audit&lt;/a&gt;, &lt;code&gt;/tools/roi-calculator/&lt;/code&gt; led the table: 1,483 impressions over 90 days at position 58. The most visible tool page on the site at the time.&lt;/p&gt;

&lt;p&gt;The automation improved it on April 20. Thirteen days ago.&lt;/p&gt;

&lt;p&gt;It no longer appears in the top 200 pages in the 28-day data. When I ran a query-level breakdown specifically for that URL, I got 10 visible queries with roughly 20 total impressions. At the same run rate as Week 1, I'd expect about 490 impressions in a 28-day window. It's now at 20 plus whatever sits below GSC's privacy threshold.&lt;/p&gt;

&lt;p&gt;I don't know the cause. The April 22 editorial redesign — a full visual overhaul cascading to 143+ pages — happened two days after the ROI improvement. CSS variable remaps and font changes don't affect rankings directly, but a full site re-render can trigger a recrawl cycle that temporarily disrupts signals. That's a more plausible cause than the content improvement itself.&lt;/p&gt;

&lt;p&gt;What I know: the page dropped. I'll check it again in two weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The WACC calculator has the most impressions — and was just improved
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://valuefy.app/tools/wacc-calculator/" rel="noopener noreferrer"&gt;WACC calculator&lt;/a&gt; has 560 impressions in 28 days, position 56, one click. It's the second-highest impression tool page after the hourly rate calculator.&lt;/p&gt;

&lt;p&gt;The automation improved it on May 1 — two days ago. Too early to see any effect in GSC. I curled the page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;WACC Calculator: Cost of Capital Formula | Valuefy&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Calculate your weighted average cost of capital
  from debt, equity, and tax rate. Used in DCF models and capital structure decisions."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one of the rare cases where the automation hit a high-impression page by coincidence — WACC was next in the queue, and it happened to be second-highest in impressions. I'll use this as a natural experiment: if the content improvement moves the position in the next two weeks, it's the strongest evidence so far that on-page work does anything at this authority level. If it doesn't, that's also data.&lt;/p&gt;

&lt;p&gt;The query breakdown confirms the impression distribution is real here — 11 visible queries, 508 visible impressions, with "wacc calculator" alone driving 188 impressions at position 59.9. This is not another averaged ghost. It's a real query cluster with real search volume, sitting on page 6 with a 0.18% CTR.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reorder the queue by impressions&lt;/strong&gt; — sort descending, cross-referenced against GSC, starting with hourly rate (880), then P/E (546), then purchase-order generator (395). The queue already works; it just needs the right priority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use the WACC calculator as a control&lt;/strong&gt; — check its position in two weeks. If it moves, on-page optimization is doing something at this domain's authority level. If not, the Week 1 conclusion still holds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the ROI calculator&lt;/strong&gt; — if it recovers from the post-redesign dip, the April 22 redesign was the variable. If it keeps dropping, something else is happening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the og:title duplicate&lt;/strong&gt; — I keep saying this. This time I'm treating it as a blocker for any further queue runs, not a nice-to-have.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Automation removes friction from a decision you've already made. If the decision was wrong, the automation executes it more consistently than you'd have done it manually.&lt;/p&gt;

&lt;p&gt;The queue existed. It worked through a list. Nobody asked whether the list matched the data.&lt;/p&gt;

&lt;p&gt;30 days later, 28 pages are better, 8 of them have fewer monthly impressions than a single Reddit comment gets views, and the site's highest-impression tool page still looks like it did in February.&lt;/p&gt;

&lt;p&gt;I said in Week 1: "I'd rather run one audit routine that tells me which pages improved week over week than ship more content into a pile Google has already rated." I then ran 30 more improvements without that audit. These things are not actually hard to do — they're hard to prioritize when the automation is already running and producing tidy green commits.&lt;/p&gt;

&lt;p&gt;I'll reorder the queue this week. In two weeks I'll report whether the WACC experiment moved. If the answer is "no detectable movement at position 56 with 560 impressions," I'll say that too.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings as I go. If you're building programmatic SEO or trying to figure out whether automated content work is actually doing anything, I'd be glad to compare notes — drop a comment.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where ideas get stress-tested before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>The og:title Bug Was Deliberate. The Code Already Explained Why It Would Fail.</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 26 Apr 2026 07:23:44 +0000</pubDate>
      <link>https://dev.to/aimiten/the-ogtitle-bug-was-deliberate-the-code-already-explained-why-it-would-fail-542f</link>
      <guid>https://dev.to/aimiten/the-ogtitle-bug-was-deliberate-the-code-already-explained-why-it-would-fail-542f</guid>
      <description>&lt;p&gt;In Week 1 of this series, I found a duplicate &lt;code&gt;og:title&lt;/code&gt; bug on valuefy.app and wrote: "Fix: strip the static &lt;code&gt;og:&lt;/code&gt; tags out of &lt;code&gt;index.html&lt;/code&gt;. About 15 minutes of work, touches one file."&lt;/p&gt;

&lt;p&gt;That was twelve days ago.&lt;/p&gt;

&lt;p&gt;I curled the homepage this morning. Two &lt;code&gt;og:title&lt;/code&gt; tags. Still there.&lt;/p&gt;

&lt;p&gt;I went to figure out why.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Here's what was running this week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eight content automation commits in seven days: "SEO: improve [X] calculator content — add verified benchmarks, examples, internal links." NPV, ROI, Payback Period, CAPM, Dividend Yield, EPS, DCF, Cap Rate, Rental Yield — one calculator per day, every day.&lt;/li&gt;
&lt;li&gt;One site-wide editorial redesign (April 22): 1,437 insertions, 857 deletions, 23 files. New palette (oxblood &lt;code&gt;#8B2E2A&lt;/code&gt;, off-black, paper &lt;code&gt;#F5F2EA&lt;/code&gt;), Fraunces serif headlines, masthead-style layout. The redesign cascades to 143+ calculator pages via CSS variable remap.&lt;/li&gt;
&lt;li&gt;One targeted SEO tweak on the Purchase Order Generator: title rewritten to "Free Purchase Order Generator &amp;amp; PO Maker," H1 updated to include "PO" and "Maker" variants. Targeting four queries the page already appeared for at positions 10-19.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a lot of shipping. The &lt;code&gt;og:title&lt;/code&gt; fix — which was supposed to be tonight's work twelve days ago — did not ship.&lt;/p&gt;

&lt;p&gt;I expected this to be a story about procrastination. It wasn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs. what I found
&lt;/h2&gt;

&lt;p&gt;I expected to find that the duplicate &lt;code&gt;og:title&lt;/code&gt; was a legacy accident — a leftover static tag I'd never cleaned up after wiring in React Helmet.&lt;/p&gt;

&lt;p&gt;Instead, I found &lt;code&gt;git log --oneline -- client/index.html&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;79e0c67  Design: site-wide editorial redesign
3ef0538  SEO: add static Open Graph meta tags to index.html for crawler compatibility
1b90426  SEO: remove static meta description from index.html to fix duplicate tag
d7fdcf5  SEO: fix prerender meta description hydration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The static &lt;code&gt;og:title&lt;/code&gt; tag was introduced on March 31, deliberately, in a commit that also wrote an explanation for why it was safe. The bug I found in Week 1 wasn't a legacy artifact. It was a design decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The commit that introduced it had a valid reason and a wrong assumption
&lt;/h2&gt;

&lt;p&gt;Here's the full commit message from March 31:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SEO: add static Open Graph meta tags to index.html for crawler compatibility

SPA crawlers (RankInPublic, Facebook, Slack) don't execute JS so they
miss og:image from React SEOHelmet. Static fallbacks in index.html
ensure previews work everywhere.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rationale is completely valid. When Facebook or LinkedIn crawl your React SPA, they don't execute JavaScript. They read &lt;code&gt;index.html&lt;/code&gt; as-is. If your &lt;code&gt;og:image&lt;/code&gt; only exists in the React Helmet component, social sharing is broken for a large class of crawlers.&lt;/p&gt;

&lt;p&gt;The commit added:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Open Graph defaults (overridden by SEOHelmet per page) --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp; Financial Tools"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"150+ free business calculators..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:image"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"https://valuefy.app/og-default.jpg"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The comment says "overridden by SEOHelmet per page." This is the assumption that turned out to be wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: React Helmet adds alongside. It does not remove.
&lt;/h2&gt;

&lt;p&gt;Sit two lines above those new Open Graph tags in &lt;code&gt;index.html&lt;/code&gt;. There's already a comment there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Meta description intentionally omitted — React Helmet injects the correct
     page-specific description at runtime and during prerendering. A static tag
     here would create a duplicate that Google reads instead of the real one. --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That comment is about &lt;code&gt;&amp;lt;meta name="description"&amp;gt;&lt;/code&gt;, which was correctly removed in &lt;code&gt;1b90426&lt;/code&gt;. The understanding was right: if you put a static meta description in &lt;code&gt;index.html&lt;/code&gt;, the prerendering step captures it alongside the React Helmet version, and you get two description tags.&lt;/p&gt;

&lt;p&gt;What the March 31 commit missed is that the same behavior applies to &lt;code&gt;og:title&lt;/code&gt; and &lt;code&gt;og:description&lt;/code&gt;. React Helmet does not replace static tags it didn't create. When the prerender runs, it appends the Helmet-managed tags — with &lt;code&gt;data-rh="true"&lt;/code&gt; attributes — to whatever was already in &lt;code&gt;index.html&lt;/code&gt;. The static tags stay.&lt;/p&gt;

&lt;p&gt;I confirmed this by curling the prerendered homepage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Valuefy - Free Business Calculators &amp;amp; Financial Tools"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
...
&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;property=&lt;/span&gt;&lt;span class="s"&gt;"og:title"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Free Business Calculators &amp;amp; AI Generators | Valuefy"&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two &lt;code&gt;og:title&lt;/code&gt; tags. On every page. When you share a specific calculator on LinkedIn, most crawlers read the first &lt;code&gt;og:title&lt;/code&gt; they encounter. That first one is the generic site-wide fallback, not the calculator's specific title.&lt;/p&gt;

&lt;p&gt;There's also a stale number in the mix. The static &lt;code&gt;og:description&lt;/code&gt; says "150+ free business calculators." Every other file in the codebase says "105+." The static tag is from March 31 and was never updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: 1,437 lines of redesign — 1 line deleted in index.html
&lt;/h2&gt;

&lt;p&gt;The April 22 redesign is the most significant commit this month. 23 files, 1,437 insertions, 857 deletions. The palette changed, the typography changed, the favicon changed, the nav structure changed (Blog renamed to Journal, direct hub links). The commit message describes it as cascading to 143+ calculator pages.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;index.html&lt;/code&gt; was touched in that commit. One deletion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-    &amp;lt;link rel="alternate icon" href="/favicon.ico" /&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The old favicon ICO. That's it.&lt;/p&gt;

&lt;p&gt;I'm not criticizing the choice. The redesign was clearly scoped as a visual layer change, and the &lt;code&gt;og:title&lt;/code&gt; is a meta tag problem with a different owner in the commit history. But it's an interesting illustration of how bugs survive complex refactors: when a refactor's scope is well-defined, edge cases at the boundary of that scope don't get pulled in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The four-week scorecard
&lt;/h2&gt;

&lt;p&gt;49 clicks in the last 28 days across 50 pages. That's up from the Week 1 baseline of 45 total in 90 days — roughly a 3.5× improvement in click rate.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Period&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;90-day baseline (Week 1)&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Last 28 days (Week 4)&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The directions are right but the absolute numbers are still small. The USA remains structurally broken: 8,221 impressions in 28 days, 3 clicks, CTR 0.036%, average position 56. India gets 892 impressions and 10 clicks at position 16. The US market is generating more than 9× the impressions of India but less than a third of the clicks — and all of that comes from deep-page positions where nobody clicks.&lt;/p&gt;

&lt;p&gt;The daily automation is producing work. The positions haven't moved on the core head terms. The authority gap from Week 1 is still the binding constraint.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fix the og: tags tonight.&lt;/strong&gt; Remove &lt;code&gt;og:title&lt;/code&gt;, &lt;code&gt;og:description&lt;/code&gt;, and &lt;code&gt;og:url&lt;/code&gt; from &lt;code&gt;index.html&lt;/code&gt;. Keep &lt;code&gt;og:image&lt;/code&gt;, &lt;code&gt;og:image:width&lt;/code&gt;, &lt;code&gt;og:image:height&lt;/code&gt;, and &lt;code&gt;og:type&lt;/code&gt; — those are the tags that React Helmet doesn't reliably inject and that non-JS crawlers need. The title and description are page-specific; the image and type are site-wide defaults. Split them correctly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update the static og:description count.&lt;/strong&gt; "150+" is wrong; it should match the "105+" used everywhere else in the codebase. One character change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify the Purchase Order Generator title change landed.&lt;/strong&gt; GSC shows "po generator" at position 16.3 over 28 days. The April 21 commit targeted that query. I'll check position week-over-week in two more GSC pulls to see if the title change moved anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the daily automation running.&lt;/strong&gt; The 3.5× improvement in weekly clicks is directional. I won't interrupt it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;The comment in &lt;code&gt;index.html&lt;/code&gt; explains the exact problem that the line right below it creates.&lt;/p&gt;

&lt;p&gt;That's not unusual. Code comments often describe constraints that are immediately violated — by the person who wrote the comment. It's not laziness; it's the difference between understanding the abstract principle ("duplicates are bad") and applying it consistently to every concrete case that fits the pattern ("so og:title is a duplicate too").&lt;/p&gt;

&lt;p&gt;The React Helmet behavior is genuinely non-obvious if you haven't run into it before. &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;meta name="description"&amp;gt;&lt;/code&gt; get replaced because React Helmet has special handling for those. Custom &lt;code&gt;og:&lt;/code&gt; properties don't have the same handling. The distinction isn't documented prominently. You only know it if you've either read deeply into Helmet's code or encountered the resulting bug.&lt;/p&gt;

&lt;p&gt;I'm writing it here so the next person building a React SPA with prerendering and React Helmet doesn't spend a week running the wrong commit log search.&lt;/p&gt;

&lt;p&gt;The four-week summary: the content machine is running, the click curve is improving slowly, and there's one structural SEO bug left that's been there since before Week 1. That's next.&lt;/p&gt;




&lt;p&gt;I'm running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing the findings as I go. If you're building programmatic SEO on a React SPA, dealing with prerendering quirks, or fighting the same "I know about the bug but haven't fixed it" wall — drop a comment or reach out.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where I stress-test ideas before they touch client work.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
    <item>
      <title>22 Queries, Position 2, Zero Clicks — Because the Meta Description Said 2024</title>
      <dc:creator>Aimiten</dc:creator>
      <pubDate>Sun, 19 Apr 2026 07:16:43 +0000</pubDate>
      <link>https://dev.to/aimiten/22-queries-position-2-zero-clicks-because-the-meta-description-said-2024-3ddo</link>
      <guid>https://dev.to/aimiten/22-queries-position-2-zero-clicks-because-the-meta-description-said-2024-3ddo</guid>
      <description>&lt;p&gt;22 queries. Positions ranging from 1 to 5. 56 impressions. Zero clicks.&lt;/p&gt;

&lt;p&gt;Not "near zero." Not "a handful." Zero. A blog post on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; sat at the top of Google's results for more than twenty search queries about SaaS valuation multiples in 2026, and not one searcher clicked it.&lt;/p&gt;

&lt;p&gt;I went looking for why. What I found was a metadata bug so obvious I'm still annoyed I didn't catch it sooner — and a bigger pattern about what happens when automation runs on a schedule instead of on a signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;This week's git log tells one story. Six pull requests — six venture-finance calculator pages improved by the daily Claude Code routine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IRR Calculator (April 17)&lt;/li&gt;
&lt;li&gt;Cap Table Calculator (April 16)&lt;/li&gt;
&lt;li&gt;Dilution Calculator (April 15)&lt;/li&gt;
&lt;li&gt;Vesting Calculator (April 15)&lt;/li&gt;
&lt;li&gt;Funding Calculator (April 13)&lt;/li&gt;
&lt;li&gt;Churn Rate Calculator (April 12)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each commit is the same shape: verified benchmarks added, worked examples, updated internal links. Six pages touched in seven days. If you squinted at the output, you'd assume the project had a productive week.&lt;/p&gt;

&lt;p&gt;GSC told a different story.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data showed
&lt;/h2&gt;

&lt;p&gt;I pulled the 28-day page+query breakdown — which pages were getting impressions and for which specific queries. None of the six improved calculator pages appeared with any meaningful signal. The IRR calculator had 15 visible queries, all at positions 60–100, zero clicks. The Cap Table calculator returned zero rows — no impressions at all in the last 28 days.&lt;/p&gt;

&lt;p&gt;But one page kept showing up in the data. A blog post:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/blog/saas-valuation-multiples-in-2026-why-profitability-now-trumps-growth-at-all-costs&lt;/code&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Query&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;saas valuation multiples 2026 arr&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;4.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;saas company valuation multiples 2026&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;b2b saas valuation multiples 2026&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;5.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;saas startup valuation multiples 2026&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;saas arr valuation multiples 2026&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;saas valuation multiples arr 2026&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;saas valuation multiples compression 2026&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;8.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rule of 40 saas valuation impact 2026&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;7.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;22 queries total. 56 visible impressions. The post is ranking at positions 1–5 for real queries with real search intent — not the micro-volume graveyard from last week's post. These are people actually typing "saas valuation multiples 2026" into Google and seeing valuefy.app in positions 2, 3, 4.&lt;/p&gt;

&lt;p&gt;Clicks: 0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #1: The meta description says 2024
&lt;/h2&gt;

&lt;p&gt;I curled the page as Googlebot. The title tag was fine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;SaaS valuation multiples in 2026: why profitability now trumps growth-at-all-costs | Valuefy Blog&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I looked at the meta description:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Discover how a focus on profitability is reshaping 
SaaS valuation multiples in 2024. This case study explores how a SaaS company 
achieved a premium e..."&lt;/span&gt; &lt;span class="na"&gt;data-rh=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2024.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The title says 2026. The queries say 2026. The searcher's intent is 2026. But the meta description — the two lines that appear directly under the title in Google's results — says "reshaping SaaS valuation multiples in 2024."&lt;/p&gt;

&lt;p&gt;The blog automation wrote this post with a 2026-targeted title and H1 but generated the meta description from case study content that referenced 2024 data. Nobody caught the mismatch. The description is also truncated — it ends with "e..." cut mid-word — which is a separate readability problem on top of the year contradiction.&lt;/p&gt;

&lt;p&gt;A searcher types "saas valuation multiples 2026." They see a title that matches. They read the snippet. It says "2024." They click something else.&lt;/p&gt;

&lt;p&gt;That's the entire explanation for 56 impressions and zero clicks at position 2.5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #2: A structural bug lives in every blog post
&lt;/h2&gt;

&lt;p&gt;While I was in the HTML, I checked the H1 count. Curling the SaaS blog post and counting &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; opening tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl ... | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-oE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;h1[^&amp;gt;]*&amp;gt;'&lt;/span&gt; | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two H1 tags. I checked the business valuation formula post — same result, 2. I checked the IRR calculator tool page — 1. The double H1 lives in the blog template, not in tool pages.&lt;/p&gt;

&lt;p&gt;A page with two H1s sends mixed signals about what the primary topic is. It's not a crisis-level bug, but it compounds the other issues. If the meta description is wrong and the page has two H1s, Google has fewer reliable signals for what the page is actually about — and it's already chosen not to send clicks even from positions where it's ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #3: The og:title bug from week one is still there
&lt;/h2&gt;

&lt;p&gt;I reported a duplicate &lt;code&gt;og:title&lt;/code&gt; bug in the first post in this series. The static &lt;code&gt;index.html&lt;/code&gt; bakes in a generic site-wide og:title, and React Helmet adds a page-specific one on top. Two competing tags, every page.&lt;/p&gt;

&lt;p&gt;It's still there. I curled the homepage and the IRR calculator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Homepage&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl ... | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-cE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;meta property="og:title"'&lt;/span&gt;
2

&lt;span class="c"&gt;# IRR calculator&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl ... | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-cE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;meta property="og:title"'&lt;/span&gt;
2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't new information. But six weeks is a long time for a 15-minute fix to sit in a backlog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding #4: The automation improved pages ranked nowhere, ignored the one with actual signal
&lt;/h2&gt;

&lt;p&gt;This is the pattern that bothers me most.&lt;/p&gt;

&lt;p&gt;The daily routine picked six pages to improve this week. All startup-finance tools — IRR, Cap Table, Dilution, Vesting, Funding, Churn Rate. The routine added verified benchmarks and worked examples to each one. That content is now live. None of those pages appear in the 28-day GSC data with any meaningful traction.&lt;/p&gt;

&lt;p&gt;Meanwhile, the SaaS valuation blog post was sitting at position 2.5 for 8 impressions, position 3.0 for 5 more impressions, position 4.2 for 9 more — and its meta description had a year error in it that anyone would have caught in 30 seconds.&lt;/p&gt;

&lt;p&gt;The automation doesn't read GSC. It has a queue of pages to improve and it works through them in order. Whether a page has 1000 impressions or zero impressions doesn't affect which one gets picked next. The blog post with the broken metadata was never on the list, because the list is driven by a schedule, not by what's actually losing clicks right now.&lt;/p&gt;

&lt;p&gt;A human checking GSC once a week would have caught the year mismatch before the post published. The routine — running every night, producing clean commit messages, improving content by every objective measure — never looked at the output.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm going to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fix the meta description on the SaaS blog post&lt;/strong&gt; — change "2024" to "2026," fix the truncation. Five minutes. This is the highest-leverage fix available right now because the post is already ranking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the double H1 in the blog template&lt;/strong&gt; — this touches every blog post, but it's a one-file change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strip the static og:title from index.html&lt;/strong&gt; — this was overdue in week one. It's more overdue now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a GSC signal check to the automation queue&lt;/strong&gt; — before choosing the next page to improve, pull its 28-day impression count from GSC. Pages with zero impressions should wait. Pages with impressions but poor CTR should go first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit the remaining blog posts for year mismatches&lt;/strong&gt; — the automation publishes frequently. If one post has a wrong year in the description, others probably do too.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The uncomfortable lesson
&lt;/h2&gt;

&lt;p&gt;Automation is good at doing the thing it's programmed to do. It's not good at noticing when it's doing the wrong thing.&lt;/p&gt;

&lt;p&gt;The calendar routine delivered this week. Six pages improved, six clean commits, six sets of verified benchmarks added. From a process perspective it looks like progress. From a signal perspective, six pages were polished that Google hasn't surfaced to anyone — while a page Google was actively showing to searchers at positions 1–5 had a metadata mismatch that made every one of those impressions worthless.&lt;/p&gt;

&lt;p&gt;The fix for the year bug takes five minutes. The fix for the scheduling problem — teaching the routine to check whether a page has signal before picking it — is a morning of work. Neither fix is hard. Both required a human to look at GSC data and connect it to what the automation was doing.&lt;/p&gt;

&lt;p&gt;Running a content routine without a signal-feedback loop is the same bet as optimizing a conversion funnel without looking at where users drop off. You can improve every step in isolation and still move nothing.&lt;/p&gt;

&lt;p&gt;I'll fix the meta description today. The og:title fix and the blog template H1 are going in this week. The queue-prioritization change — routing automation effort toward pages that already have impressions — is the one I want to report back on in a month. Either the click data improves or it doesn't, and I'll say which.&lt;/p&gt;




&lt;p&gt;Running these experiments on &lt;a href="https://valuefy.app" rel="noopener noreferrer"&gt;valuefy.app&lt;/a&gt; and writing up what I find. If you're building programmatic SEO tooling, debugging a content automation that's technically working but not converting — or just hitting the same "impressions up, clicks flat" wall — drop a comment. I want to hear what the same data looks like from other projects.&lt;/p&gt;

&lt;p&gt;I also run &lt;a href="https://aimiten.fi" rel="noopener noreferrer"&gt;AImiten&lt;/a&gt;, where we build AI tooling for companies. This side project is where the ideas get stress-tested.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
