WEO — the Web Engine Optimization Ontology
An open-source RDF/OWL vocabulary that names the discipline underneath SEO, GEO, AEO, and whatever gets called next.
weo:v0.2 · open draft · CC BY 4.0
Why WEO
Marketers already think in "-EO." SEO named the discipline of being legible to search engines. Then generative engines needed answering, so the field reached for GEO — in 2024, researchers at Princeton and IIT Delhi formally introduced Generative Engine Optimization as an optimization problem distinct from traditional SEO [arXiv:2311.09735]. Then AEO, for answer engines. The list keeps growing: generative engines, answer engines, conversational agents, and whatever ships next quarter.
The underlying discipline hasn't changed. In every case, the work is the same: make your content legible and creditable to the machine sitting between you and your audience. WEO names that discipline once, instead of minting a new acronym per surface.
Structurally, this is handled by an Engine taxonomy: SearchEngine, GenerativeEngine, AnswerEngine, and ConversationalAgent are all subclasses of Engine. A new surface becomes a new subclass, not a new vocabulary.
RANKS_FOR ↺ — the signature hierarchy
Five tiers, one hierarchy
- judgment — a strategist's claim, labeled as one
- derivation — a model's output — method, model, confidence
- observation — a measured fact
- episode — happened at a time, immutable
- entity — a durable identity
Every term in WEO is typed by the kind of claim it makes. The hierarchy is fixed, and always read in this order:
Entity — a durable identity: a Website, a URL, a Brand.
Episode — something that happened at a time, and is immutable once recorded: a Crawl, a SerpSnapshot.
Observation — a measured fact, grounded in a primary standard or API contract.
Derivation — a model's output: it carries method, model, and confidence, because it's a claim about a claim.
Judgment — a strategist's claim, explicitly labeled as one — targetsIntent, attributedResponse — never disguised as fact.
An agent assembling context can filter straight down to observations and skip the judgments, or trace a derivation back to the observation it was computed from.
Three modules
weo-core.ttl — the SEO substrate: Website, URL, Term, Crawl, SerpSnapshot, Topic, SearchPerformanceFact.
weo-visibility.ttl — the xEO layer: the Engine taxonomy, Brand, Prompt, LLMResponse, and relations like CITES, MENTIONS, FANS_OUT_TO.
weo-engagement.ttl — draft v0: SearchIntent, ConversionPoint, ConversionEvent.
A fourth file, schema.cypher, ships Neo4j 5.x constraints and indexes for all three.
Principles
- Storage-agnostic. The ontology defines meaning and identity keys, not storage. The graph holds what you traverse, the column store holds high-cardinality time-series facts, the vector store holds embeddings, the CRM holds the pipeline — identity keys join across all of them.
- Tenancy is data, not schema. Scope lives in properties like
websiteId, never in dynamic labels. - Integrate with data sources, not vocabularies. CRM and analytics mapping modules are operational pointers — identity keys like
crmRecordRef,datasetUri— never a baked-in vendor vocabulary. - Standards-grounded. Every observational term cites the spec or API contract that defines it: HTTP [RFC 9110], WHATWG HTML/URL, RFC 6596's canonical link relation, the GSC Search Analytics API, per-provider LLM response annotations.
v0.2 — open draft
WEO is at v0.2: an open draft, built to be riffed on. Issues and pull requests are welcome. It's built by Inbound Found, working backwards from a production marketing knowledge graph, then generalized — and it's released under CC BY 4.0.