✶Subscribe
Joseph Lapin.
A man seen from behind at the left edge of the frame holds up a single written page; fine gold constellation lines fan out from the page across a deep-navy night field to dozens of small lit windows in distant houses, none of them connected back; pen-and-ink crosshatch on cream paper

Generative Engine Optimization for a Personal Site: What Two Months Taught Me

by Joseph Lapin · Fernandina Beach, Florida
From the Workbench  ·  Field Guide
October 2026

On October 16, eighty times in one day, an AI assistant opened a page on my site to answer a question somebody had typed into a chat window. Nobody clicked through. No one landed on the homepage, read the about page, or signed up for the newsletter. I know the reads happened because the site wrote each one down. I know almost nothing about the people on the other end except what they wanted: how to keep Claude Code sessions alive on a machine that never sleeps, how to talk to a terminal out loud, which image model to use for what.

I wrote for newspapers and magazines for a decade. In print, I had no idea who read a piece, or whether anyone did. You handed it to an editor, it went out, and the silence that came back was the job. The web fixed that, for a while: analytics tell me who visits, from where, and for how long. But a read inside a chat window is not a visit. The assistant opens the page, takes what it needs, and the person never arrives, so the analytics never see them. That kind of reading had gone back to being as invisible as print, until I started logging it.

The numbers are small. They are also the clearest signal I have that the thing people call GEO, generative engine optimization, is real, measurable, and already working on a site with my name on it and no budget behind it.

What follows is the two-month version. The tactics I actually ran, in the order I ran them, with dates. What each one moved and what it did not. How I measure whether the assistants are reading me. And why almost nobody clicks, which turns out to be the point rather than the problem. Small site, small sample. I will say so again when a number is softer than it looks.

The thirty-second answer

✶ The thirty-second answer

The AI answer is the new page one, and it is assembled from pages the model can read, trust, and date. So the work is making your pages easy to read, honest about when they were written, and shaped like answers to questions people ask. On my site the four things that moved the needle were visible dates, a questions-and-answers block with the schema behind it, links between my own pages, and an open door for every AI crawler. The thing that did not move is clicks, and if you measure GEO by clicks you will quit right as it starts working.

Two months in: Google’s index of the site nearly tripled, and average search position went from the 40s to single digits. Daily appearances inside Google’s AI answers ran about six times higher the week after I dated every guide. On the server side, Claude reads my site more than ChatGPT does. Everything below is the receipts.

What I mean by GEO

When you ask ChatGPT, Claude, Perplexity, or Google’s AI mode a question, the answer is not pulled from one page. The assistant runs a search, opens a handful of pages, and writes a reply from what it found. Sometimes it cites those pages. Often it just absorbs them. Either way, for that one question, those few pages are the whole internet.

Generative engine optimization is the work of being one of those pages. It overlaps with search engine optimization, because the assistants mostly search before they read, but the goal is different. Old SEO wanted the click. GEO wants the read, and the read often ends inside the chat.

I am a writer. The site went up in the summer of 2026 to hold the essays and the newsletter, and the field guides about my own AI practice came along as proof of work. Running a GEO experiment was never the plan. But I run the tokens myself, I keep logs, and by September I had a question I could not stop asking: are the machines reading me, and how would I know?

What I did, in order

Every one of these shipped on the date listed. Where a number is from a screenshot read by eye rather than an export, I say so.

September 5: open the door and hand over a map

The first move was the least glamorous. The site’s robots file explicitly welcomes every AI crawler I could name: OpenAI’s three agents, Anthropic’s, Perplexity’s, Google’s extended crawler, Apple’s, Common Crawl. Most sites either block them by default or never think about it. I wanted it in writing that the door was open.

The same day I published two files that act as a map. One is a standard RSS feed, rebuilt from every page’s metadata whenever a post ships, so anything that reads feeds sees new work within the hour. The other is a plain-text file at the root of the site, called llms.txt, that describes who I am, what the site holds, and lists every page with one sentence each. The idea comes from a proposed convention for giving language models a short, readable index of a site. Nobody is required to honor it. It cost an evening.

I also registered the site with Bing’s webmaster tools, because ChatGPT’s search runs on Bing, submitted the sitemap and the feed there, and set up IndexNow, which is a way of telling Bing directly, by a single request, that a URL is new or changed. From that day on, every time a post shipped, a script pinged the indexes with its address. The first ping covered 48 URLs and came back accepted.

What it moved: nothing you could see for a week. Bing’s data starts September 7. What it did: it made everything after it measurable.

