# We Hill-Climbed This Blog's SEO With Our Own Agent. The Score Rose to 92. Search Hasn't Noticed Yet.

> We scored its-boris.com, ran our platform's SEO agent on it and kept only changes that raised the score with nothing worse. The score went from 77.3 to 92.4, mostly on unproven checks. Agents found answers a little more often. AI search still found us for 1 of 20 questions.

- Source: https://its-boris.com/blog/seo-hill-climb-own-agent
- Author: Boris Barash
- Published: 2026-11-03
- Agent-led: yes, the work behind this post was done by agents
- AI cost: $106.87

We ran our platform's own SEO agent on this blog, built a scorecard of the live site, and kept a change only if the score rose and nothing else got worse. Six rounds took the score from 77.3 to 92.4 out of 100, mostly on checks nobody has shown matter. A second test asked real agents 20 questions about the site: they answered 30 of 40 attempts correctly at the start and 32 after one change, which is close to the noise. AI search still found the site for 1 of 20 real questions, the same as before. Whether any of this brings readers won't be known until we measure again on Dec 14.

The site is small. Google sent it 23 visits in the 90 days before we started, 11 of them to one post. So this is a note on what you can measure about SEO, agent readability and LLM visibility on a small site, what our own agent got right and wrong, and what the experiment taught us about our platform.

- Scorecard: 77.3 to 92.4. Out of 100. It measures the site, not results
- Agents answering from the site: 30 to 32 of 40. Haiku 5.5 starting from llms.txt. Noise is about 2
- AI search citing us: 1 of 20, still 1. Real questions, models with web search
- Spent on runs and tests: $12.99. Inside a $75 limit

## How the climb works

A hill climb makes one change at a time and keeps it only if a measure improves. Ours had five steps:

1. **Read the research** and sort each claim by how strong the evidence is: documented by the search engine or crawler operator, measured in a study, or our guess.
2. **Score the live site** with a fixed list of pass-or-fail checks. Each check says which of those three tiers it rests on.
3. **Pick changes**, some from our own agent's audit of the site.
4. **Ship them** to the blog in a pull request, and score the live site again once the deploy is up.
5. **Keep or revert.** Keep only if the overall score rose and no check failed on more pages than before.

