How to Upload & Serve
Your llms.txt File
A complete guide to make your AI Website Profile discoverable by AI assistants and LLM agents
This guide shows you exactly how to add llms.txt to your website so that it is discoverable by LLM agents and AI crawlers. Whether your site is simple, on WordPress, or built with Webflow, Wix, or Squarespace, we have got you covered.
What You Will Learn
- The rules: what makes a valid
llms.txt - Step-by-step instructions for every major hosting setup
- Platform-specific caveats and workarounds
- Verification steps and troubleshooting tips
1. The Core Rules (Do Not Skip This)
Before your site will be read by agents, your llms.txt file must satisfy:
1. At root path
It must be accessible at:
https://yourdomain.com/llms.txtNo redirects, no login gates, no HTML pages wrapping it.
2. Plain text
Serve with header:
Content-Type: text/plain; charset=utf-83. Public and static
No cookies, no sessions. Everyone (including bots) must reach it unauthenticated.
4. Stable URL
Do not change it often or use query params. For changes, rotate versions but keep the same path.
5. Mirrored path (optional but recommended)
Serve also at:
https://yourdomain.com/.well-known/llms.txt6. Advertise it
While the existence of an llms.txt file is the important part, advertising it in the right places can further increase its discoverability.
View Best-Practice Package2. General Verification (works any host)
After you upload, run these commands (replace with your domain):
# HTTP/2 200 OK
# Content-Type: text/plain; charset=utf-8
Warning: If you see a redirect, HTML content, or a 404, it is not set up correctly.
3. Platform-by-Platform Instructions
3.1 FTP / cPanel / Generic Shared Hosting
- Log in via FTP or your hosting control panel (cPanel, Plesk, etc.).
- Navigate to the web root (same place as
index.htmlorpublic_html). - Upload the file named exactly
llms.txt. - Set permissions to
644(readable by all). - Test using
curland browser.
Possible pitfalls: .htaccess rules overriding .txt files, caching layers, or rewrite rules capturing everything. If you have an .htaccess, you can force plain text:
<Files "llms.txt">
ForceType text/plain
</Files>3.2 Firebase Hosting
- Place your file in your Firebase
publicdirectory (for example:public/llms.txt). - In
firebase.json, add header and rewrite rules:
{
"hosting": {
"public": "public",
"headers": [
{
"source": "/llms.txt",
"headers": [
{
"key": "Content-Type",
"value": "text/plain; charset=utf-8"
},
{
"key": "Cache-Control",
"value": "public, max-age=86400"
}
]
}
],
"rewrites": [
{
"source": "/.well-known/llms.txt",
"destination": "/llms.txt"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}- Run
firebase deploy. - Test with
curlor browser.
3.3 WordPress (Self-Hosted)
Option A: FTP / File Manager (recommended)
- Access your root directory (same place
wp-config.phplives). - Upload the file
llms.txtinto that root folder. - Verify at
https://yourdomain.com/llms.txt.
Option B: Use Plugin/File Manager
- Install a plugin that allows file management (e.g. WP File Manager).
- Upload
llms.txtto root via it. - If .txt is downloaded rather than displayed, add to .htaccess:
<Files "llms.txt">
ForceType text/plain
</Files>Watch for caching plugins. They may need config to bypass .txt files.
3.4 Git-First Hosting (GitHub Pages, Netlify, Vercel)
GitHub Pages
- Drop
llms.txtinto your repository root (whereindex.htmlis). - Commit + push.
- It will then appear at
https://yourusername.github.io/llms.txtor your custom domain.
Netlify
- Place
llms.txtunderpublicor top-level directory. - (Optional) Add a
_headersfile to enforcetext/plainif defaults are not correct. - Deploy and verify.
Vercel
- Put
llms.txtin/public. - Deploy. It will be served at
https://yourdomain.com/llms.txt.
3.5 Webflow (Native upload as of 2025)
- In Webflow, go to Site Settings → SEO.
- Look for LLMs.txt section. Upload the file (UTF-8, < 100 KB).
- Hit Publish (file will be published on your custom domain only).
- Verify via
curl -I https://yourdomain.com/llms.txt.
Note: If your Webflow site is not on the custom domain yet, the file may not be published to the Webflow subdomain (only to your domain).
3.6 Wix (Partial / Rolling rollout)
- Wix is rolling out built-in
llms.txtsupport for some sites. - If available on your site, go to SEO / Site Settings and see if there is an LLMs.txt option.
- If not available: fallback to hosting externally and referencing it (see "Workaround" section below).
3.7 Squarespace (No native root upload)
- Squarespace allows file uploads via its asset manager / file manager, but those come with hashed CDN URLs, not at root.
- Native root-level upload is not supported currently.
- Workaround: host
llms.txtexternally and reference it via<link>and robots.txt lines (see below).
3.8 Other platforms (Shopify, Ghost, etc.)
- Shopify: does not permit root file upload. Use external hosting and references.
- Ghost (self-hosted): you should have server control, upload the file to root or theme folder.
- Drupal or Joomla: treat like WordPress, root upload is possible.
4. Workaround Strategy (When Root Upload Is Not Supported)
If your platform does not allow llms.txt at root, here is a safe fallback:
- Host it somewhere you control (e.g. Firebase, AWS, GitHub Pages).
- Ensure it is served at:
https://your-hosting-for-llms/DOMAIN_NAME/llms.txt - In your website
<head>(if allowed):<link rel="llms" href="https://your-hosting-for-llms/domain.com/llms.txt"> - In your
robots.txt(via platform SEO settings or custom file):LLMS: https://your-hosting-for-llms/domain.com/llms.txt - In your
sitemap.xml, include:<url>
<loc>https://your-hosting-for-llms/domain.com/llms.txt</loc>
<priority>0.9</priority>
<lastmod>2025-09-25</lastmod>
</url>
This does not fully satisfy the ideal spec (root-path), but many agents will still read it via those signals. And for good agents, you should strongly consider the edge-host solution we talked about earlier (Cloudflare Worker etc).
5. Common Pitfalls & Troubleshooting
| Problem | Common Cause | Fix |
|---|---|---|
| 404 or redirect | Platform rewrites everything to index or missing rewrite exception | Add a rewrite exception or route rule so /llms.txt is excluded |
| HTML returned instead of text | File is served via CMS page or template rather than raw file | Upload as a static file, not page. Force content type via headers |
Set-Cookie or session headers | Server or platform trying to bind sessions or cookies | Make sure the file is static, behind no auth, exclude it from login paths |
| File downloads instead of showing in browser | Wrong Content-Type or browser forcing download | Use Content-Type: text/plain and ensure no Content-Disposition headers |
| Cached old version | CDN or caching layers | Purge cache or version bump; set appropriate Cache-Control |
| File too large or invalid format | Platform upload limits or encoding issues | Keep file < 100 KB and UTF-8 encoded |
6. Conclusion & Best Practices
- Always aim for native root upload when platform allows (Webflow now does).
- Use external hosting + references only when forced.
- Add multiple signals (
<link>,robots.txt,sitemap.xml) so smarter agents do not miss your file. - Automate verification (via CI, scripts) to catch broken setups early.
- Consider offering an edge-hosted service for customers whose platforms do not support root upload natively.