AHTML vs schema.org JSON-LD
extends, doesn’t replace
schema.org describes entities. AHTML describes entities AND the actions you can take on them.
AHTML is not a competitor to schema.org. AHTML emits schema.org JSON-LD as part of every snapshot, and reads your existing schema.org markup to bootstrap a Level-0 snapshot with zero code changes.
Feature-by-feature
The honest table.
| schema.org JSON-LD | AHTML | |
|---|---|---|
| Typed entities | ✓ | ✓ (ingests schema.org) |
| Typed actions (with cost/reversibility) | ✓ (Action partial) | ✓ (first-class contract) |
| Confirmation requirement | — | ✓ |
| Side-effect declarations | — | ✓ |
| Freshness / TTL | — | ✓ |
| Conditional fetch (ETag) | — | ✓ |
| Site-wide policy | — | ✓ |
| Rate-limit signaling | — | ✓ |
| Auto-generated from your data layer | — | ✓ |
| Emits MCP + OpenAPI + llms.txt | — | ✓ |
| Signed provenance | — | ✓ (v0.2) |
| Format | JSON-LD | JSON / compact text + JSON-LD as one emission |
Pick schema.org JSON-LD when
- You only need search-engine rich results, not agent actions.
- You’re happy hand-writing JSON-LD for each page type.
- You don’t need freshness, TTL, or rate-limit signaling.
Pick AHTML when
- You want agents to take action, not just read.
- You want JSON-LD generated from one source instead of duplicated across templates.
- You want freshness + TTL + ETag built into the snapshot.
- You want a site-wide manifest (<code>/.well-known/ahtml.json</code>) agents can discover first.
What they have in common
- Both expose typed entities (Product, Article, Event, etc.).
- Both can be embedded inline or served at a dedicated endpoint.
- Both are open standards.
Three minutes to install. Decide for yourself.
AHTML is MIT-licensed and runs entirely inside your app. No SaaS, no per-request cost, no lock-in.