ChatGPT Shopping
ChatGPT Shopping Optimization for Shopify: 5-Step Setup Guide
ChatGPT Shopping recommends products to millions of users every day. Getting your Shopify store into those recommendations is not about ads — it's about catalog hygiene. Here's the five-step checklist.
/products.json feed. It matches products using GTINs, cites descriptions as evidence, and uses ProductGroup JSON-LD for variant lookup. Most Shopify stores fail at step 1 (GPTBot is blocked) or step 3 (no GTINs). Fix those first.
How ChatGPT Shopping discovers and recommends products
Understanding the mechanism helps you prioritize the fixes:
- GPTBot crawl — OpenAI's web crawler indexes your store pages and
/products.jsoncontinuously. If blocked, the product is never indexed. - OAI-SearchBot index — A second crawler specific to ChatGPT Shopping mode that prioritizes PDPs with structured data. Distinct from GPTBot.
- GTIN-based matching — When a user's query maps to a specific product (e.g. a named brand + model), ChatGPT Shopping resolves it to a GTIN and surfaces stores that carry that GTIN.
- Description-as-citation — For broader queries ("best running shoes for flat feet"), ChatGPT cites your product description as evidence for why it recommends your product. Thin descriptions get cited less or not at all.
- Variant lookup via ProductGroup JSON-LD — If a user specifies a variant (size, color), ChatGPT uses your
ProductGroupstructured data to match the specific variant SKU with a GTIN and offer price.
The 5-step optimization checklist
Unblock GPTBot and OAI-SearchBot
This is the most common and most silent failure mode. If your robots.txt blocks OpenAI's crawlers, ChatGPT Shopping has never seen a single product page from your store.
Check your current state:
curl -s https://yourstore.com/robots.txt | grep -A2 -i "gptbot\|oai-searchbot"
If you see Disallow: / under either agent, remove it. The correct configuration:
User-agent: GPTBot Allow: /products Allow: /collections Allow: / User-agent: OAI-SearchBot Allow: /
Warning: Some Shopify security apps (including some theme-level "block all crawlers" settings) add broad bot blocks that catch GPTBot. Check the source of any existing Disallow rules before removing.
- GPTBot is not blocked in robots.txt
- OAI-SearchBot is not blocked in robots.txt
- Store is not password-protected (dev mode off)
curl -A "GPTBot" https://yourstore.com/returns 200
Verify /products.json is accessible and complete
ChatGPT Shopping uses your /products.json endpoint for bulk catalog discovery — it's faster than crawling individual PDPs. It must be publicly accessible, paginated correctly, and include variant data.
curl -s "https://yourstore.com/products.json?limit=1" | jq '.products[0] | {title, variants: .variants | length}'
# Should return product title and variant count, not an error
Common failures:
- Headless stores: If you're running Hydrogen or a custom storefront,
/products.jsonmay be disabled. You need to proxy it or use the Storefront API. - Password protection: Any store password blocks all crawlers. This is the #1 reason a new merchant isn't in ChatGPT Shopping.
- Pagination: The default limit is 250 products per page. Stores with 250+ products must be paginated. ChatGPT respects
?limit=250&page=N.
- /products.json returns HTTP 200 without authentication
- Variant data is included (check
variants[].barcode) - All pages accessible (test
?limit=250&page=2if you have 250+ products)
Add GTINs to every variant
GTINs are the product identifier ChatGPT Shopping uses for exact-match variant lookup. When a user asks "where can I buy [Brand] [Model] in size M?" ChatGPT resolves it to a specific GTIN. Variants without GTINs can't appear in those results.
Fill the Barcode (ISBN, UPC, GTIN) field on every variant in Shopify admin. For bulk entry, export your product CSV, fill the Variant Barcode column from your supplier or GS1 account, and re-import. See the full GTIN guide for format requirements and check-digit validation.
- Every variant has a non-empty barcode field
- Barcodes are valid GTINs (12-digit UPC or 13-digit EAN)
- No internal SKUs or ASINs used in the barcode field
Add Product and ProductGroup JSON-LD to PDPs
ChatGPT Shopping uses structured data from your PDPs to confirm product details, validate GTINs, and look up variant-specific pricing. Without it, it's working from the feed alone — less accurate, lower confidence, fewer recommendations.
// Minimal Product JSON-LD for a single-variant product
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Classic T-Shirt",
"gtin": "012345678901",
"brand": { "@type": "Brand", "name": "YourBrand" },
"offers": {
"@type": "Offer",
"price": "42.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://yourstore.com/products/classic-tshirt"
}
}
For products with size/color variants, use ProductGroup instead — see the Shopify schema markup guide for the full Liquid template implementation.
- Every PDP has valid
ProductorProductGroupJSON-LD gtinfield populated with the variant's barcode valueoffers.pricematches the actual current priceoffers.availabilityreflects actual stock status- Google Rich Results Test returns no errors for a sample PDP
Enrich product descriptions to 150+ words
ChatGPT Shopping cites product descriptions when recommending products in response to informational queries ("best hiking boots for wide feet"). Short descriptions (under 100 words, or just a size chart) get cited less. Descriptions that cover use case, materials, fit notes, and distinguishing features score higher.
You don't need to rewrite your entire catalog at once. Prioritize by revenue: start with your top-20 best-sellers and expand from there. Each description should answer: what is it made of, who is it for, what problem does it solve, and what makes it different?
- Top-20 products have 150+ word descriptions
- Descriptions cover material, use case, fit/sizing notes
- No duplicate descriptions across variants of the same product
- Descriptions are in the
body_htmlfield (visible in /products.json)
Verify your work with a CatalogScan audit
Once you've worked through the checklist, run a CatalogScan audit to confirm all 5 steps are passing. The scan checks all 18 AI-readiness signals including the 5 above, shows per-product breakdowns, and flags regressions automatically. Free scan, no app install needed.
FAQ
How long does it take for ChatGPT Shopping to index my store after I fix robots.txt?
GPTBot typically re-crawls sites on a 2–4 week cycle. To speed up discovery, submit your sitemap URL to OpenAI's recently launched IndexNow-compatible endpoint (if available for your account). Most merchants see changes reflected within 2–3 weeks of the robots.txt fix.
Do I need to sign up for a ChatGPT Shopping program or API?
No. ChatGPT Shopping uses organic crawl data — it's not a paid channel and there's no signup. Make your store crawlable, add GTINs, add structured data, and enrich descriptions. That's the full setup.
My store uses a headless Shopify setup. Does the checklist change?
Yes — step 2 changes significantly. Headless stores often disable /products.json. You'll need to proxy it or expose products via the Storefront API in a format AI agents can consume. See the Shopify product feed API guide for headless-specific instructions.
Is ChatGPT Shopping optimization different from Google Shopping optimization?
Substantially different. Google Shopping (paid) uses Merchant Center and your XML feed. ChatGPT Shopping reads your live store via GPTBot crawl and /products.json. The only real overlap is GTINs. Everything else — description richness, ProductGroup JSON-LD, structured data quality — is specific to the AI channel.
Can I measure how much traffic is coming from ChatGPT Shopping?
Not precisely yet — OpenAI hasn't released a verified referrer tag. In GA4, filter sessions where source contains "openai.com" or chatgpt.com". For a more complete AI traffic picture, filter for sources that include perplexity, bing (AI mode), and google (AI overviews).
Check all 5 steps in 2 minutes
Free CatalogScan audit covers robots.txt, feed access, GTINs, structured data, and description richness — plus 13 more signals.
Scan your store free →