September 5 to 20: fix who the web thought I was

In early September, a search for my own name, the same search an assistant runs before it answers a question about a person, turned up pages from the old domain and a bio years out of date. Salon, a literary magazine, and a Long Beach newspaper’s author page all outranked the site I had spent the summer building. The web’s best guess at who I was had stopped about a decade back.

That is the entity problem, and it sits under everything else in GEO. The assistants do not just read your page. They decide whether your page is the page of the person they think you are. If the web’s model of you is a decade old, your new work is a stranger’s.

The fix is slow and unglamorous. The homepage and about page got a structured block that says, in a format machines read, that this Joseph Lapin is the same one as the author on the Salon, Fast Company, LA Weekly, Village Voice, and Long Beach Post pages. The same block ties him to LinkedIn and Instagram and X. A bylines strip went onto the about page with the logos linked to the real pieces. The LinkedIn headline and about section were rewritten to match the framing on the site, and so was the newsletter platform’s bio. My agency’s site links to the personal site by name. Bios I could not edit, on old author pages, I wrote outreach notes for and mostly have not sent.

What it moved: Google. By September 20, a search for my bare name put the new site in the first two results, where a month earlier it had been old-domain pages and a stale bio. What it did not move: the old author pages themselves, which still carry the old bio and still sit out there for anything that reads them.

September 12: the audit, and the backlink myth

A week in I did a proper audit: every page, every tag, both consoles. Most of it was already solid, because the site had been built with the machines in mind. Every page had unique titles and descriptions, the structured data was clean, redirects from the old domain worked.

The baseline, from Bing, was humbling. 63 pages indexed. Five impressions. Zero clicks. Two citations in Copilot. One other website on earth linking to mine.

Google was worse in the way that mattered. Of roughly 72 pages, Google had indexed 33. Fourteen it knew about and had never bothered to crawl. When I looked at which ones, the pattern was obvious: the three oldest profiles in my interview series and a handful of migrated essays had no inbound links from anywhere on my own site. They were reachable from the sitemap and nowhere else. Google had the addresses and no reason to visit.

The audit also killed a belief I had been carrying. I assumed I had lost years of backlinks when I moved domains. The old site’s console said it had 437 external links. When I looked closer, 435 of those were redirect hops from my own old domain. The old site, in twelve years, had earned 28 real links from other websites. The 7,796 links that made it feel well connected were all internal, the way any old WordPress blog links to itself. And the newspapers that ran my work had never linked to my personal site at all. The thing I thought I had lost had never existed.

What it moved: my plan. I stopped thinking about backlinks I could not get and started thinking about links I controlled.

September 13: answer the questions people actually ask

The next day I shipped the biggest single change of the two months, and it was mostly about structure, not new writing.

Every field guide got two blocks. At the top, a short list of key takeaways, the five or six sentences you would want if you were only going to read five or six. At the bottom, a section called “Questions I get asked,” with the actual questions people ask me about that topic and real answers, each one a paragraph. Behind the questions sits FAQPage schema, which is a way of telling a machine, in a format it already understands, that these are questions and these are their answers.

I did it because an assistant answering a question is looking for exactly that shape: a question it recognizes, an answer it can lift. I would rather write the answer myself than have one assembled from my paragraphs by a model in a hurry.

The same deploy put 60 links between my own pages, across 41 posts and profiles, so that the orphans from the audit each had four to six ways in. It added exact redirects for eleven old essay addresses that had been dumping readers at the blog index. It put a modified date on 31 pages that had none and made the sitemap agree with the pages, because a sitemap that disagrees with the page it points to is noise, and the crawlers learn to ignore noise. And it pinged the index with 21 changed addresses.

What it moved: the index first. Google’s count went from 33 pages to 82 by October 8 and 93 by October 23, which is the “nearly tripled” in the headline numbers. Comparing the four weeks after this day with the four weeks before, average search position went from 42 to 8.5. Impressions per day a little more than doubled. The line for Google’s AI answers, flat since August, started to lift in the days after this deploy, though it stayed low: a few appearances a day, read off a chart by eye.

What it did not move: clicks. Under one a day before, under one a day after.

October 12: date everything, visibly

Thirteen of the guides got a refresh in one evening. Each one received a visible line under the title, “Updated October 12, 2026,” and a short italic note under that saying what changed and when. Inside the text, every relative time became an absolute one: “last month” became “in August 2026,” “this week’s essay” became the essay’s name and date. Each guide got one fresh, verifiable number, like how many skills and memory files my own setup holds on that date. The modified dates in the page’s metadata and in the sitemap were set to match, and the llms.txt line for each guide got an “updated” clause.

