---
title: "Agent readiness report — www.whosbest.org"
description: "www.whosbest.org scored 94/100 (Excellent) for agent readiness — Level 4 (Agent Integration), llms.txt 100/100, markdown 100/100. 14 failed checks with fixes."
canonical_url: "http://www.whosbest.org/check/70r084v0mxzn"
last_updated: "2026-08-23T22:03:56Z"
doc_version: "1.0"
---

# Agent readiness report — www.whosbest.org

Scanned https://www.whosbest.org/ on 2026-08-23 22:03 UTC with WhosBest Validator 2.0. Permalink: http://www.whosbest.org/check/70r084v0mxzn

## Scores

| Metric | Score |
|---|---|
| Agent readiness (Vercel) | 94/100 — Excellent |
| Level | 4 — Agent Integration |
| llms.txt | 100/100 |
| Markdown negotiation | 100/100 — Fully negotiated |
| Accessibility | 87/100 |
| Pages scanned | 10 of 341 discovered |
| Checks | 255 passed · 3 warned · 14 failed · 0 errors |

## Level

Current level: **4 — Agent Integration**.

To reach Level 5 (Auth & Trust):

- `B5` **Publish a Web Bot Auth directory** — Serve /.well-known/http-message-signatures-directory with your bot signing keys \(any 2 of 3\)
- `C1+C4+C6+C7` **Publish all four integrations** — Serve MCP server card, A2A agent card, Agent Skills index and api-catalog \(any 2 of 3\)
- `C3|C8|C11` **Publish auth metadata** — Serve /.well-known/oauth-protected-resource, /.well-known/oauth-authorization-server \(or openid-configuration\) or /auth.md \(any 2 of 3\)

## What to fix first

1. **Markdown mirror \({path}.md\)** (`P15`, required, fail) — https://www.whosbest.org/lists.md → HTTP 503 text/markdown
   - How to fix:

     ```
     https://www.whosbest.org/lists.md → 200 text/markdown
     ```

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

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

   - Spec: https://acceptmarkdown.com/
3. **Links and buttons have accessible names** (`A3`, required, fail) — 1 of 61 link\(s\)/button\(s\) fail
   - How to fix:

     ```
     <a href="/" aria-label="Home"><svg …></svg></a>
     ```

   - Spec: https://www.w3.org/WAI/WCAG22/quickref/
4. **ARIA/label id references resolve and ids are unique** (`A5`, required, fail) — 1 of 15 id\(s\)/reference\(s\) fail
   - How to fix:

     ```
     Make every id unique and ensure aria-labelledby/aria-describedby/aria-controls/for values point at existing ids
     ```

   - Spec: https://www.w3.org/TR/wai-aria-1.2/
