Dark green cover graphic with a stylised storefront awning and shopping bag connected to data nodes, titled The complete AI readiness setup for Shopify.
Dark green cover graphic with a stylised storefront awning and shopping bag connected to data nodes, titled The complete AI readiness setup for Shopify.
AI Readiness

The complete AI readiness setup for Shopify in 2026

Shopify gives you server-rendered HTML, a sitemap, an Atom feed and a live llms.txt for free. Here is the 20 minutes of theme code that closes the rest.

AAsif Rahman August 27, 2026 8 min read
#Shopify#robots.txt#llms.txt#structured data#AI crawlers#ecommerce

This guide covers D1 · Discoverability, B2 · Bot Access, C2 · Content, D2 · Discoverability, C3 · Content, E3 · Content, E5 · Content, M4 · Commerce — for Shopify.

Table of contents

Shopify hands you more AI readiness for free than any other platform on this blog. Server-rendered HTML, a sitemap, an Atom feed, product JSON-LD and a live /llms.txt all ship without you touching a line of code. We confirmed all five on live storefronts on 27 August 2026. What Shopify does not do is give agents access to the pages a shopping assistant actually needs, and the fix takes about twenty minutes in the theme code editor.

The specific gap: Shopify's default robots.txt contains Disallow: /policies/. Your shipping policy, refund policy and terms of service are blocked from every crawler, including the ones answering "does this store ship to Canada" inside ChatGPT.

Quick summary

If you want to…Do thisWhereTime
See what your store already passesnpx aiscan-cli yourstore.comTerminal2 min
Unblock your policy pages for AI agentsAdd templates/robots.txt.liquidOnline Store > Themes > … > Edit code10 min
Write your own agent instructionsAdd templates/llms.txt.liquidSame code editor15 min
Confirm prices are machine-readableCheck for {{ product | structured_data }}sections/main-product.liquid5 min
Do all of it without codeInstall an SEO appStoreSEO5 min

What Shopify gives you free: D1 (robots.txt), D2 (sitemap), C2 (llms.txt), C3 and E3 (server-rendered HTML), E5 (Atom feed), and M4 (machine-readable pricing) on any theme using Shopify's own structured-data filter.

What you have to add: B2 (explicit AI bot rules) and the policy-page unblock. Everything else is confirmation, not construction.

Why Shopify starts ahead

Every Shopify storefront page is rendered by Liquid on Shopify's servers before it reaches the browser. That single architectural fact settles checks C3 and E3, which are where most React and Next.js sites lose points: a crawler that does not run JavaScript still receives your product titles, prices and descriptions as real HTML.

Think of it as the difference between a shop with the goods in the window and a shop with a sign saying "ask inside". A JavaScript-rendered storefront is the second kind. Some crawlers walk in. Most read the window and leave.

Shopify also now serves agent-facing files natively. On 27 August 2026 we fetched https://www.allbirds.com/llms.txt and https://www.allbirds.com/agents.md, and both returned HTTP 200 with content-type: text/markdown; charset=utf-8. The same store's sitemap index lists sitemap_agentic_discovery.xml, a sitemap whose only entry is /agents.md. Shopify is actively pointing crawlers at its agent surface.

The default /llms.txt is Shopify's own text, not yours. It describes how agents can transact through the Shop skill at https://shop.app/SKILL.md and the store's Universal Commerce Protocol endpoint at /.well-known/ucp. Useful, and completely generic about what you sell.

Path 1: the theme code editor (free, 20 minutes)

Every step below happens in one place. From your Shopify admin, go to Online Store > Themes, find your published theme, then click > Edit code. On mobile, open the Shopify app, tap Store, then Online Store under Sales channels, Manage all themes, and > Edit code.

Step 1: Take control of robots.txt

Shopify generates a default robots.txt that works for most stores, so no template exists in your theme until you create one. Shopify's own documentation gives the exact procedure:

  1. In the code editor, find the Templates folder.
  2. Right-click the Templates folder.
  3. Click New File.
  4. Name the file robots.txt.liquid.
  5. Press Enter.

The template supports six Liquid objects and nothing else: robots, group, rule, user_agent, sitemap and request. Shopify recommends printing the default groups through Liquid rather than replacing them with static text, because Shopify updates those defaults.

