STORE INSPECTOR · AI SHOPPING READINESS
Can AI shopping assistants find and read your store?
This guide covers the public files and markup an AI shopping assistant can see on an online store, what each one means, and how to change it. It is written for store owners and agencies. It makes no promise about ranking, recommendations or traffic.
Not observed does not mean unsupported. A platform can switch on AI channels without publishing anything in these public files, so a missing file is a reason to check, never proof that assistants cannot buy from you.
The in-extension readiness check ships with Store Inspector 0.6. This guide does not depend on the extension version: it explains the signals and the fixes.
Checked against official sources on 2026-10-31.
What the statuses mean
- Observed
- The expected public file or markup was found and could be read.
- Partly
- Found, but something is missing or restricted, for example a search agent blocked from the whole site or product markup without an identifier.
- Not observed
- Nothing was found at the standard public path. The store may still support the feature another way.
- Unreadable
- A file exists but is not valid, or the request failed or was refused, so it could not be judged.
- Not checked
- There was nothing to check, such as a product-data check on a page that is not a product page.
- Present / Absent
- Used for page-level opt-out tags. These are hints only and are not counted in “observed N of M”.
How the extension reads each signal
For the store you are on, it makes single read-only GET requests, without credentials and with a size cap, to the standard public paths below, and parses one product page from the same domain. It never changes the store.
Universal Commerce Protocol profile
The Universal Commerce Protocol (UCP) is an open protocol for platforms, AI agents and businesses to work together from discovery through checkout. Its specification says a business publishes its profile at /.well-known/ucp. Google, Shopify and Walmart are among the co-developers listed on ucp.dev.
The profile is a JSON document. Per the specification it has a required ucp object holding a version in YYYY-MM-DD form, the services the business offers and its payment handlers; capabilities such as dev.ucp.shopping.checkout are listed when present. The specification also asks for HTTPS and no redirects on the profile endpoint.
On Shopify, Shopify’s developer documentation says the profile lives at the storefront, at {shop}.myshopify.com/.well-known/ucp. Open that URL on your own domain to see what your store returns.
- Path
- /.well-known/ucp
- Format
- JSON over HTTPS, no redirect
- Extension reads
- The version and the dev.ucp.* capability names it can find
Agentic Commerce Protocol
The Agentic Commerce Protocol (ACP) is an open standard created by Stripe, OpenAI and Meta for AI agents to complete purchases with businesses. Its building blocks are agentic checkout, cart and feed, delegated payment, delegated authentication and order webhooks.
How it differs from UCP: ACP is specified as checkout and payment APIs, while UCP centres on a published profile where a business declares what it supports. The two are not exclusive.
The extension also checks /.well-known/acp.json as an optional hint: finding a readable profile there is informative, and not finding one says very little.
Who needs it: ACP says any business or AI platform can implement it, and a business can use it with any compatible payment provider. Most store owners get it through their commerce platform or payment provider, so ask them whether and how they support it.
- Path checked
- /.well-known/acp.json (optional hint)
- Extension reads
- Whether a readable JSON profile exists at that path
llms.txt
llms.txt is a plain Markdown file at /llms.txt that gives language models a short, curated map of a site. It was proposed by Jeremy Howard in September 2024. It is a convention rather than an official standard.
The proposed format is a title (H1) with the site name, a short summary in a blockquote, optional plain paragraphs, then H2 sections that hold lists of links, each as [name](url) with an optional note. A section called Optional marks links an assistant can skip.
For a store, useful content is the catalog entry points, shipping and returns, contact details and anything a buyer asks before purchase. ecomwith.com publishes its own /llms.txt. Shopify serves one by default (see the Shopify steps below). Google says its AI features in Search need no special files or markup, so this file matters for other agents, not for Google AI Overviews.
- Path
- /llms.txt
- Format
- Markdown, not HTML
- Extension reads
- That a text file exists and is not an HTML fallback page
A minimal llms.txt for a store
# Example Goods
> Small-batch canvas bags and accessories, shipped from Portland.
Key facts a shopper or assistant often needs.
## Shop
- [All products](https://example.com/collections/all): the full catalog
- [Shipping and returns](https://example.com/pages/shipping): rates, times, return window
## Optional
- [About us](https://example.com/pages/about)AI crawler rules in robots.txt
robots.txt is where a site tells crawlers what they may fetch. AI companies publish several tokens, and they do different jobs. Training crawlers collect content that may be used to train models. Search crawlers decide whether you appear in an AI product’s search answers. User-triggered assistants fetch a page because a person asked.
That difference decides what blocking costs you. Disallowing a training token is a statement about training. Disallowing a search or assistant token can reduce how often you are surfaced or cited by that product. Blocking the whole site for a search agent is what the extension reports as Partly.
Two limits to know. User-triggered fetchers may not follow robots.txt at all: OpenAI says robots.txt rules may not apply to ChatGPT-User, Perplexity says Perplexity-User generally ignores them, and Meta says meta-externalfetcher may bypass them. And robots.txt only expresses a request; it is not access control.
Opt out of training only
# Opt out of model training; leave search and assistant agents alone
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Disallow: /Optionally, state that search agents are welcome
# Say explicitly that search agents may crawl the whole site
User-agent: OAI-SearchBot
User-agent: Claude-SearchBot
User-agent: PerplexityBot
Allow: /The 14 AI crawler tokens the extension looks for
The group column follows the extension’s own list; the notes summarise what each operator documents.
| Token | Group | Notes |
|---|---|---|
OAI-SearchBot | Search | Surfaces sites in ChatGPT search; controlled through robots.txt. |
ChatGPT-User | Assistant | Fetches pages for user-initiated actions; robots.txt rules may not apply. |
GPTBot | Training | Crawls content that may train OpenAI models; disallowing signals it should not be used for training. |
Claude-SearchBot | Search | Improves Claude search results; blocking may reduce visibility there. |
Claude-User | Assistant | Fetches pages when a Claude user’s question needs it. |
ClaudeBot | Training | Collects content that may contribute to training; blocking excludes future material. |
PerplexityBot | Search | Surfaces and links sites in Perplexity search; not used to train foundation models; respects robots.txt. |
Perplexity-User | Assistant | Visits pages at a user’s request; generally ignores robots.txt. |
Google-Extended | Training | A control token with no crawler of its own; governs Gemini training and grounding; does not affect Google Search inclusion or ranking. |
Applebot-Extended | Training | Does not crawl; governs whether Applebot-crawled data trains Apple models; does not remove you from Search, Siri or Spotlight. |
Amazonbot | Search | Improves Amazon products and services and may train Amazon models; respects robots.txt. |
meta-externalagent | Training | Crawls to train Meta models or index content; blockable in robots.txt. |
CCBot | Training | Builds Common Crawl’s open dataset; blocked through the CCBot token. |
Bytespider | Training | ByteDance’s crawler token, counted by the extension with the training crawlers. |
User-triggered fetchers such as meta-externalfetcher are not in the extension’s list; Meta says they may bypass robots.txt.
Sitemap
A sitemap lists the URLs you want discovered. The extension counts one as observed if robots.txt declares a Sitemap line, or if /sitemap.xml returns XML.
Shopify says every store generates a sitemap.xml automatically, with links to products, collections, pages and blog posts. Other platforms differ; confirm in your platform’s documentation.
- Path
- A Sitemap line in robots.txt, or /sitemap.xml
- Extension reads
- That the response is XML
Product structured data
Assistants answer “what does it cost” and “is it in stock” most reliably when a product page states them as schema.org Product markup in JSON-LD. The extension reads the current page if it is a product page, otherwise one same-domain product page.
The extension looks for six core fields: name, image, description, price, priceCurrency and availability. It also reports whether there is an identifier (sku, gtin or mpn), a brand and a rating. For comparison, Google’s merchant listing documentation requires name, image, price and priceCurrency, and recommends description, availability, sku, gtin, mpn, brand and aggregateRating.
Missing identifiers are the common gap: without a gtin or mpn, a product is harder to match across sources.
Product JSON-LD with the fields above
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Canvas tote bag",
"image": ["https://example.com/images/tote-1.jpg"],
"description": "Heavy cotton tote with an inner zip pocket.",
"sku": "TOTE-001",
"brand": { "@type": "Brand", "name": "Example Goods" },
"offers": {
"@type": "Offer",
"price": "24.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "112"
}
}Page-level opt-out tags
Some sites add noai or noimageai to <meta name="robots"> to ask AI systems not to use a page or its images. These are informal markers. For comparison, Amazon documents that Amazonbot respects noarchive (do not use the page for model training) and noindex.
The extension only reports whether such a tag is present on the page you inspected, as a hint. The side effect to watch for is accidental: if a theme, app or SEO plugin adds the tag across the whole site, you may be opting out of things you want.
- Where
- <meta name="robots"> on the inspected page
How to do this on your platform
Steps below come from each platform’s own documentation, read on the date above. Menu names are quoted as the documentation gives them.
Shopify
Shopify now covers more of this by default than most platforms: it serves agent-discovery files, can syndicate your catalog to AI channels, and generates a sitemap. Your work is mainly to check them, fill in product data and decide what to restrict.
1. See what your store already serves
- Open these on your own domain: /agents.md, /llms.txt, /llms-full.txt, /robots.txt, /sitemap.xml and /.well-known/ucp. You do not need to be signed in to the admin; the extension reads the same public URLs.
- Shopify’s Help Center says every store automatically serves /agents.md as the canonical agent-discovery URL, with /llms.txt and /llms-full.txt provided for older AI crawlers that look for those paths. By default all three return the same content: store name, store URL, sitemap link, store policies and endpoints for other store information. No third-party app is needed.
- Shopify’s developer documentation puts the UCP profile at the storefront, at /.well-known/ucp. Open it on your own domain and see what it returns.
2. Change llms.txt or agents.md if you need to
- In the Shopify admin go to Online Store, open the actions menu (three dots) of your theme and choose Edit code. Click Add a new template, choose agents.md, llms.txt or llms-full.txt, click Create template, edit, then Save.
- An agents.md.liquid template changes all three URLs together; a URL-specific template such as llms.txt.liquid overrides it for that URL only. Shopify recommends adding a separate llms.txt.liquid only when /llms.txt must differ from /agents.md.
- The template is Liquid (not a JSON template) and accepts plain text, Markdown and Liquid, but only the request and agents objects are available, not shop or collections. The file sits on your primary domain with no language prefix, and once you add a template you are responsible for keeping its content current.
- A short Markdown file like the example in the llms.txt section above is valid content.
3. Decide which AI channels may sell your products
- Shopify’s Help Center says agentic storefronts let customers discover and buy in AI channels such as ChatGPT, Google AI Mode and Gemini, Microsoft Copilot and Meta. They are active by default for eligible stores, and you manage them under Sales channels > Agentic after agreeing to the Agentic Storefronts Supplemental Terms.
- Products reach these channels through Shopify Catalog, which syndicates each product’s title, description, options, images, price, availability and other key attributes by default. Google AI Mode and Gemini use the Google & YouTube channel or Google Merchant Center instead.
- Blocking AI crawlers in robots.txt does not stop Shopify Catalog from sending your product data to agentic storefronts you have activated. Manage that in the agentic storefront settings, not in robots.txt.
4. Edit robots.txt to allow or restrict AI crawlers
- In the admin: Online Store > the theme’s actions menu > Edit code > Add a new template > robots > Create template. Shopify pre-fills it with the default content; add or remove directives with Liquid, then save. Changes take effect right away, though crawlers may not react immediately.
- Keep Shopify’s default output and add your rules alongside it. Shopify advises against replacing the template with plain-text rules, because they can go out of date, and recommends using its provided Liquid objects. Before publishing, compare the rendered result with your current /robots.txt.
- This is an unsupported customization: Shopify Support cannot help with edits, and Shopify warns that incorrect use can cost you traffic. Remove older workarounds first, such as a third-party service like Cloudflare. Deleting robots.txt.liquid restores the default.
- Theme changes made with ThemeKit or the command line keep the file; uploading a theme from the Themes page does not import it.
- The rules you add are ordinary robots.txt lines, such as the training-only example above.
5. Complete the product data AI reads
- Barcode (GTIN, UPC, EAN, ISBN): open Products > the product > Inventory > Barcodes. You can add up to 20 per product or variant, and a GTIN is 8, 12, 13 or 14 digits. If a product has no GTIN, Shopify says to add the brand and MPN in the Google & YouTube channel.
- Shopify’s guide to optimizing products for Shopify Catalog lists title, a clear and detailed description, images, product type, vendor, collections and tags, barcode and variants with their option names. If titles or descriptions live in metafields, use the Channel mapping page.
- Page markup: themes can output Product markup with {{ product | structured_data }} inside a script tag of type application/ld+json. Shopify turns a product without variants into a schema.org Product and one with variants into a ProductGroup. If an SEO app also adds product markup, view the page source and make sure the product is not described twice.
WordPress and WooCommerce
Two layers are involved. WordPress core serves robots.txt; WooCommerce owns the products and, in recent versions, an agentic commerce setting. An llms.txt is optional and, like robots.txt, is a plain file at the site root.
1. Check what your site serves
- Open /robots.txt, /sitemap.xml, /llms.txt and /.well-known/ucp on your domain and note what each returns. Then open a product page and view the page source to see the Product markup.
2. Edit robots.txt
- WordPress core builds the default robots.txt in its do_robots() function. The default output is a wildcard User-agent group that disallows the admin area and allows admin-ajax.php. Core exposes a robots_txt filter (since 3.0.0) and a do_robotstxt action for changing it.
- Add the snippet below to a small site-specific plugin or your child theme. Afterwards open /robots.txt: if your host or a plugin has put a real robots.txt file in the site root, that file is what visitors see and the filter will not take effect, so edit that file instead. SEO plugins often include their own robots.txt editor; follow their documentation.
Block training crawlers with the robots_txt filter
add_filter( 'robots_txt', function ( $output, $public ) {
return $output . "\nUser-agent: GPTBot\nUser-agent: ClaudeBot\nUser-agent: CCBot\nDisallow: /\n";
}, 10, 2 );3. Turn on agentic commerce (optional)
- WooCommerce’s documentation says to go to WooCommerce > Settings > WooCommerce AI and switch on Enable agentic commerce. It requires WooCommerce to be active, an administrator or shop manager role, a store and user account connected to WordPress.com, and onboarding with your chosen shopping service, which must support your store’s payment method.
- The same page says compatible agents discover your store through its UCP discovery document. After enabling, open /.well-known/ucp on your domain and see what it returns.
4. Complete the product data
- WooCommerce’s own article on AI product discovery says WooCommerce maps many core product fields to schema.org JSON-LD on product pages: title, description, image, SKU, price, currency and stock status. Richer fields and variation-level data may need an extension or custom markup.
- WooCommerce 9.2 added a “GTIN, UPC, EAN or ISBN” field to the classic product editor, for products and variations. It behaves like a SKU and each value must be unique. After filling it in, check the page source to confirm it appears in the Product markup.
- Brand and rating usually come from an extension or your SEO plugin. After any change, re-check a product page’s source for one complete Product block.
Other platforms
The same checks apply anywhere. Which of them your platform handles for you varies.
What to ask and do
- Ask your platform or payment provider whether they publish a UCP profile or support ACP, and where. Do not hand-write a profile from memory: the UCP specification defines the structure.
- robots.txt, llms.txt and a sitemap are plain files. Where you can edit them depends on the platform.
- Product markup and identifiers are the part you can almost always fix: complete the identifier, brand and description fields in your catalog, then check the page source.
Questions store owners ask
Should I block GPTBot?
That is a decision about training, not about being found. OpenAI describes GPTBot as the crawler for content that may train its models, and says disallowing it signals that your content should not be used for training. OAI-SearchBot is separate and controls whether you appear in ChatGPT search, so blocking GPTBot alone does not remove you from it. Block a search or assistant token only if you are happy to be surfaced less by that product.
What happens if I do not have an llms.txt?
Nothing breaks. It is an optional, proposed convention rather than a requirement. Shopify stores get a default /llms.txt automatically; on other platforms you can add one if you want. The extension reports it as one signal among several, so a missing file only lowers the “observed” count.
Does “Not observed” mean AI agents cannot buy from my store?
No. A platform can enable AI channels without publishing anything in these public files. Treat Not observed as a prompt to check your platform settings.
Does the check change my store?
No. The extension makes single read-only GET requests, with no credentials and a response size cap, to a handful of public paths on the store you are viewing and one product page on the same domain. It writes nothing to the store.
Do I need any of this to appear in Google’s AI Overviews or AI Mode?
Google says there are no additional requirements or special optimizations for its AI features in Search: you do not need new machine-readable files, AI text files or special markup, and what matters is being indexed and eligible to show a snippet in regular Search. The signals in this guide matter mainly for other agents and protocols, and for the general quality of your product data.
If I publish a UCP profile, will assistants recommend my products?
There is no guarantee. A profile lets compliant agents discover what you support; whether an assistant recommends your products is that assistant’s decision.
Official sources
Facts on this page come from the official pages below, last checked on 2026-10-31.
- UCP specification
- Shopify: agent profiles and UCP
- Google Merchant Center: UCP
- ACP specification
- ACP on GitHub
- Stripe: ACP overview
- llms.txt proposal
- Google: AI features and your website
- OpenAI crawlers
- Anthropic crawlers
- Perplexity crawlers
- Google crawlers
- Apple: Applebot
- Amazonbot
- Meta web crawlers
- CCBot (Common Crawl)
- Shopify: find your sitemap
- Google: merchant listing markup
- Google: product snippets
- Agentic storefronts
- llms.txt, llms-full.txt and agents.md
- llms.txt.liquid reference
- Edit robots.txt
- robots.txt.liquid reference
- Optimize products for Shopify Catalog
- Barcodes
- structured_data filter
- WordPress: do_robots()
- WordPress: robots_txt filter
- WooCommerce: enable agentic commerce
- WooCommerce: AI product discovery
- WooCommerce 9.2 release notes
Check your own store
Store Inspector reads these signals for the store you are viewing, locally in your browser, and shows each one with its source.