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

Read the Ontology

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.

weo-engagement.ttl draft v0 weo-visibility.ttl field-tested weo-core.ttl stable substrate
See the full module reference

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.

View the repo on GitHub