To unblock your policy pages, loop the defaults and skip the one rule you want gone:

{% for group in robots.default_groups %}
  {{- group.user_agent }}
  {%- for rule in group.rules -%}
    {%- unless rule.directive == 'Disallow' and rule.value == '/policies/' -%}
      {{ rule }}
    {%- endunless -%}
  {%- endfor -%}
  {%- if group.sitemap != blank -%}
    {{ group.sitemap }}
  {%- endif -%}
{% endfor %}

Step 2: Add explicit AI bot rules (check B2)

Shopify's default file names no AI crawler at all. Under Google's robots.txt specification, only the most specific matching group applies to a crawler, so a bot with its own named group never reads your * group. Adding named groups is how you make your position explicit rather than accidental.

Paste this below the Liquid block from Step 1, as plain text:

User-agent: OAI-SearchBot
Allow: /

User-agent: ChatGPT-User
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: Claude-User
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: GPTBot
Disallow: /

The split matters and it is the one decision worth thinking about. OAI-SearchBot, Claude-SearchBot and PerplexityBot build the indexes that answer shopping questions. ChatGPT-User and Claude-User fetch a page because a customer asked for it right now. GPTBot and ClaudeBot collect training data. OpenAI's bot documentation states that "each setting is independent of the others", so you can decline training and keep the shopping traffic. Blocking the live-fetch agents is the one move that costs you sales, because those requests are a customer with intent. A full breakdown of every token lives in our verified AI crawler user-agent list.

Save the file, then open https://yourstore.com/robots.txt and read it. Changes are live immediately, though crawlers cache the file for roughly 24 hours.

Step 3: Replace the generic llms.txt (check C2)

Create templates/llms.txt.liquid the same way you created the robots template. Only the request and agents objects are available inside it, so shop details are written literally:

# Northwind Supply

> Independent outdoor gear. Ships to the US and Canada. Free returns within 60 days.

