llms.txt Checker
Enter a domain and we fetch its llms.txt, verify the H1, summary and link sections against the llmstxt.org spec, and flag HTML fallbacks, wrong content types and malformed links.
How it works
Enter your domain
We look for the file where every reader expects it: https://yourdomain.com/llms.txt, plus the optional llms-full.txt beside it.
We fetch it and validate the structure
One request, then a check of the response and the Markdown against the llmstxt.org spec — status, content type, the H1, the summary, and every section and link.
Fix the issues, or generate a new file
Each finding says what is wrong and how serious it is. Missing or broken? Open the generator with your domain prefilled and publish a fresh one.
What we check
Nine checks, each mapped to a line in the spec or to a mistake we see over and over in the wild. Findings are graded error, warning or note so you can tell "this file is broken" from "this could be tidier".
It exists and isn't an HTML fallback
A 200 that returns your app's index.html is the most common false positive. We flag a body that starts with a tag as "looks like HTML".
Content type
text/plain or text/markdown. Anything else (or none) is a warning — some readers ignore files that announce themselves as HTML or octet-stream.
A single H1
The file must open with one # heading naming the site. No H1 is an error; two or more is a warning.
A blockquote summary
The > line after the title. Optional in the spec, but it is what a model reads to decide whether to keep going, so we recommend one.
Sections with well-formed links
Every ## section should hold a Markdown list of - [name](url) or - [name](url): description items. Malformed items and empty sections are flagged.
Absolute https links
Relative paths and http:// links work in a browser but not for a reader that only sees the file's text. We call them out.
Size and link-count sanity
Over 100 KB or over 300 links means the file is a sitemap in disguise. Curate, and move the long tail into ## Optional.
Encoding quirks
A UTF-8 byte-order mark or Windows line endings won't break most parsers, but a few strict ones choke on the BOM — we mention both.
llms-full.txt
Whether the optional full-text companion is published next to it. Missing is a note, not a problem.
What a passing file looks like
Short, curated and plain. A title, a summary that answers "what is this?", and a few sections whose links each say what is behind them. Anything a model can safely skip goes under ## Optional. If yours is missing or fails the checks, the llms.txt generator drafts one from your sitemap in a minute — and Kitbase's site audit keeps checking that it stays served correctly after you publish.
Frequently asked questions
Why does it say my llms.txt "looks like HTML"?
Because the server answered with a 200 status but the body starts with an HTML tag. That is almost always a single-page app or a static host serving index.html for every unknown path, so the file doesn't really exist — a crawler sees your homepage markup, not a text file. Put a real llms.txt in your public/ or static/ folder so it is copied to the root of the build and served as-is.
The content type is wrong. How do I fix it?
Serve the file as text/plain (or text/markdown). Most static hosts already do this for a .txt file; if yours doesn't, add a header rule — on Vercel a headers entry in vercel.json for /llms.txt, on Netlify a [[headers]] block in netlify.toml, on Nginx a location = /llms.txt { default_type text/plain; } block. Then re-check.
Do you follow the links inside the file?
No. We validate the file itself — that each link is well-formed and absolute — but we don't fetch the pages it points to. Broken destinations are your sitemap's problem, and fetching hundreds of URLs on every check would be neither fast nor polite.
Is a missing ## Optional section a problem?
No. It's a convention for links a model may skip when it is short on context; plenty of good llms.txt files don't have one. We list it as a note so you know it exists, nothing more.
How big can the file be?
There is no hard limit in the spec, but the whole point is that it fits in a model's context and is read top to bottom. We warn above 100 KB and above 300 links; most well-curated files are a few kilobytes.
How often is my file re-checked?
Every run fetches it fresh, except that results for the same domain are cached for five minutes so a page reload doesn't hammer your server. We don't keep the file itself, only a usage log of the domain checked and the headline result. Kitbase's site audit re-checks llms.txt on every audit run if you want it watched continuously.
Does having an llms.txt improve my AI visibility?
It helps the tools that read it and costs nothing to publish, but no major answer engine has committed to it publicly, so treat it as hygiene rather than a lever. What moves citations is being the clearest, best-structured source on the topic — see How to Write Content AI Engines Cite on the Kitbase blog.
More free tools
All tools →AI Crawler Access Checker
See which AI crawlers your robots.txt and firewall let in — bot by bot.
llms.txt Generator
Build a spec-compliant llms.txt from your sitemap in a minute.
AI Citation Preview
See how a page reads to Google, social cards and AI answer engines.
Bot User-Agent & IP Verifier
Paste a user agent or IP to identify the bot — and prove it's genuine.
Stop checking by hand. Kitbase watches this for you.
AI Visibility runs continuously on your real traffic and your real pages — with alerts when something changes, not when you remember to look.