---
title: "We Audited Our Own Website Against 37 AEO Checks. We Scored 23. | Code4X"
url: "https://code4x.dev/we-audited-our-own-website"
canonical: "https://code4x.dev/we-audited-our-own-website"
description: "We ran our full 55-check agent readiness audit on code4x.dev and scored 23 out of 37 initially. Every failure named and how each was engineered."
format: "markdown-mirror"
updated: "2026-09-29"
agent_ready: true
---

# We Audited Our Own Website Against 37 AEO Checks. We Scored 23.

> We ran our full 55-check agent readiness audit on code4x.dev and scored 23 out of 37 initially. Every failure named and how each was engineered.

- **URL**: https://code4x.dev/we-audited-our-own-website
- **Format**: Machine-readable Markdown Mirror (RFC 9727 / Accept: text/markdown)
- **Publisher**: Code4X Agent Readiness Platform

---

============================ HERO ============================ 

**SELF-AUDIT · PUBLISHED IN FULL**

# We audited our own website against 37 AEO checks. We scored 23.

> Sixty-two percent. Two of the failures were genuinely embarrassing for a company that sells this audit. Here is every one of them, what we fixed, and the three we have decided not to fix at all.

By **Code4X Engineering**, Engineering & Research
·
Published 21 Sep 2026
·
Audit run 8 Sep 2026
·
8 min read

 ============================ THE SCORE ============================ 

**01 · THE RESULT**

## What did code4x.dev score?

**code4x.dev scored 23 out of 37 on our own agent readiness framework when we ran it on 8 September 2026 — 62%. Two weeks later, after fixing five checks, it scores 28 out of 37.**

The audit covers four layers: whether AI agents can discover the site, whether they can read it efficiently, whether they can act on it, and whether the engines describe the business accurately. We failed fourteen checks. Five are now fixed, three we are not going to fix, and six sit on a roadmap behind standards that are not settled yet.

23/37

initial audit · 8 sep 2026

Layer 1 — Agent discovery9 / 13  69%
Layer 2 — Agent readability10 / 15  67%
Layer 3 — Agent interaction1 / 6  17%
Layer 4 — AI representation3 / 3  100%

Total
23 / 37  62%

Layer 4 scores full marks because we built the tracking system. That is not an achievement, it is our product. Discount it if you like — the site-only score is 20 out of 34.

 ============================ WHY PUBLISH ============================ 

**02 · REASONING**

## Why publish a mediocre score?

**Because a good score from the company selling the audit proves nothing, and a bad one published in full proves the method is real.**

We could have fixed everything quietly first and published a 35. Any agency can do that. What it demonstrates is that we are capable of editing our own website, which was never in question.

What is in question, for anyone considering this kind of engagement, is whether the audit finds real things or generates a plausible-looking report. The only way to answer that is to run it on ourselves and publish the failures without editing them — including the two that were uncomfortable.

There is a second reason. We have no client case studies yet. This is the honest substitute.

### What we committed to before running it

- Publish the score whatever it came out as
- Name every failed check with its dimension ID
- Publish the re-audit even if it barely moved
- Say which failures we are choosing not to fix, and why

Written down on 5 September, three days before the audit ran. Otherwise the temptation to quietly redefine success afterwards is very strong.

 ============================ THE FAILURES ============================ 

**03 · FINDINGS**

## What exactly did we fail?

> Fourteen checks. Listed with dimension IDs, as they appear in a client report.

| ID | Check | What we found | Status |
| --- | --- | --- | --- |
| L1-06 | MCP Server Card | We run an MCP server for clients and never advertised it at /.well-known/mcp.json | Fixed |
| L1-07 | API Catalog (RFC 9727) | Not present | Roadmap |
| L1-10 | DNS-AID | No _agent TXT record | Won't fix |
| L1-11 | Web Bot Auth | No bot authentication keys published | Roadmap |
| L2-01 | Content negotiation | No markdown returned for Accept: text/markdown | Fixed |
| L2-02 | Markdown mirrors | No .md variants of any page | Fixed |
| L2-05 | Schema accuracy (drift) | Pricing JSON-LD contradicted the visible pricing page | Fixed |
| L2-10 | Content freshness | Three pages carried update dates with no corresponding content change | In progress |
| L2-11 | Internal link graph | Four orphan pages, reachable only from the sitemap | Fixed |
| L3-01 | WebMCP form annotations | Not implemented | Roadmap |
| L3-02 | WebMCP registered tools | Not implemented | Roadmap |
| L3-04 | UCP readiness | No product schema, no agent-access.json | Won't fix |
| L3-05 | x402 payment support | Not implemented | Won't fix |
| L3-06 | NLWeb endpoint | No /ask endpoint | Roadmap |

 ============================ THE TWO THAT HURT ============================ 