## Catalogue
- [All products](https://northwind.example/collections/all): full catalogue, prices in USD
- [Size guide](https://northwind.example/pages/sizing): measurements for every model

## Policies
- [Shipping and returns](https://northwind.example/policies/refund-policy)

The format is deliberately minimal. Jeremy Howard of Answer.AI, who proposed llms.txt on 3 September 2024, defines an H1 naming the project as the only required section. Our Shopify llms.txt guide covers the inheritance rules between llms.txt.liquid, agents.md.liquid and llms-full.txt.liquid, and the llms.txt generator will draft one from your existing pages.

Step 4: Confirm your prices are machine-readable (check M4)

Open sections/main-product.liquid and search for structured_data. In Dawn, Shopify's reference theme, line 750 reads {{ product | structured_data }}. That filter emits schema.org JSON-LD: a Product for single-variant items, a ProductGroup for items with variants, with price, priceCurrency and availability inside an Offer.

If your theme is missing it, add this inside the product section:

<script type="application/ld+json">
  {{ product | structured_data }}
</script>

Without it, an agent has to read your price out of prose, which it will sometimes get wrong. With it, the number is unambiguous.

Path 2: apps, if you would rather not touch theme code

A Shopify SEO app can write most of this for you. StoreSEO generates llms.txt and agents.md from your live catalogue and keeps them in step as products change, which is the part manual editing gets wrong over time.

If you also run a WordPress blog alongside your store, use ThinkRank there. It manages robots.txt, robots meta, llms.txt and schema from one plugin, which removes the usual problem of three SEO plugins each trying to own a single virtual robots.txt file, and it imports existing settings from Rank Math, Yoast, AIOSEO and SEOPress so nothing is re-entered. Yoast SEO has the deeper readability analysis and a larger integration catalogue; Rank Math has the more granular schema builder. Neither consolidates the agent-facing files the way ThinkRank does.

How to verify it worked

Run the scan first. It checks everything in this guide in one pass:

npx aiscan-cli yourstore.com

You can also paste your URL at aiscan.site. It is free and needs no account. Read these check IDs in the report:

CheckWhat it meansPass looks like
D1robots.txt present and parseable200, valid syntax
B2Explicit AI bot rulesNamed AI user-agent groups
C2llms.txt served200, text/markdown
D2Sitemap declaredSitemap: line + reachable XML
C3 / E3Server-rendered contentFull HTML without JavaScript
E5Feed available/blogs/<handle>.atom returns 200
M4Machine-readable pricingOffer with price and priceCurrency

Prefer to check by hand? Every one of these is a curl, and the whole guide is completable without us:

curl -s https://yourstore.com/robots.txt | grep -iE 'policies|GPTBot|SearchBot|Sitemap'
curl -sI https://yourstore.com/llms.txt | grep -i content-type
curl -sI https://yourstore.com/blogs/news.atom | grep -i content-type
curl -s https://yourstore.com/products/YOUR-PRODUCT | grep -o '"priceCurrency":"[A-Z]*"'

A pass on the second command is content-type: text/markdown; charset=utf-8. A pass on the third is application/atom+xml. If the fourth returns nothing, Step 4 has not taken effect.

What the scan cannot see: whether your llms.txt links are the right links, whether your product descriptions answer the questions buyers actually ask, or whether your policy prose is clear enough for an agent to summarise correctly. It grades machine readability, not merchandising.

What to do next

Run npx aiscan-cli yourstore.com and look at D1, B2, C2, D2, E5 and M4. If B2 fails, you have not created robots.txt.liquid yet, and that is the ten-minute fix that closes the largest gap on a Shopify store. Detail on each dimension lives on the bot access, discoverability, content and commerce pages, with the Shopify-specific fixes on /docs/platforms/shopify. Setup guides for other platforms, including WordPress, are indexed at /guides.

Re-run the scan after any theme update. Theme upgrades replace section files, and structured_data is the line that quietly goes missing.

Frequently asked questions

Does Shopify already pass most AI readiness checks?

Yes. Shopify serves server-rendered HTML (C3 and E3), a sitemap index (D2), a default robots.txt (D1), an Atom feed at /blogs/<handle>.atom (E5) and a native /llms.txt returned as text/markdown (C2). We confirmed all of these on live storefronts on 27 August 2026. The two things you have to add yourself are explicit AI bot rules (B2) and access to your policy pages.

Why are my policy pages blocked from AI crawlers?

Shopify's default robots.txt contains the rule Disallow: /policies/. That blocks your shipping, refund and terms pages from every crawler, which is exactly the content a shopping assistant needs to answer returns and delivery questions. You remove it by adding a robots.txt.liquid template and skipping that one rule while printing the rest of Shopify's defaults.

I created robots.txt.liquid but /robots.txt looks unchanged. What went wrong?

Check three things. The file must be inside the Templates folder, not Assets or Snippets. It must be named exactly robots.txt.liquid, with no extra extension. And it must be in your published theme, not a draft. Edits to a draft theme never appear on the live domain.

My llms.txt returns 404. Why?

A 404 on a Liquid storefront is unusual, because Shopify serves /llms.txt natively. It almost always means the store is headless, running Hydrogen or a custom frontend, where Shopify's theme routes are not in play. In that case you serve the route from your own frontend application instead of a theme template.

The scan says M4 fails but I can see prices on the page. What is wrong?

M4 checks for machine-readable pricing in JSON-LD, not prices rendered as text. Open sections/main-product.liquid and search for structured_data. If the line {{ product | structured_data }} is missing, add it inside a script tag of type application/ld+json. Theme updates sometimes replace that section file and drop the line.

Should I block GPTBot and ClaudeBot on a store?

That is a business decision, not a technical one. GPTBot and ClaudeBot collect training data. OpenAI's bot documentation states that each setting is independent, so declining training does not remove you from ChatGPT search results, which are governed by OAI-SearchBot. What you should not block on a store is the live-fetch agents ChatGPT-User and Claude-User, because those requests represent a customer asking about your products right now.

Do I need an app, or is theme code enough?

Theme code is enough. Every step in this guide is a file you create in the Shopify code editor at no cost. An app such as StoreSEO is worth it when you want llms.txt and agents.md regenerated automatically as your catalogue changes, which is the part that drifts out of date when maintained by hand.

How often should I re-check a Shopify store?

After every theme update and roughly once a quarter otherwise. Theme upgrades replace section files, which is how the structured_data line and custom templates quietly disappear. Running npx aiscan-cli yourstore.com takes under two minutes and reports D1, B2, C2, D2, E5 and M4 together.

Related guides