5. **Text-to-HTML ratio** (`P13`, recommended, fail) — Text-to-HTML ratio 9.2% \(3,025 text chars / 32,821 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
6. **Text-to-HTML ratio** (`P13`, recommended, fail) — Text-to-HTML ratio 2.9% \(442 text chars / 15,060 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
7. **Text-to-HTML ratio** (`P13`, recommended, fail) — Text-to-HTML ratio 6.4% \(2,047 text chars / 32,191 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
8. **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
9. **Markdown endpoint sends Link rel=canonical** (`P18`, recommended, fail) — No markdown version available
   - How to fix:

     ```
     Link: <https://www.whosbest.org/lists>; rel="canonical"
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc8288
10. **Text-to-HTML ratio** (`P13`, recommended, fail) — Text-to-HTML ratio 1.7% \(321 text chars / 18,446 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
11. **Markdown frontmatter \(title, description, last\_updated\)** (`P16`, recommended, fail) — Markdown has no YAML frontmatter
   - How to fix:

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

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
12. **Markdown endpoint sends Link rel=canonical** (`P18`, recommended, fail) — Markdown response has no Link: rel="canonical" header
   - How to fix:

     ```
     Link: <https://www.whosbest.org/sitemap>; rel="canonical"
     ```

   - Spec: https://www.rfc-editor.org/rfc/rfc8288
13. **Markdown has a \#\# Sitemap section** (`P20`, optional, fail) — No markdown version available
   - How to fix:

     ```
     ## Sitemap
     
     - [Home](https://www.whosbest.org/)
     - [Full sitemap](https://www.whosbest.org/sitemap.md)
     ```

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

     ```
     ## Sitemap
     
     - [Home](https://www.whosbest.org/)
     - [Full sitemap](https://www.whosbest.org/sitemap.md)
     ```

   - Spec: https://vercel.com/kb/guide/agent-readability-spec
15. **Text-to-HTML ratio** (`P13`, recommended, warn) — Text-to-HTML ratio 12.4% \(3,434 text chars / 27,759 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
16. **Text-to-HTML ratio** (`P13`, recommended, warn) — Text-to-HTML ratio 11.2% \(3,895 text chars / 34,655 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
17. **Text-to-HTML ratio** (`P13`, recommended, warn) — Text-to-HTML ratio 10.8% \(2,780 text chars / 25,707 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

## Check results

### Site checks

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `S1` | llms.txt exists | Found llms.txt at https://www.whosbest.org/llms.txt |
| pass | `S2` | llms.txt served as text/plain | Content-Type is text/plain |
| pass | `S3` | llms.txt is non-empty | llms.txt has 8,455 characters |
| pass | `S4` | llms.txt links do not point at .html files | No links point at .html files |
| pass | `S5` | robots.txt allows AI crawlers | None of the 9 known AI crawlers are disallowed |
| pass | `S6` | /llms.txt is not blocked by robots.txt | /llms.txt is allowed for all crawlers |
| pass | `S7` | robots.txt exists | robots.txt found \(19 group\(s\), 1 sitemap line\(s\)\) |
| pass | `S8` | sitemap.xml is valid | Valid sitemap: 341 URL\(s\) |
| pass | `S9` | sitemap entries have lastmod | 341/341 entries \(100%\) have lastmod |
| pass | `S10` | sitemap.md exists | Found sitemap.md at https://www.whosbest.org/sitemap.md |
| pass | `S11` | sitemap.md has headings and links | sitemap.md has 9 heading\(s\) and 101 link\(s\) |
| pass | `S12` | AGENTS.md exists | Found agent instructions at https://www.whosbest.org/AGENTS.md |
| pass | `S13` | AGENTS.md has required sections | 3/3 required section types present |
| 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 |
|---|---|---|---|
| pass | `L1` | llms.txt returns HTTP 200 | HTTP 200 from https://www.whosbest.org/llms.txt |
| pass | `L2` | First line is an H1 title | H1 title: "WhosBest.org" |
| pass | `L3` | Content is parseable markdown \(not an HTML shell\) | Body parses as markdown |
| pass | `L4` | Blockquote summary follows the H1 | Blockquote summary present: "WhosBest.org is an independent, evidence-backed rankings platform for B2B servic…" |
| pass | `L5` | At least one H2 section with a link list | 6 H2 section\(s\) with link lists \(48 links\) |
| pass | `L6` | Link lines use - \[name\]\(url\): notes format | All 48 link line\(s\) are well-formed |
| pass | `L7` | Sampled links resolve \(2xx\) | All 5 sampled link\(s\) returned 2xx |
| pass | `L8` | \#\# Optional section used correctly | \#\# Optional is last and lists 7 link\(s\) |
| pass | `L9` | Served as text/plain | Content-Type: text/plain |
| pass | `L10` | llms-full.txt exists | Found /llms-full.txt \(text/plain\) |

### Markdown negotiation

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `M1` | Serves markdown for Accept: text/markdown | Accept: text/markdown → text/markdown |
| pass | `M2` | Responds with Vary: Accept | Vary: Accept, Accept-Encoding |
| pass | `M3` | Returns 406 for an unsatisfiable Accept | Unsatisfiable Accept → 406 Not Acceptable |
| pass | `M4` | Honours Accept q-values | Both q-value orderings were honoured |

### Bot access

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `B1` | robots.txt has explicit AI-bot rules | Explicit rules for GPTBot, ClaudeBot, CCBot, Google-Extended, PerplexityBot, YouBot, Bytespider, Applebot-Extended, cohere-ai |
| pass | `B2` | robots.txt declares Content-Signal | Content-Signal: search=yes, ai-input=yes, ai-train=yes |
| pass | `B3` | Homepage sends Link headers | Link: \</llms.txt\>; rel="describedby", \</index.md\>; rel="alternate"; type="text/markdown" |
| n/a | `B4` | DNS-AID agent discovery records | DNS-AID lookups disabled for this scan |
| info | `B5` | Web Bot Auth signature directory | No Web Bot Auth directory \(optional; only needed if you operate signed bots\) |

### Protocol discovery

| Status | ID | Check | Message |
|---|---|---|---|
| info | `C1` | MCP server card | No MCP server card \(/.well-known/mcp.json or /.well-known/mcp/server-card.json\) |
| n/a | `C2` | MCP server card is well-formed | No MCP server card to validate |
| info | `C3` | OAuth protected resource metadata | No OAuth protected resource metadata \(/.well-known/oauth-protected-resource\) |
| info | `C4` | A2A agent card | No A2A agent card \(/.well-known/agent-card.json or /.well-known/agent.json\) |
| n/a | `C5` | A2A agent card is well-formed | No A2A agent card to validate |
| pass | `C6` | Agent Skills index | Agent Skills index found at /.well-known/agent-skills/index.json |
| pass | `C7` | API catalog \(/.well-known/api-catalog\) | API catalog found at /.well-known/api-catalog |
| info | `C8` | OAuth / OpenID server metadata | No OAuth/OpenID server metadata \(/.well-known/oauth-authorization-server or /.well-known/openid-configuration\) |
| info | `C9` | security.txt | No security.txt \(RFC 9116\) — optional but recommended |
| 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\) |
| info | `C12` | UCP manifest | No UCP manifest \(/.well-known/ucp\) |
| info | `C13` | ACP manifest | No ACP manifest \(/.well-known/acp.json\) |
| info | `C14` | x402 payment-required endpoints | No x402 \(HTTP 402 + accepts\[\]\) endpoints observed among probed URLs |
| pass | `C15` | Advertised endpoints not blocked by robots.txt | All 44 advertised endpoint\(s\) are crawlable |
| pass | `C16` | Content parity for AI crawlers \(GPTBot vs browser UA\) | Baseline text 3,025 chars vs GPTBot 3,025 chars \(0% difference\) |

### Accessibility (homepage)

| Status | ID | Check | Message |
|---|---|---|---|
| n/a | `A1` | Images have alt text | No \<img\> elements |
| pass | `A2` | Form controls have labels | All 1 form control\(s\) pass |
| fail | `A3` | Links and buttons have accessible names | 1 of 61 link\(s\)/button\(s\) fail |
| n/a | `A4` | Media elements declare width and height | No img/video/iframe elements |
| fail | `A5` | ARIA/label id references resolve and ids are unique | 1 of 15 id\(s\)/reference\(s\) fail |
| n/a | `A6` | iframes have a title | No iframes |
| pass | `A7` | One h1 and no skipped heading levels | All 33 heading\(s\) pass |
| pass | `A8` | No positive tabindex | All 1 tabindex attribute\(s\) pass |
| pass | `A9` | Viewport allows zoom | Viewport allows zoom: width=device-width, initial-scale=1.0, viewport-fit=cover |
| pass | `A10` | Document has a non-empty title | \<title\>WhosBest.org \| The Directory of Excellence\</title\> |
| n/a | `A11` | aria-label includes the visible text | No controls with both aria-label and visible text |
| pass | `A12` | Landmark main or skip link | \<main\> landmark present |
| pass | `A13` | Valid BCP-47 lang | lang="en" is valid |
| pass | `A14` | No focusable content inside aria-hidden | All 17 aria-hidden region\(s\) pass |
| pass | `A15` | No nested interactive controls | All 62 interactive control\(s\) pass |
| pass | `A16` | No empty headings | All 33 heading\(s\) pass |
| pass | `A17` | No timed meta refresh | No meta refresh |
| 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 |
| pass | `A22` | Lists contain only list items | All 5 list\(s\) pass |
| pass | `A23` | ARIA roles and attributes are valid | All 31 ARIA role\(s\)/attribute\(s\) pass |

## Pages

### https://www.whosbest.org/

HTTP 200 · 21/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/ |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 214 chars |
| pass | `P7` | og:title | og:title: WhosBest.org \| The Directory of Excellence |
| pass | `P8` | og:description | og:description: AI-powered, evidence-backed rankings of B2B providers, AI platforms, and social … |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 11 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 33 heading\(s\) |
| fail | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 9.2% \(3,025 text chars / 32,821 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/index.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</index.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 3,025 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/find

HTTP 200 · 21/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/find |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 138 chars |
| pass | `P7` | og:title | og:title: Find a Provider \| WhosBest.org |
| pass | `P8` | og:description | og:description: Tell us what you need and we'll match you with the top-rated B2B providers in yo… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 12 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 9 heading\(s\) |
| fail | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 2.9% \(442 text chars / 15,060 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/find.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</find.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/find\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 442 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/about

HTTP 200 · 21/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/about |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 220 chars |
| pass | `P7` | og:title | og:title: About WhosBest.org — Evidence-backed rankings powered by Winston AI |
| pass | `P8` | og:description | og:description: WhosBest.org publishes evidence-backed rankings powered by Winston AI — transpar… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 25 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 20 heading\(s\) |
| warn | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 12.4% \(3,434 text chars / 27,759 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/about.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</about.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/about\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 3,434 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/check

HTTP 200 · 22/23 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/check |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 300 chars |
| pass | `P7` | og:title | og:title: Agent Readiness Check — Free llms.txt, robots, markdown and metadata scan \| Whos… |
| pass | `P8` | og:description | og:description: Free agent-readiness check. Scan any public website in about 20 seconds for llms… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 30 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 17 heading\(s\) |
| warn | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 11.2% \(3,895 text chars / 34,655 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/check.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</check.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/check\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| pass | `P21` | Code blocks declare a language | All 1 markdown code block\(s\) declare a language |
| n/a | `P22` | API pages link an API schema | Not an API documentation page |
| pass | `P23` | Content does not depend on JavaScript rendering | 3,895 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/lists

HTTP 200 · 16/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/lists |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 135 chars |
| pass | `P7` | og:title | og:title: Browse rankings \| WhosBest.org |
| pass | `P8` | og:description | og:description: Every WhosBest ranking, filtered the way you want. Editorial top lists, Winston … |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 12 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 27 heading\(s\) |
| fail | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 6.4% \(2,047 text chars / 32,191 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| fail | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/lists.md → HTTP 503 text/markdown |
| fail | `P16` | Markdown frontmatter \(title, description, last\_updated\) | No markdown version available to inspect |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</lists.md\>; rel=alternate; type=text/markdown |
| fail | `P18` | Markdown endpoint sends Link rel=canonical | No markdown version available |
| fail | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → HTTP 503 text/markdown |
| 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 | 2,047 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/terms

HTTP 200 · 22/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/terms |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 172 chars |
| pass | `P7` | og:title | og:title: Terms of Service \| WhosBest.org |
| pass | `P8` | og:description | og:description: WhosBest.org terms of service: the rules for using our rankings platform, commun… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 12 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 22 heading\(s\) |
| pass | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 29.3% \(7,277 text chars / 24,871 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/terms.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</terms.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/terms\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 7,277 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/cities

HTTP 200 · 21/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/cities |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 129 chars |
| pass | `P7` | og:title | og:title: Browse Cities \| WhosBest.org |
| pass | `P8` | og:description | og:description: Browse local provider rankings by city across all sectors on WhosBest.org. Evide… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 15 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 10 heading\(s\) |
| fail | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 1.7% \(321 text chars / 18,446 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/cities.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</cities.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/cities\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 321 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/privacy

HTTP 200 · 22/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/privacy |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 143 chars |
| pass | `P7` | og:title | og:title: Privacy Policy \| WhosBest.org |
| pass | `P8` | og:description | og:description: WhosBest.org privacy policy: what information we collect, how we use and protect… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 12 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 21 heading\(s\) |
| pass | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 26.4% \(6,282 text chars / 23,807 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/privacy.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</privacy.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/privacy\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 6,282 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/sitemap

HTTP 200 · 18/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/sitemap |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 137 chars |
| pass | `P7` | og:title | og:title: Site map \| WhosBest.org |
| pass | `P8` | og:description | og:description: Complete site map for WhosBest.org — quick links to every major area including r… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 12 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 19 heading\(s\) |
| warn | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 10.8% \(2,780 text chars / 25,707 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/sitemap.md → text/markdown |
| fail | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Markdown has no YAML frontmatter |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</sitemap.md\>; rel=alternate; type=text/markdown |
| fail | `P18` | Markdown endpoint sends Link rel=canonical | Markdown response has no Link: rel="canonical" header |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| fail | `P20` | Markdown has a \#\# Sitemap section | No \#\# Sitemap heading in markdown |
| 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 | 2,780 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

### https://www.whosbest.org/glossary

HTTP 200 · 22/22 checks passed

| Status | ID | Check | Message |
|---|---|---|---|
| pass | `P1` | Returns HTTP 200 | HTTP 200 |
| pass | `P2` | At most one redirect | No redirects |
| pass | `P3` | Content-Type is text/html | Content-Type: text/html; charset=utf-8 |
| pass | `P4` | No noindex / noai X-Robots-Tag | No restrictive X-Robots-Tag |
| pass | `P5` | Canonical link | canonical: http://www.whosbest.org/glossary |
| pass | `P6` | Meta description \(≥ 50 chars\) | Description is 233 chars |
| pass | `P7` | og:title | og:title: Glossary — Rankings & AI Agent-Readiness Terms \| WhosBest.org |
| pass | `P8` | og:description | og:description: Definitions of the ranking and AI agent-readiness terms used on WhosBest.org — W… |
| pass | `P9` | html lang attribute | lang="en" |
| pass | `P10` | JSON-LD structured data present | 1 JSON-LD block\(s\), 46 node\(s\) |
| pass | `P11` | JSON-LD has required fields | name/headline, description, url/@id, dateModified and BreadcrumbList present |
| pass | `P12` | At least 3 headings \(h1–h3\) | 10 heading\(s\) |
| pass | `P13` | Text-to-HTML ratio | Text-to-HTML ratio 18.1% \(8,834 text chars / 48,841 HTML chars\) |
| pass | `P14` | Links to a glossary | Links to https://www.whosbest.org/glossary |
| pass | `P15` | Markdown mirror \({path}.md\) | https://www.whosbest.org/glossary.md → text/markdown |
| pass | `P16` | Markdown frontmatter \(title, description, last\_updated\) | Frontmatter has title, description and last\_updated |
| pass | `P17` | link rel=alternate type=text/markdown | Link header: \</glossary.md\>; rel=alternate; type=text/markdown |
| pass | `P18` | Markdown endpoint sends Link rel=canonical | Link: \<http://www.whosbest.org/glossary\>; rel="canonical" |
| pass | `P19` | Accept: text/markdown negotiation | Accept: text/markdown → text/markdown |
| pass | `P20` | Markdown has a \#\# Sitemap section | \#\# Sitemap section present |
| 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 | 8,834 chars of server-rendered text |
| pass | `P24` | llms.txt describedby link | Link header: \</llms.txt\>; rel="describedby" |

## 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/70r084v0mxzn)
