---
title: "Agent readiness report — johnlacorte.com"
description: "johnlacorte.com scored 17/100 (Needs Improvement) for agent readiness — Level 0 (Not Agent Ready), llms.txt 0/100, markdown 0/100. 56 failed checks with fixes."
canonical_url: "http://www.whosbest.org/check/87b6x3xs86r9"
last_updated: "2026-08-24T18:22:42Z"
doc_version: "1.0"
---

# Agent readiness report — johnlacorte.com

Scanned https://johnlacorte.com/ on 2026-08-24 18:22 UTC with WhosBest Validator 2.0. Permalink: http://www.whosbest.org/check/87b6x3xs86r9

## Scores

| Metric | Score |
|---|---|
| Agent readiness (Vercel) | 17/100 — Needs Improvement |
| Level | 0 — Not Agent Ready |
| llms.txt | 0/100 |
| Markdown negotiation | 0/100 — No Markdown |
| Accessibility | 25/100 |
| Pages scanned | 1 of 1 discovered |
| Checks | 11 passed · 0 warned · 56 failed · 0 errors |

## Level

Current level: **0 — Not Agent Ready**.

To reach Level 1 (Basic Crawlability):

- `S7` **Publish robots.txt** — Add /robots.txt with a User-agent: \* group and a Sitemap: line \(any 2 of 3 missing basics\)
- `S8` **Publish a valid sitemap.xml** — Serve /sitemap.xml as a valid urlset with \<loc\> and \<lastmod\> per page \(any 2 of 3 missing basics\)
- `B3` **Send Link headers on the homepage** — Send an HTTP Link header on / advertising the markdown alternate and llms.txt \(rel=alternate/describedby\) \(any 2 of 3 missing basics\)

## What to fix first

1. **llms.txt exists** (`S1`, required, fail) — No llms.txt found at /llms.txt, /.well-known/llms.txt, /docs/llms.txt or /llms-full.txt
   - How to fix:

     ```
     # johnlacorte.com
     
     > One-paragraph summary of what the site offers.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): What we do
     
     ```

   - Spec: https://llmstxt.org/
2. **llms.txt served as text/plain** (`S2`, required, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > One-paragraph summary of what the site offers.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): What we do
     
     ```

   - Spec: https://llmstxt.org/
3. **llms.txt is non-empty** (`S3`, required, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > One-paragraph summary of what the site offers.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): What we do
     
     ```

   - Spec: https://llmstxt.org/
4. **robots.txt exists** (`S7`, required, fail) — robots.txt returned HTTP 202
   - How to fix:

     ```
     User-agent: *
     Allow: /
     
     Sitemap: https://johnlacorte.com/sitemap.xml
     
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9309
5. **sitemap.xml is valid** (`S8`, required, fail) — sitemap.xml is not valid XML: '=' is an unexpected token. The expected token is ';'. Line 1, position 130.
   - How to fix:

     ```
     <?xml version="1.0" encoding="UTF-8"?>
     <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
       <url><loc>https://johnlacorte.com/</loc><lastmod>2026-01-01</lastmod></url>
     </urlset>
     ```

   - Spec: https://www.sitemaps.org/protocol.html
6. **llms.txt returns HTTP 200** (`L1`, required, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
7. **First line is an H1 title** (`L2`, required, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
8. **Content is parseable markdown \(not an HTML shell\)** (`L3`, required, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
9. **Returns HTTP 200** (`P1`, required, fail) — HTTP 202
   - How to fix:

     ```
     Make the page return HTTP 200 directly (fix broken links in the sitemap or remove dead URLs)
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
10. **No noindex / noai X-Robots-Tag** (`P4`, required, fail) — X-Robots-Tag contains noindex
   - How to fix:

     ```
     Remove noindex / noai / noimageai from the X-Robots-Tag header for public pages
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
11. **Canonical link** (`P5`, required, fail) — No \<link rel="canonical"\>
   - How to fix:

     ```
     <link rel="canonical" href="https://johnlacorte.com/">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
