Open Knowledge Format · GEO
If an AI talks about your university, make it talk well.
OKF publishes the knowledge your university already has on its website in a format ChatGPT, Perplexity and Gemini read, understand and cite —with a link back to your page.

One file per concept
This is how your university’s knowledge speaks.
Every program, service or relevant fact becomes a structured file with a semantic type, a controlled description and an attribution link.

People no longer just search. They ask.
AI already answers for your university.
But it does not always answer well.
It hallucinates
AI invents facts about your university: wrong enrolment figures, programs that do not exist, incorrect dates.
It cites others
Third-party sources —rankings, media, forums— rank above the university itself when AI answers.
It ignores you
Unstructured knowledge is left out of generative answers. AI omits it because it cannot read it.
What is the Open Knowledge Format?
Your knowledge, in a format machines understand.
OKF is a knowledge bundle —an automatic projection of the content already on your Griddo site— designed so large language models process it correctly.
type
Defines the concept with semantic precision. EducationalProgram, ResearchGroup, CampusService... the AI knows exactly what kind of entity it is reading.
title · description
Direct control of the message. The university decides the exact name and the description the model should associate with that concept, with no reinterpretation.
resource
Canonical attribution link. Every file points to the official URL. When the AI cites you, it does so with a link back to your page.
tags · attributes
Additional structured data: field, delivery mode, duration, price, language. Rich context that improves the accuracy of generative answers.
Our own bundle, live
This is what a university’s knowledge looks like in OKF.
This is Griddo’s real OKF bundle, generated from our own schemas and published at /okf/. Every concept type —programs, events, news, taxonomies…— is declared with its frontmatter and its relationships.
---
type: Griddo Page Content Type
title: Program
description: Degree program with category filters for school, area, modality, and language. Template ProgramDetail. Data pack PROGRAMS.
resource: src/schemas/content-types/page/PROGRAM/index.ts
tags: [program, academic-offer, programs-data-pack]
timestamp: 2026-07-02T00:00:00Z
griddo_schema_type: PageContentType
griddo_from_page: true
griddo_translate: true
griddo_local: false
---
Belongs to the [PROGRAMS data pack](../../data-packs/programs.md). Each instance generates a page rendered by the `ProgramDetail` template.
Category fields (`MultiCheckSelect`) act as filters for [ProgramsDistributor](../../modules/programs-distributor.md) and related listing modules. A program can belong to multiple schools, areas, and modalities simultaneously.
# Schema
| Key | Field type | Title | Mandatory | Notes |
|---|---|---|---|---|
| `title` | TextField | Title | ✅ | Page title and CMS label. |
| `abstract` | Wysiwyg (not full) | Abstract | — | Short rich-text description. |
| `image` | ImageField | Image | — | Thumbnail shown in distributor cards. |
| `centers` | MultiCheckSelect | Centers | — | → [CENTER](../../taxonomies/center.md). `from: categories.centers` |
| `schools` | MultiCheckSelect | Schools | — | → [SCHOOL](../../taxonomies/school.md). `from: categories.schools` |
| `programTypes` | MultiCheckSelect | Program type | — | → [PROGRAM_TYPE](../simple/program-type.md). `from: categories.programTypes` |
| `academicAreas` | MultiCheckSelect | Academic area | — | → [ACADEMIC_AREA](../../taxonomies/academic-area.md). `from: categories.academicAreas` |
| `languages` | MultiCheckSelect | Languages | — | → [LANGUAGE](../../taxonomies/language.md). `from: categories.languages` |
| `modalities` | MultiCheckSelect | Modalities | — | → [MODALITY](../../taxonomies/modality.md). `from: categories.modalities` |
| `intake` | DateField | Starts On | — | Next intake date. `from: intake` |
| `duration` | TextField | Duration | — | Free text (e.g. "18 months"). `from: duration` |
| `seats` | TextField | Seats | — | Free text for available seats. `from: seats` |
| `data` | ReferenceField | Document to download | — | → DOCUMENT (structured data). Manual selection only. |
# Relationships
- Filtered in [ProgramsDistributor](../../modules/programs-distributor.md) by `schools`, `academicAreas`, `programTypes`, `modalities`, `languages`, `centers`.
- [STUDY_PLAN](../simple/study-plan.md) items in the PROGRAMS data pack display inside the `ProgramDetail` template via the StudyPlan module.
- [TESTIMONIAL](../simple/testimonial.md) items reference this program via their `programs` field.
# Citations
[1] [src/schemas/content-types/page/PROGRAM/index.ts](src/schemas/content-types/page/PROGRAM/index.ts)---
type: Griddo Page Content Type
title: Event
description: Academic and institutional events with mandatory date, time, image, and six category filters. Template EventDetail. Data pack EVENTS.
resource: src/schemas/content-types/page/EVENT/index.ts
tags: [event, calendar, events-data-pack]
timestamp: 2026-07-02T00:00:00Z
griddo_schema_type: PageContentType
griddo_from_page: true
griddo_translate: true
griddo_local: false
---
Belongs to the [EVENTS data pack](../../data-packs/events.md). Generates a page via the `EventDetail` template. All six category fields are **mandatory**, making events highly filterable across [EventsDistributor](../../modules/events-distributor.md).
# Schema
| Key | Field type | Title | Mandatory | Notes |
|---|---|---|---|---|
| `title` | TextField | Title | ✅ | |
| `eventDate` | DateField | Date | ✅ | `from: eventDate`. Indexable — used for sorting and filtering. |
| `eventTime` | TimeField | Time | ✅ | `from: eventTime` |
| `thumbImage` | ImageField | Image | ✅ | `from: thumbImage`. Shown in distributor cards. |
| `abstract` | Wysiwyg (not full) | Abstract | — | `from: abstract` |
| `centers` | MultiCheckSelect | Centers | ✅ | → [CENTER](../../taxonomies/center.md). `from: categories.centers` |
| `schools` | MultiCheckSelect | Schools | ✅ | → [SCHOOL](../../taxonomies/school.md). `from: categories.schools` |
| `services` | MultiCheckSelect | Services | ✅ | → [SERVICE](../../taxonomies/service.md). `from: categories.services` |
| `locations` | MultiCheckSelect | Locations | ✅ | → [LOCATION](../../taxonomies/location.md). `from: categories.locations` |
| `topics` | MultiCheckSelect | Topics | ✅ | → [TOPIC](../../taxonomies/topic.md). `from: categories.topics` |
| `type` | MultiCheckSelect | Event type | ✅ | → [EVENT_TYPE](../../taxonomies/event-type.md). `from: categories.type` |
# Relationships
- All six categories are mandatory — every event must be classifiable by center, school, service, location, topic, and type.
- [EventsDistributor](../../modules/events-distributor.md) filters on `eventDate` (indexable) and all category fields.
# Citations
[1] [src/schemas/content-types/page/EVENT/index.ts](src/schemas/content-types/page/EVENT/index.ts)---
type: Griddo Page Content Type
title: News
description: News items with date (indexable), image, and five mandatory category filters. Template NewsDetail. Data pack NEWS.
resource: src/schemas/content-types/page/NEWS/index.ts
tags: [news, editorial, news-data-pack]
timestamp: 2026-07-02T00:00:00Z
griddo_schema_type: PageContentType
griddo_from_page: true
griddo_translate: true
griddo_local: false
---
Belongs to the [NEWS data pack](../../data-packs/news.md) alongside [INS_NEWS](ins-news.md). Generates a page via the `NewsDetail` template. See also [INS_NEWS](ins-news.md) for institutional news without category filters.
# Schema
| Key | Field type | Title | Mandatory | Notes |
|---|---|---|---|---|
| `title` | TextField | Title | ✅ | |
| `newsDate` | DateField | Date | — | `from: newsDate`. Indexable — used for chronological ordering. |
| `abstract` | Wysiwyg (not full) | Abstract | — | `from: abstract` |
| `image` | ImageField | Image | ✅ | `from: image` |
| `centers` | MultiCheckSelect | Centers | ✅ | → [CENTER](../../taxonomies/center.md). `from: categories.centers` |
| `schools` | MultiCheckSelect | Schools | ✅ | → [SCHOOL](../../taxonomies/school.md). `from: categories.schools` |
| `services` | MultiCheckSelect | Services | ✅ | → [SERVICE](../../taxonomies/service.md). `from: categories.services` |
| `topics` | MultiCheckSelect | Topics | ✅ | → [TOPIC](../../taxonomies/topic.md). `from: categories.topics` |
| `types` | MultiCheckSelect | Type | ✅ | → [NEWS_TYPE](../../taxonomies/news-type.md). `from: categories.types` |
# Relationships
- `newsDate` is indexable — used by [NewsDistributor](../../modules/news-distributor.md) for sort and recency filtering.
- Both `NEWS` and `INS_NEWS` belong to the same [NEWS data pack](../../data-packs/news.md); distributors can filter by content type to show only one or both.
- `NEWS` has 5 mandatory category fields; [INS_NEWS](ins-news.md) has none — intended for high-level institutional announcements that cross all category boundaries.
# Citations
[1] [src/schemas/content-types/page/NEWS/index.ts](src/schemas/content-types/page/NEWS/index.ts)---
type: Griddo Taxonomy
title: Academic Area
description: Academic area — title only. Filter in PROGRAMS and TESTIMONIAL.
resource: src/schemas/content-types/simple/ACADEMIC_AREA/index.ts
tags: [academic-area, taxonomy, filter]
timestamp: 2026-07-02T00:00:00Z
griddo_data_packs: [PROGRAMS, TESTIMONIAL]
---
Minimal taxonomy — only a title. Used as `academicAreas` filter in [PROGRAM](../content-types/page/program.md).
# Schema
| Key | Field type | Title | Notes |
|---|---|---|---|
| `title` | TextField | Title | Mandatory. |
# Citations
[1] [src/schemas/content-types/simple/ACADEMIC_AREA/index.ts](src/schemas/content-types/simple/ACADEMIC_AREA/index.ts)---
type: Griddo Data Pack
title: Programs
description: Groups all program-related content types. Feeds ProgramsDistributor, ProgramsList template, and ProgramDetail page.
resource: src/schemas/data-packs/packs/PROGRAMS/index.ts
tags: [programs, data-pack, studies]
timestamp: 2026-07-02T00:00:00Z
griddo_category: STUDIES
---
# Content types in this pack
- [PROGRAM](../content-types/page/program.md) — Page content type. The core entity.
- [STUDY_PLAN](../content-types/simple/study-plan.md) — Curriculum nested structure.
- [ACADEMIC_AREA](../taxonomies/academic-area.md) — Filter taxonomy.
- [CENTER](../taxonomies/center.md) — Filter taxonomy (cross-pack).
- [SCHOOL](../taxonomies/school.md) — Filter taxonomy (cross-pack).
- [PROGRAM_TYPE](../content-types/simple/program-type.md) — Filter with CRM API ID.
- MODALITY, LANGUAGE, FORMAT — CategoryContentType filters.
# Citations
[1] [src/schemas/data-packs/packs/PROGRAMS/index.ts](src/schemas/data-packs/packs/PROGRAMS/index.ts)---
type: Griddo Module
title: Programs Distributor
description: Auto-feeds PROGRAM items from the PROGRAMS data pack. Renders a grid or list of program cards with optional image, heading, subtitle, content, and CTA button. Up to 6 items per instance.
resource: src/schemas/modules/ProgramsDistributor.ts
tags: [distributor, programs, programs-data-pack]
timestamp: 2026-07-02T00:00:00Z
griddo_schema_type: Module
griddo_category: distributors
griddo_data_packs: [PROGRAMS]
griddo_archetype: Distributor
---
Surfaces [PROGRAM](../content-types/page/program.md) items from the [PROGRAMS data pack](../data-packs/programs.md). This is the primary listing module for programs outside of dedicated list templates. Editors configure auto or manual mode; in auto mode the engine applies filter operators from the data pack query.
# Allowed in
| Template | Zone |
|---|---|
| [BasicTemplate](../templates/basic-template.md) | mainSection |
| [ProgramDetail](../templates/program-detail.md) | mainSection |
# Content fields
| Key | Type | Mandatory | Notes |
|---|---|---|---|
| `additional` | TextField | — | Eyebrow label above the heading. |
| `title` | HeadingField | — | Module heading. `isMockup: true`. |
| `subtitle` | Wysiwyg | — | Module subtitle. |
| `content` | Wysiwyg | — | Module body text. |
| `emptyState` | TextField | — | Message shown when no programs match. |
| `data` | ReferenceField | ✅ | Sources: `PROGRAM`. Max 6 items. Auto or manual mode. |
| `image` | RadioGroup | ✅ | Whether to show a program image on cards. Yes/No. |
| `link` | Link | — | CTA button (hideable). |
# Config fields
| Key | Type | Notes |
|---|---|---|
| `anchorID` | TextField | HTML anchor for in-page navigation. |
| `subtheme` | VisualUniqueSelection | Themes: `default`, `default-alt`, `inverse`. |
| `verticalSpacing` | Select | `small` / `medium` / `large`. |
# Flavors
## InnerProgramsDistributor
`src/schemas/modules/InnerProgramsDistributor.ts` — same data pack and source as base. No `sectionList` (used inside Inner/detail page zones). No `anchorID` or theme options — inherits from the parent template. Identical content fields.
## LandingProgramsDistributor
`src/schemas/modules/LandingProgramsDistributor.ts` — restricted to `ProgramLanding.mainSection` and `Landing.mainSection`. No `link` field (landing pages use a form instead). Otherwise identical.
# Relationships
- Feeds from [PROGRAM](../content-types/page/program.md) via [PROGRAMS data pack](../data-packs/programs.md).
- Also appears as default module in [ProgramDetail](../templates/program-detail.md) main section.
# Citations
[1] [src/schemas/modules/ProgramsDistributor.ts](src/schemas/modules/ProgramsDistributor.ts)
[2] [src/schemas/modules/InnerProgramsDistributor.ts](src/schemas/modules/InnerProgramsDistributor.ts)
[3] [src/schemas/modules/LandingProgramsDistributor.ts](src/schemas/modules/LandingProgramsDistributor.ts)---
type: Griddo Template
title: Program Detail
description: Detail page for a single PROGRAM item. Hero title, quick facts sidebar (intake, duration, seats, categories), sticky navigation, and a rich main section with all content and distributor modules.
resource: src/schemas/templates/ProgramDetail.ts
tags: [template, programs-data-pack, detail, program]
timestamp: 2026-07-02T00:00:00Z
griddo_schema_type: Template
griddo_template_type: ProgramDetail
griddo_data_packs: [PROGRAMS]
griddo_mode: detail
---
One page per [PROGRAM](../content-types/page/program.md) item. The richest template in the project: it accepts nearly every content module and all distributor modules relevant to programs. It is the landing destination for links from [ProgramsDistributor](../modules/programs-distributor.md) and [ProgramsList](programs-list.md).
# Zones
| Zone | Type | Max | Whitelist (abbreviated) |
|---|---|---|---|
| `navigation` | ComponentArray | 1 | `ProgramNavigation` |
| `mainSection` | ComponentArray | — | All collection + distributor modules |
# Content fields
| Key | Type | Mandatory | Notes |
|---|---|---|---|
| `heroTitle` | HeadingField | — | Page H1 (separate from the PROGRAM `title`). |
| `additional` | TextField | — | Eyebrow above hero title. |
| `abstract` | Wysiwyg (not full) | — | Short intro text. |
| `image` | ImageField | — | Hero image (hideable). |
| `data` | ReferenceField | — | `DOCUMENT` source — brochure download. Max 1. |
# Quick facts (sidebar fields)
| Key | Source | Notes |
|---|---|---|
| `intake` | DateField | Start date. |
| `duration` | TextField | e.g. "18 months". |
| `seats` | TextField | Number of seats. |
| `centers` | CENTER | Optional. |
| `schools` | SCHOOL | Optional. |
| `programTypes` | PROGRAM_TYPE | **Mandatory**. |
| `academicAreas` | ACADEMIC_AREA | Optional. |
| `languages` | LANGUAGE | Optional. |
| `modalities` | MODALITY | Optional. |
# Config
| Key | Notes |
|---|---|
| `titleSize` | `s` / `m` / `l` / `xl` (default: `m`). |
| `breadcrumbsDesktop` | Show breadcrumbs on tablet/desktop. |
| `breadcrumbs` | Show breadcrumbs on mobile. |
# Default module stack (mainSection)
ProgramIntroForm → BasicContent → CypherCollection → [StudyPlan](../modules/study-plan-module.md) → Quote → DownloadCollection → [TestimonialDistributor](../modules/testimonial-distributor.md) → StepCollection → [PeopleDistributor](../modules/people-distributor.md) → VerticalTabs → FAQCollection
# Relationships
- Template for [PROGRAM](../content-types/page/program.md) items.
- Linked from [ProgramsList](programs-list.md) and [ProgramsDistributor](../modules/programs-distributor.md).
- Accepts [NewsDistributor](../modules/news-distributor.md) for related news.
# Citations
[1] [src/schemas/templates/ProgramDetail.ts](src/schemas/templates/ProgramDetail.ts)Generative Engine Optimization
GEO is the new SEO.
Where SEO optimized for showing up on Google, GEO optimizes for being cited correctly by AI. OKF is the technical layer that makes it possible.
01 · Accurate
OKF publishes real, verified university data. Fewer hallucinations, more precise answers that cite your sources.
02 · Favourable
Control of the narrative: the university decides what information appears, how it is described and what message it carries.
03 · Attributed
AI links back to the official page. Direct traffic, brand attribution and digital authority all go up.
Automatic pipeline
Zero extra work. It generates itself.
OKF requires nothing different from the editorial team. The process happens in the background, from content that already exists.
1 · Content published
The team publishes in Griddo as always: programs, news, services, research. No special format, no additional effort.
2 · Griddo render
Griddo reads the structured content of every page and applies the OKF engine: it selects fields, assigns semantic types and generates the files.
3 · Bundle /okf/
The OKF files are published automatically at the /okf/ path of the university’s domain, accessible and crawlable.
4 · AI cites it
ChatGPT, Perplexity, Gemini and other LLMs crawl the bundle and start using that verified data in their answers, with attribution.
The answer you want the AI to give.
With OKF live, generative models have correct, verified and linked data. The result is a precise answer that cites the university as its source.
What data master’s degrees does UTEF University offer?
UTEF offers the Master’s in Data Science (60 ECTS), an official program aimed at training professionals in data analysis, machine learning and advanced visualization. Available on campus and online, starting in October. For more information and enrolment, see the official site: university.edu/master-data-science
Source: Open Knowledge Format · university.edu/okf/
We do not claim it: we measure it.
We compare how the models behave on the same question, with and without OKF live. The data speaks.
Without OKF
| Metric | Result |
|---|---|
| Corrección de datos | Partial |
| ¿Cita a la universidad? | No |
| ¿Enlaza a la web oficial? | No |
With OKF
| Métrica | Result |
|---|---|
| Corrección de datos | High |
| ¿Cita a la universidad? | Sí |
| ¿Enlaza a la web oficial? | Sí |
Want to be an early adopter?
Engine ready and proven.
Measurement, under way.
OKF deployment is in production and working. We are validating the impact on the models and building the GEO measurement tooling.
OKF engine
The OKF file generator is operational and produces structured bundles from existing Griddo content.
Publishing
Bundles are exposed at the public /okf/ path of the domain, accessible and crawlable by LLMs.
Validated end to end
Full pipeline tested: from content in Griddo through to the model’s answer with correct citation.
GEO measurement
AI presence dashboard under construction: citation frequency, data accuracy, attribution.
Frequently asked questions
Everything you need to know about OKF
An open standard so AI can read your knowledge.
OKF is a format —published by Google Cloud in June 2026— that structures knowledge as markdown files with YAML metadata, so ChatGPT, Perplexity or Gemini can read it, verify it and cite it. It is not a database or a platform: it is a convention.
Google Cloud, as an open and neutral standard.
It was published by Google Cloud (spec v0.1, Apache 2.0 licence) as a vendor-independent standard. Anyone can produce and consume OKF bundles, with no SDK and no account. Its value is in ubiquity, not ownership.
See the specification on GitHubA machine-readable directory of concepts.
A bundle is a folder of markdown files where each file represents a concept —a program, a service, a critical date— with a YAML header (type, title, description, resource, tags, timestamp) and links between concepts. The result is a knowledge graph with no database behind it.
OKF is the infrastructure for GEO.
GEO determines whether your university is well represented in AI answers. OKF makes it possible: it publishes your knowledge in a form models can verify and cite, with an attribution link back to your site.
None. It generates itself.
Your team publishes in Griddo as always. Griddo reads the structured content, applies the OKF engine and exposes the bundles automatically at the /okf/ path of the domain, crawlable by LLMs. No special format and no tickets to IT.
The engine is ready; GEO measurement is under way.
Generating and publishing OKF bundles is operational and validated end to end. We are building the AI presence dashboard. Available to universities already using Griddo.
Read the full analysis
Make your university’s knowledge readable —and citable— by AI.
OKF is available to universities already using Griddo. Request a demo and we will show you what your institution’s bundle looks like.
Want to understand the standard in depth? Read Open Knowledge Format: the standard AI reads.
Want to define your university’s OKF bundles?
Get in touch and we will work through how to structure your university’s ontology so LLMs describe it as precisely and accurately as possible.