#011BuildingSession cost: $1.60

My site was invisible to AI. Six fixes, one afternoon.

Google could see my articles. It could not confirm I wrote them. Perplexity had no idea who I was. One Claude Code session changed both.

$1.60Session cost
3.0MTotal tokens
Claude Opus 4.6 + Haiku 4.5Model

I asked Claude to audit fieldnotes-ai.com for SEO and AI crawler visibility. What came back was uncomfortable.

The homepage had no structured data. Zero. Google could see the articles. It could not confirm that Nika Karliuchenko wrote them. Two different things.

The twitter:site handle pointed to an account that doesn't exist. Every time someone shared a Field Note on X, the card showed no author. I had been posting a lot, but still, the broken attribution link and I didn't know.

The OG image was missing from the homepage. LinkedIn previews were blank rectangles. The homepage was the one page I most needed to look good when shared.

And llms.txt didn't exist. Perplexity, ChatGPT with browsing, Claude web search, they all look for that file to understand a site's purpose and author before they cite it. I had robots.txt. I had a sitemap. I had no llms.txt.

What a live DOM audit actually finds

Not just theory. Claude opened the browser, read the rendered HTML, and counted.

Six problems:

The homepage was hiding four posts. A .slice(0, 5) in app/page.tsx was capping the recent list at five notes, so Google could not reach #001 through #004 from the homepage at all.

Note page titles read "Title | FieldNotes AI | FieldNotes AI." The layout template and the page component were both appending the site name.

The homepage OpenGraph block used a conditional spread. When Contentful's SEO field was empty, no images array existed at all, which wiped the layout fallback. No og:image.

The homepage had no JSON-LD. Note pages had BlogPosting schema. The homepage had nothing. Google could not connect my name to this site.

twitter:site was @nikakarl. That account does not exist.

llms.txt returned 404.

The fix I'm most pleased with

llms.txt could have been a static file in public/. I would have forgotten to update it every time I published a new note.

Instead it's a dynamic route at app/llms.txt/route.ts that fetches all notes from Contentful at request time. Same pattern as the sitemap. When Field Note #012 goes live, llms.txt updates automatically. Zero maintenance.

AI crawlers now get my name, my social links, every post title, every URL. All current. All without me touching anything.

What Planning Mode caught before it shipped

The JSON-LD Person schema had the wrong X URL. https://x.com/nikakarliuchenko — an account that doesn't exist. My actual handle is @nikaukraine.

Planning Mode read every affected file first, showed me the full diff for all six changes, and waited. I caught it before anything was written. Worth the extra thirty seconds every time. One line is wrong in structured data, and Google is building a knowledge graph around an account that leads nowhere.

The robots.txt decision

Training crawlers are now blocked. Retrieval crawlers are explicitly allowed.

GPTBot and anthropic-ai: disallow. OAI-SearchBot and Claude-SearchBot: allow.

The distinction matters. Perplexity can cite me. GPTBot cannot train on me. Content is either intellectual property or it isn't. I decided it is.

The numbers

$1.60. 2.9 million tokens. One afternoon.

Seven files changed across two commits. Verified live in the browser before closing the laptop. Google Search Console indexing request submitted immediately after.

The homepage now has Person schema, WebSite schema, a working OG image, and a twitter handle that resolves to an actual account.

If you have been assuming your site is discoverable: check. The assumption is usually wrong.