I did it because I had noticed, reading my own guides as a stranger would, that I could not tell when they were true. A guide about running AI tools that does not say when it was written is a guide about a tool that no longer exists. The assistants seem to agree.

What it moved: everything, and fast. The day after the refresh, the line for Google’s AI answers jumped. The week after ran about six times the week before, from a few appearances a day to a couple of dozen, with the single biggest day more than ten times the old daily average. All of that is read by eye off the console’s chart, so treat the multiple as a shape, not a decimal. Then it settled into a higher band than before and has stayed there.

A line chart on a navy field: daily appearances of josephlapin.com inside Google's AI answers, flat through August and early September, a slow lift after September 13, then a sharp spike in the days after October 12, annotated with a dashed line labeled "Every guide dated Updated"

The heartbeat. Daily appearances inside Google’s AI answers, August to October, indexed to the week before the October 12 refresh. The dashed line is the day every guide got a visible “Updated” date.

Five pages carry 78% of those appearances, and all five are guides about running Claude Code: the voice-dictation guide, the Higgsfield guide, the multiple-sessions guide, the Mac mini guide, and the Claude Code versus Cowork guide. The homepage, the page with my name and face on it, accounts for 5 of 287. The assistants are not reading my site to find out who I am. They are reading it because somebody asked a question I had answered.

October 15: build my own scoreboard

Google reports when my pages appear in its AI answers. OpenAI and Anthropic report nothing. There is no console where you learn whether ChatGPT read your page to answer somebody’s question. So I built the closest thing I could.

When an assistant fetches a page live, in the middle of a chat, to answer the person typing, it announces itself in the request. ChatGPT’s live reader is called ChatGPT-User. Anthropic’s is Claude-User. Perplexity and DuckDuckGo have their own. The search crawlers and training crawlers from the same companies have different names again. So a small function now runs in front of every page on the site, reads that name, and if it is one of the assistants, writes down the day, the agent, which kind of agent it is, and the page. Nothing else is stored. Human visitors are never logged; the check returns before anything is written. A script turns the log into a report.

The whole thing took an evening in Claude Code, which is where every script on this site gets written, by me asking for it in sentences. It went live October 15 and the counts started from zero.

Here is the report for the first ten days, run this morning, trimmed to what matters:

~/me
AI fetches, 2026-10-15 to 2026-10-24 Live reads for someone's question: Claude-User 104 ChatGPT-User 72 DuckAssistBot 36 Perplexity-User 22 Crawlers (search + training): ClaudeBot training 302 OAI-SearchBot search 205 GPTBot training 111 PerplexityBot search 72 Claude-SearchBot search 35 Pages read live, most first: 30 Anthropic /blog/mac-mini-claude-code/ 15 Anthropic /blog/talk-to-your-claude-code/ 14 OpenAI /blog/higgsfield-claude-code/ 10 OpenAI / 10 Anthropic /blog/manage-multiple-claude-code-sessions/

Two hundred and thirty-four times in ten days, an assistant opened one of my pages to answer a live question. Claude did 44% of that reading, ChatGPT 31%, DuckDuckGo and Perplexity the rest. The same four guides again. And underneath the live reads, the crawlers: Anthropic’s training crawler alone touched the site 302 times in ten days, OpenAI’s search crawler 205. Every one of those is the model’s idea of me getting a little more current.

The counts are spiky. Eighty reads on October 16, seven on October 24 so far. A user agent can be faked, and I am sure some of this is somebody’s script wearing a costume. It is a signal, not an audit. It is also the only signal of its kind I have, and ten days ago I had none.

Four horizontal gold bars on a navy field, labeled Claude 44%, ChatGPT 31%, DuckDuckGo 15%, Perplexity 9%, under the heading Share of live reads, October 15 to 24

Who is reading. Share of live reads, an assistant opening a page to answer someone’s question, in the first ten days of the log. Claude reads my site more than ChatGPT does.

What moved and what did not

TacticShippedWhat it movedWhat it did not
Robots open to every AI crawler, feed, llms.txtSep 5Made everything after it measurableNothing visible on its own
Bing registration, IndexNow ping on every shipSep 5Bing index (63 pages by Sep 12)Bing impressions: five in the first week
Entity block, bylines, matching biosSep 5 to 20Google: new site to the top two results for my nameThe old author pages, which still carry the old bio
Takeaways + FAQ + FAQPage schema, 60 internal links, exact redirects, synced datesSep 13Google index 33 to 93 in six weeks; position 42 to 8.5; impressions per day doubled; AI answers beganClicks: under one a day, before and after
Visible “Updated” dateline and note on 13 guidesOct 12AI-answer appearances about 6x the week afterHomepage still invisible to the assistants (5 of 287)
AI fetch logOct 15A scoreboard for ChatGPT and Claude, where there was noneNothing. It only watches

