← Blog

Jul 31, 2026

Making myself legible to machines

More and more, people don’t find a specialist by scrolling a results page. They ask an assistant — “who can help me get an LLM pipeline into production?” — and read the three names it gives back. I wanted to know what it would take to be one of those names.

So I started where any engineer should: by checking what my own site actually serves. It was not what I thought.

The file I never wrote

My repository has a robots.txt that says, in full, allow everyone. But the file being served to the internet was several dozen lines long, and I had written none of it. My CDN was injecting a “managed content” block above my own rules:

User-agent: *
Content-Signal: search=yes, ai-train=no, use=reference

User-agent: ClaudeBot        Disallow: /
User-agent: GPTBot           Disallow: /
User-agent: Google-Extended  Disallow: /
User-agent: CCBot            Disallow: /

This is a sensible default for a publisher who sells subscriptions. For someone whose entire business case is be findable, it was a door I had bolted without noticing.

The detail that matters: in robots.txt, a rule for a named user-agent beats the wildcard group. My User-agent: * / Allow: / sat right below the block and did precisely nothing for the bots named above them. Two files, same path, and the one I had written was the one being ignored.

What each line was actually costing

It’s worth being precise, because these crawlers do not all do the same job and the internet is full of confident nonsense about them.

Google-Extended was the expensive one. It governs whether your content can be used for Gemini training and grounding. Notably, it does not affect Google Search ranking or AI Overviews — those run off plain Googlebot. So blocking it is pure downside if what you want is to be quoted by Gemini: all of the cost, none of the protection.

GPTBot covers OpenAI’s training crawl. Interestingly, the agents that serve ChatGPT’s live browsing — OAI-SearchBot and ChatGPT-User — were never in the block list. That was the one channel still reaching me.

ClaudeBot was blocked outright.

I removed the managed block entirely. My own robots.txt is served now, and it says what I always meant it to say.

Yes, including the training crawlers

I let the training bots in deliberately, and I want to be straight about the trade.

The argument for blocking them is real: a model trained on your writing can reproduce your ideas without sending anyone back to you. For a newspaper, that’s an existential problem.

For me it’s the opposite problem. I am not trying to protect a back catalogue — I’m trying to become a known quantity. There is a meaningful difference between a model that can retrieve a page about me when someone asks, and a model that simply knows who Christopher Manzano is, the way it knows any other public practitioner. The first requires me to win a retrieval race every single time. The second is durable.

I write things worth being trained on. Blocking that seemed like optimising for a risk I don’t have at the expense of the outcome I want.

Why the site was never the main lever

The more uncomfortable finding was that fixing my own site is table stakes, not strategy.

When these systems answer a recommend me someone question, the pages they pull from are overwhelmingly third-party: roundups, forum threads, conference listings, editorial reviews. In one sample of tens of thousands of URLs cited for recommendation-style prompts, comfortably over 40% were “best of” lists. Your own homepage is the least persuasive document in the room, because everybody’s homepage says they’re excellent.

That reframes the work. “Be recommended by an AI” is not a metadata problem. It is the old problem — be the person other people mention — with a new reader. The lever is a citable thesis with a DOI, substantive answers in the places practitioners actually argue, talks with a speaker page carrying my name, repos whose READMEs point home.

The site’s job is narrower than I assumed: when something does send a crawler my way, be unambiguous. State plainly who I am, what I build, for whom, and where. Models extract sentences, not impressions. A hero line about joining the fourth industrial revolution is a slogan; “Data Scientist and AI Engineer in Madrid who designs, builds and operates production AI systems” is a fact something can repeat.

One thing I skipped

llms.txt — the proposed convention for handing models a curated summary of your site. I read the field data before implementing it: across hundreds of millions of AI bot requests, the file is fetched a vanishingly small number of times. The major crawlers just read your HTML. It has found a genuine home in developer documentation, where coding assistants are pointed at it directly, but as a visibility play it is currently cargo cult. I’d rather spend the hour on a repo README that links back here.

While I was in there

Two smaller repairs, both the kind that hide for months. www.manapple.dev had no DNS record at all — the apex worked, so I had never typed the other one. It now resolves and issues a permanent redirect to the canonical apex, which keeps the address bar honest and avoids the site competing with itself for its own name.

The pattern behind all three fixes is the same, and it’s the reason I run my own infrastructure in the first place: the config you wrote and the config being served are different objects until you check. I only found the crawler block by requesting my own robots.txt over the public internet, the way a crawler does, instead of trusting the file in my editor.

That’s a habit, not a task. Ask the system what it thinks it’s doing. It will occasionally tell you something you’d rather not hear.