Publishing an OKF bundle with 11ty

Greyscale pixalated image of Simon Cox

What is OKF

Google Cloud's Open Knowledge Format (OKF v0.1) was released on 12 June 2026 by Google Cloud and is essentially a formalisation of something developers and SEOs have been doing informally for a while — maintaining markdown knowledge bases. If you've used llms.txt, agents.md, or Obsidian-style vaults, then the architecture should already be familiar. OKF just pins down the small set of conventions needed to make those patterns interoperable between different producers and consumers.

The format itself is minimal — a directory of markdown files with YAML frontmatter carrying six fields: type, title, description, resource, tags, and timestamp. Only type is mandatory but these six I would consider as required. No SDK, no runtime, no proprietary lock-in. If you can serve static files you can publish OKF, which is why 11ty is such a natural fit for this.

The problem it's solving is the fragmentation of organisational knowledge across wikis, catalogs, code comments, and shared drives — every AI agent builder is currently solving the same context-assembly problem from scratch. OKF is Google's bid to standardise the format so knowledge produced by one team or tool can be consumed by any agent without translation.

From an SEO angle the resource field is the key hook — it links every concept file back to a canonical URL, which is how an AI citing your bundle traces back to your site. That's the citation and attribution mechanism baked into the spec.

My thoughts on crawlers

Google has been at the forefront of crawling for nearly 30 years. That's a lot of time and experience for the LLMs (Large Language Models) to catch up on. We have already seen the LLMs making huge mistakes but that is reducing as they learn and adapt - hence the plethora of new models being launched. Meanwhile HTML is actually reasonably easy to parse and extract the content so why even bother with a standard for this?

At the end of the day my site is small, it's not costing me anything to build this other than my time, so I have. It might be useless but it's my useless and I will know a lot more about how all this, waves vaguely over the Ai minefields, is evolving.

But creating a load of markdown files to be consumed by agents means they are not reading my text - well they are agents, they don't care. However they may surface my content in front of people when using AI tools to research or answer questions.

What I am doing is Brand building by being everywhere all at once, which is of course impossible, and for my next trick I will turn this wine into a sort of water.

The Google search team, who I respect a lot, are saying that Markdown files are a waste of time, and that's fair, for search results they may be. But it's not a waste of my time to experiment with these things so there they are. I might be wasting your time reading this, and I can only apologise.

Sorry that was a but like a grandma backstory on a recipe website. Let's get into the ingredients:

What is needed in your 11ty site

You can build 11ty sites in a multitude of ways. With my setup I create the original content in Markdown files which 11ty uses, with templates, to create fully static html files. If you have ever considered using a Static Site Generator then please do consider 11ty - which is planning to change it's name to Build Awesome at some point in the near future but I understand this should all still work just fine.

Site structure

My 11ty development structure for the OKF files is this:

/src/
└── okf/
    ├── okf-articles.njk
    ├── okf-index.njk
    └── okf-log.njk

and the output: (I output to a directory named public for neatness but that is essentially the root.)

/okf/
├── index.md
├── log.md
└── articles/
    ├── [slug].md
    └── ...

Slug being the file name. All my articles are created as individual .md files under /okf/articles/ And that is what is deployed.

OKF file structure

There are three files needed:

okf-index.njk template

This file holds all the information about the other files - it is a list of the markdown files available for the agents.

okf-index.njk template code

---json

{

"permalink": "okf/index.md",

"eleventyExcludeFromCollections": true

}

---

---

type: Index

title: Simon Cox — Technical SEO Knowledge Bundle

description: Technical SEO articles and resources from Simon Cox, freelance Technical SEO consultant with 30+ years experience. Covers technical SEO, schema markup, GEO, 11ty and web standards.

resource: {{ site.url }}

tags: [technical-seo, schema, geo, 11ty, web-standards]

timestamp: {{ page.date.toISOString().split('T')[0] }}

okf_version: "0.1"

---
# Simon Cox — Technical SEO Knowledge Bundle
Articles and resources from Simon Cox, UK-based freelance Technical SEO consultant.

## Articles
{% for post in collections.feed | reverse -%}

- [{{ post.data.title }}]({{ site.url }}/okf/articles/{{ post.fileSlug }}.md)

{% endfor %}

## About
Simon Cox is a UK-based freelance Technical SEO consultant with 30+ years of experience in website management, planning, building and SEO. Operating through Cox and Co Creative, based in Lingfield, Surrey.
  
[simoncox.com]({{ site.url }}) · [llms.txt]({{ site.url }}llms.txt)

Copy this and create a file /src/okf/okf-index.njk

