---
title: "How to publish a valid llms.txt on Webflow"
slug: llms-txt-webflow
published: 2026-08-29T15:08:31.96915+00:00
updated: 2026-08-29T15:08:31.96915+00:00
author: "Asif Rahman"
author_url: https://masifrahman.com
category: "AI Readiness"
tags: check:C2, platform:webflow, llms.txt, Webflow, AI search, AEO
description: "Publish llms.txt on Webflow in five minutes: Site settings > SEO > LLMs.txt, under 100 KB, UTF-8, and how to verify AIScan check C2 on your live domain."
url: https://aiscan.site/blog/llms-txt-webflow
---

**Verified 29 August 2026.**

Webflow added a native llms.txt upload on 23 July 2025, so publishing one now takes about five minutes and no custom code. Go to **Site settings > SEO > LLMs.txt**, click **Upload file**, publish the site, and the file answers at `https://yourdomain.com/llms.txt`. Three Webflow rules decide whether it actually passes: the file must be UTF-8 and under 100 KB, it never appears on your `.webflow.io` staging domain, and Webflow serves it with an `x-robots-tag: noindex` header. That last one alarms people. It is deliberate, and it is fine.

## Quick summary

| If you want to… | Do this | Where | Time |
|---|---|---|---|
| Publish llms.txt on Webflow | Upload a `.txt` file, then publish | **Site settings > SEO > LLMs.txt > Upload file** | 5 min |
| Know the size limit | UTF-8, under 100 KB | Webflow Help Center | n/a |
| Test before launch | You cannot. Staging is excluded by design | `.webflow.io` returns nothing | n/a |
| Confirm it passes AIScan C2 | `npx aiscan-cli yourdomain.com`, read row **C2** | [aiscan.site](https://aiscan.site/) | 30 sec |
| Fix a failing C2 row | Add an H1, one `##` section and Markdown links | your file | 10 min |

## Why Webflow gave llms.txt its own setting

Webflow's changelog entry is one sentence: *"You can now upload an llms.txt file within your site's SEO settings."* The [update, dated 23 July 2025](https://webflow.com/updates/introducing-llmstxt), goes on to say Webflow "will make the llms.txt file you upload available in your domain's root, while also ensuring it does not get indexed by search engines."

The important word is *upload*. On Shopify the file is generated from your catalogue. On [Astro](https://aiscan.site/blog/llms-txt-astro) and [Next.js](https://aiscan.site/blog/llms-txt-nextjs) it is a build-time route you write in code. On Webflow it is a static artifact you hand to the hosting layer, which means nothing regenerates it when your CMS changes. Whatever you upload is what agents read until you upload something else. Plan for that before you write the file, not after.

## Upload the file

1. Write your file locally and save it as `llms.txt`, UTF-8, no BOM.
2. In the Designer or the dashboard, open **Site settings**.
3. Open the **SEO** tab.
4. Find the **LLMs.txt** section and click **Upload file**.
5. Select your file.
6. **Publish** the site to your custom domain. Nothing is live until you publish.

Webflow's own [help article](https://help.webflow.com/hc/en-us/articles/43240104183315-Upload-an-llms-txt-file-to-your-site) states the constraint plainly: the file must be "UTF-8 encoded and under 100 KB", and "after publishing your site, the file will be available at https://example.com/llms.txt." It also warns that "it won't be published to your Webflow staging domain", which is the single most common reason a Webflow reader thinks the feature is broken.

## What goes inside the file

The [llms.txt spec](https://llmstxt.org/), proposed by Jeremy Howard of Answer.AI on 3 September 2024, is short. An H1 carrying the project name is the only required section. Everything after it is optional: a blockquote summary, some prose, then H2-delimited lists of Markdown links.

AIScan's **C2** check is stricter than the spec's minimum but still small. It wants the file to exist, return 200, and contain an H1, at least one `##` section, and Markdown links. A skeleton that passes:

```markdown
# Acme Studio

> Brand and web design studio in Lisbon. Case studies, services and pricing.

## Services

- [Brand identity](https://example.com/services/brand): Naming, logo, type and colour systems.
- [Web design](https://example.com/services/web): Webflow builds, CMS setup, ongoing support.

## Work

- [Case studies](https://example.com/work): 14 projects with outcomes and timelines.
```

Keep the description after each colon specific. That is the part an agent reads to decide which link is worth fetching, and nothing can validate it for you.

## Three Webflow limits that catch people out

**100 KB is a real ceiling, not a guideline.** For scale, `stripe.com/llms.txt` was 65,026 bytes when we measured it on 29 August 2026, and that file is closer to a content dump than a map. If your draft is approaching 100 KB you have written the wrong document. Cut it to a curated index of your best 30 to 60 URLs.

**Staging cannot verify anything.** Because the file is excluded from `.webflow.io`, your first proof comes after a production publish. Fetch the live URL straight afterwards rather than assuming.

**The `noindex` header is not a mistake.** Webflow sends `x-robots-tag: noindex` on the file, which stops it appearing as a search result. It does not stop an agent requesting it. Google's own [AI optimization guide](https://developers.google.com/search/docs/fundamentals/ai-optimization-guide) says Google Search ignores llms.txt files entirely and that maintaining one "won't harm (nor help) your visibility or rankings", so there is no ranking left for the header to cost you.

## Check the live URL

Run the scan first. It reads the file the way our checker does and tells you which rule failed:

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

Read row **C2**. A pass means the file exists, returns 200 and carries the structure above. C1, C3 and E3 sit next to it, covering Markdown negotiation, structured HTML and server-rendered text, so one run answers more than this question.

If you would rather check by hand, two commands do it:

```bash
curl -sI https://yourdomain.com/llms.txt | head -5
# expect: HTTP/2 200 and content-type: text/plain
curl -s https://yourdomain.com/llms.txt | head -20
# expect: a "# " H1 on line 1, and at least one "## " section
```

Webflow's own file is a working reference. On 29 August 2026 `https://webflow.com/llms.txt` returned 200, `content-type: text/plain; charset=utf-8` and `x-robots-tag: noindex`.

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

| AIScan sees | AIScan cannot see |
|---|---|
| The file exists and returns 200 | Whether the URLs inside it still resolve |
| An H1, `##` sections and Markdown links | Whether your one-line descriptions are true |
| That the response is reachable at the root | Whether your CMS changed since you uploaded |
| The rest of the content dimension: C1, C3, E3, E5 | Whether any model chose to read it |

That last row is the honest one. [Ahrefs measured 137,210 domains in June 2026](https://ahrefs.com/blog/llmstxt-study/) and found 28% publish a valid llms.txt while 97% of those files received zero requests in May 2026, with the caveat that their sample skews technical. We looked at the same question in more depth in [does llms.txt actually work](https://aiscan.site/blog/does-llms-txt-actually-work-2026). Publish one because it costs five minutes, not because anyone has proven a return.

## Keeping it current on a CMS site

A Webflow upload goes stale the moment you add a CMS item. Two habits keep it useful: re-upload whenever you ship a new service page or case study, and diff the link list against your sitemap quarterly. To start from a generated draft, our [llms.txt generator](https://aiscan.site/llms-txt-generator) builds one from a crawl that you can trim and upload. Shopify stores get this automatically instead, covered in the [Shopify guide](https://aiscan.site/blog/llms-txt-shopify).

The spec moved on 10 August 2026 too. llms.txt v2 adds `rel="alternate" type="text/markdown"` and `rel="describedby"` link relations for discovery, so a file published today is worth revisiting once validators catch up.

## What to do next

Upload the file, publish, then run `npx aiscan-cli yourdomain.com` and read row **C2**. If it fails, the cause is almost always a missing H1 or a staging URL. The rest of the checks live on the [content dimension page](https://aiscan.site/docs/checks/content), and every platform walkthrough we have published sits in [/guides](https://aiscan.site/guides).

