AI search work, built and checked with AI.
There are two sides to this work. One is making a site easy for ChatGPT, Perplexity, Gemini and Google AI Overviews to read, trust and cite. The other is the Claude Code workflows I build to run that work, with a person signing off on what ships.
What I do for AI search
A model can only cite a page it can read and trust. So the work starts with the parts that make a page easy to lift: clear structure, named entities and the answer up front.
- Structured data (JSON-LD) on the templates that matter, so each page says what it is in a form a crawler can't misread.
- Entity coverage: the services, people, places and products a page is about, named the way people actually ask for them.
- Answer-first content with numbers worth quoting. A model needs one sentence it can take on its own.
- Citation tracking. For each client's priority questions I log which sources ChatGPT, Perplexity, Gemini and AI Overviews cite, then close the gap page by page. How I measure it is below.
I won’t promise you a citation. Nobody controls what a model picks. What you can control is whether your page is the easiest one on the question to read, check and quote.
The same groundwork moves classic search too. For a dental clinic in Bali in 2026, Core Web Vitals fixes, schema, entity coverage and topic clusters for local and overseas patients lifted organic visibility by 30%. That is a Google number, not an AI one, and I keep the two apart in reporting.
I first brought this into a product team at Webnus, where I led growth marketing from 2019 to 2025: a GEO/AEO pilot run with the engineering and content teams across EMEA and EST time zones. Schema lives in templates, which belong to engineering, and structure lives in the writing, so neither team could do it alone.
How I measure AI visibility
Ask a model the same question twice and you can get two different lists. So a single screenshot of a citation proves very little, and a “rank in ChatGPT” isn’t a number I’ll report.
- A fixed, written set of prompts, built from the questions your buyers ask, not from your brand name.
- Each prompt run many times, and reported as a rate: how often you appear, and how often you're cited.
- Each engine tracked on its own. A result in Perplexity tells you little about AI Overviews.
- A baseline and a dated window before any change, so a lift can be put down to the work.
- First-party numbers next to it: AI Overviews and AI Mode impressions in Search Console, and AI referral sessions in GA4.
The repeated runs come from the same habit as the random-number test further down: one answer from a model is an anecdote, a few hundred are data.
My AI setup
I work AI-native every day, and the setup is built for checked output, not speed for its own sake. Every tool in it reads first, and asks before it writes.
Claude Code is the workbench.
Research, builds, audits and reporting all run here, from the terminal, with the project’s own rules loaded so every session starts from the same brief. OpenAI’s Codex CLI reviews the output.
Skills turn repeat work into a procedure.
I wrote a Google Ads set that covers the API connection, SKAG campaign builds, RSA copy checked against Google’s editorial rules, negative keywords, search-term clean-up, conversion tracking and ad assets. Alongside them I run a security audit on AI-built code, and pull real product screens before any interface work.
MCP connects it to real accounts.
An email server I built for Brevo, and the Google Ads API. Both show exactly what they will do, and wait for a yes.
Demand data comes before content.
Keyword Planner, Google Trends and Search Console are checked before an outline is written. The research behind this page was checked the same way.
What I build with Claude Code
Claude Code is where I build and check most of my work. Here is what it has built so far, with a screenshot of a working afternoon below.
- Production websites, end to end: this site and mersa.biz, my agency's site (Next.js on Cloudflare Workers).
- A shared blog engine with a local editor and live SEO checks, so both sites publish from one codebase.
- A client marketing audit skill for Mersa, and a community workflow across Reddit, LinkedIn, X and Threads with one human approval per batch.
- An MCP server in plain Node that gives Claude an email tool through Brevo. It shows the recipients, subject and body, and sends nothing until I say yes.
The rules I run it under
Three rules sit around all of it, whatever the tool.
Read first, write with approval.
Anything that goes live or spends ad money waits for a person’s yes, and the change is logged.
Show the sources.
Every workflow shows where its claims came from, so a reviewer checks the source and not the model’s confidence.
A second model reviews the first.
I use OpenAI’s Codex CLI to review what Claude builds: this site’s redesign, article outlines, keyword data, channel plans. Two models catch different blind spots.
Writing gets one more check. A written voice file and brand rules keep AI drafts sounding like a person, and every claim in a draft has to trace to a source. I published the method.
Testing how models behave
I asked Claude to pick a random number between 1 and 100, 221 times, across Haiku, Sonnet and Opus. Haiku only ever said 47 or 42. Sonnet said 47 in 92% of its answers, and Opus said 42 in 61%.
The chart went on r/dataisbeautiful from an account that had 6 karma five days earlier. 1 million views, 4.8k upvotes and 517 comments in about a day, with no ads and no link in the post.
It’s a small experiment, and I’d read it as one. It is also the habit behind the AI search work: ask the model, count the answers, then decide. Read the write-up.

Hiring for AI search? Let’s talk.
Email me the job description, or book thirty minutes now. You’ll hear back within one working day.