12. **Meta description \(≥ 50 chars\)** (`P6`, required, fail) — No \<meta name="description"\>
   - How to fix:

     ```
     <meta name="description" content="A specific 50–160 character summary of this page.">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
13. **html lang attribute** (`P9`, required, fail) — \<html\> has no lang attribute
   - How to fix:

     ```
     <html lang="en">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
14. **JSON-LD structured data present** (`P10`, required, fail) — No \<script type="application/ld+json"\> blocks
   - How to fix:

     ```
     <script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://johnlacorte.com/","url":"https://johnlacorte.com/","name":"…","description":"…","dateModified":"2026-01-01"},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://johnlacorte.com/"}]}]}</script>
     ```

   - Spec: https://json-ld.org/
15. **JSON-LD has required fields** (`P11`, required, fail) — No JSON-LD to validate
   - How to fix:

     ```
     {"@type":"WebPage","name":"…","description":"…","url":"https://johnlacorte.com/","dateModified":"2026-01-01"}, {"@type":"BreadcrumbList","itemListElement":[…]}
     ```

   - Spec: https://schema.org/
16. **Markdown mirror \({path}.md\)** (`P15`, required, fail) — https://johnlacorte.com/index.md → HTTP 202 text/html
   - How to fix:

     ```
     https://johnlacorte.com/index.md → 200 text/markdown
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
17. **link rel=alternate type=text/markdown** (`P17`, required, fail) — No alternate markdown link in \<head\> or Link header
   - How to fix:

     ```
     <link rel="alternate" type="text/markdown" href="https://johnlacorte.com/index.md">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
18. **Accept: text/markdown negotiation** (`P19`, required, fail) — Accept: text/markdown → HTTP 202 text/html
   - How to fix:

     ```
     Accept: text/markdown → 200 Content-Type: text/markdown; Vary: Accept
     ```

   - Spec: https://acceptmarkdown.com/
19. **Serves markdown for Accept: text/markdown** (`M1`, required, fail) — Accept: text/markdown → HTTP 202 text/html
   - How to fix:

     ```
     GET / HTTP/1.1
     Accept: text/markdown
     
     -> HTTP/1.1 200 OK
        Content-Type: text/markdown; charset=utf-8
        Vary: Accept
     ```

   - Spec: https://acceptmarkdown.com/
20. **Responds with Vary: Accept** (`M2`, required, fail) — No Vary header
   - How to fix:

     ```
     Vary: Accept
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9110#name-vary
21. **robots.txt has explicit AI-bot rules** (`B1`, required, fail) — No robots.txt
   - How to fix:

     ```
     User-agent: GPTBot
     Allow: /
     
     User-agent: ClaudeBot
     Allow: /
     
     User-agent: Google-Extended
     Allow: /
     
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9309
22. **robots.txt declares Content-Signal** (`B2`, required, fail) — No robots.txt
   - How to fix:

     ```
     Content-Signal: search=yes, ai-input=yes, ai-train=no
     ```

   - Spec: https://contentsignals.org/
23. **Document has a non-empty title** (`A10`, required, fail) — Missing or empty \<title\>
   - How to fix:

     ```
     <title>Site name — what it does</title>
     ```

   - Spec: https://www.w3.org/WAI/WCAG22/quickref/
24. **Valid BCP-47 lang** (`A13`, required, fail) — \<html\> has no lang attribute
   - How to fix:

     ```
     <html lang="en">
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc5646
25. **llms.txt links do not point at .html files** (`S4`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > One-paragraph summary of what the site offers.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): What we do
     
     ```

   - Spec: https://llmstxt.org/
26. **sitemap entries have lastmod** (`S9`, recommended, fail) — No sitemap entries to evaluate
   - How to fix:

     ```
     <lastmod>2026-01-15</lastmod>
     ```

   - Spec: https://www.sitemaps.org/protocol.html
