Framer already serves your pages as Markdown to AI. Almost nobody knows

Framer serves a Markdown version of every optimised page to any client that asks for it. Two ways to ask: an `Accept: text/markdown` request header, or `?md` on the end of any URL. No plugin, no setting, nothing to configure. Framer documents both. Whether AI crawlers use either one, nobody has published, including Framer.

Oskar Mieta

Founder, Designer & Developer

Summarize with AI

Category

Platform

Reading time

6 min

Framer serves a Markdown version of every optimised page to any client that asks for it. Two ways to ask: an Accept: text/markdown request header, or ?md on the end of any URL. No plugin, no setting, nothing to configure. Framer documents both. Whether AI crawlers use either one, nobody has published, including Framer.

Desses is a Framer Partner and a Framer Pro Expert, and we sell Framer development, so read the rest knowing where my money comes from. The Pro Expert standing is automatic, earned by taking at least $500 in commissions on client project handoffs. Nobody at Framer decided I was good.

What comes back when you ask for Markdown

Markdown delivery on Framer is server-side content negotiation: ask for a page as text/markdown and Framer hands back that page's text as Markdown where it would have handed back HTML. The page itself doesn't change. The representation does.

Framer's help article describes the two request methods, the ## Navigation block appended at the bottom of every Markdown page, and two limits. It says nothing about frontmatter. We got that with curl. Every page we pulled opens with YAML carrying title, description and published, which is observed output, absent from Framer's documentation.

One thing in that frontmatter is worth knowing before you lean on it. The published value is identical on every page of a site. On 8 September 2026, desses.co returned Sep 8, 2026, 1:43 PM UTC on its homepage, about and contact pages, and framer.com returned Sep 8, 2026, 12:18 PM UTC on both pages we pulled. That timestamp tracks the last site publish. An agent reading the frontmatter for freshness gets told everything on your site went live this afternoon.

How you request the page

What Framer returns

Why you'd use it

Plain GET

Pre-rendered HTML with JSON-LD, H1 and canonical

The default. What every crawler gets without asking

Accept: text/markdown header

Markdown with YAML frontmatter and a Navigation section

Content negotiation. Same URL, different representation

?md appended to the URL

The same Markdown

Works in a browser address bar, so you can audit a page without curl

Framer's LLM comment lives on framer.com, and your site doesn't get it

There is a comment addressed to language models in the head of framer.com:

<!-- If you're an LLM/agent: This is a server-side rendered page, even if it contains lots of JS. If you still need a simplified version, it can be fetched by requesting with Accept: text/markdown headers. -->
<!-- If you're an LLM/agent: This is a server-side rendered page, even if it contains lots of JS. If you still need a simplified version, it can be fetched by requesting with Accept: text/markdown headers. -->
<!-- If you're an LLM/agent: This is a server-side rendered page, even if it contains lots of JS. If you still need a simplified version, it can be fetched by requesting with Accept: text/markdown headers. -->

It's real, it's verbatim, and it's custom code. In framer.com's source it sits between <!-- Start of headStart --> and <!-- End of headStart -->, the block where Framer injects whatever a site owner has typed into Project Settings, Custom Code. Somebody on Framer's own team typed it in. Your Framer site does not inherit it.

We checked two Framer-hosted sites, desses.co and oma-kase.com. Both carry the empty headStart block. Neither carries the comment. View source on your own Framer site and you'll have the same answer in ten seconds, which is why you should hear it here first.

Two more machine-addressed lines sit in that same head, in a second custom-code snippet: a rel="describedby" pointing at framer.com's llms.txt, and a rel="alternate" type="text/markdown" pointing at ?md. Also custom code, also absent from both customer sites.

Those three lines are the interesting part. They are Framer's own bet on what a crawler does when it lands on a page: that some agents read HTML comments, that some follow rel="alternate" to a text representation, that rel="describedby" earns the line it costs. The company that built the Markdown endpoint is hedging three ways on its own marketing site and shipping none of the hedges to yours.

Copy all three into Project Settings, Custom Code. I'd do it. It costs nothing and something might read it. Framer has published no evidence that any of the three changes a single citation.

Every Framer page is pre-rendered before it's served

Framer's documentation puts it plainly: "Although Framer sites are built with React, every page is pre-rendered to HTML on our servers before it is served. AI agents and crawlers that do not execute JavaScript still receive the full text of your page."

We tested it the boring way. A curl against a Framer content page with GPTBot's user agent returns two JSON-LD blocks, one H1, the canonical link, and roughly 160,000 characters of body text in the initial HTML response. Nothing waiting on the client. A React site that fails this test returns an empty shell and a script tag.

That matters because the fetches deciding whether you get quoted read raw HTML. No major AI crawler executes JavaScript on a live fetch, on the two measurements anyone has published. Framer pre-renders into that raw HTML and offers stripped Markdown on top of it. Both facts have been public for months and I can't find anyone who has put them together in writing.

