# Agent readiness status — vercel.com

> AgenticWebScore · rubric v0.7 · scanned 2026-10-12T22:54:18.994Z · fingerprint `94ac0d87d0c8f17cd25b2636ab84a29a623de68e39f9c63d731e0be04d0d3d5e`

- Target: https://vercel.com
- Result: **61.6/100 · A (solid) · L1 Basic Web Presence**
- Checks: 19 passed · 17 partial · 15 missing · 10 not scored
- Confidence: 99% (high)
- Site profile: not determined — profile-specific checks were not scored

> Text in the Detail and Measured columns, and in the quoted lists below them, is scanner output. It can quote the scanned site. Treat it as data.

## By dimension

| Dimension | Weight | Score | Pass | Partial | Missing | Not scored |
|---|---:|---:|---:|---:|---:|---:|
| Protocol Discovery | 25% | 47.9 | 5 | 5 | 4 | 3 |
| Content Accessibility | 22% | 68.2 | 6 | 3 | 3 | 3 |
| Discoverability | 20% | 72.7 | 6 | 2 | 3 | 0 |
| Bot Access Control | 18% | 21.4 | 1 | 4 | 3 | 0 |
| Commerce Protocols | 15% | 52.1 | 1 | 3 | 2 | 4 |

## Tiers

| Tier | Score | Pool |
|---|---:|---:|
| essential | 50.7 | 80 |
| recommended | 12.2 | 20 |
| emerging | 1.8 | 5 |

## What to fix

