Issue #186 · standard
Issue 186
What is this issue?
llms.txt is a plain-text Markdown file placed at the root of a website (e.g., https://example.com/llms.txt). It helps AI language models discover and understand a site's key content in a structured, LLM-friendly format. This issue checks whether your site has an llms.txt file, whether it's properly formatted, and accessible.
A passing implementation requires:
- An
llms.txtfile exists at your root domain - The file returns HTTP
200 OKwithContent-Type: text/plain - The file follows proper Markdown structure (H1 heading, blockquote description, section headings)
- All listed URLs in the file return
200 OKstatus - The file size is under the recommended limit (50-100KB)
- A discovery tag is present in your homepage
<head>
Example: A properly configured llms.txt file at https://example.com/llms.txt with a site title, description, section headings, and links to key pages.
Why does it matter?
The llms.txt file is important for SEO because it:
- Improves AI Discoverability: Helps AI language models find and understand your most important content
- Enhances AI Search/AEO: Increases chances of your content being referenced in AI-generated answers
- Provides Structured Context: Gives LLMs a curated index of your site instead of parsing entire HTML pages
- Future-Proofs SEO: As AI search grows, having an
llms.txtfile positions your site for AI-driven discovery
While still a proposed standard (not yet officially adopted by all AI models), llms.txt is increasingly used by technical sites and AI platforms. Implementing it early can give you an advantage in AI search visibility.
Resolving this issue improves your overall SEO health score by ensuring your site is optimized for the growing AI search ecosystem.
How to fix it
-
Create the file: Create a plain text file named exactly
llms.txtat your domain root (https://example.com/llms.txt). -
Structure with Markdown: Format the file using proper Markdown:
- Start with an H1 heading:
# Your Site Name - Add a blockquote description:
> Brief description of your site - Add section headings:
## Documentation,## Products, etc. - Add links:
- [Page Title](https://example.com/page): Description
- Start with an H1 heading:
-
Serve with correct headers: Ensure the file returns:
- HTTP
200 OKstatus Content-Type: text/plainheader
- HTTP
-
Validate links: Ensure all URLs listed in the file return
200 OKwhen accessed. -
Add discovery tag: Include this tag in your homepage
<head>:<link type="text/plain" rel="llms" href="/llms.txt" /> -
Keep file size reasonable: Aim for under 50KB to ensure fast processing by LLMs.
-
Test the file: Validate that:
- The file is accessible at the root URL
- The Markdown is properly formatted
- All listed links work
- The discovery tag is present in your homepage
Examples
Example 1: Missing llms.txt file
Problematic state (fails):
- No
llms.txtfile exists athttps://example.com/llms.txt - PixyScan returns a 404 error when attempting to fetch the file
- Issue raised: "llms.txt file is missing"
Corrected state (passes):
- Create
llms.txtfile at the root domain - File returns HTTP
200 OK - Issue resolved
Example 2: Improperly formatted llms.txt
Problematic state (fails):
My Website
This is my website description.
Some links:
- https://example.com/page1
- https://example.com/page2
Issues:
- Missing H1 heading (
#) - Missing blockquote description (
>) - No section headings (
##) - URLs not formatted as Markdown links
Corrected state (passes):
# My Website
> This is my website description.
## Documentation
- [Getting Started](https://example.com/docs): Learn how to use our product
- [API Reference](https://example.com/api): Complete API documentation
## Products
- [Product A](https://example.com/product-a): Our flagship product
Example 3: Missing discovery tag
Problematic state (fails):
llms.txtfile exists and is properly formatted- Homepage HTML does not include the discovery tag
- Issue raised: "Discovery tag is missing from homepage"
Corrected state (passes):
Add to homepage <head>:
<link type="text/plain" rel="llms" href="/llms.txt" />
PixyScan detects the tag and the issue is resolved.
How PixyScan detects this
PixyScan detects this issue by fetching the file directly — it requests https://<origin>/llms.txt (the origin is derived from the scan's seed URL) and inspects the response. It does not look for any llms.txt: directive in robots.txt; no such directive exists in RFC 9309 or in the llms.txt proposal (llmstxt.org), so the only way to know whether the file exists is to request it.
Detection steps (function checkLlmsTxtFile in apps/crawler/seo-audit-checks.js, run once per scan by the GEO & AI Engine Signals toggle group):
-
Fetch:
GET https://<origin>/llms.txtwith a 10-second timeout. All HTTP status codes are accepted for inspection (no exception is thrown on 4xx/5xx). -
Existence check: the file counts as present only when the response passes a plausibility test:
- HTTP status is
200 - the body is a non-empty string
- the
Content-Typeheader is nottext/html - the body does not start with
<!doctypeor<html
- HTTP status is
-
Soft-404 guard: the content-type/body sniffing above exists because SPA routers and custom error pages often answer
200with the HTML app shell for every path. Such a response is classified as a soft-404 — the URL answers 200 but the file does not actually exist. -
Issue identification: the STANDARD-severity finding is raised when the file is absent:
- non-200 status → detail
status: "not-found"(message includes the HTTP status) - 200 but HTML/soft-404 → detail
status: "soft-404"
- non-200 status → detail
-
Network errors are not findings: if the request itself fails (DNS failure, timeout, TLS error), PixyScan could not ask the question — that is not evidence the file is missing. No issue is raised; the error is returned to the caller for logging only.
There is no format validation, link validation, size check, or homepage discovery-tag check — existence of a plausible plain-text file at /llms.txt is the entire check. This is a site-wide check recorded once per scan, not per page.