International Catalog Guide
Shopify Markets and AI Shopping Agent Catalog Visibility
How Shopify Markets creates regional catalog variants — and the specific structured data, hreflang, and JSON-LD currency configurations that determine whether international AI shopping agents find and recommend your products.
What Shopify Markets Creates for Each Region
When you activate a market in Shopify (for example, United Kingdom), Markets can create a regional storefront in one of three URL structures:
| URL structure | Example | AI agent indexing behavior |
|---|---|---|
| Subfolder (recommended) | yourstore.com/en-gb/products/widget | Crawlers index as distinct URL; hreflang links it to primary. Best discoverability. |
| Subdomain | uk.yourstore.com/products/widget | Treated as separate domain by some crawlers; domain authority doesn't fully transfer. |
| Country domain | yourstore.co.uk/products/widget | Fully separate crawl budget; strong geo-signal but requires separate sitemap and structured data per domain. |
| Currency redirect (no URL change) | yourstore.com/products/widget (currency set by cookie) | Invisible — AI crawlers don't execute JavaScript and don't accept currency cookies; see only primary market prices. |
The last row — currency redirect with a single URL — is the default Shopify Markets configuration for many merchants. It looks correct to a human visitor but exposes only your primary-market pricing to every AI crawler in the world.
The AI Crawler Locale Problem
AI crawlers like PerplexityBot, OAI-SearchBot (ChatGPT), and Googlebot-AI access your storefront as headless HTTP clients. They do not:
- Execute JavaScript that sets currency based on IP geolocation
- Accept
Accept-Language-based redirects to regional storefronts - Store cookies that Shopify uses to remember a visitor's preferred market
- Follow geo-IP redirects to country-specific domains
This means the only way to expose regional catalog data to AI agents is through distinct, crawlable URLs with valid hreflang annotations — not through JavaScript-driven localization.
hreflang for AI Agents: Implementation and Gaps
hreflang was designed for Google to understand language/region variants of the same page. AI agents have adopted this same signal to identify catalog variants. When your product page at /products/blue-widget has a UK variant at /en-gb/products/blue-widget, hreflang links them:
<!-- In the <head> of /products/blue-widget --> <link rel="alternate" hreflang="en" href="https://yourstore.com/products/blue-widget"> <link rel="alternate" hreflang="en-GB" href="https://yourstore.com/en-gb/products/blue-widget"> <link rel="alternate" hreflang="de" href="https://yourstore.com/de/products/blauer-widget"> <link rel="alternate" hreflang="x-default" href="https://yourstore.com/products/blue-widget">
Shopify generates hreflang tags automatically when you use subfolder routing with Markets — but only for the languages you have explicitly configured. Common gaps:
| Gap | Symptom | Fix |
|---|---|---|
Missing x-default |
Agent has no clear primary URL to prefer | Always include x-default pointing to your primary market URL |
| Hreflang without actual translated content | Machine-translated pages that diverge from primary in JSON-LD product names | Ensure product name in JSON-LD is translated consistently with visible content |
| Regional pages not in sitemap | Crawler discovers hreflang but crawl budget exhausted before visiting all variants | Generate per-market sitemaps and submit via Google Search Console (and IndexNow for AI agents) |
| Return link missing | Regional page doesn't link back to primary with hreflang; one-directional annotation | Both primary and regional pages must include hreflang for all variants |
JSON-LD Currency and Locale for Regional Pages
The most impactful JSON-LD change for Shopify Markets is ensuring the Offer.price and Offer.priceCurrency fields reflect the regional currency, not always USD.
Correct Liquid for per-market JSON-LD pricing
{
"@type": "Offer",
"price": {{ product.selected_or_first_available_variant.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"priceValidUntil": "{{ 'now' | date: '%s' | plus: 2592000 | date: '%Y-%m-%d' }}",
"availability": "https://schema.org/InStock",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": {{ localization.country.iso_code | json }}
}
}
}
Key fields for regional accuracy:
cart.currency.iso_code— Shopify sets this to the active market's currency; use it instead of hardcoding"USD"localization.country.iso_code— the active market's country code; used inshippingDestinationto tell agents which market this offer applies topriceValidUntil— required for price freshness; without it some AI agents treat the price as potentially stale
Language in JSON-LD for translated stores
If you use Shopify Translate & Adapt to translate your product descriptions, the translated content should flow automatically into JSON-LD via Liquid — {{ product.description }} returns the translated content when the active locale is non-default. Verify this is working by checking your regional page's JSON-LD source vs. the primary page's JSON-LD.
Shopify Markets AI Visibility Checklist
| # | Check | Priority |
|---|---|---|
| 1 | Regional storefronts use subfolder routing (/en-gb/, /de/) not cookie-only currency switching |
Critical |
| 2 | All regional product pages include bidirectional hreflang annotations with x-default |
Critical |
| 3 | JSON-LD priceCurrency uses cart.currency.iso_code not hardcoded "USD" |
Critical |
| 4 | Regional pages are included in a per-market sitemap submitted to search engines | High |
| 5 | Product names in regional JSON-LD match translated h1 exactly (no English name leaking through) |
High |
| 6 | robots.txt allows AI crawlers to access regional subdirectories (/en-gb/, etc.) |
High |
| 7 | shippingDestination in JSON-LD OfferShippingDetails uses localization.country.iso_code |
Medium |
| 8 | Market-specific product availability (products restricted to certain markets) is reflected in Offer availability on regional pages |
Medium |
| 9 | IndexNow ping sent for regional URLs when new products are added to a market | Medium |
Related Resources
- Shopify International SEO for AI Agents — broader international SEO strategy including hreflang, translated content, and multi-market catalog management.
- Shopify International SEO Structured Data and hreflang — technical deep-dive on hreflang implementation and structured data for international Shopify stores.
- Shopify Schema Markup Guide — full JSON-LD implementation reference including Offer, priceCurrency, and OfferShippingDetails.
- AI Shopping Agent Product Ranking Factors — how regional pricing and availability signals fit in the full ranking model.
Frequently Asked Questions
Does Shopify Markets create separate URLs for each region that AI agents can index?
Yes, when using subfolders or subdomains in Shopify Markets (e.g., yourstore.com/en-gb/ or uk.yourstore.com), each regional storefront has its own crawlable URL set. AI crawlers like PerplexityBot and OAI-SearchBot follow hreflang annotations to discover regional variants. Without hreflang tags on your regional pages, crawlers may index only your primary market and miss regional pricing and language variants entirely.
How should I handle multi-currency pricing in JSON-LD for Shopify Markets?
Output JSON-LD in the currency of the page being rendered. For Shopify Markets with subfolder routing, each regional page is served in that market's currency — use Liquid's {{ variant.price | money_without_currency }} and {{ cart.currency.iso_code }} to pull the correct values. AI agents that index your regional URLs will see region-appropriate pricing in structured data. Do not hardcode USD prices across all regional pages, as this creates a structured data mismatch that AI agents flag as inconsistent.
Can AI shopping agents access Shopify Markets-restricted products?
AI crawlers behave like standard web crawlers and access the public storefront — they see what an unauthenticated visitor to your regional URL would see. Products restricted to specific markets via Shopify Markets availability settings will not appear in the catalog for markets where they are unavailable. The /products.json endpoint returns the default market's catalog unless the crawler sets appropriate locale headers, which most AI crawlers do not do.
Do I need separate sitemaps for each Shopify Market?
Yes, for full international AI agent coverage. A sitemap for each regional subdirectory (sitemap-en-gb.xml, sitemap-de.xml) that lists all regional product, collection, and page URLs enables AI crawlers to efficiently discover your localized content. Shopify's built-in sitemap.xml only covers your primary domain. Third-party sitemap apps or custom Liquid sitemap templates are needed to generate per-market sitemaps.
Check Your Store's International AI Visibility
CatalogScan scans your primary and regional storefronts for hreflang gaps, JSON-LD currency mismatches, missing per-market structured data, and regional sitemap coverage — then reports the fixes with the highest impact on international AI agent discovery.
Scan your store free