llms.txt · agents.md · Agentic commerce · 2026
Shopify llms.txt and agents.md: what your store actually serves to AI agents
We fetched both files from 26 live Shopify stores. There is no redirect, the default is the same advert on every store, and 21 of 21 merchants had never touched it. Here is what agents read, how to change it, and what agent traffic is doing to your conversion rate.
Your Shopify store is already publishing a file that tells AI shopping agents what you are and how to buy from you. You did not write it. You have probably never read it. On the 21 live stores we fetched it from, it was identical boilerplate, it named zero products, and it closed by inviting the agent to go start its own Shopify store.
This page is the result of an afternoon spent fetching /llms.txt and /agents.md from real storefronts rather than reading about them. That turned out to matter, because the most repeated claim about this topic is wrong, and Google's AI Overview is currently repeating it.
Does Shopify redirect /llms.txt to /agents.md?
TL;DR No. On August 11, 2026 we fetched both paths on 21 live Shopify stores. Every single one returned HTTP 200 with zero redirects. They are mirrors, not a redirect pair.
This is the single most repeated statement about Shopify and llms.txt, and it does not survive a fetch.
The claim originates in a Shopify Community thread dated May 24, 2026, titled "Shopify Just Killed /llms.txt for all stores." The opening post states that "Shopify just claimed the /llms.txt platform-wide and is redirecting it to a new agents.md file." A reply in the same thread goes further and describes the mechanism: "The redirect is baked in at the server level, so /llms.txt and /llms-full.txt both bounce to /agents.md."
That thread currently ranks on page one for this topic, and Google's AI Overview cites it. So the answer most merchants receive is that their /llms.txt is gone.
Here is what the servers return. This is the exact command, and you can run it against your own domain in about four seconds:
curl -sS -o /dev/null \
-w "%{http_code} redirects=%{num_redirects} bytes=%{size_download} type=%{content_type}\n" \
https://www.allbirds.com/llms.txt
And the output, captured on August 11, 2026, for the two paths side by side:
/llms.txt 200 redirects=0 bytes=4300 type=text/markdown; charset=utf-8
/agents.md 200 redirects=0 bytes=4257 type=text/markdown; charset=utf-8
Two hundred, not three-oh-one. Zero redirects, not one. And two different byte counts, which is by itself enough to rule out a redirect: if /llms.txt bounced to /agents.md then curl following the redirect would report identical bytes for both. It reports a 43-byte difference instead, consistently, on every store we tested.
So what is the 43 bytes? We diffed the two files. On 20 of the 21 stores the entire difference is one line, and it is this one:
65c65
< - Agent discovery: this document (`/agents.md`) is the canonical
agent-facing description of the store.
---
> - Agent discovery: the canonical agent-facing description of the store
is at `/agents.md`. You're reading `/llms.txt`, which mirrors that content.
That is the whole story. Shopify serves the same document at both paths and swaps a single self-referential sentence so the file knows which URL it is being read at. Shopify's own template documentation describes /llms.txt in exactly those terms, calling it "an agent-discovery file and an alternate URL for /agents.md."
A mirror and a redirect look similar in a browser and are completely different to anything automated. One serves you a document; the other tells you to go somewhere else.
Being fair to the thread: we cannot rule out that a genuine redirect existed in May 2026 and was later replaced by mirroring. We did not measure Shopify in May. What we can say precisely is that on August 11, 2026, across 21 stores, there was no redirect, and the advice built on top of that claim needs rechecking rather than repeating. If you take one habit from this page, take this one: on a platform that ships changes weekly, fetch the thing before you write about it.
What are llms.txt and agents.md, in plain terms?
TL;DR llms.txt is a 2024 community proposal for a Markdown summary of a site aimed at language models. agents.md is Shopify's own file, aimed at shopping agents that want to transact, not just read.
These two names get used interchangeably and they are not the same idea.
llms.txt
A proposed convention, authored by Jeremy Howard and published on September 3, 2024 at llmstxt.org, for a Markdown file at the root of a site that gives a language model a concise, curated map of what the site contains. The spec is short: an H1 with the site name, which it calls "the only required section," then a blockquote summary, then optional H2 sections listing links, with a final "Optional" section for links "an agent can skip when a shorter context is needed."
agents.md (Shopify)
Shopify's platform-generated file, served at the root of every Liquid storefront, which Shopify's theme documentation says "tells AI agents and shopping assistants how to discover the store's commerce capabilities and how to transact with it." It is not a summary of your content. It is a set of operating instructions for software that intends to put things in a cart.
The distinction matters because it explains why Shopify's default file looks so strange if you were expecting an llms.txt. It does not follow the llmstxt.org format. There is no blockquote summary of your brand and no curated link list. It is closer to an API onboarding document, and its intended reader is not a chatbot summarising your About page. It is an agent trying to work out which endpoint to POST to.
One thing the llms.txt spec does not contain: any mention of llms-full.txt. That filename is a community extension rather than part of the original proposal, a small illustration of how loose this area still is. Shopify serves it anyway, as a third alternate URL.
The third piece is the one merchants rarely hear about, and it is why the default file reads the way it does.
UCP (Universal Commerce Protocol)
The machine-readable layer underneath. Every Shopify store we probed serves a JSON document at /.well-known/ucp declaring its supported protocol versions, its MCP endpoint, its capabilities and its payment handlers. Allbirds, for example, declares versions 2026-04-08 and 2026-01-23, capabilities including cart, checkout, discount, fulfillment, order and catalog search, and payment handlers for Google Pay, card and Shop Pay. The specification lives at ucp.dev.
So the stack is: UCP is how an agent transacts, /agents.md is the human-readable note explaining that UCP exists, and /llms.txt is a second door onto the same note. Once you see it that way, the default file's contents make sense, and so does the problem with them.
What does Shopify's default file actually say?
TL;DR Store name, a pitch to install Shopify's Shop skill, UCP endpoints, a purchase flow, browsing URLs, policy links, and a closing section linking to shopify.com. No products. No categories. No brand.
The May 11, 2026 Community thread described the default as "essentially a sign-up prompt for Shopify, not a useful index of your store." Having now read it on 21 different domains, that is accurate but slightly generous.
Here is the structure, section by section, as served. The section names below are the actual headings in the file, at ## or ### level:
| Section | What it contains | About your store? |
|---|---|---|
| H1 title | "Agent Instructions" plus your store name | Name only |
| For Personal Shopping Assistants | Asks the agent to recommend that its user install the Shop skill at shop.app/SKILL.md, so it can "purchase products directly, discover best prices and discounts, and track orders" | No |
| Commerce Protocol (UCP) | Your UCP discovery URL and MCP endpoint, plus a six-step agent flow: discover, search, cart, checkout, fulfill, complete | Endpoints only |
| Supported UCP Versions | Protocol version strings | No |
| Important Rules | Checkout requires human approval; respect rate limits; pass buyer country and currency | No |
| Read-Only Browsing | Generic Shopify URL patterns: /collections/all, /products/{handle}.json, /search | Patterns only |
| Store Policies | Links to your privacy, terms and refund policy pages | Links only |
| Platform | Explains the store is built on Shopify, that "Shopify stores support UCP natively," and links to shopify.com/start, shopify.dev, ucp.dev and shop.app | No |
Byte size across the 21 stores ranged from 4,219 to 4,368. The variance is entirely explained by the length of the store name and domain, which are the only variable fields.
Read the right-hand column downward. The only genuinely store-specific content in the document is your name, your domain, your endpoint URLs and three policy links. Everything else is the same text on every Shopify store in the world. The closing line, verbatim from the live fetch, is a link labelled "Start your own store: https://www.shopify.com/start".
Your domain is currently hosting a recruitment pitch for your platform vendor, addressed to the software that decides whether to recommend you.
To be fair to Shopify, the file is doing a real job. The UCP endpoints in it are genuine and functional, the human-approval rule on checkout is a sensible guardrail, and pointing agents at a maintained cross-store skill is more reliable than having each of them screen-scrape your theme. This is not a scandal. It is a default, and defaults are written for the platform, not for you. The point is that 21 out of 21 stores had never changed it.
What did 26 live Shopify stores actually serve?
TL;DR 21 served the file, all 21 unedited. 5 Hydrogen storefronts returned 404 for the file but 200 for their UCP endpoint. One store had customized llms.txt and left agents.md on the default.
We probed 32 hosts. Of those, 26 were confirmed Shopify from their response headers, and those 26 split cleanly into two groups that behave very differently.
Method, so you can repeat or disagree with it. For each host we requested /agents.md, /llms.txt, /llms-full.txt and /.well-known/ucp, following redirects, recording status code, byte count and redirect count for each. We confirmed Shopify by looking for x-shopid, x-shopify-stage or a Shopify powered-by header on the homepage. We then classified each agents.md as Shopify's default if it began with the standard H1 and contained the shopify.com/start line, and as modified otherwise.
Two corrections we made to our own method
Our first pass reused output files between hosts. When a request failed, the previous store's file was still on disk and got classified again, which produced three phantom "modified" results and some nonsense diff counts. We rewrote the script to delete each output file before writing it, and re-ran every host from scratch. All numbers on this page come from the clean run.
We also ran a positive control on the classifier, because reporting "zero customized stores" is worthless if the detector cannot see a customized store. We took a real default file, deleted the shopify.com/start line, and re-ran the classifier on both. It labelled the original shopify-default and the edited copy MODIFIED. The instrument can see a positive; the absence below is a measured absence.
| Cohort | Stores | /agents.md | /llms.txt | /llms-full.txt | /.well-known/ucp | Default file? |
|---|---|---|---|---|---|---|
| Liquid storefronts | 21 | 200 (21/21) | 200 (21/21) | 200 (21/21) | 200 (21/21) | Unedited on 21 of 21 |
| Hydrogen storefronts | 5 | 404 (5/5) | 404 (5/5) | 404 (5/5) | 200 (5/5) | No file to edit |
| Excluded | 6 | Bot-blocked (HTTP 429), unreachable, or not identifiable as Shopify. Reported, not counted. | Unknown | |||
Liquid cohort: allbirds, deathwishcoffee, brooklinen, tentree, nativecos, partakefoods, spigen, jeffreestarcosmetics, thesill, beardbrand, taylorstitch, kyliecosmetics, ilanadavis, blenderbottle, rothys, untuckit, stevemadden, negativeunderwear, greatjonesgoods, magicspoon, vergegirl. Hydrogen cohort: mejuri, drsquatch, chubbiesshorts, hiutdenim, italic.
Three results are worth pulling out.
Twenty-one of twenty-one served the unedited default. That includes several large, well-resourced brands and one store belonging to a working Shopify developer who has publicly written about how to customize this exact file. This is a small non-random sample of well-known direct-to-consumer brands, so do not read it as a platform-wide statistic. Read it as evidence that even sophisticated merchants have not done this.
Twenty of twenty-one diffed at exactly one line between agents.md and llms.txt, which is the mirroring behaviour described above and a useful check that the sample is behaving consistently.
The twenty-first gets its own section below, because what that merchant did is both the most effort anybody in the sample put in and, as far as Shopify's own documentation goes, aimed at the wrong file.
Why does /agents.md return 404 on some Shopify stores?
TL;DR Because they are headless. All five Hydrogen storefronts we tested 404'd on all three agent files while still serving their UCP endpoint at 200. No Liquid theme means no Liquid template means no route.
This is a real gap and we have not seen it documented anywhere else, so here is the evidence rather than the assertion.
Five stores in our sample returned 404 for /agents.md, /llms.txt and /llms-full.txt while confirming as Shopify by header and returning HTTP 200 with a valid UCP profile at /.well-known/ucp. We fingerprinted each of their homepages and all five returned a Hydrogen signature.
$ for h in www.drsquatch.com www.chubbiesshorts.com mejuri.com \
www.hiutdenim.co.uk www.italic.com; do
printf "%-24s " "$h"
curl -sS -L "https://$h/" | grep -oiE 'hydrogen' | sort -u
done
www.drsquatch.com hydrogen
www.chubbiesshorts.com hydrogen
mejuri.com hydrogen
www.hiutdenim.co.uk hydrogen
www.italic.com hydrogen
The mechanism is straightforward once you see it. Shopify renders these three files from Liquid theme templates. A Hydrogen storefront is a React application talking to Shopify's APIs with no Liquid theme at all, so there is no template to render and no route to serve. The commerce layer underneath is untouched, which is why UCP still answers.
The consequence for a headless merchant is lopsided. An agent that already knows to look for your UCP endpoint can search your catalogue, build a cart and start a checkout. An agent that arrives the way the ecosystem currently tells agents to arrive, by reading /agents.md at your root, gets a 404 and no instructions. You are transactable but undescribable.
Shopify's WebMCP changelog of August 5, 2026 says WebMCP tools are available on Liquid storefronts and on Hydrogen's developer preview, so the transactional surface is being extended to headless. The discovery file has not followed. If you are on Hydrogen and you want one, you will have to add the route in your own application, which is entirely within your control precisely because you own the frontend.
How do you change what your store tells agents?
TL;DR Add templates/agents.md.liquid to your theme. It is the canonical file and it acts as the fallback for the other two paths, so one template covers all three.
Shopify documented this in a changelog dated May 28, 2026, and the mechanism is the same one you already know from robots.txt.liquid.
There are three templates, each mapping to one path:
| Template file | Serves | When you need it |
|---|---|---|
| templates/agents.md.liquid | /agents.md | Almost always the only one you need. Canonical, and the fallback for the other two. |
| templates/llms.txt.liquid | /llms.txt | Only when /llms.txt must differ from /agents.md. |
| templates/llms-full.txt.liquid | /llms-full.txt | Only when /llms-full.txt must differ from /agents.md. |
The fallback order is the part that saves you work, and Shopify states it directly in the changelog: "If no template is present for a given path, it falls back to your agents.md template, then to the Shopify-generated default."
Read that carefully, because it has a consequence most write-ups miss. Write agents.md.liquid and all three URLs serve your content. Write only llms.txt.liquid and you have changed one path while /agents.md, the canonical one, keeps serving Shopify's default.
To create it: Online Store, then Themes, then the three-dot menu on your live theme, then Edit code, then Add a new template. The file goes in the templates directory. Shopify's docs are explicit that this must be a Liquid file and not a JSON one, and that it accepts "standard Markdown and Liquid."
Here is a starting template that uses every piece of store data Shopify makes available, which as you are about to see is not very much:
# {{ agents.store_name }}
> One sentence on what you sell and who for. Write this yourself.
> It is the only place an agent learns what kind of store this is.
## What we sell
- Category one: {{ agents.store_url }}/collections/category-one
- Category two: {{ agents.store_url }}/collections/category-two
## Why buy here
- Your genuine differentiator, stated plainly.
- Materials, guarantees, certifications, where you make things.
## Commerce protocol
- UCP discovery: {{ agents.ucp_discovery_url }}
- MCP endpoint: {{ agents.mcp_endpoint_url }}
- Supported versions: {{ agents.ucp_versions | join: ", " }}
- Currency: {{ agents.currency }}
- Sitemap: {{ agents.sitemap_url }}
## Optional
- Full product feed: {{ agents.store_url }}/collections/all
One caution before you paste that in. Overriding the default means you also drop Shopify's UCP explanation and its checkout-approval rule unless you keep them. Fetch your current file first, save a copy, and treat your version as an edit of it rather than a replacement for it. The commands at the top of this page give you the copy.
Why can't you just list your products?
TL;DR Shopify strips these templates down to two Liquid objects, request and agents. The objects you would need to loop over products or collections are explicitly not injected.
This is the constraint that decides how much this feature is really worth, and it is stated plainly in Shopify's docs while being absent from most articles about the topic.
The template runs in a restricted Liquid context. Per shopify.dev, "the standard global Liquid objects such as shop, articles, and collections are not injected." The agents.md.liquid reference extends that list, stating that shop, articles, blogs, collections, pages and linklists "don't work in this template."
What you get instead is exactly two objects. request, and agents, which carries seven properties:
| Property | Type | What it gives you |
|---|---|---|
| agents.store_name | string | Store name |
| agents.store_url | string | Full URL at the bare primary domain |
| agents.ucp_discovery_url | string | UCP discovery endpoint |
| agents.mcp_endpoint_url | string | MCP endpoint |
| agents.ucp_versions | array | Supported UCP versions, newest first |
| agents.currency | string | Primary currency code |
| agents.sitemap_url | string | Sitemap location |
That is the entire store-specific surface. There is no product object, no collection loop, and no access to your blog or navigation.
So a merchant who wants a genuinely informative agent file has three options.
Hand-write it. Type your categories, differentiators and collection URLs into the template as static Markdown. This works, it is what the best file in our sample did, and its weakness is that it goes stale when your catalogue changes. For most stores the top-level structure moves rarely enough that this is fine.
Use an app. Several exist and two rank on page one for this term. Apply one test before subscribing: can it tell an agent anything not already derivable from your sitemap and your public /products/{handle}.json endpoints, both of which you already publish? An app that regenerates URLs you already expose has sold you a subscription and no information. An app that maintains genuine positioning copy and category descriptions is doing something the restricted template cannot.
Leave it. Defensible if your traffic from agent surfaces is negligible, which for most stores it is. Just make it a decision rather than an oversight.
Two further limits worth knowing before you plan around this file. Shopify's documentation states that agents.md "is served at the bare primary domain, without a locale or Shopify Markets subfolder prefix" and that "it has no localized counterpart." We confirmed both: /agents.md returned 200 while /en-ca/agents.md on the same store returned 404. If you sell into several markets, one file covers all of them.
The docs also carry a security note that is easy to skip and worth heeding, since this file is public and machine-read: "Avoid outputting potentially private merchant data, such as contact email addresses or phone numbers, in this file."
The one store that customized it, and why it may not count
TL;DR One store in our sample wrote a genuinely excellent 16,559-byte llms.txt. Its agents.md, the file Shopify calls canonical, was still the untouched default.
Out of 21 stores, exactly one had done real work here, and the result is instructive in two directions at once.
The Australian fashion brand VRG GRL, at vrggrl.com, serves an /llms.txt of 16,559 bytes across 253 lines. It is roughly four times the size of the Shopify default and it is a serious piece of writing. It opens in the llmstxt.org format with an H1 and a blockquote positioning line, then covers brand positioning, founders, aesthetic, price band, named competitor sets, customer profile, B Corp certification with a verification URL, sustainability claims, social impact, wholesale stockists and a full category structure with collection URLs and a search URL pattern.
That is what this file looks like when a merchant takes it seriously, and it is the one in our sample worth copying.
Now the problem. The same store's /agents.md is 4,314 bytes of Shopify's untouched default, ending in the usual invitation to go start a Shopify store.
/llms.txt 200 16559 bytes custom brand and catalogue index
/agents.md 200 4314 bytes Shopify default, unedited
Per Shopify's own documentation, /agents.md is the canonical agent-discovery path and /llms.txt is an alternate URL for it. Shopify's default file states this inside itself, in the line we diffed earlier: it tells any agent reading it that "this document (/agents.md) is the canonical agent-facing description of the store."
An agent that follows Shopify's own instruction to the canonical file gets the Shopify advert. The brand's real work sits one URL to the side.
We are being careful about how strong a claim this is. We have not tested which path any particular agent fetches first, and a given crawler may well prefer /llms.txt because that convention is older and more widely known. Both files are served and both are readable. Nothing is broken.
What the documentation alone establishes is that the fallback runs in one direction only. Writing agents.md.liquid would have populated all three URLs with this brand's content. Writing llms.txt.liquid populated one and left the canonical path on the default. The same effort aimed at the canonical template covers strictly more ground.
What does agent traffic do to your conversion rate?
TL;DR It inflates sessions without buying, and it can buy without generating a session. Both directions corrupt conversion rate, and the second one can corrupt an A/B test result without leaving a trace.
This is the part of agentic commerce that is under-covered, and it is closer to our actual work than the file format is. If software is now browsing and purchasing on your store, the numbers you use to judge your store are measuring a different population than they used to.
Start with what is confirmed. Shopify's WebMCP changelog of August 5, 2026 states that online stores "now expose WebMCP tools that AI agents can call," and lists ten of them by name: search_catalog, browse_store, get_product, show_variant, get_cart, update_cart, cancel_cart, proceed_to_checkout, manage_orders and search_shop_policies_and_faqs. The changelog says this is available on Liquid storefronts with no configuration required, and notes that WebMCP is an emerging standard currently limited to Chromium browsers through an origin trial.
Separately, Shopify's Help Center says agentic storefronts are "active by default for eligible stores" across ChatGPT, Google AI Mode and Gemini, Microsoft Copilot and Meta, managed under Sales channels then Agentic.
Read those two together. An agent can now search your catalogue, modify a cart and move toward checkout, and the surfaces that send those agents are on by default. Neither of those was something you opted into.
Here is what that does to the four numbers most Shopify merchants steer by.
| Metric | What agents do to it | Direction | The defence |
|---|---|---|---|
| Conversion rate | Agent sessions land in the denominator. A tool call that fetches a product and leaves looks like a bounced visit. | Understates | Segment agent traffic out before judging any page. |
| Bounce and time on page | Software reads a page in milliseconds and does not scroll. Averaged in with humans, both metrics degrade. | Understates | Stop using either as a page-quality signal without a segment filter. |
| A/B test sample | Agents get bucketed into variants like any visitor, but they are immune to the thing you are testing. Copy, imagery and layout do not move a parser. | Dilutes | Exclude agents from assignment, or accept a longer runtime for the same power. |
| Attribution | A purchase completed through the UCP endpoint may never produce the on-page session your test attributes revenue to. | Loses revenue | Reconcile order counts against experiment-attributed orders, not just within the test tool. |
The A/B testing row is the one that should worry you most, and it is worth being precise about why, because it is not simply "noise."
An A/B test randomly assigns visitors to variants, on the assumption that the assignment is the only systematic difference between the groups. Agents do not break randomisation. They break responsiveness. An agent assigned to your new product page and an agent assigned to the old one behave identically, because the change you made is invisible to a program reading structured data. Those sessions land in both arms and pull both toward the same value.
The effect is a diluted measurement. Your true lift among humans is unchanged, but the lift you observe across the mixed population is smaller, which means you need more traffic to detect it and are more likely to conclude that a real winner did nothing. For a low-traffic store already struggling to reach a trustworthy read, that is a meaningful tax. We work through the underlying traffic maths in A/B testing on a low-traffic Shopify store.
The attribution row is sharper, because it fails silently. If an order arrives through the UCP checkout path without the on-page session your experiment tool binds revenue to, that revenue is missing from the test. Not misattributed. Absent. And absent from whichever arm the agent would have been in, which is to say randomly, which is to say it widens your uncertainty without announcing itself. Shopify's Help Center does say orders from AI channels appear in the admin "with channel or referrer attribution so that you know where the order originated from," so reconciliation is possible. It is just not automatic, and no A/B testing tool we know of does it for you.
The defence is unglamorous. Score experiments on revenue per visitor rather than conversion rate, because RPV forces you to look at revenue and sessions together, which is exactly where the mismatch shows up. Segment agent traffic explicitly rather than hoping bot filters catch it, because these are not the crawlers your filters were written for. And treat an unexplained conversion-rate decline as a traffic-mix question before a page-quality one, because the mix is genuinely changing underneath you.
We build StorePilot on the principle that the winner call is made by deterministic statistics and never by a language model, which we argue in Never let an AI decide your A/B test. Agent traffic shows why that line matters. A model asked to interpret a diluted result will produce a confident narrative about it. The arithmetic just tells you the interval got wider.
Is any of this actually worth your time?
TL;DR Editing the file is worth twenty minutes as inventory control. It is not worth a subscription or a project, and anybody promising you traffic from it is guessing.
We would rather answer this honestly than sell you the topic we just spent 6,000 words on.
What is verifiable. The file exists on your domain right now. It is the default on essentially every store we checked. It contains no information about what you sell. It closes with a link to shopify.com. You can change it in twenty minutes with a theme template, at no cost.
What is not verifiable. That any AI system reads it, weights it, or cites you more often because of it. We looked for evidence and did not find any we would stand behind. One of the sources Google's own AI Overview leans on here is a Reddit thread whose consensus is that nobody has measured a difference. That is not proof it does nothing; it is an absence of evidence, which is what you would expect from a convention this young.
So the case for doing it is not a traffic case. The text is already published, under your domain, describing your business to software that increasingly mediates purchases, and right now it describes you as a generic Shopify store and invites the reader to go start one too. Twenty minutes to replace that with a paragraph about what you actually sell is a reasonable trade regardless of whether it ever moves a number.
The case against over-investing is equally clear. The restricted Liquid context caps how good the file can get without manual maintenance, the mechanism has already changed once since May 2026, and your agent-visible surface is fed far more by your product catalogue and your UCP endpoint than by a Markdown file. If you have attention for exactly one thing here, spend it on the catalogue. Our longer piece on Shopify AI search optimization covers that surface, and whether AI shopping traffic actually converts looks at what arrives when it works.
The 20-minute checklist
In order, cheapest first. Steps one and two cost nothing and tell you where you stand.
- Read what you are currently serving. Run
curl -sS https://yourstore.com/agents.md. Read it to the end, including the Platform section. This is the whole point of the exercise and most merchants have never done it. - Confirm the status codes. Check all three paths for a 200 with zero redirects. A 404 on all three almost certainly means you are headless, in which case skip to step six.
- Save a copy. You are about to override a file that contains functional UCP endpoints and a checkout-approval rule. Keep the original so your version can be an edit rather than a replacement.
- Write
templates/agents.md.liquid. Notllms.txt.liquid. The canonical file falls back to cover all three paths; the reverse is not true. - Say something only you can say. What you sell, who for, what makes it different, your real category URLs. If a competitor could publish your file unchanged, it is not worth publishing.
- On Hydrogen, add the route yourself. There is no Liquid template to write. You own the frontend, so serve the file from your app.
- Then go and check your analytics. This is the step that actually pays. Find out how much of your traffic is now non-human, and get it out of your conversion rate and out of your test assignment before you judge another experiment.
Step seven is where StorePilot fits, and we will be straight about the stage we are at. StorePilot is an AI conversion optimization agent for Shopify that watches real shopper behaviour, finds the friction, builds the variant and scores it on revenue per visitor with honest statistics. It is in active development and not yet listed on the Shopify App Store, so this is not a link to an install button. If separating human behaviour from agent behaviour before you decide anything is your problem, it is the one we are building for: read how it works or join the waitlist below.
The file is the easy half. The measurement is the half that decides whether you can still trust your own numbers.
Questions merchants keep asking
Does Shopify redirect /llms.txt to /agents.md?
Not as of August 11, 2026. We fetched both paths on 21 live Shopify stores and every one returned HTTP 200 directly, with zero redirects recorded by curl. The two files are near-identical mirrors that differ by a single line of text, not a redirect pair. The widely repeated claim that /llms.txt "bounces" to /agents.md comes from a May 2026 Shopify Community thread and is repeated by Google's AI Overview, but it does not match what the servers return today. Run curl -sS -o /dev/null -w "%{http_code} %{num_redirects}" against your own store to check.
What is agents.md on a Shopify store?
It is a Markdown file served at the root of your domain that tells AI agents and shopping assistants how to transact with your store. Shopify generates one automatically for every Liquid storefront. Shopify's theme documentation describes it as the file that "tells AI agents and shopping assistants how to discover the store's commerce capabilities and how to transact with it." It is the canonical agent-discovery path on Shopify, and /llms.txt and /llms-full.txt are alternate URLs that mirror it.
Is llms.txt mandatory on Shopify?
No, and you do not need to create one. Shopify already serves /llms.txt on every Liquid storefront automatically, so the file exists whether you asked for it or not. What is optional is overriding it. Nothing breaks if you leave the default in place, but the default contains no information about your products, your brand or your categories.
Is llms.txt real, or is it just SEO hype?
The file format is real and so is Shopify's implementation of it. llms.txt was proposed by Jeremy Howard and published on September 3, 2024 at llmstxt.org, and Shopify now serves it platform-wide. What is not established is that any major AI system reads it and ranks you differently as a result. Treat it as cheap inventory control over what your store says about itself, not as a ranking lever with proven returns.
What does Shopify's default agents.md actually say?
It gives the store name, a pitch for agents to install the Shop skill at shop.app/SKILL.md, the store's Universal Commerce Protocol discovery and MCP endpoints, a six-step agent purchase flow, read-only browsing URLs, links to the store's policy pages, and a closing Platform section that links to shopify.com. Across the 21 stores we measured, the file ranged from 4,219 to 4,368 bytes and contained zero product names, zero category descriptions and zero brand differentiators.
How do I customize llms.txt on Shopify?
Add a Liquid template to your theme. Shopify's May 28, 2026 changelog documents three: templates/agents.md.liquid serves /agents.md, templates/llms.txt.liquid serves /llms.txt, and templates/llms-full.txt.liquid serves /llms-full.txt. Because agents.md is canonical and acts as the fallback for the other two paths, customizing agents.md.liquid alone covers all three unless you deliberately want them to differ.
Why does /agents.md return 404 on my Shopify store?
Most likely you are running a headless storefront. All five Hydrogen storefronts we probed returned 404 for /agents.md, /llms.txt and /llms-full.txt while still serving /.well-known/ucp with HTTP 200. The agent-discovery files are rendered by Liquid theme templates, and a Hydrogen storefront has no Liquid theme, so the routes do not exist. Your UCP endpoint still works, which means agents can still transact even though they cannot read a description of your store.
Can I list my products in agents.md?
Not directly, and this is the constraint that surprises people. Shopify's docs state that in these templates "the standard global Liquid objects such as shop, articles, and collections are not injected." You get exactly two objects: request and agents. There is no loop over products or collections available, so a genuinely rich file has to be written by hand or generated by an app that pushes text into the template.
What is the agents object in agents.md.liquid?
It is the only store-specific data Shopify injects into the template. Per shopify.dev it exposes seven properties: agents.store_name, agents.store_url, agents.ucp_discovery_url, agents.mcp_endpoint_url, agents.ucp_versions, agents.currency and agents.sitemap_url. Everything else you want in the file, you type in yourself.
Does agents.md work with Shopify Markets and translations?
No. Shopify's documentation states that the file "is served at the bare primary domain, without a locale or Shopify Markets subfolder prefix" and that "it has no localized counterpart." We confirmed this: requesting a locale-prefixed path such as /en-ca/agents.md returned 404 while the bare /agents.md returned 200. If you sell in several languages, one file has to cover all of them.
Does agent traffic break my conversion rate?
It distorts it, in a direction that makes your store look worse than it is. Agent sessions inflate the denominator of conversion rate without behaving like shoppers, and an agent that completes a purchase through the UCP endpoint may never generate the on-page session that your A/B test counts. The practical defence is to score experiments on revenue per visitor with agent traffic segmented out, and to treat any sudden unexplained drop in conversion rate as a traffic-mix question before it is a page-quality question.
Should I install an llms.txt generator app?
Consider what it actually writes. Shopify already serves the file, so an app is buying you content and an update schedule, not the file itself. The honest test is whether the app can produce something an agent could not derive from your sitemap and product JSON, which are already public. If the output is a list of URLs you already publish, you have added a subscription and no information.
Will editing agents.md get my store cited by ChatGPT or Gemini?
There is no evidence either way that we can point to, and anybody who tells you otherwise on this topic is guessing. What is documented is that Shopify's agentic storefronts feature is "active by default for eligible stores" across ChatGPT, Google AI Mode and Gemini, Microsoft Copilot and Meta (Shopify Help Center), and that surface is fed by your product catalogue rather than by a text file. Fix agents.md because it is currently a Shopify advert on your domain, not because it is a proven ranking input.
Sources
Every platform claim on this page was read off a primary source fetched on August 11, 2026, or measured by us on the same day.
- Shopify changelog, "Customize /llms.txt, /llms-full.txt and /agents.md", published May 28, 2026. Source for the three templates and the fallback order.
- shopify.dev, agents.md.liquid reference. Source for the agents object properties, the restricted Liquid context, the localization behaviour and the private-data warning.
- shopify.dev, llms.txt.liquid reference. Source for "an agent-discovery file and an alternate URL for /agents.md."
- shopify.dev, llms-full.txt.liquid reference.
- The llms.txt proposal, Jeremy Howard, published September 3, 2024. Source for the format rules and the authorship date.
- Shopify changelog, "WebMCP support for Liquid and Hydrogen storefronts", published August 5, 2026. Source for the ten tool names and the Chromium origin-trial limitation.
- Shopify Help Center, Agentic storefronts. Source for "active by default for eligible stores" and the order-attribution statement.
- Universal Commerce Protocol. The specification referenced by every UCP profile we fetched.
- Shopify Community, "Shopify Just Killed /llms.txt for all stores", May 24, 2026. Source of the redirect claim this page tests.
- Shopify Community, "Shopify now serves llms.txt natively", May 11, 2026. Source of the "sign-up prompt for Shopify" quote.
Original measurement, August 11, 2026: 32 hosts probed with curl; 26 confirmed Shopify by response header; 21 served /agents.md with HTTP 200; 5 Hydrogen storefronts returned 404 for the agent files while still serving /.well-known/ucp; 6 excluded as bot-blocked, unreachable or not identifiable as Shopify. Store-level results are named in the fetch-matrix caption above so the run can be repeated.