One URL, every representation
A Bloxx page is not just an HTML document. The same URL serves Markdown, plain text, structured JSON and the JSON-LD graph alone, generated by the renderer and cached at the edge.
Nothing was configured to make this work. It is a property of the renderer, so it is true of every page on every Bloxx domain.
The idea
A page has one canonical address and several honest representations of the same content. A browser wants HTML. A model ingesting your docs wants Markdown. A pipeline wants JSON. A validator wants the structured-data graph on its own. Making a consumer scrape HTML to get any of those is a choice, not a constraint.
So the rule is: formats are a suffix on the canonical URL. Learn it once, apply it to any page, on any Bloxx domain, without reading documentation per site.
The four formats
| Suffix | Content-Type | What it returns |
|---|---|---|
| (none) | text/html | The page, as a human reads it |
.md | text/markdown | Markdown: headings, prose, lists and links, no chrome |
.txt | text/plain | Flat text, for anything that just wants the words |
.json | application/json | The page as structured content |
.schema | application/ld+json | The JSON-LD graph alone, nothing else |
curl https://bloxx.page/formats.md
curl https://bloxx.page/formats.schema
curl https://bloxx.page/formats.jsonPrecise about the mechanism, because it matters: Bloxx serves these as a suffix on the path. Accept: text/markdown header negotiation is a separate thing, offered at the zone level by Cloudflare's Markdown for agents, and the two are complementary rather than the same feature. A ?as= query alias is designed but not implemented.
Why this is the interesting part
It is the per-page evolution of llms.txt
not one hand-written file describing a site, but every page describing itself, generated from the page and always current.
It removes the parsing step
a model reading .md never has to guess which <div> was the content and which was the cookie banner. Less to get wrong, fewer tokens spent.
It makes structured data checkable
.schema returns the graph on its own, so validating what a page claims is one request rather than a parse.
The honest version of the pitch: we do not yet know how much answer engines reward this. Bloxx logs which format views get requested and by which user agents, so the question gets answered with data rather than opinion. If the machine views turn out to be ignored, that will show up in the numbers and we will say so.
Machine-readable content is also no longer an exotic idea, which is a good sign rather than a bad one. Cloudflare now publishes an agent-readiness scanner that checks Markdown negotiation alongside robots rules, Link headers, DNS-based discovery, MCP server cards, Agent Skills and OAuth discovery. A rubric is forming. The interesting question is no longer whether machine formats matter, it is who makes a site pass the whole rubric without the owner doing fifteen separate pieces of work.
Modifiers
Formats are a suffix. Modifiers are a query. Same discipline, different axis.
Being precise: the four format views are live. The modifiers below are designed, not built. They are documented here because the grammar is the product, and it is worth knowing where it goes. Do not plan around them yet.
| Modifier | Status | Intent |
|---|---|---|
?lang=fr | Planned | Translated rendering, cached per page and language |
?variant=b | Planned | A/B variant, with the traffic split and measurement handled |
?template=name | Planned | The same content in a different shell |
?view=edit | Planned | The editor rendering of the page |
They compose with formats the obvious way, which is the whole reason for the shape: /pricing.json?lang=fr is the French pricing page as structured content.
Writes are not in the URL
Reads are shareable and unauthenticated. Writes are neither, and they never ride in a link.
A shareable URL leaks into browser history, referrer headers, server logs, analytics and screenshots. A write credential in a query parameter is a breach with a delay on it. So publishing and updating go to a separate authenticated endpoint, with the credential in an Authorization header or a short-lived scoped token, never in the page URL. An agent still gets "update this page in one call"; the key just never becomes part of something you paste into Slack.
Do I have to enable the format views?
No. They are generated by the renderer for every published page, and they are cached at the edge alongside the HTML.
Are they generated by a model?
No. They are deterministic server-side transforms of the same stored page, which is why they are cheap, fast and cacheable.
Will .md always match the page?
Yes, because it is derived from the same source on request rather than maintained separately. That is the advantage over a hand-written llms.txt, which goes stale the first time someone edits a page.
What about robots and crawl budget?
The format views are alternate representations of a canonical page, not new pages. They are not added to the sitemap, and the HTML version carries the canonical.
Publish something and check its .md
The publish loop, the format views and the audit engine are live. If you build or manage sites and want the connector, get in touch.