---
title: "How to publish a valid llms.txt on Framer"
slug: llms-txt-framer
published: 2026-09-02T13:22:21.490012+00:00
updated: 2026-09-02T13:22:21.490012+00:00
author: "Asif Rahman"
author_url: https://masifrahman.com
category: "AI Readiness"
tags: check:C2, platform:framer, llms.txt, Framer, AI readiness, content, AI crawlers
description: "llms.txt on Framer is a Pro-plan upload under Site Settings, Hosting, Files. The exact steps, the MIME trap, and how to verify it with AIScan check C2."
url: https://aiscan.site/blog/llms-txt-framer
---

**Verified on 2 September 2026.** Every path, plan limit and status code below was either read from
Framer's own help centre or measured live against `www.framer.com` on that date.

On Framer, `llms.txt` is not a file you commit and it is not a text box you fill in. It is an upload in
a hosting panel, and that panel is switched off below a certain price. Get the plan and the path right
and the file works on the first publish. Get either wrong and Framer returns a clean 404 that tells you
nothing about why.

## Quick summary

| Question | Answer |
|---|---|
| Where does the file live? | Uploaded under **Site Settings → Hosting → Files**, with the path set to the domain root |
| Which plans can do it? | **Pro and Enterprise only.** Free and Basic sites cannot host a static file at all |
| What formats are accepted for llms.txt? | **TXT** for a standard file, **JSON** for structured data |
| Does it work before publishing? | No. The file appears only after the site is published |
| Does Framer generate it for you? | No. Framer auto-generates `robots.txt` and `sitemap.xml`, not `llms.txt` |
| Which AIScan check is this? | **C2**, in the `content` dimension |
| Time to fix | About ten minutes, once you are on a plan that allows it |

## The plan gate comes first

This is the part that wastes an afternoon if you skip it. Framer's static files article says, in its own
words, "This feature is available on Pro and Enterprise plans." There is no workaround. Framer's URL
handling gives you nothing to redirect to, and the Markdown twin of a page is not a substitute for an
index file.

The llms.txt article and the static files article disagree slightly on wording, so here is the honest
version of what each one states:

| Source | What it says about plans | Last updated |
|---|---|---|
| Framer help, "Static files" | "available on Pro and Enterprise plans" | 10 August 2026 |
| Framer help, "Add an llms.txt file to your site" | Pro and Enterprise in the body, and again in its own FAQ | 10 August 2026 |
| Framer pricing, snapshot in Framer's own `llms.txt` | Pro is $30 per month, billed monthly | 30 August 2026 |

Framer's file settings also moved recently. According to the same article, "These settings used to live
in the Domains dashboard and are now in your project's Site Settings, under Hosting." Older tutorials
still point at the Domains dashboard, so ignore them.

## Upload the file in Site Settings

Write the file first, locally, then upload it. The steps below are Framer's, verbatim in order:

1. Open your **dashboard**.
2. Open **Site Settings**.
3. Go to **Hosting → Files**.
4. Click the **Add** button.
5. Upload your file.
6. **Set the file path.** Framer's step wording is "do not include the file name", and its worked example
   is a path of `/pdfs` producing `example.com/pdfs/example.pdf`. Its FAQ then answers the root case
   directly: "You can upload a file and assign it to a root-level path such as `/ads.txt` or
   `/llms.txt`." So upload a file named `llms.txt` and give it the root path.
7. **Publish** the site.

Two constraints worth knowing before you upload. According to the same article, Framer accepts TXT, CSV, JSON, XML, MD, PDF, JS and
several media types, but delivery depends on the MIME type: `text/plain`, `text/xml`,
`application/json`, `application/pdf` and the image, audio and video families render in a browser, and
in Framer's phrasing "all other file types will automatically download instead of rendering." Upload
Markdown with an `.md` extension and a crawler gets a download prompt rather than a body. Use `.txt`.

The same panel is how Framer does `.well-known` files. The help URL `well-known-files` now permanently
redirects to the static files article, and setting the path to `/.well-known` puts a file there. That
is the door for `security.txt`, `assetlinks.json` and an AI plugin manifest on a Framer site.