Two things stayed quiet across the whole period, and I want to list them because a scoreboard that reads zero is still a scoreboard. Bing’s own report of citations in Copilot has had nothing new to say since the two it showed in September. And the channel I built in analytics to catch visitors referred by an assistant, the ones who ask ChatGPT and then click the link it gives them, has nothing to report. The reads are happening. The clicks from the reads are not. Hold that thought.

How I know if the assistants are reading me

I check five places. None of them agrees with the others, and together they are the picture.

  1. Google Search Console, the Generative AI features report. Google-only. Counts the days a page of yours appears inside an AI answer or AI mode. This is the chart with the heartbeat. Treat the daily numbers as a shape; the console draws a chart, and I read it by eye.
  2. Google Search Console, the ordinary search report. Impressions, clicks, average position, and the queries. The queries are the gold: they tell you which questions you are already an answer to.
  3. Bing Webmaster Tools, the AI Performance report. The only first-party citation count outside Google, for Copilot. ChatGPT searches through Bing, so Bing’s index is upstream of ChatGPT whether or not the report says so.
  4. The site’s own fetch log. Above. The only thing I have for ChatGPT and Claude that is not a guess.
  5. The analytics channel for AI referrals. A custom grouping that files any visitor arriving from an assistant under one name. Mine reads near zero. That is data too.

Almost nobody clicks, and that is the point

A page with my name on it turns an impression into a click about 11% of the time. The guides, the pages doing all the work above, turn an impression into a click less than 1% of the time. Over three months, the three guides with the most impressions earned seven clicks between them.

Seen through the old dashboard, that is a disaster. Thousands of impressions, single-digit clicks, a bounce rate you would not show a client.

Seen from where I sit, it is the whole thesis in one number. The person asked a question. The assistant read my guide, built the answer, and gave it to them. The reader got what they came for without leaving the chat, and the assistant got it from me. The transaction completed. It just did not route through my server, and nobody will ever send me an invoice for it.

If you measure generative engine optimization by traffic, you will conclude it is not working and stop right as it starts to. The guides are being read more than anything I have ever published, by a wider audience than the newsletter will see this year, and the analytics say nothing happened.

Why does it matter, if nobody arrives? Two reasons, and they are the same mechanism.

The first is the answer itself. When someone asks how to keep Claude Code sessions alive across machines, the reply is built from a handful of sources. You are either one of them or, for that question, you do not exist. Being in the handful is the new page one, and there is no page two.

The second is slower. Every time a model reads a page of yours to answer someone, its idea of who you are gets a little more current. The reads in the log and the stale author pages from September are two ends of the same wire. Citation and reputation are not two goals. They are one.

What I expect to happen next

Fewer clicks, better ones. The person who arrives after an assistant has already read my guide to them is not browsing. They came for the name.

Branded searches rising while guide traffic stays flat. The guide gets consumed in place; the name is what travels. If I am right, the name queries in the console should climb through the winter while the guide clicks stay where they are, at a handful a week.

And the email. The one that says, “I asked ChatGPT how to do this and it mentioned you.” That is the metric I am watching for, and it is the one no dashboard I own can see.

I also expect the homepage to stay invisible to the assistants, and I have made my peace with it. Five of 287 is not a bug. Assistants read answers, not brands. The brand gets built sideways, one answered question at a time, which is more or less how I would want it built anyway.

If you have a small site and an evening

The order matters more than the parts, and the whole list is free.

  1. Open the door. Allow the AI crawlers by name in your robots file. Check that you are not blocking them by accident through a plugin or a host default. If you have an argument for blocking them, that is a different essay; I am not making it here.
  2. Date everything, and make the dates true. A visible published date, a visible updated date when you revise, and no “last week” or “this year” inside the text. The machine reading you has no idea what day you wrote it. Tell it.
  3. Answer the questions out loud. On every page that teaches something, add the questions people actually ask you, in their words, with a paragraph each. Put FAQ schema behind it if you can. A plain list is better than nothing.
  4. Link your own pages to each other. Every page needs more than one way in. The orphans on my site were not penalized; they were simply never visited.
  5. Give them a map. A feed, a sitemap with honest modified dates, an llms.txt file that says who you are and lists what you have. Register with Bing as well as Google, because ChatGPT lives downstream of Bing.
  6. Fix who the web thinks you are. Make every bio you control say the same thing and link to the same place. The assistants decide whether you are you before they decide whether to cite you.
  7. Build or find a scoreboard that is not clicks. The AI features report in Search Console, Bing’s AI Performance, a log of assistant fetches if you can run a few lines of code on your host. If you only watch traffic, you will quit.