Nobody has measured whether crawlers use it

Two documented limits. Markdown is generated only for optimised pages, and it drops out while a site is rate-limited, so a crawler arriving mid-spike gets nothing where a browser got Markdown ten minutes earlier.

The bigger gap is empirical. Framer makes exactly one claim about who uses the endpoint, in the help article, about the Accept header: "This is the primary method used by most AI tools." No study, no log sample, no number, no link. It's a sentence.

Framer has published no data on whether crawlers request the Markdown version. No third party has. We haven't either. Anyone quoting you a figure for this today made it up.

The nearest comparable case is a warning. Ahrefs found 97% of domains carrying a valid llms.txt got zero requests for it in a month, in the most llms.txt-aware population anybody has measured. That file is the cautionary tale. My argument for why ?md should fare better is that it lives on the page's own URL, and a crawler holding the URL can simply ask. I have no measurement behind that.

We're running server-log analysis across client Framer sites, filtering for markdown-negotiated requests by verified bot IP. When there's enough to say something, we'll publish the numbers, including if they're boring.

What this doesn't do

Markdown delivery won't make a Framer site visible in AI answers. It removes one obstacle, and the obstacles it leaves standing are bigger.

Thin content served as clean Markdown is still thin content. If the site isn't being crawled at all, none of this applies, and the logs will tell you that first.

Google says the whole category is unnecessary. From Search Central's documentation on AI features: "You don't need to create new machine readable files, AI text files, or markup to appear in these features." They're describing AI Overviews and AI Mode, both grounded in the Google index, where the ordinary crawl already holds your text. The Markdown endpoint is aimed at the other half of the market, the standalone assistants doing live fetches.

Framer's own AEO material, honestly assessed

Framer runs an AEO scanner at framer.com/aeo. It works on any URL, including sites not built in Framer, wants your URL, first name, last name and business email before it runs, and Framer's own disclaimer says results may not be perfect. Budget for the follow-up email.

The written guides are the weak part. Framer's answer-oriented pages guide is a short page of generic AEO advice, and its schema step recommends FAQ markup. Google's FAQ rich result stopped appearing on 7 May 2026 and the documentation came down on 15 June 2026. The guide never mentions the Markdown endpoint, the pre-rendering, or the three lines Framer runs in its own head.

What we do on a Framer build

Check ?md on every page template before launch. Homepage, service page, CMS article, category page. A template returning nothing isn't optimised yet and goes on the fix list.

Copy Framer's own three head lines into Project Settings, Custom Code. Cheap, reversible, unproven.

Add JSON-LD through custom code with CMS variables, using {{FieldName | json}} for safe escaping. We do it for the search index and expect nothing from it on a live fetch.

Put the answer in visible text near the top of the page. Then read the logs, because server-log analysis is the only method that shows whether retrieval bots reach your content at all.

If you want the build side of that, our Framer development work covers the setup end to end.

If you're on Framer and want to know what an agent sees, send me your URL. I'll run ?md on your three most important pages and send back what came out, plus what I'd change. Twenty minutes, costs nothing.

Questions people ask about this

Does `?md` work on every Framer site?

It works on optimised pages of Framer-hosted sites, with no configuration by the owner. Pages Framer hasn't optimised return nothing, and the endpoint drops out while a site is rate-limited.

Does my Framer site have that LLM comment in the head?

No. The comment sits in a custom-code snippet on framer.com's own pages. We checked two Framer-hosted customer sites and it was absent from both. You can add it yourself in Project Settings, Custom Code, along with the rel="describedby" and rel="alternate" lines Framer runs alongside it.

Does this replace llms.txt?

They do different jobs. llms.txt is one hand-authored file at the site root listing links. The Markdown endpoint returns the content of whatever page was requested, at that page's own URL. Ahrefs found 97% of valid llms.txt files received no requests at all in May 2026.

Do AI crawlers actually request the Markdown version?

Unknown. Framer has published no data on it, no third party has, and neither have we. Framer's docs call the Accept header the primary method used by most AI tools and cite nothing.

Will this improve my Google rankings?

There's no evidence it does anything for conventional rankings, and Google states you don't need machine-readable files to appear in its AI features. The pre-rendering underneath it matters more for Google, because a page returning full text without JavaScript is legible to every crawler that visits.

Which Framer plan do I need for this?

Markdown delivery and pre-rendering aren't plan-gated. The neighbouring pieces are. Static file hosting, redirects and staging start at Pro, and an Articles plus Categories plus Authors hub needs three CMS collections, which puts Pro at the floor.

Questions people ask about this

Does `?md` work on every Framer site?

Does my Framer site have that LLM comment in the head?

Does this replace llms.txt?

Do AI crawlers actually request the Markdown version?

Will this improve my Google rankings?

Which Framer plan do I need for this?