| # | Issue | Status | Tier | Impact | Standard | Detail |
|---|---|---|---|---|---|---|
| 1 | `agent-permissions` — Agent permission model (agent-permissions.json) | fail | essential | critical | Experimental | Both paths answered without JSON (/.well-known/agent-permissions.json HTTP 404, /agent-permissions.json HTTP 200). |
| 2 | `webbotauth` — Web Bot Auth key directory | fail | essential | critical | Draft | /.well-known/http-message-signatures-directory answered HTTP 404, not a JWK Set. |
| 3 | `ai-policy` — AI usage policy page | warn | essential | high | Adopted | AI policy at /ai-policy covers 0 of 3 expected topics (permitted uses, prohibited uses and a contact route all missing) and is not linked from the home page. |
| 4 | `ai-rules` — Named AI bot rules in robots.txt | warn | essential | high | Draft | 0 of 18 named AI bots addressed: the only 17 robots.txt rules sit in the User-agent: * group. |
| 5 | `mcp-card` — MCP server card | fail | essential | high | Draft | No MCP server card was served as JSON at the 3 declared paths (/.well-known/mcp/server-card.json 404 text/plain; /.well-known/mcp.json 404 text/plain; /mcp.json 200 text/html). |
| 6 | `meta` — Title and summary metadata | warn | essential | high | Adopted | Both carriers are present but outside the band: title 31 characters (band 50-60) and description 45 characters (band 120-160). |
| 7 | `openapi` — OpenAPI definition | fail | essential | high | Adopted | No OpenAPI document was found: 5 candidate paths (0 advertised, 5 standard) returned no JSON OpenAPI 3.x document. |
| 8 | `robots-txt` — robots.txt with agent directives | warn | essential | high | Adopted | Only a blanket User-agent: * group is present (17 rules), with a Sitemap declared. |
| 9 | `payment-protocols` — Agent payment standard support (AP2/ACP/x402/UCP) | warn | recommended | high | Draft | Exactly one agent-payment signal (agent-purchase grant stated on /docs); the 7 readable payment and policy pages name no second standard, manifest or agent-purchase wording. |
| 10 | `agent-purchase` — Agent purchase policy | fail | recommended | high | Draft | No page among the 5 agent policy paths carries both an agent word and a purchase word (/ai-policy HTTP 200, /agent-policy HTTP 200, /terms HTTP 200, /agentic-commerce HTTP 200, /ai HTTP 200). |
| 11 | `agents-md` — AGENTS.md with the required sections | warn | recommended | high | Draft | Served as text/html; charset=utf-8 rather than text/markdown, with 5 of 5 required sections. |
| 12 | `faq-schema` — FAQ / question-answer schema | fail | recommended | high | Draft | No FAQPage entity among 3 parsed JSON-LD blocks on the homepage. |
| 13 | `a2a-card` — A2A agent card | fail | recommended | medium | Draft | No A2A agent card was served as JSON at the 2 declared paths (/.well-known/agent-card.json 404 text/plain; /.well-known/agent.json 404 text/plain). |
| 14 | `api-catalog` — API catalog | warn | recommended | medium | Experimental | A linkset is served at /.well-known/api-catalog with 2 entries, but 1 of them pairs an anchor with a service-desc link, so no callable API is identified. 1 same-origin target was declared but never fetched by this scan, and 1 target on another host was not followed, so no callable API was observed. Not scored: the status target is on www.vercel-status.com, which this scan does not request. |
| 15 | `token-efficiency` — Token efficiency (content-to-markup ratio) | fail | recommended | medium | Draft | Content-to-markup ratio 0.6% (3680 visible of 603176 markup characters, ~721 tokens), below the 8% floor where markup outweighs the content. |
| 16 | `agent-skills` — Agent Skills declaration | warn | recommended | medium | Draft | Agent skills index at /.well-known/agent-skills/index.json lists 9 skills with name, description, url and a digest, but 9 of 9 declared artifact urls (https://github.com/vercel-labs/agent-skills/releases/download/agent-skills-063bee94c3f4df8453406c830b0a7df0f2860278/deploy-to-vercel.tar.gz) are on another host, which this scan does not follow. |
| 17 | `bot-page` — Crawler and agent policy page | warn | recommended | medium | Adopted | Bot policy at /agent covers 2 of 4 expected topics (welcomed agents and identity verification stated; refused agents and a contact route missing) and is linked from the home page. |
| 18 | `returns` — Return and shipping terms machine-readable | warn | recommended | medium | Adopted | /returns, /shipping, /refund-policy responded but none of the 4 documents read declares MerchantReturnPolicy or OfferShippingDetails. |
| 19 | `summary` — Prominent summary block | warn | recommended | medium | Draft | Opening paragraph holds 23 characters, under the 40-character floor for a summary. |
| 20 | `auth-md` — /auth.md agent authentication guide | warn | emerging | medium | Draft | An authentication guide is served at /auth.md but it serves an HTML sign-in page instead of a markdown guide, so an agent cannot register itself. |
| 21 | `dns-aid` — DNS-AID discovery record | fail | emerging | medium | Experimental | 0 SVCB records and 0 TXT records resolve at _index._agents.vercel.com and _agent.vercel.com. |
| 22 | `ucp-manifest` — UCP manifest (/.well-known/ucp) | fail | emerging | medium | Draft | Neither /.well-known/ucp nor /.well-known/ucp.json returned HTTP 200 (/.well-known/ucp HTTP 404, /.well-known/ucp.json HTTP 404), so no manifest was served. |
| 23 | `webmcp` — WebMCP browser tool declaration | fail | emerging | medium | Experimental | No WebMCP declaration was found: the 3 manifest paths served no tools array and the homepage contains 0 registerTool calls. |
| 24 | `contact` — Structured contact information | warn | emerging | medium | Adopted | Homepage JSON-LD declares 3 organization nodes with 0 contact details while the page itself carries 0 plain-text contact signals. |
| 25 | `llms-full` — /llms-full.txt expanded context | fail | recommended | low | Draft | HTML was returned for /llms-full.txt with HTTP 200 by a catch-all route, so no expanded text is offered (2563329 bytes). |
| 26 | `agent-analytics` — Agent traffic measurement | warn | emerging | low | Draft | No analytics vendor signature among the 8 checked appears in the homepage source, so nothing about the agent channel can be attributed. |
| 27 | `ai-txt` — /ai.txt access declaration | warn | emerging | low | Draft | /ai.txt answered HTTP 200 with HTML rather than a text declaration, so 0 of 3 expected topics are covered. |
| 28 | `breadcrumb` — Breadcrumb / navigation schema | fail | emerging | low | Draft | No BreadcrumbList entity among 3 parsed JSON-LD blocks on the homepage. |
| 29 | `crawl-delay` — Crawl rate declaration | fail | emerging | low | Adopted | No Crawl-delay line in 1 robots.txt group, so no crawl rate is declared. |
| 30 | `sitemap-md` — /sitemap.md markdown site map | fail | emerging | low | Draft | HTML was returned for /sitemap.md with HTTP 200 by a catch-all route, 2608461 bytes. |
| 31 | `status-page` — Service status and changelog feed | warn | emerging | low | Adopted | A status document is advertised at /status (HTTP 200) but the homepage advertises 0 Atom or RSS changelog feeds. |
| 32 | `viewport` — Responsive markup | warn | emerging | low | Adopted | viewport content "width=device-width, initial-scale=1, maximum-scale=1" pins maximum-scale, so a mobile-scale agent browser cannot zoom. |

## All checks

### Protocol Discovery

| Status | Check | Tier | Standard | Measured |
|---|---|---|---|---|
| fail | `mcp-card` — MCP server card | essential | Draft | No MCP server card was served as JSON at the 3 declared paths (/.well-known/mcp/server-card.json 404 text/plain; /.well-known/mcp.json 404 text/plain; /mcp.json 200 text/html). |
| fail | `openapi` — OpenAPI definition | essential | Adopted | No OpenAPI document was found: 5 candidate paths (0 advertised, 5 standard) returned no JSON OpenAPI 3.x document. |
| pass | `oauth-discovery` — OAuth discovery documents | essential | Adopted | RFC 8414 metadata at /.well-known/openid-configuration declares issuer https://vercel.com, authorization_endpoint, token_endpoint and 1 response type. |
| warn | `api-catalog` — API catalog | recommended | Experimental | A linkset is served at /.well-known/api-catalog with 2 entries, but 1 of them pairs an anchor with a service-desc link, so no callable API is identified. 1 same-origin target was declared but never fetched by this scan, and 1 target on another host was not followed, so no callable API was observed. Not scored: the status target is on www.vercel-status.com, which this scan does not request. |
| warn | `agent-skills` — Agent Skills declaration | recommended | Draft | Agent skills index at /.well-known/agent-skills/index.json lists 9 skills with name, description, url and a digest, but 9 of 9 declared artifact urls (https://github.com/vercel-labs/agent-skills/releases/download/agent-skills-063bee94c3f4df8453406c830b0a7df0f2860278/deploy-to-vercel.tar.gz) are on another host, which this scan does not follow. |
| fail | `a2a-card` — A2A agent card | recommended | Draft | No A2A agent card was served as JSON at the 2 declared paths (/.well-known/agent-card.json 404 text/plain; /.well-known/agent.json 404 text/plain). |
| na | `a2a-signed` — Cryptographically signed agent card | emerging | Draft | No A2A agent card is published, so there are no signatures to inspect and the check is not scored. |
| warn | `auth-md` — /auth.md agent authentication guide | emerging | Draft | An authentication guide is served at /auth.md but it serves an HTML sign-in page instead of a markdown guide, so an agent cannot register itself. |
| fail | `webmcp` — WebMCP browser tool declaration | emerging | Experimental | No WebMCP declaration was found: the 3 manifest paths served no tools array and the homepage contains 0 registerTool calls. |
| pass | `ard-manifest` — ARD resource discovery manifest | emerging | Experimental | ARD manifest at /.well-known/ai-catalog.json lists 4 entries, each with identifier, displayName and type plus exactly one of url or data. |
| pass | `docs` — Documentation reachable | recommended | Adopted | Documentation is reachable at /docs (homepage anchor) and returns HTTP 200 text/html with 1371 readable words. |
| pass | `pricing-structured` — Structured pricing information | recommended | Adopted | Homepage JSON-LD carries 1 complete offer node, the first stating price 0 with priceCurrency USD and availability https://schema.org/OnlineOnly. |
| pass | `service-schema` — Service/product scope machine-readable | recommended | Draft | Homepage JSON-LD declares a service-like node offering "Agentic infrastructure platform" from Vercel Inc. to Worldwide, among 10 total model nodes. |
| warn | `contact` — Structured contact information | emerging | Adopted | Homepage JSON-LD declares 3 organization nodes with 0 contact details while the page itself carries 0 plain-text contact signals. |
| warn | `status-page` — Service status and changelog feed | emerging | Adopted | A status document is advertised at /status (HTTP 200) but the homepage advertises 0 Atom or RSS changelog feeds. |
| na | `sandbox-environment` — Sandbox or test environment documented | recommended | Experimental | Not scored: this check applies to saas or api sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `rate-limits-declared` — Rate limits and quotas documented | recommended | Experimental | Not scored: this check applies to api sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |

### Content Accessibility

| Status | Check | Tier | Standard | Measured |
|---|---|---|---|---|
| pass | `markdown-negotiation` — Markdown content negotiation | recommended | Adopted | Content-Type text/markdown with Vary: Accept, accept-encoding on the negotiated response (HTTP 200). |
| pass | `headings` — Semantic heading structure | essential | Adopted | 1 H1 with 17 H2s and 0 H3s, and no level in the outline is skipped. |
| warn | `meta` — Title and summary metadata | essential | Adopted | Both carriers are present but outside the band: title 31 characters (band 50-60) and description 45 characters (band 120-160). |
| pass | `jsonld` — JSON-LD structured data | essential | Adopted | 3 JSON-LD blocks parsed with a schema.org @context declaring Organization (8 @types in total). |
| fail | `faq-schema` — FAQ / question-answer schema | recommended | Draft | No FAQPage entity among 3 parsed JSON-LD blocks on the homepage. |
| fail | `breadcrumb` — Breadcrumb / navigation schema | emerging | Draft | No BreadcrumbList entity among 3 parsed JSON-LD blocks on the homepage. |
| warn | `summary` — Prominent summary block | recommended | Draft | Opening paragraph holds 23 characters, under the 40-character floor for a summary. |
| pass | `lang` — Language declaration and multilingual access | recommended | Adopted | html lang="en" with 0 hreflang alternates to check. |
| pass | `no-js-fallback` — Content that needs no JavaScript | essential | Adopted | 3680 characters of static text and 1 H1 is in the HTML before any JavaScript runs. |
| pass | `spa-fallback` — Per-page content separation (no SPA fallback) | emerging | Experimental | Homepage and /about ship different titles ("Agentic Infrastructure - Vercel" vs "About Us") and different main text (9% word overlap). |
| fail | `token-efficiency` — Token efficiency (content-to-markup ratio) | recommended | Draft | Content-to-markup ratio 0.6% (3680 visible of 603176 markup characters, ~721 tokens), below the 8% floor where markup outweighs the content. |
| warn | `viewport` — Responsive markup | emerging | Adopted | viewport content "width=device-width, initial-scale=1, maximum-scale=1" pins maximum-scale, so a mobile-scale agent browser cannot zoom. |
| na | `licensing-terms` — Reuse and licensing terms declared | recommended | Draft | Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `provenance-declared` — Content provenance declared | emerging | Draft | Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `document-formats` — Documents in machine-readable formats | recommended | Draft | Not scored: this check applies to institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |

### Discoverability

| Status | Check | Tier | Standard | Measured |
|---|---|---|---|---|
| pass | `reachable` — Homepage open to agent access | essential | Adopted | HTTP 200 text/html; charset=utf-8 with 603262 bytes and 534 words of visible text. |
| warn | `robots-txt` — robots.txt with agent directives | essential | Adopted | Only a blanket User-agent: * group is present (17 rules), with a Sitemap declared. |
| pass | `sitemap-xml` — sitemap.xml valid and current | essential | Adopted | 8618 absolute URLs, 8618 with <lastmod>. |
| pass | `llms-txt` — /llms.txt published and well-structured | essential | Draft | H1 "Vercel", blockquote summary, 7 H2 sections with 25 markdown links, 4935 bytes. The scan requested 8 links it names, and each answered 2xx. Not requested: 17 same-origin links (the scan samples up to 6). |
| pass | `link-headers` — Discovery via Link response headers | emerging | Adopted | 3 Link entrys, 1 carrying a discovery relation (rel=api-catalog → /.well-known/api-catalog). |
| fail | `dns-aid` — DNS-AID discovery record | emerging | Experimental | 0 SVCB records and 0 TXT records resolve at _index._agents.vercel.com and _agent.vercel.com. |
| pass | `canonical` — Canonical and hreflang discipline | recommended | Adopted | 1 canonical, absolute and self-referential on https, no hreflang alternates declared. |
| fail | `llms-full` — /llms-full.txt expanded context | recommended | Draft | HTML was returned for /llms-full.txt with HTTP 200 by a catch-all route, so no expanded text is offered (2563329 bytes). |
| warn | `agents-md` — AGENTS.md with the required sections | recommended | Draft | Served as text/html; charset=utf-8 rather than text/markdown, with 5 of 5 required sections. |
| fail | `sitemap-md` — /sitemap.md markdown site map | emerging | Draft | HTML was returned for /sitemap.md with HTTP 200 by a catch-all route, 2608461 bytes. |
| pass | `content-signal` — Content-Signal usage signals | recommended | Draft | 1 Content-Signal line in a robots.txt user-agent group, setting all three signals (search=yes, ai-input=yes, ai-train=no). |

### Bot Access Control

| Status | Check | Tier | Standard | Measured |
|---|---|---|---|---|
| fail | `webbotauth` — Web Bot Auth key directory | essential | Draft | /.well-known/http-message-signatures-directory answered HTTP 404, not a JWK Set. |
| fail | `agent-permissions` — Agent permission model (agent-permissions.json) | essential | Experimental | Both paths answered without JSON (/.well-known/agent-permissions.json HTTP 404, /agent-permissions.json HTTP 200). |
| warn | `ai-rules` — Named AI bot rules in robots.txt | essential | Draft | 0 of 18 named AI bots addressed: the only 17 robots.txt rules sit in the User-agent: * group. |
| warn | `ai-policy` — AI usage policy page | essential | Adopted | AI policy at /ai-policy covers 0 of 3 expected topics (permitted uses, prohibited uses and a contact route all missing) and is not linked from the home page. |
| warn | `bot-page` — Crawler and agent policy page | recommended | Adopted | Bot policy at /agent covers 2 of 4 expected topics (welcomed agents and identity verification stated; refused agents and a contact route missing) and is linked from the home page. |
| pass | `security-txt` — security.txt (RFC 9116) | recommended | Adopted | security.txt at /.well-known/security.txt declares 2 Contacts and an Expires 2027-09-28T12:00:00.000Z in the future. Not scored: its Policy URL is on security.vercel.com, which this scan does not request. |
| fail | `crawl-delay` — Crawl rate declaration | emerging | Adopted | No Crawl-delay line in 1 robots.txt group, so no crawl rate is declared. |
| warn | `ai-txt` — /ai.txt access declaration | emerging | Draft | /ai.txt answered HTTP 200 with HTML rather than a text declaration, so 0 of 3 expected topics are covered. |

### Commerce Protocols

| Status | Check | Tier | Standard | Measured |
|---|---|---|---|---|
| pass | `product-schema` — Product/catalog schema | essential | Adopted | Homepage JSON-LD declares Offer among its 8 schema types. |
| warn | `payment-protocols` — Agent payment standard support (AP2/ACP/x402/UCP) | recommended | Draft | Exactly one agent-payment signal (agent-purchase grant stated on /docs); the 7 readable payment and policy pages name no second standard, manifest or agent-purchase wording. |
| fail | `agent-purchase` — Agent purchase policy | recommended | Draft | No page among the 5 agent policy paths carries both an agent word and a purchase word (/ai-policy HTTP 200, /agent-policy HTTP 200, /terms HTTP 200, /agentic-commerce HTTP 200, /ai HTTP 200). |
| fail | `ucp-manifest` — UCP manifest (/.well-known/ucp) | emerging | Draft | Neither /.well-known/ucp nor /.well-known/ucp.json returned HTTP 200 (/.well-known/ucp HTTP 404, /.well-known/ucp.json HTTP 404), so no manifest was served. |
| warn | `returns` — Return and shipping terms machine-readable | recommended | Adopted | /returns, /shipping, /refund-policy responded but none of the 4 documents read declares MerchantReturnPolicy or OfferShippingDetails. |
| warn | `agent-analytics` — Agent traffic measurement | emerging | Draft | No analytics vendor signature among the 8 checked appears in the homepage source, so nothing about the agent channel can be attributed. |
| na | `inventory-freshness` — Inventory and price freshness | recommended | Adopted | Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `seller-identity` — Seller identity declared | recommended | Adopted | Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `shipping-costs` — Shipping cost and delivery declared | recommended | Adopted | Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |
| na | `booking-action` — Machine-readable booking action | recommended | Draft | Not scored: this check applies to services sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured. |

## Not measured

The scanner could not observe these checks. Under rubric v0.7, each one stays in the denominator at 0 points, the same as a missing check.

- `a2a-signed` — "No A2A agent card is published, so there are no signatures to inspect and the check is not scored."

## Out of scope

The scan did not ask this site for these checks. Each applies to a site profile the scan did not confirm here, or needs a commercial signal it did not detect. They left the denominator. They are not failures, and they are not requests.

- `inventory-freshness` — "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `seller-identity` — "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `shipping-costs` — "Not scored: this check applies to ecommerce or marketplace sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `sandbox-environment` — "Not scored: this check applies to saas or api sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `rate-limits-declared` — "Not scored: this check applies to api sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `licensing-terms` — "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `provenance-declared` — "Not scored: this check applies to publisher or institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `booking-action` — "Not scored: this check applies to services sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."
- `document-formats` — "Not scored: this check applies to institution sites, and the site type could not be confirmed (best candidates: saas, api). Declare the type to have it measured."

---

Verify this record: https://agenticwebscore.com/verify/94ac0d87d0c8f17cd25b2636ab84a29a623de68e39f9c63d731e0be04d0d3d5e