What I would skip: anything sold as a GEO tool that promises citations by the month. The signals above cost nothing and the sample is yours. Buy the dashboard once the free one has shown you something you cannot see without it.

A stranger seen from behind at a kitchen table at night, one lamp on, a phone in their hands; a single fine gold constellation line comes down out of a deep-navy sky through the window and into the phone; pen-and-ink crosshatch on cream
Somebody else’s kitchen table. A question typed at night, and one line of light coming back with an answer in it.

I keep going back to the day the log went live, because I expected it to read zero for a week and it did not. Nine reads the first night. Eighty the next day. Somewhere out there, a person I will never meet asked a machine a question at their own kitchen table, and the machine went and read something I wrote in mine, and handed it back to them in its own words. No click, no name, no email. Just a line in a log that says it happened.

I did not build the guides to be clicked. I built them to be read. Being read is the new being found, and for the first time in my life as a writer, I can watch it happen.

One essay, every Sunday morning, on making a life and a living while the machines learn to do both.

Questions I get asked

What is generative engine optimization, in plain words?

It is the work of being one of the pages an AI assistant reads when it answers somebody’s question. ChatGPT, Claude, Perplexity, and Google’s AI mode search first, open a few pages, and write a reply from them. Classic SEO wanted the click. GEO wants the read, and the read usually ends inside the chat, so you measure it differently.

Is GEO different from SEO, or the same work with a new name?

Mostly the same work, aimed differently. The assistants search before they read, so ranking still matters, and everything that makes a page easy for Google to index helps. What GEO adds is a bias toward pages that look like answers: dated, structured as questions and answers, consistent about who wrote them, and open to the AI crawlers. On my site those four things did more in two months than anything I had done for traditional search.

How do you know if ChatGPT or Claude is reading your site?

Neither company publishes a report, so I log it. When an assistant fetches a page live to answer a question, it identifies itself in the request, as ChatGPT-User or Claude-User, for example. A small function in front of my pages writes down the day, the agent, and the page, nothing else, and never logs human visitors. In the first ten days it recorded 234 live reads, 44% of them by Claude and 31% by ChatGPT, almost all on four guides about running Claude Code.

Why did dating the guides make such a difference?

A guide about AI tools that does not say when it was written is a guide about a tool that may no longer exist, and the assistants seem to weigh that. On October 12, 2026 I added a visible “Updated” line and a note about what changed to thirteen guides, made every relative date absolute, and set the page’s modified date and the sitemap to agree. The week after, the site’s daily appearances inside Google’s AI answers ran about six times the week before, read by eye off the Search Console chart.

Should I block AI crawlers to protect my writing?

That is a real argument and I respect people who make it. I made the opposite call for the writing on this site. I want the assistants to read it, because for the questions my guides answer, the assistant’s reply is where the reader is, and being absent from it is being absent. The essays and the newsletter are a different kind of work, and I would think about them differently if the question were about licensing rather than citation.

If nobody clicks, how does any of this pay off?

Two ways, and they are the same mechanism. First, for the question that was asked, you were the answer, and the person now knows a name they did not know. Second, every live read updates the model’s idea of who you are, which, over time, outweighs the stale bios still sitting on old author pages. What I expect to see is fewer, better clicks, branded searches rising while guide traffic stays flat, and eventually the email that says “I asked ChatGPT and it mentioned you.”

What should a small site do first?

In this order: allow the AI crawlers in your robots file; put a visible published and updated date on every page and remove relative time from the text; add the questions people actually ask, with real answers, to every page that teaches something; link your own pages to each other so nothing is reachable only from the sitemap; publish a feed and an llms.txt and register with Bing as well as Google; make every bio you control say the same thing and link to the same place. All of it is free and most of it is an evening.

— Joe

This guide is the scoreboard.

The essays are what the machines are reading me for. One a week, Sunday morning, from the human in the loop.

Thank you — you’re on the list. The next essay arrives Sunday morning.

A paper boat flying a small gold flag, sailing a winding navy river of stars and binary digits through soft rose country.