---
title: "The complete AI readiness setup for Shopify in 2026"
slug: ai-readiness-setup-shopify
published: 2026-08-27T08:09:40.138964+00:00
updated: 2026-08-27T13:44:20.481675+00:00
author: "Asif Rahman"
author_url: https://masifrahman.com
category: "AI Readiness"
tags: platform:shopify, check:D1, check:B2, check:C2, check:D2, check:C3, check:E3, check:E5, check:M4, Shopify, robots.txt, llms.txt, structured data, AI crawlers, ecommerce
description: "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."
url: https://aiscan.site/blog/ai-readiness-setup-shopify
---

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 this | Where | Time |
|---|---|---|---|
| See what your store already passes | `npx aiscan-cli yourstore.com` | Terminal | 2 min |
| Unblock your policy pages for AI agents | Add `templates/robots.txt.liquid` | **Online Store > Themes > … > Edit code** | 10 min |
| Write your own agent instructions | Add `templates/llms.txt.liquid` | Same code editor | 15 min |
| Confirm prices are machine-readable | Check for `{{ product \| structured_data }}` | `sections/main-product.liquid` | 5 min |
| Do all of it without code | Install an SEO app | [StoreSEO](https://storeseo.com/) | 5 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](https://ucp.dev) 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](https://shopify.dev/docs/storefronts/themes/seo/robots-txt) 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:

```liquid
{% 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:

```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](https://platform.openai.com/docs/bots) 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](https://aiscan.site/blog/ai-crawler-user-agent-list-2026).

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:

```liquid
# 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](https://aiscan.site/blog/llms-txt-shopify) covers the inheritance rules between `llms.txt.liquid`, `agents.md.liquid` and `llms-full.txt.liquid`, and the [llms.txt generator](https://aiscan.site/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:

```liquid
<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](https://storeseo.com/) 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](https://thinkrank.ai) 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:

```bash
npx aiscan-cli yourstore.com
```

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

| Check | What it means | Pass looks like |
|---|---|---|
| **D1** | robots.txt present and parseable | 200, valid syntax |
| **B2** | Explicit AI bot rules | Named AI user-agent groups |
| **C2** | llms.txt served | 200, `text/markdown` |
| **D2** | Sitemap declared | `Sitemap:` line + reachable XML |
| **C3 / E3** | Server-rendered content | Full HTML without JavaScript |
| **E5** | Feed available | `/blogs/<handle>.atom` returns 200 |
| **M4** | Machine-readable pricing | `Offer` with `price` and `priceCurrency` |

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

```bash
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](https://aiscan.site/docs/checks/bot-access), [discoverability](https://aiscan.site/docs/checks/discoverability), [content](https://aiscan.site/docs/checks/content) and [commerce](https://aiscan.site/docs/checks/commerce) pages, with the Shopify-specific fixes on [/docs/platforms/shopify](https://aiscan.site/docs/platforms/shopify). Setup guides for other platforms, including [WordPress](https://aiscan.site/blog/ai-readiness-setup-wordpress), are indexed at [/guides](https://aiscan.site/guides).

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