**04 · THE UNCOMFORTABLE ONES**

## Which failures were actually embarrassing?

> Two of the fourteen. Both were things we had told clients to fix.

### Schema drift on our own pricing page

L2-05

We describe schema drift as the check most competitors skip. Our own pricing page had a JSON-LD `Offer` block carrying a figure that had been superseded on the visible page months earlier. The markup was updated once at launch and never again.

This is the exact failure mode we describe to clients: visible content gets edited, structured data does not, and the two quietly diverge until an engine has to choose which to believe.

**Cause:** the schema was hand-written into a template rather than generated from the same source as the visible content. It could not stay in sync, because nothing connected the two.

### No content negotiation

L2-01

We tell clients that serving markdown to agents cuts their token cost by 80 to 99%, and that under 4% of sites support it. We were in the 96%.

Our server returned HTML to every request, including requests sending `Accept: text/markdown` — a header that Claude Code, Cursor and OpenCode send natively.

**Cause:** nobody had implemented it because nobody had asked for it. Which is precisely the reason most sites fail this check, and precisely why we now lead with it.

      Neither of these was found by a human reading the site. Both were found by the scanner, which is the argument for running one.
    

 ============================ THE DIFF ============================ 

**05 · THE FIX**

## What did the schema drift fix look like?

> The remediation engine generates the corrected block from the rendered page, with a diff showing what changed.

remediation · L2-05

code4x.dev/pricing

  "@type": "Offer",
- "price": "1500",
+ "price": "1850",
  "priceCurrency": "USD",
- "priceValidUntil": "2026-03-31"
+ "priceValidUntil": "2026-12-31"
  "availability": "https://schema.org/InStock"

values extracted from rendered page content · generated 8 sep 2026

The deeper fix was structural, not textual. The pricing figure now renders from a single source that both the visible page and the JSON-LD read from, so the two cannot diverge again. Correcting the number without correcting the cause would have put us back here in six months.

 ============================ WON'T FIX ============================ 

**06 · DELIBERATE**

## What are we choosing not to fix?

> Three checks. Fixing them would raise our score and change nothing real.

L3-05

### x402 payment support

Machine-readable payment terms over HTTP 402, for agent-mediated purchases. We do not sell anything transactionally on this website. Implementing it would be pure theatre.

L3-04

### Universal Commerce Protocol

UCP standardises how agents query products and validate inventory. We have no product catalogue. Publishing product schema for services we sell through conversation would be misleading structured data, which is the thing we audit against.

L1-10

### DNS-AID

A TXT record advertising agent endpoints. Very early, thin adoption, no demonstrated benefit yet, and it requires a DNS change. We will revisit if it gains traction. Right now it is a point, not an improvement.

### The principle, stated plainly

A score is a proxy. The moment you optimise for the proxy rather than the thing it measures, the score stops meaning anything. We would rather publish 28 with three documented refusals than 31 with three implementations nobody will ever use — and we will tell clients the same thing when a check does not apply to them.

 ============================ SCORES ARE NOT COMPARABLE ============================ 

**07 · CONTEXT**

## Why are AI readiness scores from different tools not comparable?

> Because each tool checks a different number of things. The same site can look healthy or poor depending only on which scanner you ran.

On 8 September, code4x.dev scored 62% on our framework. On the same day, with nothing different about the site, it would have read considerably better on a narrower tool.

Google's Lighthouse 13.3 Agentic Browsing category checks four things: accessibility tree quality, layout stability, llms.txt compliance and WebMCP implementation. We passed three of those four. That is 75%.

Same website. Same day. **75% on one scanner, 62% on another** — and neither number is wrong. They are measuring different sets of things.

The practical consequence for anyone buying an audit: **ask what the score is out of, and ask which checks it covers.** A percentage with no denominator and no published check list is not a measurement.

same site · four scanners8 sep 2026

```text
scanner              checks  result
lighthouse 13.3      4     3/4   75%
code4x               37    23/37 62%
agent-ready.dev      68    not run
agentgrade           70+   not run

→ a percentage without a
  denominator is not a
  measurement
```

      We have not run the competitor scanners on our own site and have not reported numbers for them. Check counts are taken from each tool's published documentation.
    

 ============================ THE RE-AUDIT ============================ 

**08 · RE-AUDIT**

## What did the score move to?

> Same rubric version, re-run on 16 September. This is the comparison that matters — not the absolute number.

23

Initial score, out of 37

8 sep 2026 · rubric v1.0

28

After two weeks of remediation

16 sep 2026 · rubric v1.0

5

Checks fixed, all in the discovery and readability layers

L1-06, L2-01, L2-02, L2-05, L2-11

1

Interaction layer checks passed, before and after

unchanged · L3-03 only

### Why the re-audit used the same rubric version

