I built a GEO tool. Then I checked my own site.

This one hurt.

August 11, 20265 min read
GEOSEORenderingThings I Got Wrong

I built a tool that checks how a company's content shows up inside large language models. GEO, generative engine optimisation, the thing everybody started selling roughly twenty minutes ago.

Then someone asked a completely fair question about my own portfolio, and I did the thing I tell other people to do. Ctrl+U. View source.

The headline on my site says "I started in marketing. Ended up building AI products." I searched the source for "I started in marketing".

Not there.


Great. Love that for me.

My site runs on TanStack Start and renders client-side. The browser gets a nearly empty shell, runs the JavaScript, fetches what it needs, builds the page. Humans see a finished website. A crawler reading the raw document sees a very confident div.

So: woman sells AI visibility. Woman links her own GEO tool from her own portfolio. Woman's portfolio is invisible to the exact systems in question.

I sat with that one for a bit.


What I didn't do

The proper fix is server-side rendering. Rebuild in Next.js, or convert to a plain SPA with prerendering, or write a custom build that goes around the framework's Cloudflare wrapper.

I looked at all three honestly. The full conversion touches around twenty files, rewrites every route, breaks the preview I work in daily, and throws away the per-route SEO setup until I rebuild it with something else. The custom build is fragile every time the wrapper updates.

My portfolio has an interactive quiz, hover jokes and easter eggs I am unreasonably attached to. Trading those for crawler friendliness, on the site whose entire job is to make a human recruiter like me, is a bad deal. Crawlers have never once hired anybody.

So I didn't rebuild it. I want to be clear about that, because the tidy version of this story ends with a heroic migration and mine doesn't.


What I did instead

llms.txt, a plain text file describing who I am, what I've built and what I write about. Readable without executing anything.

robots.txt, explicitly allowing GPTBot, ClaudeBot, PerplexityBot and friends rather than hoping the defaults are generous.

sitemap.xml, every page in it.

A JSON-LD Person schema in the head. Name, role, what I know about, where I work, what I studied. Static. In the document. No JavaScript required.

Open Graph and meta tags that actually describe the page instead of describing nothing.

One evening. Fixed the part that was fixable.


The honest bit

This is not a complete solution and I'm not going to pretend it is. My page content still lives behind JavaScript. A crawler still gets a thin document. What it gets now on top of that is a clear static description of who this person is and a map to everything else.

That's a compromise. I'd rather name it than sell it as a win.


The thing worth stealing

Before you rewrite a single line for AI visibility, open your own site, hit Ctrl+U and search for a sentence that should obviously be there.

If it isn't in the document, nothing you write next matters yet.


I found that out after building a tool to find it out for other people. Which is either embarrassing or good marketing, depending on how the week is going.