## Point the links at Framer's Markdown twins

Here is the part no other builder in this series can offer. Framer already serves a Markdown version of
every optimised page at the same URL, either through an `Accept: text/markdown` request header or by
appending `?md` to the address. Measured on 2 September 2026, `www.framer.com/pricing` with that header
returned **200**, `text/markdown; charset=utf-8`, 11,651 bytes, opening with YAML front matter.

So the link targets inside your `llms.txt` should carry `?md`. Framer does this in its own file: fetched from
`www.framer.com/llms.txt` on 2 September 2026 it is 5,900 bytes, and it points at
`https://www.framer.com/ai/?md` and its siblings rather than the HTML pages. Its own header line tells
an agent to "follow a link instead of guessing paths". Most llms.txt files in the wild link to HTML and make an agent parse a page it did not need to
parse. On Framer that work is already done.

Keep the file itself plain: an `#` H1 with your site name, a `>` blockquote summary, then `##` sections
holding `-` bullets of `[name](url): description`. If you would rather start from a generated draft,
[the AIScan llms.txt generator](https://aiscan.site/llms-txt-generator) writes a spec-shaped file you
can edit and upload. The common mistakes are catalogued in
[our llms.txt validator guide](https://aiscan.site/blog/llms-txt-validator-common-mistakes).

One caveat, stated in Framer's own AI agents article: "Markdown is only generated for optimized pages."
Verified on 2 September 2026, that is not theoretical. Framer's own help articles are not optimised, and
`Accept: text/markdown` on `/help/articles/static-files/` returns `text/html`. Test any URL before you
put a `?md` version of it in your index.

## Verify it landed

Run the scan first. It answers the question the file exists to answer, and it checks the rest of the
`content` dimension in the same pass:

```bash
npx aiscan-cli yoursite.com
```

Read the **C2** row. C2 passes when the file exists, returns 200, and contains an H1, at least one `##`
section and Markdown links. A blank file at the right URL fails it.

By hand, if you prefer:

```bash
curl -sI https://yoursite.com/llms.txt
# expect: HTTP/2 200 and content-type: text/plain
```

| What you see | What it means |
|---|---|
| `200` and `text/plain` | Working. Framer serves it from the edge with `server: Framer` |
| `404`, tiny body | The upload is missing, the path is wrong, or the site has not been published since |
| A download prompt in the browser | Wrong extension. Re-upload as `.txt` |
| `200` but empty content | The file uploaded is empty; C2 will still fail |

Framer returns a real 404 for a missing root file, which is more helpful than it sounds. Verified on
2 September 2026, `www.framer.com/llms-full.txt` returned **404** with a ten-byte body, while an unknown
page path returned the site's own 404 page. Framer does not answer 200 with the homepage the way
[Ghost](https://aiscan.site/blog/llms-txt-ghost) does, so a status-code check on Framer is trustworthy.

## Where AIScan fits, and where it doesn't

| C2 can tell you | C2 cannot tell you |
|---|---|
| The file exists at the root and returns 200 | Whether the pages it lists are your important pages |
| It has an H1, `##` sections and Markdown links | Whether the `?md` targets you listed are optimised |
| It is reachable without JavaScript | Whether the descriptions are accurate today |
| Which of the other `content` checks pass alongside it | Whether your plan will still allow file hosting next month |

The rest of the dimension is documented on [our content checks page](https://aiscan.site/docs/checks/content).

## Your next ten minutes

Draft the file, check your plan, upload it at the root path, publish, then scan. If Framer is not your
only stack, the same check behaves differently elsewhere: on
[Webflow](https://aiscan.site/blog/llms-txt-webflow) the upload is free but invisible on the staging
domain, and on [Squarespace](https://aiscan.site/blog/llms-txt-squarespace) there is no file at all,
only a settings field. Whether the file changes anything is a separate question, and we measured it in
[does llms.txt actually work](https://aiscan.site/blog/does-llms-txt-actually-work-2026).

Run `npx aiscan-cli yoursite.com`, read row **C2**, and browse the rest of the fix guides at
[aiscan.site/guides](https://aiscan.site/guides).

