Webflow doesn't let you upload files to your site root, so llms.txt takes a workaround: first check Site Settings → SEO for native support (Webflow has been shipping AI-visibility features), and if it's not there, serve the file from an edge layer like Cloudflare — the cleanest method — or via a proxied hosted file. Here's each option, in the order to try them.
Step 0: Check Webflow's settings first
Webflow already manages robots.txt natively (Site Settings → SEO → Indexing), and the platform has been steadily adding AI-search features. Before building a workaround, open that SEO panel and look for anything named llms.txt or AI crawlers — if your workspace has it, paste in your file content and you're done in two minutes. Platform features ship faster than guides update, so always check the native path first.
No native option? Continue below.
First: create the file
Build the content before worrying about serving it — the free llms.txt Generator outputs a spec-compliant file (it can prefill from your sitemap). For a typical Webflow marketing site, keep it tight:
# Your Company
> One line describing what you do and for whom.
## Key pages
- [Product](https://yoursite.com/product): What it does
- [Pricing](https://yoursite.com/pricing): Plans and costs
- [About](https://yoursite.com/about): Company background
- [Blog](https://yoursite.com/blog): Articles and updates
Method 1: Serve it from Cloudflare (recommended workaround)
If your domain's DNS is on Cloudflare — common for Webflow sites, since many owners manage DNS there anyway — you can answer /llms.txt at the edge, before the request reaches Webflow:
- Cloudflare dashboard → Workers & Pages → create a Worker.
- Return your file as plain text:
export default {
async fetch() {
const body = `# Your Company
> One line describing what you do.
## Key pages
- [Product](https://yoursite.com/product): What it does
- [Pricing](https://yoursite.com/pricing): Plans and costs
`;
return new Response(body, {
headers: { "content-type": "text/plain; charset=utf-8" },
});
},
};
- Add a route binding the Worker to
yoursite.com/llms.txtonly. - Visit the URL to confirm plain Markdown renders.
Everything else on the site still flows to Webflow untouched — the Worker intercepts exactly one path. Free tier is more than enough for this.
Method 2: Host the file elsewhere, proxy or redirect to it
If you don't use Cloudflare: host the file on any static host you control (GitHub Pages, S3, Netlify — even a one-file site), then get requests for yoursite.com/llms.txt to it. Webflow's own redirect settings target internal paths, so the practical version of this is doing the redirect at your DNS/proxy layer — which loops you back to an edge provider, or to whatever reverse proxy fronts your domain.
Honest assessment: if you're going to set up an edge layer anyway, Method 1 (serve directly) beats redirecting — one less hop for crawlers, and the file genuinely lives at your root. Treat the hosted-file redirect as the fallback when you can't serve directly.
Verify
yoursite.com/llms.txtshows raw Markdown — no Webflow 404 page, no styling.- Validate the structure with the llms.txt Validator.
- Confirm your broader AI-crawler posture with the AI Crawler Access Checker — worth a look because Webflow's robots.txt settings make it easy to have blocked bots without remembering.
Keep perspective on the effort
llms.txt is one signal among several — worth 30 minutes, not a weekend of infrastructure. If the workaround is genuinely blocked for you (no DNS access, locked hosting), spend the time instead on what Webflow does control well: clean semantic structure, real dates, and answer-first content — those move AI visibility more than the file itself. When you can add the file, come back; the WordPress version of this guide shows how much easier it is on platforms with file access, and these examples show what good output looks like.