If the scoring framework changes between two runs, the comparison is meaningless — the score could move because the site improved or because we moved the goalposts. Every audit records the rubric version it ran against, and every re-audit defaults to the original. When we revise the framework, old runs stay comparable or are marked as knowingly incomparable. There is no third option that preserves honesty.

 ============================ FAQ ============================ 

**09 · COMMON QUESTIONS**

## AI readiness scoring — answered

### What is a good AI agent readiness score?

There is no established benchmark, because no scoring framework for AI agent readiness has been standardised. Our own framework runs 37 checks across agent discovery, agent readability, agent interaction and AI representation monitoring. Most sites we scan score between 12 and 20. Almost every site scores close to zero on the interaction layer, because those standards are new and adoption is minimal. A score is only meaningful against the same rubric version applied at two points in time.

### Why are AI readiness scores from different tools not comparable?

Because each tool checks a different number of things. Lighthouse 13.3 checks four items in its Agentic Browsing category. AgentGrade checks more than 70 signals. Agent-Ready.dev runs 68 checks against the Vercel Agent Readability Spec. Our framework runs 37. The same website can score 75 percent on one tool and 62 percent on another without anything about the site changing. Always ask what a score is out of and which checks it covers.

### What is schema drift?

Schema drift is when structured data on a page contradicts the visible content of that page. A common example is a JSON-LD block stating a price or availability that no longer matches what the page shows, usually because the visible content was updated and the markup was not. Drift erodes the trust an engine places in your structured data, and it is one of the checks most audit tools skip entirely because it requires comparing markup against rendered content rather than just validating syntax.

### Should every website implement WebMCP and agent commerce protocols?

No. WebMCP, the Universal Commerce Protocol and x402 payments address a real direction of travel, but none of them is a ratified standard and adoption in 2026 is minimal. For a site with no product catalogue and no transactional flow, implementing agent commerce protocols achieves nothing except a higher audit score. We deliberately left three of these unfixed on our own site and documented why, rather than implementing them for appearance.

### How often should you re-run an AI readiness audit?

Quarterly for the site audit, and weekly for AI representation tracking. The site audit changes slowly because it reflects structural decisions. What AI engines say about a brand changes constantly, because retrieval is non-deterministic and the underlying indexes update continuously. Re-running the site audit against the same rubric version is what makes a before and after comparison meaningful.

### Does a low AI readiness score mean a website is badly built?

Not usually. Most of the checks in an agent readiness audit test for standards that consolidated in 2025 and 2026. A site built well in 2023 to every best practice of its time will still fail most of the discovery and interaction layers, because those files and protocols did not exist. A low score generally indicates age relative to a fast-moving standards landscape rather than poor engineering.

 ============================ METHOD ============================ 

**METHOD**

### How this audit was run

Domain auditedcode4x.com
Pages crawled34
Rubric versionv1.0
Initial run8 Sep 2026
Re-audit16 Sep 2026
Checks scored37

Only deterministic checks contribute to the score. Machine-checkable tests — a file exists or it does not, a header returns markdown or it does not, a heading sequence is valid or it is not. Qualitative assessment produces advisory flags with evidence, never points, so that the before and after comparison cannot be moved by a judgement call.

Every failed check in the table above is traceable to a specific URL and a specific test. The same evidence standard applies to client reports.

Check counts for Lighthouse 13.3, AgentGrade and Agent-Ready.dev are taken from each tool's published documentation as of September 2026. We did not run those tools against our own site.

 ============================ AUTHOR ============================ 

**AUTHOR**

### Code4X Engineering

Engineering & Research · Code4X

The Code4X Engineering team develops the deterministic audit engine, AEO remediation tooling, and protocol integrations for the AI-era web.

Reviewed21 Sep 2026
Next re-auditDec 2026

 ============================ RELATED ============================ 

**CONTINUE READING**

## More on AI search and agent readiness

[Definitions ### AEO, GEO, AIO and LLM SEO Three of these four describe the same work. Here is what differs.](/aeo-geo-aio-llm-seo)
[Technical ### Your robots.txt is probably blocking the wrong AI bots Training crawlers and citation agents are not the same thing.](/ai-crawlers-robots-txt)
[Fixed on our site ### Content negotiation: the 3.9% advantage Serving markdown to agents, and why almost nobody does.](/content-negotiation)

 ============================ CTA ============================ 

## What would your site score?

> The same 37 checks, the same evidence standard, the same published method. You get every failed check with a URL, whatever the number comes out as.

[Run an audit →](/agent-readiness)
[Talk to us](/contact)

---
*Machine mirror served for AI agents, citation crawlers, and LLM assistants. Canonical URL: [https://code4x.dev/we-audited-our-own-website](https://code4x.dev/we-audited-our-own-website).*
