Back to News & Insights
SEO September 28, 2026 · 8 min read

From Zero to Google's Top 10 in 25 Days: What Actually Worked for My SaaS

Launched August 31. Twenty-five days later Google was testing several pages on the first page — for spy irish domiciled, ireland domiciled qqq and a dozen others. Here is exactly what moved, what was noise, and the loop I run now.

From Zero to Google's Top 10 in 25 Days: What Actually Worked for My SaaS

I launched BorderFolio on August 31. Twenty-five days later Google was testing several of its pages on the first page of results.

Not for portfolio tracker. For much smaller and much more relevant searches — spy irish domiciled at position 9, ireland domiciled qqq at 9, depotauszug trade republic at 7, and one very specific query about a fund's ongoing charge at position 6.

That's a tiny dataset and I'm not claiming I won SEO in 25 days. But it was enough to answer the only question worth asking that early: had Google worked out what this site was about? It had.

The thing that got me there wasn't publishing more. It was that I stopped treating SEO as a publishing pipeline and started treating it as a control loop.

Most SEO advice describes an open loop. You publish, you hope, you publish again. There's no feedback term, so there's nothing to tune:

The important part isn't the arrows. It's that exactly one change is in flight at a time, and that the loop is allowed to output no change at all.

If you edit a title, add internal links and rewrite the intro in the same week, and the position moves, you've learned nothing. Three experiments, one subject, no control. Every engineer knows this and almost nobody applies it to their own marketing site. Build pages around decisions, not keywords

Before the loop can tell you anything, there has to be something for Google to classify.

BorderFolio is portfolio analytics for people who live in one country and hold funds domiciled in another. That gives a specific search surface: ETF domicile, dividend withholding, US estate-tax exposure, UCITS alternatives, broker statement imports.

I didn't target portfolio tracker. I targeted what someone types while actually stuck: What's the Irish-domiciled equivalent of QQQ? Is VWRA better than VT for a non-US investor? What's an Irish-domiciled alternative to SPY? Can I import my Interactive Brokers statement into a tracker?

Each page answers one decision. That matters for the loop specifically: a page answering one decision produces a clean signal. Google either matches it to that intent or it doesn't, and you can read the result. A 2,000-word page covering six topics produces mush that tells you nothing when it moves. Cluster, don't scatter

I didn't want Google to see 100 unrelated pages, so pages link to each other in a deliberate shape:

Hub links down, leaves link up and sideways, and everything links into the tax layer it depends on. It isn't clever, but it's the difference between 100 pages and one topic. Fix the boring things first

The sitemap, and an honest caveat. ~141 URLs submitted, 0 errors, 0 warnings. Worth being precise about what that report means: 141 submitted is not 141 indexed. Search Console's sitemap panel tells you what you handed over, not what Google decided to keep. Treating submission as indexation is the easiest way to think you're fine when you aren't.

Auth pages were getting indexed. app.borderfolio.app/login had picked up impressions at an average position around 9 — search traffic that can only bounce.

A Disallow hides the noindex. The URL then sits in the index with no snippet instead of dropping out. So the auth pages stay crawlable on purpose and the directive goes in the response:

A header rather than a per-page because it covers routes rendered client-side too. follow, not nofollow, so links back out still carry. Once Search Console shows them gone, then you can add the Disallow and stop the crawl as well.

Duplicate URL variants. Google had found both borderfolio.app/privacy.html and www.borderfolio.app/privacy for one document. Standardising on the apex host fixed half of it; the other half was in the server config:

Want to discuss this further?

Book a free strategy call with our team to see how these insights apply to your specific business goals.

Book a consultation