Appearance
ADP 1.0 -- AI Discovery Page Specification Fresh
Status: Draft | Published: February 2026 | Companion to: LLM-LD 1.0 | License: CC BY 4.0
Abstract
The AI Discovery Page (ADP) specification defines a standard HTML page that websites publish to advertise the existence and location of their machine-readable AI layer. It serves as a bridge between the human web and the structured AI layer described by LLM-LD, providing a predictable entry point that both automated systems and human visitors can use to locate all AI-accessible resources.
This document standardizes the URL, required HTML metadata, structured data format, link relations, and human-readable content for an AI Discovery Page.
Table of Contents
- Problem Statement
- Design Principles
- Terminology
- URL and Placement
- Document Structure
- Head Element Requirements
- Structured Data (JSON-LD)
- Body Content
- HTTP Requirements
- Relationship to LLM-LD
- Discovery Chain
- Security and Privacy
- Conformance Levels
- Complete Example
- Anti-Patterns
1. Problem Statement
LLM-LD 1.0 defines several discovery mechanisms for llm-index.json: the well-known URI, robots.txt declarations, <link> elements, HTTP headers, and directory lookups. These mechanisms work well for automated crawlers that know what to look for.
However, they leave several gaps:
For AI systems: There is no single, predictable HTML page that consolidates pointers to all AI-layer resources (the LLM-LD index, the llms.txt manifest, entity feeds, knowledge graphs, the AI sitemap, and typed data feeds).
For humans: Site visitors, developers, and auditors who encounter an "AI-Optimized" badge or footer link have no standardized page to land on.
For site owners: There is no clear template for how to build this bridge page correctly.
The ADP specification addresses these gaps by standardizing a single HTML document that serves as the canonical discovery hub for an organization's AI layer.
2. Design Principles
One page, two audiences. The ADP is a valid HTML page that humans can read and that machines can parse. Structured data in the
<head>carries the machine payload; the<body>carries a human explanation.Complementary, not redundant. The ADP does not replace
llm-index.json,robots.txtdirectives, or<link rel="llm-index">on individual pages. It adds a consolidated discovery hub that points to all of them.Minimal by default. A conforming ADP can be very short. The specification defines required minimums and optional enrichments.
Correct semantics. Link relations, JSON-LD types, and HTML structure follow established web standards.
Progressive disclosure. Crawlers can get everything they need from
<head>alone. They never need to parse the<body>.
3. Terminology
AI Discovery Page (ADP) -- The HTML document defined by this specification.
AI Layer -- The collection of machine-readable resources a website publishes for consumption by AI systems. This typically lives on a dedicated subdomain (e.g., ai.example.com) or path.
Resource Manifest -- The structured data block within the ADP's JSON-LD that enumerates all AI-layer resources, their types, and their purposes.
Primary Site -- The main human-facing website (e.g., www.example.com).
4. URL and Placement
4.1 Canonical Location
The ADP MUST be published on the primary site (not the AI subdomain). This makes it discoverable through normal web crawling of the human site.
The ADP SHOULD be served at one of the following paths, listed in order of preference:
| Priority | Path | Notes |
|---|---|---|
| 1 | /ai.html | Short, predictable, crawlable |
| 2 | /ai | Clean URL (server must return HTML) |
| 3 | /ai-discovery | Descriptive, unambiguous |
4.2 Well-Known Redirect (Optional)
Implementations MAY register a well-known URI that redirects to the ADP:
GET /.well-known/ai-discovery HTTP/1.1
HTTP/1.1 302 Found
Location: /ai.html4.3 Why Not .well-known/?
The ADP is intended to be linkable from site navigation (footer badges, "AI-Optimized" links). Well-known URIs are not designed for human-facing content.
5. Document Structure
An ADP is a valid HTML5 document with three required zones:
+------------------------------------------+
| <head> |
| +-- Meta tags (charset, viewport) |
| +-- Title and description |
| +-- Canonical URL |
| +-- Link relations (Section 6) | <- Machine audience
| +-- JSON-LD structured data (Sec 7) |
+------------------------------------------+
| <body> |
| +-- Site identity |
| +-- Resource directory | <- Human audience
| +-- Explanation (optional) |
| +-- Footer / attribution |
+------------------------------------------+The <head> carries the complete machine-readable payload. An AI system that parses only <head> MUST be able to discover every AI-layer resource.
6. Head Element Requirements
6.1 Required Meta Elements
html
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />6.2 Title
The <title> MUST include the organization name and the words "AI Discovery":
html
<title>{Organization Name} -- AI Discovery</title>6.3 Description
html
<meta name="description"
content="Machine-readable AI layer discovery for {Organization Name}." />6.4 Robots Directive
The ADP SHOULD be indexable:
html
<meta name="robots" content="index, follow" />6.5 Canonical URL
html
<link rel="canonical" href="https://www.example.com/ai.html" />6.6 Link Relations
Required Link Relations
Must be present if the corresponding resource exists:
rel Value | Resource | Type |
|---|---|---|
llm-index | LLM-LD Index | application/json |
html
<link rel="llm-index"
type="application/json"
href="https://ai.example.com/.well-known/llm-index.json"
title="LLM-LD Index" />Recommended Link Relations
rel Value | Resource | Type |
|---|---|---|
ai-manifest | LLMs.txt manifest | text/plain |
sitemap | AI Sitemap | application/xml |
html
<link rel="ai-manifest"
type="text/plain"
href="https://ai.example.com/llms.txt"
title="LLMs Manifest" />
<link rel="sitemap"
type="application/xml"
href="https://ai.example.com/sitemap.xml"
title="AI Sitemap" />Optional Link Relations
Additional AI-layer resources use rel="ai-resource" with a data-resource-type attribute:
html
<link rel="ai-resource"
type="application/json"
href="https://ai.example.com/entities.json"
title="Entity Index"
data-resource-type="entities" />
<link rel="ai-resource"
type="application/json"
href="https://ai.example.com/knowledge.graph.json"
title="Knowledge Graph"
data-resource-type="knowledge-graph" />Prohibited Practices
- DO NOT use
rel="alternate"for AI-layer resources.alternatemeans "same content, different format," which is semantically wrong. - DO NOT use
rel="preload"orrel="prefetch"for AI-only resources.
7. Structured Data (JSON-LD)
The ADP MUST include a single <script type="application/ld+json"> block in <head>.
7.1 Root Object
json
{
"@context": [
"https://schema.org",
"https://llmld.org/v1"
],
"@type": "llmld:DiscoveryPage",
"@id": "https://www.example.com/ai.html",
"name": "{Organization Name} -- AI Discovery",
"description": "AI layer discovery hub for {Organization Name}.",
"dateModified": "2026-02-02T12:00:00Z"
}@type: MUST be llmld:DiscoveryPage.
@id: MUST be the canonical URL of the ADP.
7.2 isPartOf -- Parent Site
json
{
"isPartOf": {
"@type": "WebSite",
"name": "{Organization Name}",
"url": "https://www.example.com"
}
}REQUIRED.
7.3 llmld:aiLayer -- AI Layer Declaration
json
{
"llmld:aiLayer": {
"url": "https://ai.example.com",
"name": "{Organization Name} AI Layer",
"description": "Machine-readable mirror of public, approved content."
}
}REQUIRED. The url property MUST point to the root of the AI-layer domain or path.
7.4 llmld:resources -- Resource Manifest
json
{
"llmld:resources": [
{
"@type": "llmld:AIResource",
"identifier": "llm-index",
"name": "LLM-LD Index",
"url": "https://ai.example.com/.well-known/llm-index.json",
"encodingFormat": "application/json",
"description": "Site-wide machine-readable index (LLM-LD 1.0).",
"category": "index",
"priority": 1
},
{
"@type": "llmld:AIResource",
"identifier": "llms-manifest",
"name": "LLMs Manifest",
"url": "https://ai.example.com/llms.txt",
"encodingFormat": "text/plain",
"description": "Plain-text manifest for LLM ingestion.",
"category": "manifest",
"priority": 2
}
]
}REQUIRED. MUST contain at least one resource.
Resource Object Properties:
| Property | Type | Required | Description |
|---|---|---|---|
@type | String | Yes | MUST be llmld:AIResource |
identifier | String | Yes | Unique slug (e.g., llm-index) |
name | String | Yes | Human-readable resource name |
url | URL | Yes | Absolute URL to the resource |
encodingFormat | String | Yes | MIME type of the resource |
description | String | Yes | One-sentence description |
category | String | Yes | Resource category |
priority | Integer | No | Suggested fetch order (1 = first) |
dateModified | DateTime | No | Last update timestamp |
Resource Categories:
| Category | Description | Typical Files |
|---|---|---|
index | Site-wide structured index | llm-index.json |
manifest | Plain-text or markdown manifest | llms.txt |
sitemap | URL listing for crawlers | sitemap.xml |
entities | Entity-first structured data | entities.json |
knowledge-graph | Relationship and context data | knowledge.graph.json |
feed | Typed data feed | products.json, services.json |
schema | Validation schemas | JSON Schema files |
other | Anything else | -- |
7.5 llmld:conformance (Optional)
json
{
"llmld:conformance": {
"level": 3,
"level_name": "Agent-Ready",
"validated": true,
"validated_by": "https://llmdisco.com"
}
}8. Body Content
8.1 Required Elements
- Site identity heading:
<h1>{Organization Name} -- AI Discovery</h1> - Brief explanation paragraph (1-3 sentences)
- Resource directory with clickable links to AI resources
- Acknowledgment of the LLM-LD standard
8.2 Recommended Elements
- "About this standard" section explaining LLM-LD
- Link to primary site
- Last-updated timestamp
9. HTTP Requirements
9.1 Content Type
Content-Type: text/html; charset=utf-89.2 Caching
Cache-Control: public, max-age=36009.3 CORS
The ADP SHOULD be accessible cross-origin:
Access-Control-Allow-Origin: *10. Relationship to LLM-LD
The ADP is a companion to LLM-LD 1.0, not a replacement for any of its discovery mechanisms. The ADP is the HTML bridge; llm-index.json is the machine-readable payload.
Discovery chain:
robots.txt -> Allow: /ai-discovery
footer link -> /ai-discovery (ADP)
ADP <head> -> llm-index.json, llms.txt, sitemap.xml, entities.json
ADP <body> -> llmdisco.com (discovery network)11. Discovery Chain
The ADP is the hub of the discovery chain for an AI-readable website:
- Entry point: Footer link
🤖 AI-Optimized Websiteon every main-site page - ADP head: Machine-parseable resource manifest via
<link>elements and JSON-LD - ADP body: Human-readable explanation and clickable resource links
- Network link: Pointer to llmdisco.com master sitemap
- Network: All member sites discoverable from any single ADP
12. Security and Privacy
No Private Data
The ADP, like all LLM-LD files, MUST NOT expose:
- Authentication tokens or API keys
- Private contact information not already publicly available
- Internal business data
Content Injection
The ADP's structured data may be consumed by AI systems. Avoid content that could cause prompt injection.
13. Conformance Levels
Minimal ADP: Has llmld:DiscoveryPage JSON-LD, at least one <link rel="llm-index">, and a human-readable body. No footer link requirement for the ADP itself (footer link is on the main site).
Recommended ADP: Minimal ADP plus: <link rel="ai-manifest">, <link rel="sitemap">, llmld:aiLayer, llmld:resources with priority order, CORS headers, links to the LLM Disco Network.
Complete ADP: Recommended ADP plus: All applicable <link rel="ai-resource"> elements, llmld:conformance, multiple resource categories, last-updated timestamp, links to entity and knowledge graph resources.
14. Complete Example
html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Acme Corp -- AI Discovery</title>
<meta name="description"
content="Machine-readable AI layer discovery for Acme Corp. Built on LLM-LD." />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://www.acmecorp.com/ai-discovery" />
<!-- AI Resource Links -->
<link rel="llm-index"
type="application/json"
href="https://ai.acmecorp.com/.well-known/llm-index.json"
title="LLM-LD Index" />
<link rel="ai-manifest"
type="text/plain"
href="https://ai.acmecorp.com/llms.txt"
title="LLMs Manifest" />
<link rel="sitemap"
type="application/xml"
href="https://ai.acmecorp.com/sitemap.xml"
title="AI Sitemap" />
<link rel="ai-resource"
type="application/json"
href="https://ai.acmecorp.com/entities.json"
title="Entity Index"
data-resource-type="entities" />
<!-- Structured Data -->
<script type="application/ld+json">
{
"@context": ["https://schema.org", "https://llmld.org/v1"],
"@type": "llmld:DiscoveryPage",
"@id": "https://www.acmecorp.com/ai-discovery",
"name": "Acme Corp -- AI Discovery",
"description": "AI layer discovery hub for Acme Corp.",
"dateModified": "2026-02-01T12:00:00Z",
"isPartOf": {
"@type": "WebSite",
"name": "Acme Corp",
"url": "https://www.acmecorp.com"
},
"llmld:aiLayer": {
"url": "https://ai.acmecorp.com",
"name": "Acme Corp AI Layer",
"description": "Machine-readable version of Acme Corp public content."
},
"llmld:resources": [
{
"@type": "llmld:AIResource",
"identifier": "llm-index",
"name": "LLM-LD Index",
"url": "https://ai.acmecorp.com/.well-known/llm-index.json",
"encodingFormat": "application/json",
"description": "Complete site-wide machine-readable index.",
"category": "index",
"priority": 1
},
{
"@type": "llmld:AIResource",
"identifier": "llms-manifest",
"name": "LLMs Manifest",
"url": "https://ai.acmecorp.com/llms.txt",
"encodingFormat": "text/plain",
"description": "Plain-text manifest for LLM ingestion.",
"category": "manifest",
"priority": 2
}
],
"llmld:conformance": {
"level": 3,
"level_name": "Agent-Ready",
"validated": true,
"validated_by": "https://llmdisco.com"
}
}
</script>
</head>
<body>
<main>
<h1>Acme Corp -- AI Discovery</h1>
<p>
This page provides discovery links to Acme Corp's machine-readable AI layer.
It is intended for AI crawlers, agents, and developers.
</p>
<h2>Resources</h2>
<ol>
<li>
<a href="https://ai.acmecorp.com/.well-known/llm-index.json">LLM-LD Index</a>
-- Complete site-wide machine-readable index (application/json)
</li>
<li>
<a href="https://ai.acmecorp.com/llms.txt">LLMs Manifest</a>
-- Plain-text manifest for LLM ingestion (text/plain)
</li>
<li>
<a href="https://ai.acmecorp.com/sitemap.xml">AI Sitemap</a>
-- Full URL listing (application/xml)
</li>
<li>
<a href="https://ai.acmecorp.com/entities.json">Entity Index</a>
-- Structured entity data (application/json)
</li>
</ol>
<h2>About This Standard</h2>
<p>
This AI layer is built on <strong>LLM-LD</strong> (Large Language Model Linked Data) --
an open standard for making websites machine-readable to AI systems and agents.
</p>
<p>Standard: llmld.org | Network: llmdisco.com</p>
<h2>Primary Site</h2>
<p><a href="https://www.acmecorp.com">acmecorp.com</a></p>
</main>
<footer>
Acme Corp -- Standard: LLM-LD 1.0 -- Network: LLM Disco
</footer>
</body>
</html>15. Anti-Patterns
DO NOT use rel="alternate" for AI resources.
DO NOT embed the entire llm-index.json as inline JSON in the ADP body. Use <link> elements and the JSON-LD manifest.
DO NOT put the ADP on the AI subdomain. It MUST be on the primary site.
DO NOT require authentication to access the ADP. It must be publicly accessible.
DO NOT serve the ADP only in response to specific user-agent strings. Serve it to all crawlers.