Field guide FG-04 · llms.txt

llms.txt for Shopify:
what it is, and isn’t.

What the llms.txt proposal is, what no search or AI vendor has committed to doing with it, why Rank Sniper still checks for it in the GEO pillar, how to write one for a Shopify catalogue, and the HTML page answering 200 that the scan refuses to count.

7 min readPublished · Last reviewed FG-04
FG-04 // What Rank Sniper checks for this todayAvailable
GEO · llms.txt presence and quality
Weight 20 of 82 in the GEO pillar. Fetches /llms.txt once per scan. Full weight when the file mentions products, the catalogue, the shop, collections or the sitemap; half weight when it mentions none of them. Fix class by design: Guided.
Counted as absent
A 404 or other non-200 status, an empty body, or an HTML page returned with status 200.
Not scored
The request failed, or your robots.txt disallows /llms.txt to RankSniperBot — the scan did not look, so it claims nothing.
Noted, not scored
Whether the file carries a contact address or a link.
Publishing it for you
Not something Rank Sniper does. A root-domain file is outside the app’s write scope by design; no fix of any class runs today: Planned
01 // The proposal

A proposal,
not a standard.

llms.txt is a markdown file at a site’s root that summarises the site for language models. It was proposed in 2024 and is still, on its own page, a proposal.

The llms.txt file was proposed by Jeremy Howard at llmstxt.org, first published on 2024-09-03. The page calls itself “A proposal to standardise”, and on 2026-08-10 it was revised as “v2 of the proposal, updated based on what I learned from two years of adoption”.

The format is small. A file at /llms.txt contains:

  • an H1 with the site or project name — the only required section;
  • a blockquote summarising it;
  • optional free text;
  • H2 sections that are “file lists” of markdown links, each optionally followed by a note;
  • by convention, a section named “Optional” for links a reader can skip.

The proposal also recommends offering markdown versions of pages. And its page notes that the AI labs — it names OpenAI, Anthropic and Gemini — publish llms.txt files for their own developer documentation. That is a statement about publishing the file, not about any of them reading yours.

02 // Limits

What no vendor
has promised.

No search engine or AI vendor documents using llms.txt to crawl, rank or cite a site. Google documents the opposite.

“You don't need to create new machine readable files, AI text files, markup, or Markdown to appear in Google Search (including its generative AI capabilities), as Google Search itself doesn't use them.”Google Search Central — Optimizing your website for generative AI features on Google Search
“Doing so will neither harm nor help your site's visibility or rankings in Google Search, as Google Search ignores them.”Google Search Central — same page

The same guidance says it is “completely fine” to create and maintain llms.txt files for other services or systems that use them, and Google recorded the change in its documentation-updates log on 2026-06-15. On the other side, the crawler documentation OpenAI, Anthropic and Perplexity publish for their bots — each read for this guide on 2026-09-11 — does not mention llms.txt at all. Absence is not a denial, but it leaves no vendor commitment to point to.

The accurate summary: llms.txt is a community proposal, not a standard. Google states that Google Search ignores it; no other major AI vendor’s crawler documentation mentions consuming it.

It is not an access control

llms.txt cannot allow or refuse anything. Access is what robots.txt expresses, under RFC 9309, the Robots Exclusion Protocol published in September 2022 — and even robots.txt, in the RFC’s words, “is not a substitute for valid content security measures.” A crawler that obeys robots.txt reads your llms.txt only if robots.txt lets it.

Status and Shopify behaviour as the cited documentation states them; Rank Sniper columns read from the scoring code.
robots.txtsitemap.xmlllms.txt
StatusRFC 9309, Standards Track, September 2022Generated automatically by ShopifyCommunity proposal: llmstxt.org, 2024; v2 on 2026-08-10
What it saysWhich paths each crawler may fetchWhere products, primary images, pages, collections and blog posts liveWhat the site is and where its important pages are, in plain language
On ShopifyGenerated by default; customised by adding the robots.txt.liquid templateAt /sitemap.xml, per domain; not readable while the store is password-protectedNot covered by the Shopify documentation we reviewed
Rank Sniper readsPolicy for 10 named AI agents, plus Googlebot and Bingbot for SEOsitemap.xml validity — 14 of 100 SEOllms.txt presence and quality — 20 of 82 GEO
03 // Our reasoning

Why Rank Sniper
still checks for it.

A present llms.txt earns credit in the GEO pillar because it is an explicit statement — in plain text, at a predictable path — of what a store is and where its catalogue lives. Not because any engine is known to reward it.

That distinction matters, so here it is plainly. The check is Rank Sniper’s scoring decision. It carries 20 of 82 in the GEO pillar, and it reflects a judgement about machine readability: a store that states its own terms — what it sells, in which currency, to which regions, under which policies — leaves any reader less to infer than one that does not. The file is cheap to publish, Google says it will neither harm nor help your Search visibility, and it is useful to any generative engine, tool or person that does read it. It is not a claim that an llms.txt gets a store cited, and no page on this site makes that claim.