![Flowchart. Read the research, then score the live site. Then a loop: run our SEO agent, pick the best changes, ship to the blog, score the live site again, and ask whether it's better with nothing worse. Yes: keep it. No: revert it. Both go back to the agent. Behind a dashed line, a separate box says re-measure in weeks: rankings and citations.](https://its-boris.com/images/blog/seo-hill-climb/seo-loop.jpg)

*The loop. The box behind the dashed line is the only part that can show whether it worked.*

Round 3 shows every step, including the first reading after a deploy, which nearly fooled us.

*Figure on the page: Round 3 from start to decision. Two readings of one deploy differed by 0.3, and the only check that got worse was speed, on pages where the round changed no code.*

- Fig. 2 · How the climb works
- One round, worked through: round 3
- Keep a change only if the overall score rises and no check fails on more pages than before.
- 1 · Measure the live site
- The scorecard after round 2 read 90.5.
- 2 · Pick a change
- 51 citations in 8 posts, 32 links in the prose, ledes and descriptions. Why: a lab study measured citations helping; the links are our guess.
- 3 · Ship it
- PR #357. 7 generated links that matched a word, not a meaning, were cut by hand first.
- 4 · Read it once
- 91.3. Home page speed 0.94 to 0.89, a slow first byte, old descriptions still cached.
- 5 · Read it again
- Same deploy: 91.6. Home page back to 0.94. The harness post fell 0.90 to 0.80 with no code change.
- Overall up, and no check worse?
- Overall 90.5 to 91.6. One check worse: speed 0.9+ on 2 of 5 pages, was 3. We called it noise.
- Keep
- Every scorecard round was kept. Since then we read twice after every deploy.
- The next round measures from the new reading
- Round 3, check by check
- 3 to 10 of 40 posts cite 3 or more outside sources
- 17 to 28 of 40 posts get a link from another post
- 8 to 20 of 40 posts link out to two other posts
- 49 to 52 of 54 pages have a 70 to 180 character description
- 37 to 40 of 40 posts open with a 20 to 60 word lede
- 3 to 2 of 5 · worse pages score 0.9+ on Lighthouse speed

## What the research supports

We read the primary sources before changing anything. A lot of what's written about AEO and GEO doesn't hold up.

*What we found, by how strong the evidence is*

| Claim                                                     | Verdict                    | Source                                                                  |
| --------------------------------------------------------- | -------------------------- | ----------------------------------------------------------------------- |
| AI Overviews and AI Mode have no special requirements     | Documented                 | Google: "nor other special optimizations necessary"                     |
| Being indexed with a snippet is the entry bar             | Documented                 | Google, same page                                                       |
| Adding citations, quotes and statistics raises visibility | Measured, in a lab         | GEO paper, KDD 2024: 30 to 40% on its own metric, smaller on Perplexity |
| Referring domains and traffic predict citations           | Measured, as a correlation | SE Ranking, 500,000+ prompts                                            |
| llms.txt gets you cited                                   | Folklore                   | Ahrefs logs: 97% of files got no requests in a month                    |
| Schema gets you cited                                     | Mostly folklore            | Ahrefs, 1,885 pages: no measurable lift in AI Mode or ChatGPT           |
| FAQ markup is a shortcut                                  | Folklore                   | Google stopped showing FAQ rich results on May 7, 2026                  |
| Chunk posts into short sections                           | Folklore                   | Google: no requirement                                                  |
| Bump the date for freshness                               | Harmful                    | Google lists it as a warning sign                                       |

The studies mostly agree that authority counts for more than anything on the page, and authority builds slowly, off the site. We shipped `llms.txt` anyway, because it's cheap and helps when someone hands the site to an agent, but we didn't expect it to move citations.

## The scorecard

The scorecard fetches every page in the sitemap and runs checks a script can decide on its own. Anything it can't measure stays unknown and out of the score, which includes field Core Web Vitals, because the site doesn't get enough Chrome visits to have them.

*What the scorecard checks, with examples*

| Category              | Example checks                                                                                                | Evidence                                                       |
| --------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| Technical             | Pages return 200, one canonical pointing at itself, posts render without JavaScript, sitemap valid            | Mostly documented                                              |
| Metadata and entities | Unique titles and descriptions, valid JSON-LD, an author with a profile link, dates with a zone               | Mostly documented                                              |
| Internal links        | No broken links, every page reachable, posts linked from other posts' text                                    | Mixed                                                          |
| Crawler access        | Each AI and search crawler allowed by robots.txt, served the same page as a browser                           | Documented, plus one guess                                     |
| Agent readability     | llms.txt, a markdown copy of each post with every paragraph the page has, full-text feed, corrections as data | Mostly our guess; the feed and same-text checks are documented |
| Content signals       | A summary up top, three outside sources, a visible date and byline                                            | Documented, a study, or a guess                                |
| Speed, lab only       | Lighthouse on a simulated phone: LCP, layout shift, blocking time                                             | Documented thresholds                                          |

*Video: The scorecard's real output after round 6, Nov 3, replayed line by line. The last lines are checks still failing.*

*Figure on the page: The overall score after each round. After round 3 every step is smaller than the swing Lighthouse alone can cause, so they read as a plateau, not a climb.*

- Overall score by round, out of 100: Before 77.3, 1 84.6, 2 90.5, 3 91.6, 4 92.1, 5 92.2, 6 92.4, Re-read 93.3. Round 3 first read 91.3.

*Figure on the page: Each category before the first change and after round 6. Agent readability and crawler access went to 100 because we added files and named crawlers; no crawler gained access it didn't have.*

- Scorecard by category, before and after round 6: Overall 77.3 to 92.4; Agent readability 40.0 to 100.0; Crawler access 73.9 to 100.0; Internal links 79.4 to 88.4; Metadata and entities 90.9 to 99.0; Content signals 80.5 to 86.2; Technical 99.6 to 99.6; Speed, lab only 76.7 to 73.3

*Figure on the page: The studied tier rests on three checks; about half its rise came from moving one dated line under each lede and half from outside sources. The bottom row rose almost as much, on things we think help and nobody has shown.*

- Score by evidence tier, before and after round 6: Documented 96.2 to 99.5; Studied 48.3 to 69.2; Our guess 73.1 to 93.5

Crawler access went to 100 without any crawler gaining access it didn't already have. They could all read the site before. Naming each one turns an accident into a decision, but it isn't a gain in reach.

## Each round

*Figure on the page: Every round, in order. Each was kept on the scorecard; the one revert came from the agent test. Checks marked noise are speed readings that moved without a code change.*

- SEO round Agent round Documented Studied Our guess why we expected it to help
- Round 1 #355
- 77.3 to 84.6
- +7.3
- Author entity, crawler policy, dated timestamps
- Person and ProfilePage, WebSite, a group per crawler in robots.txt, dates with a time zone, \<time>, Open Graph urls, one redirecting link.
- Documented Google's Article docs ask for a time zone and an author url
- Our guess naming each crawler and WebSite markup
- 0 to 1 of 1 author as structured data
- 3 to 40 of 40 posts with a time zone on dates
- 0 to 1 of 1 WebSite markup on home
- 2 to 1 internal links that go through a redirect
- 52 to 54 of 54 pages with complete Open Graph
- 0 to 40 of 40 posts with a \<time> tag
- 0 to 12 of 12 crawlers named in robots.txt
- Speed readings reused from the baseline.
- Kept
- Round 2 #356
- 84.6 to 90.5
- +5.9
- Files for agents
- llms.txt, a markdown copy of every post at /blog/\<slug>.md, a full-text feed, /changes.json, IndexNow.
- Our guess Ahrefs' logs: 97% of llms.txt files got no requests in a month; Google says it needs no AI text files
- 0 to 1 of 1 corrections as JSON
- 0 to 1 of 1 full text in the feed
- 0 to 1 of 1 llms.txt exists
- 0 to 40 of 40 pages pointing to their markdown
- 0 to 40 of 40 posts with a markdown copy
- Expected to help agents already on the site, not citations. Speed reused.
- Kept
- Round 3 #357
- 90.5 to 91.6
- +1.1
- Citations and links
- 51 citations to primary sources in 8 posts, 32 links in the prose, the series method paragraph, notes on 2 older posts, ledes and descriptions.
- Studied the GEO paper measured citations raising visibility, in a lab
- Our guess internal links
- 3 to 10 of 40 posts citing 3+ outside sources
- 49 to 52 of 54 descriptions of 70 to 180 characters
- 3 to 2 of 5 pages at speed 0.9+ (Lighthouse) worse, noise
- 17 to 28 of 40 posts linked from another post
- 8 to 20 of 40 posts linking to two others
- 37 to 40 of 40 ledes of 20 to 60 words
- First reading 91.3 with pages still cached; the second, 91.6. One check worse: speed, on pages where the round changed no code. Not shipped: 7 generated links that matched a word, not a meaning.
- Kept
- Round 4 #358
- 91.6 to 92.1
- +0.5
- The home page's own title
- A title and description for the home page (its title was 13 characters), and a paragraph citing two eval guides in the audit post.
- Our guess a title length band
- 10 to 11 of 40 posts citing 3+ outside sources
- 0 to 1 of 5 pages with LCP under 2.5 s (lab) noise
- 37 to 38 of 54 titles of 15 to 75 characters
- No check worse than round 3.
- Kept
- Round 5 #360
- 92.1 to 92.2
- +0.1
- A dead demo link
- Removed a pointer to the deleted Runner Spotlight demo.
- Documented links that skip a redirect
- 1 to 0 internal links that go through a redirect
- Speed reused from round 4.
- Kept
- Round 6 #361
- 92.2 to 92.4
- +0.2
- Dated notes, shorter titles, more citations
- Moved the italic dated note under the lede on 14 posts, shortened title tags, 17 more citations.
- Studied first paragraphs of 20 to 90 words, outside sources
- Our guess title length
- 11 to 15 of 40 posts citing 3+ outside sources
- 25 to 37 of 40 first paragraphs of 20 to 90 words
- 31 to 26 of 40 first paragraphs stating a number or claim worse
- 1 to 0 of 5 pages with LCP under 2.5 s (lab) worse, noise
- 30 to 31 of 40 openings sharing words with the title
- 38 to 49 of 54 titles of 15 to 75 characters
- The italic line had passed "states a number" on its year. The real first paragraphs never did, so that check fell; we kept the round and recorded it.
- Kept, one check worse
- Judged on the agent test, not the scorecard
- Agent round 1 #362
- 30 to 32
- +2.0
- A search page for agents
- /search?q=words returns matching posts and paragraphs as markdown; llms.txt links to it with each post's date.
- Our guess no rigorous study of agent readability exists
- 30 to 32 of 40 Navigator from llms.txt correct; fetches a task 2.7 to 2.1
- 30 to 31 of 40 Navigator from the home page correct; fetches a task 2.95 to 3.15
- 34 to 32 of 40 Claude with web search correct; fetches a task 2.4 to 2.1
- Claude with web search moved by two without using the page, so two is about the noise. Cost for the navigator's 40 tries $0.096 to $0.068.
- Kept
- Agent round 2 #363
- 32 to 31
- -1.0
- Better ranking, a clearer sentence
- Rank by the single paragraph holding most of the query, with simple word stems. Rewrote the series method sentence, which read as "76 of 149 runs passed" when it meant the opposite.
- Our guess no rigorous study of agent readability exists
- 32 to 31 of 40 Navigator from llms.txt correct; fetches a task 2.1 to 2.02
- 31 to 32 of 40 Navigator from the home page correct; fetches a task 3.15 to 3.1
- 32 to 34 of 40 Claude with web search correct; fetches a task 2.1 to 2.4
- The right post now ranked first for one question, but our gateway's scanner refused the search page that held it. The ranking was reverted in PR #364.
- Ranking reverted, sentence kept
- Not shipped
- 7 internal links Not shipped
- From the generated link plan, round 3. Each matched a word but not a meaning. Cut by hand before the PR.
- The agent's top finding Not shipped
- Run 2 said post titles held chart labels. It had read a \<title> inside an inline chart. The head title is right for Chrome, Googlebot, ClaudeBot, GPTBot, OAI-SearchBot, Claude-User and curl.
- Two speed fixes Not shipped
- Inlining the CSS (median LCP 2,933 to 3,083 ms) and preloading only the headline font (2,936 ms, first paint 150 ms later). Tried on a local build, three runs on three pages. Neither was better.
- Re-read, not a round
- After the agent rounds Nov 3, 04:02 UTC. Every category the same as round 6 except speed, 73.3 to 80.0, with no speed change shipped. Lighthouse noise. 92.4 to 93.3

Three things nearly fooled us:

- **Round 2's** check that the markdown copy has every paragraph the page has. It guards against showing agents different text from readers, which comes close to what Google's spam policies call cloaking. Its first version compared word counts and failed 11 posts. Every missing paragraph turned out to be an image prompt, which the copy rightly leaves out, so we replaced it with a paragraph check.
- **Round 3's** first reading. It said 91.3, with the home page's Lighthouse score down from 0.94 to 0.89 and old descriptions on pages the round had just changed: the site was still refreshing cached pages. After that we measured twice after every deploy and judged speed on the median of five pages.
- **Round 5's** deploy, which failed three times on flaky builds while the site kept serving round 4. We caught it because the health page reports which commit is live, and discarded a reading taken too early.

Five things didn't move:

- **Speed.** After round 6, LCP was over 2.5 seconds on all five sample pages; the median went from 3,415 to 3,311 ms, within the noise. The slow element is the lede's text, and most of its time is render delay on a simulated slow phone. Our two CSS and font fixes didn't help.
- **First paragraphs.** Fourteen posts open on a scene rather than a number. Rewriting them to pass a crude check would make them worse to read.
- **Sources.** 25 of 40 posts still have fewer than three outside links. Most are about our own systems, and two passes found nothing honest to cite.
- **`www`.** It has no DNS record. The redirect waits for the owner to add one.
- **AI search.** The same 1 of 20 questions at the start, after round 4 and at the end.

A last reading with no site change came out at 93.3, entirely from Lighthouse. We report 92.4.

## How it changed for a reader, Google, an AI search engine and an agent

*Figure on the page: One concrete example for each kind of visitor, from the live site. Only the agent's change was measured as a result; the rest are changes to the site whose effect is still unknown.*

- A reader
- Before 14 posts opened on an italic line, "This post describes the fleet as it ran in March 2026". The series page said "76 of 149 runs passed" when it meant the opposite.
- After The dated line sits under the lede as a status note (round 6). The series sentence says what it means (agent round 2). 68 citations to primary sources added in rounds 3 and 6.
- Still unknown Whether anyone reads more. We didn't measure reading.
- Google
- Before The home page title was 13 characters. 37 of 40 posts gave dates with no time zone. 17 of 54 titles fell outside 15 to 75 characters.
- After Home: "Boris Barash on running AI agents in production | its-boris.com". All 40 posts dated with a zone; 5 titles still long. Author as structured data.
- Still unknown Rankings. Google sent 23 visits in the 90 days before. We read Search Console again on Dec 14 and Feb 1.
- An LLM with web search
- Before Asked "How do you build an AI gateway with budgets and PII scanning for OpenClaw?", Claude's search returned /blog/building-ai-gateway, and the answer didn't name the site. 1 of 20 questions; GPT-5 search 0 of 20.
- After round 4 The same 1 of 20, the same question, still unnamed in the answer.
- Still unknown Whether it moves. The final run on Nov 3 found the same 1 of 20. We ask again on Dec 14.
- An agent
- Before Only the page: 112,218 characters of HTML for the gateway post, 10,182 of them before the headline. No llms.txt, no markdown.
- After llms.txt (12,880), then /search for the words (7,679), then the post as markdown (13,795). On the agent test the navigator from llms.txt went from 30 to 32 of 40, 2.7 to 2.1 fetches a task.
- Still a problem Our gateway's scanner refused 4 or 5 of the 20 tasks in each run, mostly on posts that quote attacks or use the word "leak". Platform #4045.

## The agent track

The scorecard lists what the site does. It can't tell you whether an agent sent to the site comes back with the right answer, so we tested that directly with 20 fixed questions: 13 about a number, 3 single facts, 2 that need two pages and 2 about the newest post. Each answer is checked against the post's own text. Real agents answered through our gateway, twice each:

- **Navigator from llms.txt:** Claude Haiku 5.5 with one tool, `fetch`, told to start at `/llms.txt`.
- **Navigator from the home page:** the same agent starting where a generic agent lands.
- **Claude with web search:** Anthropic's own search and fetch tools, limited to this site.
- **GPT-5 search:** searches the web but can't open a page it's given. Measured once.

*Figure on the page: Before the rounds an agent got only the page. After, it can read the site's index, search it and fetch a post as markdown at an eighth of the page's size. None of this has been shown to win citations; it helps once an agent is already here.*

- Characters an agent reads for one post: The page as HTML 112,218; The markdown copy 13,795; /llms.txt 12,880; One search 7,679
- /llms.txt round 2
- Before 404
- After 12,880 characters: every post, the series, the search page
- The post as markdown round 2
- Before 404
- After 13,795 characters: title, source, author, dates, AI cost
- Page points to its markdown round 2
- Before no
- After yes, on all 40 posts
- Full text in the feed round 2
- Before no
- After yes
- Author as structured data round 1
- Before Article and breadcrumb only
- After plus Person on About, WebSite on home
- Dates a machine can read round 1
- Before no time zone on 37 of 40 posts
- After zone and a \<time> tag on all 40
- Search for agents agent round 1
- Before none
- After /search?q=AI+gateway+budgets+PII: 6 posts, 7,679 characters
- Crawlers named in robots.txt round 1
- Before one group for all
- After 12 named groups, the same access as before

![Three panels. The harness post as HTML, 149,829 characters, starting with font preloads and image URLs. The same post as markdown, 16,580 characters, starting with the title, a summary, the source, author, dates, agent-led and AI cost. llms.txt, 12,880 characters, with a summary, the search page and the list of posts.](https://its-boris.com/images/blog/seo-hill-climb/agent-reads.png)

*What an agent gets from another post, the harness post, on Nov 3: the page, its markdown copy and the site index. The HTML opens with font and image preloads; the copy opens with the title, summary, date and cost.*

*Figure on the page: Each mark is 40 tries; the whisker spans the two tries, doubled. Claude with web search moved by two with no change it used, so a change of two is about the noise. Round 1 cut the navigator's fetches and cost; round 2 changed nothing that held.*

- Correct answers out of 40 per agent: Navigator from llms.txt 30, 32, 31; Navigator from the home page 30, 31, 32; Claude with web search 34, 32, 34; GPT-5 search 8, not run, not run
- Navigator from llms.txt Before Round 1 Round 2
- Cited the right URL 30 32 31
- Fetches per task 2.7 2.1 2.02
- Tokens in, 40 tries 864K 602K 535K
- Cost, 40 tries $0.096 $0.068 $0.061
- No answer (refused or failed) 9 8 9
- Navigator from the home page Before Round 1 Round 2
- Cited the right URL 28 30 30
- Fetches per task 2.95 3.15 3.1
- Tokens in, 40 tries 960K 1,050K 999K
- Cost, 40 tries $0.107 $0.117 $0.112
- No answer (refused or failed) 4 4 4
- Claude with web search Before Round 1 Round 2
- Cited the right URL 31 29 31
- Fetches per task 2.4 2.1 2.4
- Tokens in, 40 tries 1,294K 1,390K 1,166K
- Cost, 40 tries $0.408 $0.458 $0.405
- No answer (refused or failed) 0 0 0
- GPT-5 search, before only: 8 of 40, 5 citing the right URL, 19 with no answer, $0.861 by the gateway's estimate. It searches but can't open a page it's given, so it wasn't rerun.

Claude with web search moved by two between runs with no change it could see, and its two tries differed by two at the start. So a change of two is noise.

- **Agent round 1, kept.** A search page for agents: `/search?q=words` returns matching posts and paragraphs as markdown, and `llms.txt` links to it. The navigator from `llms.txt` went from 30 to 32, from 2.7 to 2.1 fetches a task, and from $0.096 to $0.068 for 40 attempts. The gain is at the edge of the noise, but it cost less and took fewer steps, so we kept it.
- **Agent round 2, reverted.** Round 1's search put the wrong post first for one question, so we ranked by the single paragraph matching most of the query. The right post came first, but the navigator went from 32 to 31, so by the rule it came out. The revert kept one sentence fix from the same pull request.

*Video: One task before and after agent round 1, replayed from the recorded tool calls. Before, the agent fetched the post's markdown and our own gateway refused the request. After, it used the search page and answered correctly.*

The replay shows the biggest problem the agent test found, and it wasn't on the blog. Our gateway's security scanner refused the navigator on 4 or 5 of the 20 tasks in each run. One post quotes real prompt-injection strings, so refusing it is the scanner working. But it also refused a post with the heading "The OpenRouter cost leak", and a table with the word "Leak" in it: the bare word was enough. Round 1 cut the refused tasks from 5 to 4. In round 2 the scanner refused the search page that held the right answer; the gateway doesn't record which rule fired.

## Running our own agent on it

`seo_research` had one run on record, from May, for $11.46. It was built to outline a new page, and its reviewer rejected any report without keyword volumes from a named source. We have no Ahrefs or SEMrush, so in May both workers were sent back and no outline came out. This time:

*Three runs of the deployed template in the blog's own org*

| Run                  | Cost  | What happened                                                                                                      | XP |
| -------------------- | ----- | ------------------------------------------------------------------------------------------------------------------ | -- |
| Asked for $4         | $0    | Refused: a new seat is level 1, and level 1 allows $1 a run                                                        | 0  |
| 1, at $1             | $0.95 | Two workers did the same audit twice. The budget ran out, so no review. The report was too long for the judge      | 0  |
| 2, at $1             | $0.84 | One worker, our scorecard in the brief. The reviewer asked for keyword volumes. The judge's reply couldn't be read | 1  |
| 3, at $1, same brief | $0.68 | The same again. The judge hit a gateway error                                                                      | 1  |

The judge graded none of the three runs. The XP came only from the seat's own checks passing.

We also gave one Claude Sonnet 5.5 call the same brief plus nine pages from the live site, then had a fresh agent grade all three reports finding by finding, against the site as it was when each was written, without being told which was which.

*Three audits of the same site, graded blind*

| Report                                         | Cost                                                            | Findings | False or partly false |
| ---------------------------------------------- | --------------------------------------------------------------- | -------- | --------------------- |
| Our agent, run 2                               | $0.84                                                           | 9        | 2                     |
| Our agent, run 3, same brief                   | $0.68                                                           | 9        | 1                     |
| One Sonnet 5.5 call, same brief and nine pages | $0.24, including a first try that spent all its tokens thinking | 11       | 4                     |

None gave harmful advice. Run 2's top finding was the worst: it said our post titles were chart labels, having read a `<title>` inside an inline chart as the page's title. The real title comes first in the page for every crawler we tried. The single call found the most useful thing, the series sentence that read as "76 of 149 runs passed", and that sentence was ours. Three reports can't rank the approaches. They do show that every finding needs checking against the live page.

What we changed in the platform. #4043 has merged; the other two wait for review:

- **#4044, the template.** An audit mode with one worker, so a run fits $1 with room for review. The reviewer accepts "volumes unavailable" and rejects anything on Google's spam list. One required check fails a search volume with no named source, another requires the report to name the pages it checked, and the workers lose their shell, so text on a fetched page can't run a command. An independent review held the first version: an honest report could fail it, an invented number could pass, and a one-word report earned XP. Each is fixed with a test.
- **#4043, the gateway.** The blog org's key had no `key_id`, so every LLM call made with it failed with a 500.
- **#4045, the scanner.** Our first fix for the "leak" rule was too loose: review found about 45 attacks it would let through. The revised fix lets none of them through.
- **The Office.** The seat showed as "Seo Research", with a $6 bar where its level allows $1. The fix in #4044 uses the template's own name and shows the level's limit.

Two smaller ones: the gateway's cost header is an estimate (for GPT-5 search, about twice the recorded cost), and its PII scan refused our audit evidence because the About page shows a contact address.

## In the Office

The seat sits on the floor of our Agent Office like the other agents. This is run 3 finishing, captured from the live Office for the blog's org:

*Video: Run ap\_dcb666e5520d, Nov 3 between 03:29 and 03:30 UTC: the seat working and in review at $0.68, then idle at level 1 with 2 of 25 XP.*

The ask was to move the Office up a couple of levels through real work. That hasn't happened, and we didn't force it.

- SEO seat: 0 to 2 XP, level 1. Level 2 needs 25
- Blog org office: 201 to 203 XP, level 2. Level 3 at 300
- Platform org office: 262 XP, level 2. Not touched here

A run that meets its own objective earns 1 XP. The first run in a new seat earns nothing, because the seat's objective is adopted by an hourly sweep after it. A thumbs-up is worth 10, and that's the owner's to give. At one run a week the seat reaches level 2 in about 23 weeks. The blog org earned 34 XP in its last seven days, all from checks, which puts its level 3 around Nov 23. That date comes from the agents already running, not from this work. A weekly schedule for the seat was refused because our API key isn't an admin key, which is the right answer, so it's on the owner's list.

## Picking this up

If you want to repeat this on your own site:

- **The rule:** one change at a time, measured on the live site, kept only if its measure rises and no check gets worse. Judge site changes on the scorecard and agent changes on an agent test, never the other way round.
- **The noise:** measure twice after every deploy, read Lighthouse as ±0.1 per page and judge speed on a median, and treat a change of 2 in 40 agent attempts as noise. Report each try, not only the total.
- **The agent test:** fixed questions with answers you can check against your own text, a mix of numbers, multi-step questions and "what's newest", run twice on at least two kinds of agent. Count blocks and errors separately from wrong answers.
- **The scorecard:** the seven categories in the scorecard table, each check tagged with its evidence, so a high score can't hide that most of it is guesswork.

Our next experiments, in order: rerun the same brief on the new template once it merges, and grade it blind against the old; retry the search ranking once the scanner fix lands; earn links by sharing the audit numbers where people write about evals; and measure Perplexity and Gemini, which we couldn't reach this time.

## What we'll know on Dec 14

*Figure on the page: Each square is one question asked twice of one model. Six rounds of changes moved nothing here yet: one question found the site in Claude's search results, in all three runs, and no answer named it.*

- Twenty real questions, four models, two tries each. Before any change, after round 4 and in the final run, the only find was Q19 in Claude Haiku's web search results; no answer named or cited the site.

Almost everything that matters is still unproven. Rankings and citations take weeks to move, and so far we've only shown that the site does what our checks ask and that agents answer a little better. We wrote down in advance what would count as working: by Feb 1, 3 or more of the 20 questions on either model with web search, with the same question on two dates, and 50 or more Google visits per 90 days, across more than one post. If those numbers don't move, the likely reason is the one the research gave us at the start: other sites have to link here, and nothing on this one can do that.

We measure again on Dec 14 and Feb 1, with the same questions and the same scripts.

## Where we pick this up

Our notes for the next shift. If you're trying this on a small site too, this list may save you a lap.

- Waiting: Re-measure on Dec 14 and Feb 1. Same questions, same scripts, plus Search Console and Bing once they're set up.
- Waiting: Review the two open platform fixes, then rerun the same brief. The comparison we couldn't make: the old template against the new one, on the same input, graded blind.
- Waiting: Search Console, Bing, the www record and a weekly schedule. All need the owner's sign-in. Bing's AI Performance report is the one first-party citation report we can get.
- Open: Give the seat a promotion test. It only takes agents that work from server-side facts. A version reading the scorecard and the agent test would fit.
- Open: Check an iOS privacy claim. A citation pass found Apple's docs suggest on-device speech recognition can fall back to the server, which our first-time iOS post says it doesn't.
- Keep: Check every agent finding against the live page. Our agent's top finding in run 2 came from reading a chart label as a page title.

*Figure on the page: What the runs and tests cost, by line: $12.99 inside the $75 limit. GPT-5 search was most of the gateway bill.*

- Where the money went: Platform SEO runs (3) $2.48; Gateway calls $7.69; Anthropic web searches (177) $1.77; Codex images (5) $1.05. Total $12.99, inside the $75 limit. Claude Code's API-equivalent cost is in the receipt.

## AI cost of this post

- Claude: research, scorecard, rounds, agent test, captures, figures, drafting: $76.70. API-equivalent, from session token counts
- Claude: two citation passes: $4.14. API-equivalent, from session token counts
- Claude: blind grading of three audits: $2.20. API-equivalent, from session token counts
- Claude: fresh fact-check: $1.64. API-equivalent, from session token counts
- Claude Design: the twelve figures: $9.20. API-equivalent, from session token counts
- Codex: 5 images, two thrown away: $1.05. estimate, about $0.21 per image
- Platform runs, gateway tests, web searches: $11.94. recorded, plus estimated search fees

Claude and Codex ran on flat subscriptions, so their marginal bill was $0; their lines show API rates. The runs, tests, searches and images are real spend, $12.99 together, inside the $75 limit. The session that coordinated this work isn't counted.

