I launched Borderfolio on August 31. Twenty-five days later, Google was already testing several pages from the site on the first page of search results.
Not for huge keywords like "portfolio tracker." Instead, I started seeing very specific queries:
Some pages were appearing around positions 5--10. The numbers were tiny. A page getting five impressions at position 6 is obviously not the same thing as ranking #6 for a keyword with 10,000 searches per month.
But that wasn't the interesting part. The interesting part was that Google had started telling me how it understood my product.
So instead of treating SEO as:
keyword research → write articles → wait
I started treating it more like an engineering feedback loop:
Search Console → telemetry → hypothesis → one change → measure again
And eventually I automated most of that loop.
I'm building Borderfolio, a portfolio analytics product for international investors. It focuses heavily on problems that appear when you're a non-US investor holding US or Irish-domiciled ETFs:
That gave me a relatively narrow search surface. Trying to compete for portfolio tracker wouldn't make much sense for a brand-new domain.
But someone searching QQQ equivalent in Ireland or SPY Irish domiciled alternative is asking a much more specific question --- and it's directly related to what the product does. So those became the kinds of problems I built pages around.
One of my first clusters was:
US ETF → Irish UCITS alternative
For example:
Then I built supporting content around ETF domicile, withholding taxes, estate tax and broker imports. The important distinction was that I wasn't generating generic 2,000-word articles because a keyword tool showed some search volume.
Each page represented a real question an international investor could have. Then I connected the pages.
Instead of 50 isolated SEO pages, the structure became roughly:
US ETFs vs Irish UCITS
↓
QQQ / SPY / VOO / VT / SCHD
↓
specific UCITS alternatives
↓
tax / withholding / domicile
This also gave Google considerably more context about what the site was about.
This is where the process became much more interesting. I connected the Borderfolio Google Search Console property to an MCP-compatible data source through Windsor.ai.
That gave ChatGPT access to the Search Console dimensions and metrics I actually cared about:
Instead of opening Search Console, changing filters and manually comparing pages every day, I could ask questions like:
Which pages did Google start testing this week?
Or:
Find pages ranking between positions 5 and 15 that are getting impressions but no clicks.
Or:
What new queries started appearing for my QQQ page?
Or even:
Which pages should I explicitly NOT change because Google appears to be testing them?
That last question turned out to be surprisingly important.
I then created a scheduled task in ChatGPT that runs once per day. Its job is essentially:
The important part is step 6. I specifically don't want the system inventing SEO work just because it runs every day.
The output can legitimately be:
No change today. Google is already testing this page and the sample is too small.
That prevents the automation from becoming an AI-powered content churn machine.
The workflow now looks like this:
Google Search Console
↓
MCP
↓
ChatGPT
↓
detect signal
↓
one change
↓
wait
↓
measure again
Compare that with a surprisingly common SEO workflow:
publish
↓
publish more
↓
change five titles
↓
publish another 20 AI articles
↓
rankings move
↓
have absolutely no idea why
I prefer the first one.
I wrote an article comparing VT and VWRA. The usual comparison starts with TER. VT is cheaper.
But for an international investor, the decision can also involve fund domicile, dividend withholding, estate-tax exposure, accumulating vs distributing structures and broker availability. Within days, Google started testing the article around the first page on a tiny number of impressions.
My first instinct could have been: Great. Let's optimize it. Change the title. Rewrite the introduction. Add another 1,500 words. Change the H1.
Instead, I did nothing.
If Google has just moved a brand-new page from nowhere to position 5--10, changing several variables immediately destroys the experiment. So I adopted a rule:
When a new page is already moving strongly on a tiny sample, don't optimize the signal away.
Wait for more observations.
One of my original ideas was creating country-specific withholding-tax pages. And they generated impressions. A lot of impressions relative to the age of the site. Some queries accumulated hundreds.
Initially that looked great. Then I looked at average position.
Many were sitting around positions 50--70. And the queries themselves were broad:
That's very different from someone searching specifically about US dividend withholding as an investor resident in one of those countries.
The lesson was simple: Impressions aren't success.
I'd rather see:
8 relevant impressions
position 6
than:
200 impressions
position 60
The first tells me Google may have found the correct audience. The second may simply mean Google is experimenting with semantic relevance.
So I stopped expanding the country-page strategy.
Something else happened. Search Console started revealing queries I hadn't explicitly targeted.
For example, one SPY-related page started appearing for a very specific search around SPYL's 0.03% ongoing charge. That immediately suggested another comparison users might care about:
SPYL vs VUAA
That's much more useful than asking an LLM:
Give me 100 SEO article ideas for an investing SaaS.
The content idea comes from observable search behavior. Google has already tested the domain against that concept. The next page is therefore a hypothesis based on telemetry rather than brainstorming.
The MCP workflow didn't replace basic technical SEO. I still had to fix boring things.
Google discovered authentication URLs such as the Borderfolio login page. Those aren't useful search results, so authentication pages received:
<meta name="robots" content="noindex, follow">
I also standardized canonical URLs and redirects around the non-www domain. And I cleaned up inconsistencies between product pages after functionality changed.
The sitemap currently contains more than 140 URLs and Search Console reports no sitemap errors or warnings. But there's an important distinction:
submitted != indexed
A sitemap tells Google which URLs exist. It doesn't force Google to index them.
I don't have enough data yet to pretend these are universal SEO laws. They're simply the rules I'm currently using for this experiment.
If a new page suddenly appears around position 5 with only a handful of impressions:
Do nothing.
If impressions continue growing while the page remains around positions 5--10 but CTR stays at zero:
The title/snippet may become a reasonable experiment.
If a page is sitting around position 60:
CTR optimization probably isn't the main problem.
If Google repeatedly exposes a new high-intent query closely related to the product:
Consider building deeper content around that intent.
And most importantly:
Change one meaningful variable at a time.
Otherwise I'm collecting data without learning anything from it.
This is probably why I've enjoyed this approach. I'm a backend engineer. I naturally think in terms of telemetry and feedback loops.
With this setup, SEO starts looking surprisingly familiar:
observation
→ hypothesis
→ experiment
→ measurement
→ iteration
Search Console becomes telemetry. MCP becomes the data interface. ChatGPT becomes the analysis layer. The scheduled task becomes the recurring observer.
And the human still decides whether an experiment actually makes sense.
That is very different from using AI to generate 500 pages and hoping something ranks.
Borderfolio does not have meaningful organic scale yet. Clicks are still tiny. Samples are small. Rankings will move. Some first-page positions may disappear entirely.
But within the first month Google had already:
That's enough information to iterate.
My goal for month two isn't publish more. It's learn faster from what Google is already telling me.
The loop is now:
Search Console
→ concrete signal
→ one change
→ measure
→ repeat
And sometimes the most useful result from the entire automated system is simply:
Don't change anything today.