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.txt

No redirects, no login gates, no HTML pages wrapping it.

2. Plain text

Serve with header:

Content-Type: text/plain; charset=utf-8

3. 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.txt

6. 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 Package

2. General Verification (works any host)

After you upload, run these commands (replace with your domain):

$ curl -I https://yourdomain.com/llms.txt
# Expect:
# HTTP/2 200 OK
# Content-Type: text/plain; charset=utf-8
$ curl -s https://yourdomain.com/llms.txt | head -n 1
# Expect: something like "version:" or first content line

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

  1. Log in via FTP or your hosting control panel (cPanel, Plesk, etc.).
  2. Navigate to the web root (same place as index.html or public_html).
  3. Upload the file named exactly llms.txt.
  4. Set permissions to 644 (readable by all).
  5. Test using curl and 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

  1. Place your file in your Firebase public directory (for example: public/llms.txt).
  2. 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"
      }
    ]
  }
}
  1. Run firebase deploy.
  2. Test with curl or browser.

3.3 WordPress (Self-Hosted)

Option A: FTP / File Manager (recommended)

  • Access your root directory (same place wp-config.php lives).
  • Upload the file llms.txt into 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.txt to 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.txt into your repository root (where index.html is).
  • Commit + push.
  • It will then appear at https://yourusername.github.io/llms.txt or your custom domain.

Netlify

  • Place llms.txt under public or top-level directory.
  • (Optional) Add a _headers file to enforce text/plain if defaults are not correct.
  • Deploy and verify.

Vercel

  • Put llms.txt in /public.
  • Deploy. It will be served at https://yourdomain.com/llms.txt.

3.5 Webflow (Native upload as of 2025)

  1. In Webflow, go to Site Settings → SEO.
  2. Look for LLMs.txt section. Upload the file (UTF-8, < 100 KB).
  3. Hit Publish (file will be published on your custom domain only).
  4. 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.txt support 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.txt externally 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:

  1. Host it somewhere you control (e.g. Firebase, AWS, GitHub Pages).
  2. Ensure it is served at:https://your-hosting-for-llms/DOMAIN_NAME/llms.txt
  3. In your website <head> (if allowed):<link rel="llms" href="https://your-hosting-for-llms/domain.com/llms.txt">
  4. In your robots.txt (via platform SEO settings or custom file):LLMS: https://your-hosting-for-llms/domain.com/llms.txt
  5. 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

ProblemCommon CauseFix
404 or redirectPlatform rewrites everything to index or missing rewrite exceptionAdd a rewrite exception or route rule so /llms.txt is excluded
HTML returned instead of textFile is served via CMS page or template rather than raw fileUpload as a static file, not page. Force content type via headers
Set-Cookie or session headersServer or platform trying to bind sessions or cookiesMake sure the file is static, behind no auth, exclude it from login paths
File downloads instead of showing in browserWrong Content-Type or browser forcing downloadUse Content-Type: text/plain and ensure no Content-Disposition headers
Cached old versionCDN or caching layersPurge cache or version bump; set appropriate Cache-Control
File too large or invalid formatPlatform upload limits or encoding issuesKeep 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.