27. **sitemap.md exists** (`S10`, recommended, fail) — No sitemap.md at /sitemap.md, /docs/sitemap.md or /.well-known/sitemap.md
   - How to fix:

     ```
     # Sitemap
     
     ## Pages
     
     - [Home](https://johnlacorte.com/)
     - [About](https://johnlacorte.com/about)
     
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
28. **sitemap.md has headings and links** (`S11`, recommended, fail) — sitemap.md not found
   - How to fix:

     ```
     ## Pages
     
     - [Home](https://johnlacorte.com/)
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
29. **AGENTS.md exists** (`S12`, recommended, fail) — No AGENTS.md at /AGENTS.md, /agents.md, /.well-known/agents.md, /docs/AGENTS.md, /CLAUDE.md or /.cursorrules
   - How to fix:

     ```
     # AGENTS.md
     
     ## Getting started
     
     …
     
     ## Configuration
     
     …
     
     ## Usage
     
     …
     
     ```

   - Spec: https://agents.md/
30. **AGENTS.md has required sections** (`S13`, recommended, fail) — AGENTS.md not found
   - How to fix:

     ```
     ## Getting started
     
     ## Configuration
     
     ## Usage
     
     ```

   - Spec: https://agents.md/
31. **Blockquote summary follows the H1** (`L4`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
32. **At least one H2 section with a link list** (`L5`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
33. **Link lines use - \[name\]\(url\): notes format** (`L6`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
34. **Sampled links resolve \(2xx\)** (`L7`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
35. **Served as text/plain** (`L9`, recommended, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
36. **og:title** (`P7`, recommended, fail) — No og:title
   - How to fix:

     ```
     <meta property="og:title" content="Page title">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
37. **og:description** (`P8`, recommended, fail) — No og:description
   - How to fix:

     ```
     <meta property="og:description" content="Summary of the page">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
38. **At least 3 headings \(h1–h3\)** (`P12`, recommended, fail) — Only 0 h1–h3 heading\(s\)
   - How to fix:

     ```
     <h1>Page title</h1>
     <h2>Section</h2>
     <h3>Sub-section</h3>
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
39. **Text-to-HTML ratio** (`P13`, recommended, fail) — Text-to-HTML ratio 0% \(0 text chars / 168 HTML chars\)
   - How to fix:

     ```
     Reduce markup/script weight relative to visible text: trim inline scripts and styles, remove boilerplate wrappers and serve more substantive text
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
40. **Markdown frontmatter \(title, description, last\_updated\)** (`P16`, recommended, fail) — No markdown version available to inspect
   - How to fix:

     ```
     ---
     title: Page title
     description: One-sentence summary
     last_updated: 2026-01-01
     ---
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
41. **Markdown endpoint sends Link rel=canonical** (`P18`, recommended, fail) — No markdown version available
   - How to fix:

     ```
     Link: <https://johnlacorte.com/>; rel="canonical"
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc8288
42. **llms.txt describedby link** (`P24`, recommended, fail) — No rel="describedby" link to llms.txt
   - How to fix:

     ```
     <link rel="describedby" href="https://johnlacorte.com/llms.txt">
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
43. **Honours Accept q-values** (`M4`, recommended, fail) — q-values ignored \(markdown-preferred → text/html, html-preferred → text/html\)
   - How to fix:

     ```
     Accept: text/html;q=0.5, text/markdown;q=1.0 -> text/markdown
     Accept: text/markdown;q=0.1, text/html;q=1.0 -> text/html
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9110#name-accept
44. **Homepage sends Link headers** (`B3`, recommended, fail) — No Link header on the homepage
   - How to fix:

     ```
     Link: <https://johnlacorte.com/index.md>; rel="alternate"; type="text/markdown", <https://johnlacorte.com/llms.txt>; rel="describedby"
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc8288
45. **Landmark main or skip link** (`A12`, recommended, fail) — No \<main\> landmark, role="main" or skip link
   - How to fix:

     ```
     <a href="#content" class="skip-link">Skip to content</a>
     <main id="content">…</main>
     ```

   - Spec: https://www.w3.org/WAI/WCAG22/quickref/
46. **\#\# Optional section used correctly** (`L8`, optional, fail) — llms.txt not found
   - How to fix:

     ```
     # johnlacorte.com
     
     > Summary of the site.
     
     ## Docs
     
     - [About](https://johnlacorte.com/about.md): what we do
     
     ```

   - Spec: https://llmstxt.org/
47. **llms-full.txt exists** (`L10`, optional, fail) — No /llms-full.txt or /llms-ctx-full.txt
   - How to fix:

     ```
     https://johnlacorte.com/llms-full.txt
     ```

   - Spec: https://llmstxt.org/
48. **Links to a glossary** (`P14`, optional, fail) — No link to /glossary, /terminology or /definitions
   - How to fix:

     ```
     <a href="https://johnlacorte.com/glossary">Glossary</a>
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
49. **Markdown has a \#\# Sitemap section** (`P20`, optional, fail) — No markdown version available
   - How to fix:

     ```
     ## Sitemap
     
     - [Home](https://johnlacorte.com/)
     - [Full sitemap](https://johnlacorte.com/sitemap.md)
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
50. **MCP server card** (`C1`, optional, fail) — /.well-known/mcp.json exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/mcp.json
     ```

   - Spec: https://modelcontextprotocol.io/
51. **OAuth protected resource metadata** (`C3`, optional, fail) — /.well-known/oauth-protected-resource exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/oauth-protected-resource
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9728
52. **A2A agent card** (`C4`, optional, fail) — /.well-known/agent-card.json exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/agent-card.json
     ```

   - Spec: https://a2a-protocol.org/latest/specification/
53. **Agent Skills index** (`C6`, optional, fail) — /.well-known/agent-skills/index.json exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/agent-skills/index.json
     ```

   - Spec: https://agentskills.io/
54. **OAuth / OpenID server metadata** (`C8`, optional, fail) — /.well-known/oauth-authorization-server exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/oauth-authorization-server
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc8414
55. **security.txt** (`C9`, optional, fail) — /.well-known/security.txt exists but has no Contact: line
   - How to fix:

     ```
     Contact: mailto:security@johnlacorte.com
     Expires: 2027-01-01T00:00:00.000Z
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc9116
56. **ACP manifest** (`C13`, optional, fail) — /.well-known/acp.json exists but is not valid JSON
   - How to fix:

     ```
     Serve a valid JSON document at https://johnlacorte.com/.well-known/acp.json
     ```

   - Spec: https://agentcommerceprotocol.com/

## Check results

### Site checks

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `S1` | llms.txt exists | No llms.txt found at /llms.txt, /.well-known/llms.txt, /docs/llms.txt or /llms-full.txt |
| fail | `S2` | llms.txt served as text/plain | llms.txt not found |
| fail | `S3` | llms.txt is non-empty | llms.txt not found |
| fail | `S4` | llms.txt links do not point at .html files | llms.txt not found |
| pass | `S5` | robots.txt allows AI crawlers | No robots.txt — all crawlers allowed by default |
| pass | `S6` | /llms.txt is not blocked by robots.txt | No robots.txt — /llms.txt is reachable |
| fail | `S7` | robots.txt exists | robots.txt returned HTTP 202 |
| fail | `S8` | sitemap.xml is valid | sitemap.xml is not valid XML: '=' is an unexpected token. The expected token is ';'. Line 1, position 130. |
| fail | `S9` | sitemap entries have lastmod | No sitemap entries to evaluate |
| fail | `S10` | sitemap.md exists | No sitemap.md at /sitemap.md, /docs/sitemap.md or /.well-known/sitemap.md |
| fail | `S11` | sitemap.md has headings and links | sitemap.md not found |
| fail | `S12` | AGENTS.md exists | No AGENTS.md at /AGENTS.md, /agents.md, /.well-known/agents.md, /docs/AGENTS.md, /CLAUDE.md or /.cursorrules |
| fail | `S13` | AGENTS.md has required sections | AGENTS.md not found |
| pass | `S14` | Site is served over HTTPS | Root URL is HTTPS |
| n/a | `S15` | Root OpenAPI document \(API-first sites\) | Site does not look API-first \(no OpenAPI/Swagger links or /api paths found\) |

### llms.txt checks

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `L1` | llms.txt returns HTTP 200 | llms.txt not found |
| fail | `L2` | First line is an H1 title | llms.txt not found |
| fail | `L3` | Content is parseable markdown \(not an HTML shell\) | llms.txt not found |
| fail | `L4` | Blockquote summary follows the H1 | llms.txt not found |
| fail | `L5` | At least one H2 section with a link list | llms.txt not found |
| fail | `L6` | Link lines use - \[name\]\(url\): notes format | llms.txt not found |
| fail | `L7` | Sampled links resolve \(2xx\) | llms.txt not found |
| fail | `L8` | \#\# Optional section used correctly | llms.txt not found |
| fail | `L9` | Served as text/plain | llms.txt not found |
| fail | `L10` | llms-full.txt exists | No /llms-full.txt or /llms-ctx-full.txt |

### Markdown negotiation

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `M1` | Serves markdown for Accept: text/markdown | Accept: text/markdown → HTTP 202 text/html |
| fail | `M2` | Responds with Vary: Accept | No Vary header |
| n/a | `M3` | Returns 406 for an unsatisfiable Accept | Skipped — the site does not negotiate markdown \(M1 failed\) |
| fail | `M4` | Honours Accept q-values | q-values ignored \(markdown-preferred → text/html, html-preferred → text/html\) |

### Bot access

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `B1` | robots.txt has explicit AI-bot rules | No robots.txt |
| fail | `B2` | robots.txt declares Content-Signal | No robots.txt |
| fail | `B3` | Homepage sends Link headers | No Link header on the homepage |
| n/a | `B4` | DNS-AID agent discovery records | DNS-AID lookups disabled for this scan |
| info | `B5` | Web Bot Auth signature directory | Directory present but is not valid JSON |

### Protocol discovery

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `C1` | MCP server card | /.well-known/mcp.json exists but is not valid JSON |
| n/a | `C2` | MCP server card is well-formed | No MCP server card to validate |
| fail | `C3` | OAuth protected resource metadata | /.well-known/oauth-protected-resource exists but is not valid JSON |
| fail | `C4` | A2A agent card | /.well-known/agent-card.json exists but is not valid JSON |
| n/a | `C5` | A2A agent card is well-formed | No A2A agent card to validate |
| fail | `C6` | Agent Skills index | /.well-known/agent-skills/index.json exists but is not valid JSON |
| pass | `C7` | API catalog \(/.well-known/api-catalog\) | API catalog found at /.well-known/api-catalog |
| fail | `C8` | OAuth / OpenID server metadata | /.well-known/oauth-authorization-server exists but is not valid JSON |
| fail | `C9` | security.txt | /.well-known/security.txt exists but has no Contact: line |
| pass | `C10` | OpenAPI document | OpenAPI document found at /openapi.json |
| info | `C11` | /auth.md agent auth instructions | No /auth.md \(optional: markdown instructions telling agents how to authenticate\) |
| pass | `C12` | UCP manifest | UCP manifest found at /.well-known/ucp |
| fail | `C13` | ACP manifest | /.well-known/acp.json exists but is not valid JSON |
| info | `C14` | x402 payment-required endpoints | No x402 \(HTTP 402 + accepts\[\]\) endpoints observed among probed URLs |
| n/a | `C15` | Advertised endpoints not blocked by robots.txt | No same-host endpoints advertised in llms.txt / AGENTS.md |
| pass | `C16` | Content parity for AI crawlers \(GPTBot vs browser UA\) | Baseline text 0 chars vs GPTBot 0 chars \(0% difference\) |

### Accessibility (homepage)

| Status | ID | Check | Message |
|---|---|---|---|
| n/a | `A1` | Images have alt text | No \<img\> elements |
| n/a | `A2` | Form controls have labels | No form controls |
| n/a | `A3` | Links and buttons have accessible names | No links or buttons |
| n/a | `A4` | Media elements declare width and height | No img/video/iframe elements |
| n/a | `A5` | ARIA/label id references resolve and ids are unique | No ids or id references |
| n/a | `A6` | iframes have a title | No iframes |
| n/a | `A7` | One h1 and no skipped heading levels | No headings |
| n/a | `A8` | No positive tabindex | No tabindex attributes |
| n/a | `A9` | Viewport allows zoom | No viewport meta tag |
| fail | `A10` | Document has a non-empty title | Missing or empty \<title\> |
| n/a | `A11` | aria-label includes the visible text | No controls with both aria-label and visible text |
| fail | `A12` | Landmark main or skip link | No \<main\> landmark, role="main" or skip link |
| fail | `A13` | Valid BCP-47 lang | \<html\> has no lang attribute |
| n/a | `A14` | No focusable content inside aria-hidden | No aria-hidden regions |
| n/a | `A15` | No nested interactive controls | No interactive controls |
| n/a | `A16` | No empty headings | No headings |
| pass | `A17` | No timed meta refresh | Meta refresh has no delay |
| n/a | `A18` | Valid autocomplete tokens | No autocomplete attributes |
| n/a | `A19` | Data tables have headers | No tables |
| n/a | `A20` | SVG role=img has an accessible name | No svg role=img elements |
| n/a | `A21` | Audio/video have captions track | No audio/video elements |
| n/a | `A22` | Lists contain only list items | No lists |
| n/a | `A23` | ARIA roles and attributes are valid | No ARIA roles or attributes |

## Pages

### https://johnlacorte.com/

HTTP 202 · 3/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| fail | `P1` | Returns HTTP 200 | HTTP 202 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html |
| fail | `P4` | No noindex / noai X-Robots-Tag | X-Robots-Tag contains noindex |
| fail | `P5` | Canonical link | No \<link rel="canonical"\> |
| fail | `P6` | Meta description \(≥ 50 chars\) | No \<meta name="description"\> |
| fail | `P7` | og:title | No og:title |
| fail | `P8` | og:description | No og:description |
| fail | `P9` | html lang attribute | \<html\> has no lang attribute |
| fail | `P10` | JSON-LD structured data present | No \<script type="application/ld+json"\> blocks |
| fail | `P11` | JSON-LD has required fields | No JSON-LD to validate |
| fail | `P12` | At least 3 headings \(h1–h3\) | Only 0 h1–h3 heading\(s\) |
| fail | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 0% \(0 text chars / 168 HTML chars\) |
| fail | `P14` | Links to a glossary | No link to /glossary, /terminology or /definitions |
| fail | `P15` | Markdown mirror \({path}.md\) | https://johnlacorte.com/index.md → HTTP 202 text/html |
| fail | `P16` | Markdown frontmatter \(title, description, last\_updated\) | No markdown version available to inspect |
| fail | `P17` | link rel=alternate type=text/markdown | No alternate markdown link in \<head\> or Link header |
| fail | `P18` | Markdown endpoint sends Link rel=canonical | No markdown version available |
| fail | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → HTTP 202 text/html |
| fail | `P20` | Markdown has a \#\# Sitemap section | No markdown version available |
| n/a | `P21` | Code blocks declare a language | No code blocks on the page |
| n/a | `P22` | API pages link an API schema | Not an API documentation page |
| pass | `P23` | Content does not depend on JavaScript rendering | 0 chars of server-rendered text |
| fail | `P24` | llms.txt describedby link | No rel="describedby" link to llms.txt |

## Sitemap

- [Site map (markdown)](http://www.whosbest.org/sitemap.md)
- [llms.txt](http://www.whosbest.org/llms.txt)
- [Run your own check](http://www.whosbest.org/check)
- [This report (JSON)](http://www.whosbest.org/api/v1/readiness/scan/87b6x3xs86r9)