The post in collections.feed loop populates the list.

The important thing to remember is that 11ty will turn a .md file into a html file unless you tell it not to do that, and you do that by specifying a permalink and that will ensure the generated file stays as a .md file. I have also set "eleventyExcludeFromCollections": true to ensure the files are not listed in the sitemap or any of the lists on the site.

The okf_version: frontmatter is an option field for OKF - I have added it in more to remind me what version I am using later on when I have forgotten.

okf-articles.njk template

The articles need the OKF frontmatter and the content. My articles are written in Markdown but the frontmatter is written for 11ty to create the html files, so first I had to also strip out the original frontmatter when 11ty processed the files and that meant an 11ty filter.

11ty filter to strip the frontmatter

To strip the original frontmatter I created the 11ty filter stripFrontmatter and place it in my .eleventy.js file.

eleventyConfig.addFilter("stripFrontmatter", function(content) { return content.replace(/^---[\s\S]*?---\n/, ''); });

And in the okf-articles.njk template file I added the following to include the article content:

{{ post.rawInput | stripFrontmatter | safe }}

The safe ensures there are no html artefacts.

okf-articles.njk template code

---json

{

"pagination": {

"data": "collections.feed",

"size": 1,

"alias": "post"

},

"permalink": "okf/articles/{{ post.fileSlug }}.md",

"eleventyExcludeFromCollections": true

}

---

---

type: Article

title: {{ post.data.title | safe }}

description: {{ post.data.description | safe }}

resource: {{ site.url }}{{ post.url }}

tags: [{% for tag in post.data.tags %}{{ tag }}{% if not loop.last %}, {% endif %}{% endfor %}]

timestamp: {{ (post.data.dateUpdated or post.date).toISOString().split('T')[0] }}

---

  

{{ post.rawInput | stripFrontmatter | safe }}

  

[Read full article]({{ site.url }}{{ post.url }})

Copy this and create a file /src/okf/okf-articles.njk

okf-log.njk template

The log file is really just for my testing but here it is anyway:

okf-log.njk template code

---json

{

"permalink": "okf/log.md",

"eleventyExcludeFromCollections": true

}

---

---

type: Log

title: Simon Cox Knowledge Bundle — Update Log

description: Chronological history of updates to this OKF bundle. Auto-generated at build time.

timestamp: {{ page.date.toISOString().split('T')[0] }}

---

# Update Log
This log is auto-generated at build time. The bundle is rebuilt on every simoncox.com deployment. 

## {{ page.date.toISOString().split('T')[0] }}

- Bundle regenerated — {{ collections.feed | length }} articles indexed

- Source: [simoncox.com]({{ site.url }})

Copy this and create a file /src/okf/okf-log.njk if you feel you need it.

Discovery for OKF

It is all very well deploying these files but if they cannot be found then they are not doing anything useful which is why they need to be discovered.

llms.txt reference

I have placed a reference to the OKF bundle in the llms.txt file:

