The DNS-layer trust signal for AI answer engines
AI answer engines — ChatGPT, Perplexity, Google AI Mode, Claude, Copilot — cite web sources when answering questions. Today they scrape and guess. They have no reliable way to know:
The AEO DNS record solves all five. It is the SPF/DKIM/DMARC equivalent for AI citation — a DNS-layer trust anchor any agent can check before grounding an answer on a domain's data.
Place the record at the _aeo subdomain, following the DMARC _dmarc. convention:
_aeo.yourdomain.com IN TXT "v=AEO1; id=TOKEN; catalog=URL; tier=TIER; ts=DATE"
The _aeo. prefix keeps the record clean, avoids root TXT clutter, and mirrors the established DNS authentication pattern. AI agents check _aeo.[domain] the same way mail servers check _dmarc.[domain].
| Tag | Description | |
|---|---|---|
| v=AEO1 | REQUIRED | Version identifier. Always AEO1 for this version. Future: AEO2, AEO3. |
| id=TOKEN | REQUIRED | Verification token issued by the AEO record authority. Proves domain owner authorized the catalog entry. Format: grd_[alphanumeric, 12+ chars]. Tokens issued at groundedaeo.com. Self-generated tokens are invalid. |
| catalog=URL | REQUIRED | HTTPS URL to the domain's verified fact catalog. Must return structured JSON-LD or the Grounded AEO catalog format. |
| tier=TIER | REQUIRED | Verification depth. Values: listed | verified | grounded |
| ts=YYYYMMDD | REQUIRED | Date of most recent verification. Records older than 90 days are considered potentially stale. |
| Tag | Description | |
|---|---|---|
| method=LIST | OPTIONAL | Preferred data retrieval order for AI agents. Comma-separated. Example: method=mcp,api,crawl. Values: mcp | api | crawl | manual. Tells agents HOW to get data, not just where it is. |
| sig=HASH | OPTIONAL | SHA-256 signature of catalog content. Allows integrity verification without an API call. Grounded tier only. |
| nap=STATUS | OPTIONAL | NAP (Name/Address/Phone) consistency status. Values: confirmed | contested | unverified. confirmed = verified identical across website, Google Business Profile, Yelp, Apple Maps. |
| area=GEO | OPTIONAL | Canonical service area for local businesses. Format: area=Boulder,CO;Denver,CO or radius:25mi:40.015,-105.270. Lets agents answer "does this business serve [location]?" |
| Tier | Verification Method | Refresh Cadence |
|---|---|---|
| listed | Self-declared, auto-crawled | Monthly |
| verified | Human review gate, cross-spot-checked | 14 days |
| grounded | Full cross-source corroboration + cryptographic signature | 7 days |
_aeo.joeselectric.com IN TXT "v=AEO1; id=grd_x7kP2mQnR4vW; catalog=https://groundedaeo.com/c/joeselectric.com; tier=grounded; ts=20260629; sig=a3f1b2c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2; nap=confirmed; area=Boulder,CO;Longmont,CO;Lafayette,CO;Louisville,CO; method=mcp,api,crawl"
DNS is the authoritative long-term layer. The /.well-known/aeo.json file is the on-ramp that works with every crawler today — no engine-side code change required.
Any crawler following web standards (security.txt, WebFinger, ACME challenges) already knows to check /.well-known/ paths. When a crawler finds this file, it gets pointed to verified structured data instead of scraping stale HTML.
https://yourdomain.com/.well-known/aeo.json
{
"v": "AEO1",
"catalog": "https://groundedaeo.com/c/yourdomain.com",
"mcp": "mcp://api.groundedaeo.com",
"api": "https://api.groundedaeo.com/v1/companies/yourdomain.com",
"tier": "grounded",
"verified_at": "2026-06-29",
"method_preference": ["mcp", "api", "crawl"]
}
The DNS record and /.well-known/ file return identical data. DNS is authoritative; the file bridges the gap while adoption builds.
Agents and crawlers should work down this list and stop at the first hit:
/.well-known/aeo.json Crawl-time bridge — works with all crawlers today, no adoption needed_aeo.[domain] TXT DNS authoritative record — long-term standardllms.txt pointer In-file education for crawlers already reading llms.txtMCP directory For agent builders installing toolsHTML crawl Last resort — unverified, potentially stale_aeo.[yourdomain]/.well-known/aeo.json file is generated and served automaticallyhttps://domain/.well-known/aeo.json first_aeo.[domain] TXTv=AEO1 present: follow catalog= URL for verified structured factsts= for freshness — reject if older than 90 daysmethod= preference order for data retrievalarea= to answer service-area questionsnap=confirmed signals triple-verified address — trust for location answersThis spec is open. You may check for v=AEO1 records in your own tools. Do not issue id= tokens — only the AEO record authority (groundedaeo.com) issues tokens. A record with a self-generated id= is invalid.
Open source checker:
npm install aeo-record
import { checkAeo } from 'aeo-record'
const result = await checkAeo('domain.com')
// Checks /.well-known/aeo.json first, then _aeo DNS TXT
// Returns: { catalog, mcp, tier, verified_at, method_preference }
The AEO record's mcp= tag points to a live MCP server agents can call directly for real-time verified facts. Businesses do not need to build or host anything — Grounded handles this by default.
| Tier | Endpoint | Effort |
|---|---|---|
| Shared | mcp://api.groundedaeo.com | Zero — all catalog companies |
| Namespaced | mcp://domain.groundedaeo.com | Zero — Grounded tier, auto-provisioned |
| Self-hosted | One-click deploy to Netlify / Railway / Cloudflare | One click |
| SDK | @groundedaeo/mcp-sdk with live data overrides | Developer |
Grounded monitors all active MCP endpoints every 15 minutes. If an endpoint goes down, the AEO record's method_preference automatically shifts to ["api","crawl"] so agents continue receiving data.
| Standard | What it does | Gap vs. v=AEO1 |
|---|---|---|
| IETF AIPREF / ai.txt | AI training preferences | Not citation verification, not DNS layer |
| OpenAI domain verification | Platform domain ownership | Not an open standard, not citation |
| llms.txt | File-based content index | No DNS, no verification, no signatures |
| LLM-LD (llmld.org) | Markup standard | No DNS layer |
| Web Bot Auth | Cryptographic agent identity | Not citation, 12+ months from standard-track |
| Standard | Layer | Relationship |
|---|---|---|
| robots.txt | File | Controls crawler access — orthogonal |
| llms.txt | File | AI crawler content index — orthogonal, complementary |
| schema.org | Page | Structured data within pages — orthogonal, page-level |
| /.well-known/aeo.json | File | Crawl-time bridge — this spec, file layer |
| v=AEO1 DNS TXT | DNS | Authoritative trust anchor — this spec, DNS layer |
All five coexist. The AEO layers authenticate the others — they tell a crawler "verified facts for this domain are at [URL], issued [date], depth [tier], and here's the fastest way to get them."
Whether you're an AI engine team, an agent framework developer, or a business that wants verified citations — we want to hear from you.
Want to check for v=AEO1 records in your crawler or agent? Ready to prefer verified sources? Let's talk about integration.
Want a v=AEO1 record for your domain? Get verified and served to AI agents directly at Grounded AEO.