| Internet-Draft | AEO1 | July 2026 |
| Miller | Expires 19 January 2027 | [Page] |
This document specifies AEO1 (Answer Engine Optimization, version 1), a discovery mechanism that allows a domain owner to publish a verifiable, machine-readable pointer to a structured, owner-attested fact catalog for that domain. AEO1 consists of three coordinated surfaces: a DNS TXT record at the "_aeo" subdomain, a JSON document at the well-known URI "/.well-known/aeo.json", and an optional HTML link hint. Records may carry an Ed25519 signature issued by an issuing authority, enabling consuming agents such as AI answer engines to distinguish verified, current, domain-authorized data from unverified crawled content. The design follows the DNS-authenticated trust-anchor pattern established by SPF, DKIM, and DMARC. This document also requests provisional registration of the "aeo.json" well-known URI suffix.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 19 January 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
AI answer engines (large language model based systems that answer natural-language questions with a synthesized response rather than a list of links) increasingly serve as a primary interface through which users discover information about organizations, businesses, products, and services. These systems typically ground their answers in web crawls, search index snapshots, or general training data. None of those sources provide a reliable, machine-checkable signal of:¶
This document defines AEO1, a discovery convention that gives a domain owner a predictable, verifiable place to publish a pointer to a structured fact catalog, together with a verification tier, tenure information, and an optional cryptographic signature. The design intentionally mirrors SPF [RFC7208], DKIM [RFC6376], and DMARC [RFC7489]: a low-friction DNS TXT record at a conventionally named subdomain, checked by automated systems before trusting domain-associated content. The well-known URI surface follows the precedent of security.txt [RFC9116].¶
The AEO1 format is an open specification. The living specification, JSON Schema, and worked examples are published at https://aeorecord.org [AEO-SPEC]. This document describes version 0.2 of that specification. An open-source verifier is available as the "aeo-record" package in the npm registry.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
AEO1 defines three coordinated discovery surfaces. A consuming agent SHOULD attempt them in the following order, stopping at the first successful retrieval:¶
The authoritative anchor of an AEO1 deployment is a TXT resource record published at the "_aeo" subdomain of the domain being described, following the convention established by DMARC's "_dmarc" prefix:¶
_aeo.example.com. IN TXT "v=AEO1; id=grd_a1b2c3;
catalog=https://issuer.example/c/example.com;
tier=verified; ts=20260629; sig=<base64-ed25519-signature>"
¶
Placing the record under "_aeo" rather than at the domain apex avoids collision with other TXT records (SPF, domain verification tokens, etc.) commonly present at the apex. The record value is a semicolon-separated list of tag=value pairs. Whitespace around separators is ignored.¶
All AEO1 tag names and the "v=AEO1" version token are US-ASCII protocol constants; they are never localized or translated, following the practice of SPF, DKIM, and DMARC. Where the domain being described is an internationalized domain name, the "_aeo" label is prepended to the domain's A-label (Punycode) form as defined by IDNA2008 [RFC5890], and a consuming agent resolves the record using that A-label form.¶
Because DNS-record checking requires explicit implementation by a consuming agent, this document also defines an equivalent discovery surface at a well-known URI [RFC8615]:¶
https://example.com/.well-known/aeo.json¶
This resource, when present, MUST contain a JSON [RFC8259] object with fields semantically equivalent to the tags defined in Section 3.1, as described in Section 4. Retrieval of the resource is safe and idempotent: it is read-only JSON with no side effects.¶
A consuming agent MAY check this URI in place of, or prior to, a DNS TXT lookup. When both surfaces are present and disagree, the DNS record is authoritative. The well-known resource exists to enable adoption by systems that already fetch /.well-known/ resources (per the precedent of security.txt [RFC9116] and WebFinger [RFC7033]) but do not yet perform AEO-specific DNS lookups.¶
A domain MAY additionally advertise its AEO record from within its HTML pages using a link element with the link relation type "aeo":¶
<link rel="aeo" href="/.well-known/aeo.json">¶
This hint lets agents that parse page markup, but that would not otherwise probe well-known URIs or DNS, discover the record in-page. The hint is advisory only: a consuming agent that follows it MUST apply the same validation it would apply to a directly fetched /.well-known/aeo.json resource. Registration of the "aeo" link relation type in the IANA "Link Relation Types" registry [RFC8288] may be requested separately; the hint functions without such registration.¶
The tier value expresses verification depth on an ordinal scale so that consuming agents can weight trust appropriately:¶
Consuming agents MAY apply different trust thresholds depending on the sensitivity of the query (for example, requiring "grounded" tier before citing time-sensitive or safety-relevant facts such as business hours for urgent or emergency services).¶
The /.well-known/aeo.json resource contains a single JSON object. A JSON Schema for the document is published at https://aeorecord.org/aeo.schema.json; the living specification [AEO-SPEC] is normative for field-level detail. Example:¶
{
"v": "AEO1",
"catalog": "https://issuer.example/c/example.com",
"mcp": "mcp://api.issuer.example",
"api": "https://api.issuer.example/v1/companies/example.com",
"tier": "verified",
"verified_at": "2026-06-29",
"last_confirmed_at": "2026-07-04",
"method_preference": ["mcp", "api", "crawl"]
}
¶
All AEO1 JSON resources — the aeo.json document and the fact catalog it references — are encoded in UTF-8 [RFC8259], so fact values in any language or writing system are carried without transformation. A human-readable fact value MAY carry an associated language tag per BCP 47 [RFC5646], and an issuing authority MAY publish the same fact in more than one language so that a consuming agent can cite the value whose language matches the query. Language tagging does not alter canonicalization (Section 5.1): every published value, whatever its language, is normalized and hashed by the single procedure defined there.¶
An issuing authority signs records with Ed25519 [RFC8032]. The signature carried in the sig= DNS tag is computed over the canonical string:¶
AEO1|domain|tier|ts|facts_hash¶
where "domain" is the domain being described, "tier" and "ts" are the values published in the DNS record, and "facts_hash" is the SHA-256 digest of the canonical fact-catalog content defined in Section 5.1. Binding the hash of the catalog content into the signed string allows a consuming agent to detect tampering with catalog content after issuance. The issuing authority re-signs the record whenever the catalog facts or tier change.¶
The "facts_hash" is computed over a deterministic canonical form of the domain's published facts, so that every conforming implementation reproduces an identical hash regardless of platform, locale, or text encoding. Each published fact is reduced to a JSON object with exactly the three string members "fact_type", "key", and "value". Canonicalization proceeds as follows:¶
Because the canonical form is UTF-8 and ordered by code point, it is script-independent: facts in any language or writing system canonicalize deterministically under this single procedure, with no locale-dependent behavior. Verifiers MUST apply the identical canonicalization before checking a signature.¶
An issuing authority MUST publish its verification keys as a JSON document at the well-known path "/.well-known/aeo-public-key.json" on the authority's own domain. Each key entry carries at minimum a key identifier ("key_id"), the Ed25519 public key, and a status of "active", "retired", or "revoked".¶
Verifiers MUST refuse signatures made with keys whose published status is "revoked". Verifiers MUST accept signatures made with "active" keys and SHOULD accept signatures made with "retired" keys (keys rotated out of service but not compromised), so that previously issued records remain verifiable across routine rotation.¶
A reference verifier is available as the open-source "aeo-record" package in the npm registry.¶
Because DNS TXT records can only be modified by parties with access to the domain's authoritative DNS zone, publication of a "v=AEO1" record is itself evidence of domain-owner intent, consistent with the trust model used by SPF and DMARC. However, a self-declared record (no id=, no sig=) carries no assurance beyond DNS publication. Consuming agents MUST NOT treat self-declared records as equivalent to "verified" or "grounded" records, and MUST NOT trust a claimed tier value that is not backed by a valid issuer signature. A malicious domain owner can claim any tier in an unsigned record; the tier is only meaningful when the signature verifies against a known issuing authority.¶
Compromise of an issuing authority's private key would allow forgery of signed records at any tier. Authorities MUST be able to mark keys "revoked" in their public-key document, and verifiers MUST honor that status (Section 5.3). Authorities SHOULD rotate keys periodically (publishing superseded keys as "retired") and SHOULD protect private keys in managed secret storage. Verifiers SHOULD NOT cache public-key documents beyond a modest lifetime, so that revocation takes effect promptly.¶
Unsigned DNS responses can be spoofed by on-path attackers or through cache poisoning. Deployments SHOULD sign the zones carrying _aeo records with DNSSEC, and consuming agents SHOULD validate DNSSEC where available. Absent DNSSEC, the Ed25519 issuer signature (Section 5) remains the strongest integrity signal, since a spoofed record cannot carry a valid signature over attacker-chosen values.¶
The catalog=, mcp=, and api= values are attacker-controllable URLs from the consuming agent's perspective. An agent that dereferences them from server-side infrastructure is exposed to server-side request forgery (SSRF). Consuming agents MUST require the "https" scheme, SHOULD refuse to fetch URLs that resolve to loopback, link-local, or private address ranges, SHOULD re-apply these checks on every hop of an HTTP redirect chain, and SHOULD bound redirect depth, response size, and fetch time.¶
Because ts= expresses tenure rather than freshness (Section 3.1.1), agents seeking a freshness signal SHOULD consult "verified_at" and "last_confirmed_at" in the aeo.json document and weight confidence accordingly, rather than rejecting records by age. Fact catalogs remain assertions by their publisher and issuing authority; AEO1 conveys who attested what and when, not ground truth.¶
IANA is requested to register the following entry in the "Well-Known URIs" registry, following the procedure of [RFC8615]:¶
A provisional registration for this suffix, with the same change controller and referencing https://aeorecord.org, was requested through the IANA protocol-assignment process in July 2026 and may already appear in the registry; in that case this document serves as an additional specification document for the existing entry rather than a new registration.¶
This document makes no other requests of IANA. It creates no new registries.¶
The record design draws directly on the deployment experience of SPF, DKIM, DMARC, and security.txt.¶