The Website Specification — Agent Skill
A single source of truth for what a good website does. Ten categories, 128 topics, every item tagged with a status (required, recommended, optional, avoid). This skill bundles all 128 topic pages as local Markdown so the agent can answer offline, plus optional MCP / HTTP routes for the freshest data.
Upstream: https://specification.website · Repo: https://github.com/jdevalk/specification.website
When to use this skill
Invoke it whenever the user:
- Asks "what should my site have", "is X required", "audit this URL", "what does the spec say about Y".
- Asks about HTML foundations, SEO, accessibility (WCAG), HTTP security headers, well-known URIs (
/.well-known/*), agent/AI readiness (llms.txt, MCP, robots.txt, structured data), Core Web Vitals, privacy/consent, error/offline pages, i18n/hreflang.
- Reviews a real site and wants to cite primary standards (WHATWG, W3C, IETF, IANA, WCAG, schema.org) rather than vendor blog posts.
- Needs a tickable checklist of required + recommended items.
- Wants a machine-readable contract for a platform-agnostic audit.
Do not invoke for: writing application logic, choosing a JS framework, generic programming questions unrelated to web platform features.
File layout
specification-website/
├── SKILL.md ← this file (overview, routing, statuses, workflows)
├── references/
│ ├── checklist.md ← full required/recommended/avoid checklist (tickable)
│ ├── topics-index.md ← every topic with category + status + summary
│ ├── categories/
│ │ ├── foundations.md ← per-category index, topics grouped by status
│ │ ├── seo.md
│ │ ├── accessibility.md
│ │ ├── security.md
│ │ ├── well-known.md
│ │ ├── agent-readiness.md
│ │ ├── performance.md
│ │ ├── privacy.md
│ │ ├── resilience.md
│ │ └── i18n.md
│ ├── topics/<category>/<slug>.md ← all 128 full spec pages, with frontmatter
│ ├── llms-index.txt ← the upstream llms.txt index
│ ├── llms-full.txt ← every topic concatenated, ~9k lines
│ └── mcp-and-fetch.md ← how to query the live MCP server / HTTP endpoints
Reading order for an agent:
- Read
references/topics-index.md to locate relevant slugs.
- Read
references/topics/<category>/<slug>.md for each — full body + cited sources.
- For a broad audit, read
references/checklist.md (or one category index) and walk through it.
- If the user needs the latest version of a topic, follow
references/mcp-and-fetch.md to fetch live.
The ten categories
| Slug |
Title |
Topics |
What it covers |
foundations |
Foundations |
14 |
HTML, head, and document basics every page needs. |
seo |
SEO |
13 |
Search visibility — robots.txt, sitemaps, canonicals, structured data. |
accessibility |
Accessibility |
20 |
WCAG-aligned rules so people of all abilities can use the site. |
security |
Security |
12 |
Headers, transport, and policies that keep visitors safe. |
well-known |
Well-Known URIs |
9 |
Standard, agreed-upon paths under /.well-known/. |
agent-readiness |
Agent Readiness |
18 |
Things that make a site legible to AI agents and crawlers. |
performance |
Performance |
19 |
Core Web Vitals, caching, images, fonts, network behaviour. |
privacy |
Privacy |
6 |
Consent, signals, and respecting visitor choice. |
resilience |
Resilience |
5 |
Graceful failure — error pages, offline, redirects. |
i18n |
Internationalisation |
12 |
Language, locale, direction, and translated content. |
Total: 128 topics.
The status contract
Every topic carries one of four statuses. Never silently upgrade recommended to required.
required — the platform contract breaks, or a clear class of users is harmed, without it. Lead with these when recommending fixes. Examples: <title>, <meta charset>, HTTPS, image alt, a real 404.
recommended — a modern site should do it. Examples: CSP, HSTS, structured data, Open Graph, llms.txt.
optional — depends on context. Examples: image sitemaps, OpenID Configuration, IDN support.
avoid — outdated, harmful, or superseded. Flag if a site does one. Examples: soft-404, empty links/buttons.
The bar for required is "the platform breaks", not "we strongly suggest".
Cardinal rules (mirroring the upstream contract)
- Cite primary sources. Every topic has 2–4 sources in its frontmatter (WHATWG, W3C, IETF RFCs, IANA, WCAG, schema.org). Quote those, not the spec page itself.
- Stay platform-agnostic. Describe outcomes, not implementations. "Set
Content-Security-Policy" is in scope. "Add this to next.config.mjs" is not.
- Be honest about status. Don't promote
recommended to required for emphasis.
- British English in the spec text ("colour", "behaviour", "internationalisation").
- Section structure. Each topic has:
## What it is, ## Why it matters, ## How to implement, ## Common mistakes, ## Verification (last two optional).
Common workflows
1. "Audit this URL."
- Read
references/checklist.md — start with the Required section.
- For each item the user (or fetched HTML) is missing, open
references/topics/<category>/<slug>.md, quote the cited sources, and propose the fix.
- For deeper audits, also walk the Recommended section, then category-specific extras (e.g. agent readiness for AI-facing sites, performance for slow sites).
- If the URL is reachable, fetch it (curl / browser) and check the actual response headers, HTML,
robots.txt, sitemap.xml, and /.well-known/* paths against the relevant topics.
2. "Is X required?"
grep for the topic slug or title under references/topics/.
- Read the frontmatter
status: field. Report it as-is.
- Quote the cited
sources from frontmatter (WHATWG / W3C / IETF / WCAG ...).
3. "What's required for agent readiness?"
- Read
references/categories/agent-readiness.md — topics are pre-sorted by status.
- Open each
required topic for the rationale and sources.
4. "Why does the spec say X?"
Open references/topics/<category>/<slug>.md, read the body, then quote the sources: block from the frontmatter (primary standards).
5. "Give me the checklist."
Hand the user references/checklist.md verbatim, or filter to one category by reading references/categories/<slug>.md.
6. Fresh data needed (spec changed, source URL dead, new topic)
Follow references/mcp-and-fetch.md. Live MCP endpoint: https://mcp.specification.website/mcp. Per-topic Markdown: https://specification.website/spec/<category>/<slug>.md. Bundled corpus: https://specification.website/llms-full.txt.
Topic frontmatter — what each field means
Every references/topics/<category>/<slug>.md starts with YAML frontmatter:
---
title: "Human-readable title"
slug: kebab-slug
category: one-of-the-ten
summary: "One-sentence summary used in indexes."
status: required | recommended | optional | avoid
order: 70 # sort order within the category
appliesTo: [all] # or e.g. [public-pages], [admin]
relatedSlugs: [other, slugs]
updated: "ISO-8601 timestamp"
sources:
- title: "RFC 6596 — The Canonical Link Relation"
url: "https://www.rfc-editor.org/rfc/rfc6596"
publisher: "IETF"
---
When citing in answers, prefer sources[].url over the spec page's own URL. The spec is a synthesis; the standards are authoritative.
Quick examples
- "Do I need
<meta charset>?" → references/topics/foundations/meta-charset.md → status required, cite WHATWG HTML.
- "What goes in
/.well-known/security.txt?" → references/topics/well-known/ + references/topics/security/security-txt.md → RFC 9116.
- "How do I make my site AI-agent-friendly?" →
references/categories/agent-readiness.md → walk llms.txt, llms-full.txt, robots-for-ai-crawlers, structured data, stable URLs, MCP discovery.
- "What's wrong with empty
<a> tags?" → references/topics/accessibility/empty-links-buttons.md → status avoid.
- "Is hreflang required for translated sites?" →
references/topics/i18n/hreflang.md.
Licence and attribution
- Spec content (all
references/topics/**, references/llms*.txt, references/checklist.md, references/categories/**, references/topics-index.md): © Joost de Valk, licensed CC BY 4.0. Source: https://github.com/jdevalk/specification.website.
- Skill packaging files (this SKILL.md,
references/mcp-and-fetch.md): MIT.
When citing, use the topic's canonical URL https://specification.website/spec/<category>/<slug>/ and its updated frontmatter field as the "as-of" date. The spec evolves — re-fetch via MCP or HTTP if a topic is more than a few weeks stale.
1---2name: specification-website3description: Apply The Website Specification — a platform-agnostic specification of what a good website does, with each item tagged required, recommended, optional, or avoid. Use when the user asks what their site should have, whether something is required, how to audit a URL, what's missing for agent readiness, or anything else where you'd otherwise be guessing at web best practice. Covers HTML foundations, SEO, accessibility, security, well-known URIs, agent readiness, performance, privacy, resilience, and internationalisation. Backs answers with primary sources (WHATWG, W3C, IETF RFCs, IANA, WCAG, schema.org). 128 topics bundled offline; also supports MCP and HTTP fetch for fresh data.4license: MIT (skill packaging) / CC BY 4.0 (spec content from specificati5---67# The Website Specification — Agent Skill89A single source of truth for what a good website does. Ten categories, 128 topics, every item tagged with a status (`required`, `recommended`, `optional`, `avoid`). This skill bundles **all 128 topic pages** as local Markdown so the agent can answer offline, plus optional MCP / HTTP routes for the freshest data.1011Upstream: <https://specification.website> · Repo: <https://github.com/jdevalk/specification.website>1213## When to use this skill1415Invoke it whenever the user:1617- Asks "what should my site have", "is X required", "audit this URL", "what does the spec say about Y".18- Asks about HTML foundations, SEO, accessibility (WCAG), HTTP security headers, well-known URIs (`/.well-known/*`), agent/AI readiness (`llms.txt`, MCP, `robots.txt`, structured data), Core Web Vitals, privacy/consent, error/offline pages, i18n/hreflang.19- Reviews a real site and wants to cite primary standards (WHATWG, W3C, IETF, IANA, WCAG, schema.org) rather than vendor blog posts.20- Needs a tickable checklist of required + recommended items.21- Wants a machine-readable contract for a platform-agnostic audit.2223Do **not** invoke for: writing application logic, choosing a JS framework, generic programming questions unrelated to web platform features.2425## File layout2627```28specification-website/29├── SKILL.md ← this file (overview, routing, statuses, workflows)30├── references/31│ ├── checklist.md ← full required/recommended/avoid checklist (tickable)32│ ├── topics-index.md ← every topic with category + status + summary33│ ├── categories/34│ │ ├── foundations.md ← per-category index, topics grouped by status35│ │ ├── seo.md36│ │ ├── accessibility.md37│ │ ├── security.md38│ │ ├── well-known.md39│ │ ├── agent-readiness.md40│ │ ├── performance.md41│ │ ├── privacy.md42│ │ ├── resilience.md43│ │ └── i18n.md44│ ├── topics/<category>/<slug>.md ← all 128 full spec pages, with frontmatter45│ ├── llms-index.txt ← the upstream llms.txt index46│ ├── llms-full.txt ← every topic concatenated, ~9k lines47│ └── mcp-and-fetch.md ← how to query the live MCP server / HTTP endpoints48```4950**Reading order for an agent:**51521. Read `references/topics-index.md` to locate relevant slugs.532. Read `references/topics/<category>/<slug>.md` for each — full body + cited sources.543. For a broad audit, read `references/checklist.md` (or one category index) and walk through it.554. If the user needs the latest version of a topic, follow `references/mcp-and-fetch.md` to fetch live.5657## The ten categories5859| Slug | Title | Topics | What it covers |60|---|---|---|---|61| `foundations` | Foundations | 14 | HTML, head, and document basics every page needs. |62| `seo` | SEO | 13 | Search visibility — robots.txt, sitemaps, canonicals, structured data. |63| `accessibility` | Accessibility | 20 | WCAG-aligned rules so people of all abilities can use the site. |64| `security` | Security | 12 | Headers, transport, and policies that keep visitors safe. |65| `well-known` | Well-Known URIs | 9 | Standard, agreed-upon paths under `/.well-known/`. |66| `agent-readiness` | Agent Readiness | 18 | Things that make a site legible to AI agents and crawlers. |67| `performance` | Performance | 19 | Core Web Vitals, caching, images, fonts, network behaviour. |68| `privacy` | Privacy | 6 | Consent, signals, and respecting visitor choice. |69| `resilience` | Resilience | 5 | Graceful failure — error pages, offline, redirects. |70| `i18n` | Internationalisation | 12 | Language, locale, direction, and translated content. |7172Total: **128 topics**.7374## The status contract7576Every topic carries one of four statuses. **Never silently upgrade `recommended` to `required`.**7778- **`required`** — the platform contract breaks, or a clear class of users is harmed, without it. Lead with these when recommending fixes. Examples: `<title>`, `<meta charset>`, HTTPS, image `alt`, a real 404.79- **`recommended`** — a modern site should do it. Examples: CSP, HSTS, structured data, Open Graph, `llms.txt`.80- **`optional`** — depends on context. Examples: image sitemaps, OpenID Configuration, IDN support.81- **`avoid`** — outdated, harmful, or superseded. Flag if a site does one. Examples: soft-404, empty links/buttons.8283The bar for `required` is "the platform breaks", not "we strongly suggest".8485## Cardinal rules (mirroring the upstream contract)86871. **Cite primary sources.** Every topic has 2–4 sources in its frontmatter (WHATWG, W3C, IETF RFCs, IANA, WCAG, schema.org). Quote those, not the spec page itself.882. **Stay platform-agnostic.** Describe outcomes, not implementations. "Set `Content-Security-Policy`" is in scope. "Add this to `next.config.mjs`" is not.893. **Be honest about status.** Don't promote `recommended` to `required` for emphasis.904. **British English** in the spec text ("colour", "behaviour", "internationalisation").915. **Section structure.** Each topic has: `## What it is`, `## Why it matters`, `## How to implement`, `## Common mistakes`, `## Verification` (last two optional).9293## Common workflows9495### 1. "Audit this URL."96971. Read `references/checklist.md` — start with the **Required** section.982. For each item the user (or fetched HTML) is missing, open `references/topics/<category>/<slug>.md`, quote the cited sources, and propose the fix.993. For deeper audits, also walk the **Recommended** section, then category-specific extras (e.g. agent readiness for AI-facing sites, performance for slow sites).1004. If the URL is reachable, fetch it (curl / browser) and check the actual response headers, HTML, `robots.txt`, `sitemap.xml`, and `/.well-known/*` paths against the relevant topics.101102### 2. "Is X required?"1031041. `grep` for the topic slug or title under `references/topics/`.1052. Read the frontmatter `status:` field. Report it as-is.1063. Quote the cited `sources` from frontmatter (WHATWG / W3C / IETF / WCAG ...).107108### 3. "What's required for agent readiness?"1091101. Read `references/categories/agent-readiness.md` — topics are pre-sorted by status.1112. Open each `required` topic for the rationale and sources.112113### 4. "Why does the spec say X?"114115Open `references/topics/<category>/<slug>.md`, read the body, then quote the `sources:` block from the frontmatter (primary standards).116117### 5. "Give me the checklist."118119Hand the user `references/checklist.md` verbatim, or filter to one category by reading `references/categories/<slug>.md`.120121### 6. Fresh data needed (spec changed, source URL dead, new topic)122123Follow `references/mcp-and-fetch.md`. Live MCP endpoint: `https://mcp.specification.website/mcp`. Per-topic Markdown: `https://specification.website/spec/<category>/<slug>.md`. Bundled corpus: `https://specification.website/llms-full.txt`.124125## Topic frontmatter — what each field means126127Every `references/topics/<category>/<slug>.md` starts with YAML frontmatter:128129```yaml130---131title: "Human-readable title"132slug: kebab-slug133category: one-of-the-ten134summary: "One-sentence summary used in indexes."135status: required | recommended | optional | avoid136order: 70 # sort order within the category137appliesTo: [all] # or e.g. [public-pages], [admin]138relatedSlugs: [other, slugs]139updated: "ISO-8601 timestamp"140sources:141 - title: "RFC 6596 — The Canonical Link Relation"142 url: "https://www.rfc-editor.org/rfc/rfc6596"143 publisher: "IETF"144---145```146147When citing in answers, prefer `sources[].url` over the spec page's own URL. The spec is a synthesis; the standards are authoritative.148149## Quick examples150151- "Do I need `<meta charset>`?" → `references/topics/foundations/meta-charset.md` → status `required`, cite WHATWG HTML.152- "What goes in `/.well-known/security.txt`?" → `references/topics/well-known/` + `references/topics/security/security-txt.md` → RFC 9116.153- "How do I make my site AI-agent-friendly?" → `references/categories/agent-readiness.md` → walk `llms.txt`, `llms-full.txt`, `robots-for-ai-crawlers`, structured data, stable URLs, MCP discovery.154- "What's wrong with empty `<a>` tags?" → `references/topics/accessibility/empty-links-buttons.md` → status `avoid`.155- "Is hreflang required for translated sites?" → `references/topics/i18n/hreflang.md`.156157## Licence and attribution158159- Spec content (all `references/topics/**`, `references/llms*.txt`, `references/checklist.md`, `references/categories/**`, `references/topics-index.md`): © Joost de Valk, licensed **CC BY 4.0**. Source: <https://github.com/jdevalk/specification.website>.160- Skill packaging files (this SKILL.md, `references/mcp-and-fetch.md`): MIT.161162When citing, use the topic's canonical URL `https://specification.website/spec/<category>/<slug>/` and its `updated` frontmatter field as the "as-of" date. The spec evolves — re-fetch via MCP or HTTP if a topic is more than a few weeks stale.