The scoring rule, exactly

Full weight
Status 200, a non-empty plain-text body, and at least one mention of product, catalog, catalogue, shop, collection or sitemap.
Half weight
Status 200 and a non-empty plain-text body that mentions none of those words.
No weight
A 404 or other non-200 status, an empty body, or a body that begins with an HTML document.
Not scored
The request failed, or your robots.txt disallows /llms.txt to RankSniperBot.

The check reads presence and direction, not quality. A thoughtful file and a one-line file that says “shop” score the same. That is a limit of the check, stated so nobody mistakes the score for an editorial review. The scan also notes whether the file carries a contact address or link; that does not change the score.

04 // Writing one

Writing one
for a catalogue.

Short, factual and current. The file’s job is to say what the store is and point to the pages that already carry the detail.

llms.txt — an example for a fictional store (replace every URL with your own)
# Northfield Linen

> Northfield Linen sells stonewashed linen bedding and table linen. Prices are in CAD. We ship to Canada and the United States.

Product pages state price, currency and stock for every variant in their structured data. The catalogue is organised into collections; the sitemap lists every product.

## Catalogue

- [All products](https://northfield.example/collections/all): every published product
- [Bedding](https://northfield.example/collections/bedding): duvet covers, sheets and pillowcases
- [Table linen](https://northfield.example/collections/table-linen): tablecloths and napkins
- [Sitemap](https://northfield.example/sitemap.xml): every product, collection, page and blog post URL

## Policies

- [Shipping](https://northfield.example/policies/shipping-policy): rates, regions and delivery times
- [Returns](https://northfield.example/policies/refund-policy): the returns window and conditions
- [Contact](https://northfield.example/pages/contact): how to reach us

## Optional

- [Linen care](https://northfield.example/pages/linen-care): washing and drying
  • State facts you can stand behind. Currency, shipping regions, what you sell. No superlatives and no claims about ranking or quality — nothing that would not survive a customer reading it.
  • Point, don’t copy. Shopify’s sitemap already “contains links to all your products, primary product image, pages, collections, and blog posts”. Link the sitemap and your main collections; do not paste the catalogue into the file.
  • Keep it in step. A file that names a collection you deleted is a broken promise in plain text. Review it when collections, markets or policies change.
  • Mention the catalogue. It is useful to a reader, and it is what the scan’s full-weight rule looks for.
05 // Publishing

Publishing it
at your domain root.

The file has to answer at /llms.txt on the domain agents read, with status 200 and a plain-text body. How it gets there depends on your setup.

Shopify’s documentation covers two root files. robots.txt is generated for you — “Shopify generates a default robots.txt file that works for most stores” — and customised by adding a robots.txt.liquid template. sitemap.xml is generated automatically, per domain, and updated as content changes. The Shopify pages we reviewed for this guide do not describe a way to publish an llms.txt at the root, and we are not going to invent one.

So the method depends on what serves your domain — the storefront itself, a headless front end, or infrastructure in front of the store. Whatever you use, test the outcome rather than the setup:

Shell — check what /llms.txt actually returns
curl -s -o /dev/null -w "%{http_code} %{content_type}\n" https://yourstore.example/llms.txt
curl -s https://yourstore.example/llms.txt | head -c 300

You want 200, a text/plain content type, and a body that starts with # and your store’s name. Anything else is the trap in the next section. If you run several domains — Shopify generates a separate sitemap for each international domain — each domain you want read needs its own file at its own root; the scan reads the domain you give it.

Do not block it by accident

A crawler that obeys robots.txt will not fetch /llms.txt if a rule disallows it, and a broad Disallow added for another reason can catch it. Rank Sniper’s scan obeys the same rules: if your robots.txt disallows the path to RankSniperBot, the check is recorded as not scored rather than failed. The robots.txt field guide covers the file in depth.

What Rank Sniper does here

In the fix design, llms.txt is a guided step: Outside the app’s write scope — a theme template, a file at your domain root. You make the change from exact instructions; the next scan checks it. No fix of any class runs today: Planned.

06 // The trap

The 404
that answers 200.

A request for a file that does not exist should fail. Some storefronts answer it with a full HTML page and a success status instead.

Rank Sniper’s scanner has met storefronts that answer an unknown path with the theme’s HTML — a not-found page or the home page — and status 200. To a naive check, that is a present llms.txt: the request succeeded and returned text. It is not. It is a web page wearing a file’s address, and counting it would hand out credit for the absence of the thing being measured.

So the scan’s parser rejects any response whose body begins with an HTML document — a doctype or an html tag — and records the file as absent, whatever the status code said. Apply the same test to your own: if curl shows <!doctype html> at the top of the body, you have not published an llms.txt, whatever your browser appears to show.

llms.txt for Shopify: What It Is, What It Isn’t, and How to Publish It — Rank Sniper