Technical
What robots.txt, sitemaps and llms.txt do
Four small files at predictable addresses tell crawlers, search engines, AI agents and security researchers how to deal with your site. They are easy to publish and easy to get subtly wrong. This post sums up what each one is for, what its specification actually requires, and how our site files checker reports on them.
robots.txt tells crawlers where they may go
The Robots Exclusion Protocol is RFC 9309. The rules live in a UTF-8 text file named /robots.txt at the top level of the host 1. Rules are grouped by user agent. A crawler picks the group that matches its product token, falls back to the * group, and applies no rules if neither exists 1. Inside a group, path matching is case sensitive, the longest matching rule wins, allow beats disallow when two rules are equivalent, and a path that no rule matches is allowed 1.
How the file is fetched matters as much as what it says. A 4xx answer means the file is unavailable and the crawler may access any resource. A 5xx answer or a network failure means the file is unreachable and the crawler must assume complete disallow 1. Crawlers should parse at least 500 kibibytes and should not use a cached copy for more than 24 hours unless the file is unreachable 1. The RFC also states plainly that these rules are not a form of access authorization, so a disallow line is a request, not a lock 1.
Sitemaps list the pages you want found
A sitemap is a UTF-8 XML file whose root is urlset. Each url entry needs a loc, and lastmod, changefreq and priority are optional 2. One file may hold up to 50,000 URLs and 50 MB uncompressed. Larger sites split the list and point to the pieces from a sitemap index, which can list up to 50,000 sitemaps 2. A sitemap may only include URLs under its own path on the same host, and the protocol suggests placing it at the site root 2. The usual way to announce it is a Sitemap line in robots.txt, which works for every user agent 2. RFC 9309 does not define that line, so crawlers read it as an extension 1.
llms.txt and security.txt are for different readers
The llms.txt proposal is a Markdown file at /llms.txt, or at any path within a site. The only required part is an H1 with the site name. A blockquote summary, some plain text and H2 sections of link lists follow, and a section named Optional marks links an agent can skip when it needs less context 3. It is a convention described on its own site rather than an RFC, so read its findings as guidance for agents, not as a rule that bodies enforce.
security.txt is RFC 9116. Web services must place it under /.well-known/, with a copy at the top level allowed for legacy compatibility, and it must be served over HTTPS as text/plain in UTF-8 4. Two fields are required: Contact, and Expires exactly once. Expires should fall less than a year in the future. Encryption, Acknowledgments, Preferred-Languages, Canonical, Policy and Hiring are optional 4.
What our site files checker reports
Our site files checker reads robots.txt, the sitemaps it lists, llms.txt, llms-full.txt, security.txt and ai.txt from a site, explains each in plain words, and can test one URL against robots.txt for a named crawler. It fetches a small fixed set of files and never crawls pages. It sets the robots access field to rules, allow_all, disallow_all_temporarily or unknown depending on what the file returned: a missing file or a 401 or 403 gives allow_all, and a 5xx or 429 gives disallow_all_temporarily.
| File | Requirement from the specification | What the checker flags |
|---|---|---|
| robots.txt | Top level, UTF-8, longest match wins 1 | Groups and rules by line, access mode, a URL test, and which known AI crawlers are let in |
| Sitemap | 50,000 URLs and 50 MB per file, same host 2 | URL counts, files over the limit, relative URLs, other-host URLs, and sitemap URLs that robots.txt blocks |
| llms.txt | An H1 title is the only required part 3 | A missing title, no summary, no sections, broken link syntax, HTML tags |
| security.txt | Contact and Expires, HTTPS, text/plain 4 | Missing or malformed Contact, a missing, invalid or expired Expires, http transport, wrong content type |
Each file, what the specification requires, and what the checker flags
Every finding carries a severity (error, warning or info) and the line number when there is one. A robots.txt that does not exist is reported as info, because the specification treats a missing file as open access 1. The request below tests whether GPTBot may fetch a path, and the verified body is the same one the API accepts.
curl -X POST https://YOUR_API_HOST/v1/site-files \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"example.com","test_url":"/private/report","user_agent":"GPTBot"}'
Check a domain and test one path for one crawler
The reply has one block per file, an overall count of files present, errors and warnings, a list of known AI crawlers with allowed or blocked status, and a url_test block that names the deciding rule and its line. You can also try it without code in the site files checker tool.
- Fix errors first: a broken security.txt or an unreadable robots.txt changes how others treat the site.
- Treat warnings as likely mistakes, such as a sitemap listing URLs that robots.txt blocks.
- Treat info lines as notes, such as a missing optional field.
Run the check on your own domain from the quickstart with the request above, and read the list of findings before you change anything.
Sources
- RFC 9309: Robots Exclusion Protocol, read 2026-10-19
- sitemaps.org: Sitemap protocol, read 2026-10-19
- llms.txt: the llms.txt proposal, read 2026-10-19
- RFC 9116: A File Format to Aid in Security Vulnerability Disclosure (security.txt), read 2026-10-19