## OKF Knowledge Bundle
- [Knowledge Bundle Index](https://www.simoncox.com/okf/index.md)

Robots.txt

To help things along I have added the following line in my robots.txt

User-agent: *
Allow: /okf/

Some crawlers might use the robots.txt file for discovery so this will help them on their way.

There is no documentation for this yet but I have created a couple of links in the head to aid discovery.

<link rel="okf" type="text/markdown" href="https://www.simoncox.com/okf/index.md">

<link rel="knowledge-bundle" type="text/markdown" href="https://www.simoncox.com/okf/index.md">

I had no idea if this would work but on the basis that if it doesn't it's not causing any harm I implemented it. Within a short period I got this in my spreadsheet tracking:

Timestamp Path User Agent Country Referer Bot Type
2026-06-17T11:26:27.243Z /okf/index.md OAI-SearchBot/1.4 US /short-articles/2023-05-15-cloudflare-pages-error-with-11ty-build/ OpenAI SearchBot

Tracking

My site is hosted on Cloudflare Pages and I wanted to have some tracking on these files. I use Fathom Analytics for the site but cannot run the javascript on these plain.md files. There are Metrics, available in the AI Crawl control section of Cloudflare, but I wanted to extend that so have built a tracking solution using the Cloudflare Analytics Engine binding, a Pages Function that intercepts /okf/* requests and logs to Google Sheets via Apps Script.

I might find time to write that up at some point as it can be useful. The advantage this has over the Cloudflare analytics is that I have included a referring field and that has already revealed the meta link tag is being read - which was a bit of a surprise.

Is my site going to get more traffic or reach the number one slot in search using this?

Probably not. Highly unlikely to make any difference to ranking in Google search as has been alluded to in the Search Off the Record Podcast with Martin Splitt, John Mueller. But, the Google Cloud team have published this standard and my take is the Search Team are, rightly, playing it down else it's going to be the next gold rush – with most people not getting anything. The Cloud team have decided to publish this so lets see what happens.

What I am watching for

While I'm testing this to see what happens I am also checking regularly to see where the bots come from, who they are, what type of bots they are and what they read. I have no expectations at this point in time! Please do check back for updates.

Thanks

This article was prompted by a fabulous article that Suganthan Mohanadasan and the tool he built that allows you to put together your own OKF files very quickly.

I'm going to thank Chris Green too as he has been posting his usual insightful thoughts on this subject.

The Google Cloud Github which has their working code base for OKF and may help you with your implementation.

Update 2026-06-30

I have been monitoring the visits to the pages and there are already some interesting indications. Initially each of the posts had the link only to the okf index page. This was to see how often that page got hit and if the bots picked up the article urls. On the whole they did not go any further than the index page, despite its full list and urls of all the article pages. The exception was Meta - they gobbled the lot up like free lunch.

Overall there were visits from quite a few different bots and a lot of humans, kind of not surprising considering they may have read this post and had been curious! Unless they are bots pretending to be people of course. (We are not quite there yet are we?)

table and pie chart showing the number of bots hits

Update 2026-07-11

It has been nearly a month monitoring the visits to the OKF markdown content and some interesting patterns are emerging.

I am only able to identify some of the bots so those not identified are placed ina collection with the human traffic. Following this post going live there has been a fair bit of human traffic to the the OKF content but in amongst that are bots I can't identify yet. As and when I discover new bots I add them into my detection script and I have now changed the script to flag any non US Google visits as suspicious as it is unusual for Google to crawl from outside the USA.

Live DataStudio charts for my OFK traffic

Bar chart showing the number of bots hits

Insights to date

The bundle is being found and crawled, but unevenly.

The clearest divide is depth. Meta's meta-external agent did a full traversal of all the 214 published articles within days of discovery (more have been published since). Amazonbot has become the steadiest consumer, grinding through articles daily since 25 June. ClaudeBot shifted from occasional citation-driven fetches to a proper bundle traversal on 7 July (a burst of multiple articles per second, then sustained crawling). GPTBot and OAI-SearchBot behave differently from everyone else. Baidu progressed to article level and looks like it will continue to devour the content over the next few weeks. Google, surprisingly, has not been very active: every Googlebot hit remains on /okf/index.md only, never a single article, despite repeat visits and the page links. For a format authored by Google Cloud engineers, Google search crawlers showing the least interest in the bundle's contents is the finding of the piece so far. Perhaps thats because they know me...

The per-article link tags work — for OpenAI.

Nearly all GPTBot and OAI-SearchBot fetches carry referers from the HTML article pages, meaning they're discovering .md files via the rel="okf" link tags, that I put in the head, rather than walking the index. They arrive in characteristic pairs seconds apart. They picked up the visit-to-st-margarets-bay.md post the same day I published it. That's per-article, near-real-time OKF discovery via link tag — the mechanism works, and at least one major AI company is using it as far as I can tell.

Human attention came in three phases, machines ran in parallel.

The launch spike when I published this article came, unsurprisingly, from Bluesky, Mastodon, and the 11ty community (17–18 June) because that's where I socially posted. Search took over from around day three, with Kagi notably beating Google as an early referrer before Google became the daily driver; then the SEO practitioner community from 1 July via Marie Haynes' SEO Community, which is still still sending traffic ten days on - thank you!

The messy findings.

Things to think about include: Raw Nunjucks placeholders and example paths inside article markdown get parsed as links by crawlers (GPTBot and ClaudeBot requesting bookmark.url and path/to/your/image.jpg as URLs) — something I was not aware of and will affect anyone publishing markdown bundles. Punctuated slugs produce broken variants - I am having some issues with old post urls! And impersonation is a thing: a fake "Googlebot" arrived via the 11ty firehose RSS, which prompted the country-check addition to my classifier script for the spreadsheet.

Next thing to do

It is a fun experiment and costs me nothing so I am going to let this run for a while, keep an eye on the charts and keep a watch on the OKF spec in case anything changes.

By Simon Cox | Published: : Updated: Post | Web | Featured

Previous post: Measuring the effectiveness of your redirects

If you would like to keep up to date with my musings, I do have a handy rss feed!

Featured articles

Latest Articles

Or all the articles

Latest Shorticles

Or all the short articles