Optimization Guide
Shopify Store Location & LocalBusiness Schema for AI Shopping Agents
AI shopping agents answering "kitchen store open Sunday near downtown Austin" and "where can I try on the X jacket before buying" read LocalBusiness structured data — not your Google My Business profile, not your Shopify admin settings. Without a LocalBusiness JSON-LD block on your Shopify storefront, physical retail locations are invisible to conversational AI.
"@type": "LocalBusiness" (or specific subtype: ClothingStore, ElectronicsStore, etc.) JSON-LD block to your Shopify homepage and any location landing pages. Include address (PostalAddress), geo (GeoCoordinates), openingHoursSpecification, and telephone. For click-and-collect, reference the store from your Product Offer's availableAtOrFrom.
Why Shopify Omni-Channel Merchants Need LocalBusiness Schema
Over 40% of Shopify stores with 6+ figures in revenue have at least one physical retail location, pop-up, or showroom. These merchants run Shopify POS alongside their online store. But Shopify generates no location-aware structured data from its POS location settings — there is no automatic LocalBusiness, no hours, no coordinates.
AI shopping agents (ChatGPT, Google AI Mode, Perplexity) increasingly answer "stores near me that carry X brand" and "open until 8pm on Saturday" queries by reading LocalBusiness structured data directly from merchant websites. Google's local knowledge panel also pulls from this structured data. Without it, physical locations of even well-known Shopify merchants can appear offline to AI queries.
LocalBusiness schema subtype selector
| Store type | Schema.org subtype | Query benefit |
|---|---|---|
| Fashion / apparel | ClothingStore | "clothing boutiques open now [city]" |
| Consumer electronics | ElectronicsStore | "electronics store with in-store demo near me" |
| Furniture / home décor | FurnitureStore, HomeGoodsStore | "furniture showrooms open Sunday [city]" |
| Sporting goods | SportingGoodsStore | "bike shop open Saturday near downtown" |
| Jewelry | JewelryStore | "jewelry stores with ring resizing near me" |
| Pets | PetStore | "pet stores that carry X brand food near me" |
| Books | BookStore | "independent bookstores open this weekend" |
| Toys | ToyStore | "toy stores with in-store pickup near me" |
| Florist | Florist | "florists open today [city]" |
| General retail | Store | Generic fallback — use specific subtype when available |
LocalBusiness JSON-LD for a Shopify Store
Add this block to theme.liquid (within <head> or before </body>) for your primary retail location:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ClothingStore",
"@id": "https://yourdomain.com/#store-main",
"name": "Your Store Name",
"url": "https://yourdomain.com/",
"telephone": "+1-555-123-4567",
"email": "hello@yourdomain.com",
"priceRange": "$$",
"image": "https://yourdomain.com/assets/storefront.jpg",
"logo": "https://yourdomain.com/assets/logo.svg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street, Suite 200",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
},
"hasMap": "https://maps.google.com/?q=123+Main+Street+Austin+TX+78701",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "10:00",
"closes": "19:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Sunday",
"opens": "12:00",
"closes": "17:00"
}
],
"sameAs": [
"https://www.instagram.com/yourbrand",
"https://www.facebook.com/yourbrand"
]
}
</script>
Linking products to store locations (click-and-collect)
In product JSON-LD, reference the LocalBusiness as the pickup location using availableAtOrFrom:
{
"@type": "Offer",
"price": "59.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"availableAtOrFrom": {
"@type": "ClothingStore",
"@id": "https://yourdomain.com/#store-main"
},
"availabilityStarts": "2026-06-10",
"deliveryLeadTime": {
"@type": "QuantitativeValue",
"value": 0,
"unitCode": "DAY",
"description": "Available for same-day in-store pickup"
}
}
Multi-Location Setup
For Shopify merchants with multiple retail locations, create a location index page (/locations/) and individual location pages (/locations/new-york/, /locations/chicago/). Place a self-contained LocalBusiness block on each location page with that location's unique address, hours, and coordinates.
On the parent brand homepage, reference all locations using the department property:
{
"@type": "Organization",
"name": "Your Brand",
"department": [
{ "@type": "ClothingStore", "@id": "https://yourdomain.com/locations/new-york/#store" },
{ "@type": "ClothingStore", "@id": "https://yourdomain.com/locations/chicago/#store" },
{ "@type": "ClothingStore", "@id": "https://yourdomain.com/locations/los-angeles/#store" }
]
}
Schema Properties Checklist
- Use the most specific LocalBusiness subtype (ClothingStore, not generic LocalBusiness)
addresswith all 5 PostalAddress fields (streetAddress, locality, region, postalCode, country)geowith exact GeoCoordinates (latitude/longitude) — required for "near me" AI queriesopeningHoursSpecificationwith all 7 days declared (closed days can be omitted; AI infers closed)telephonein E.164 format (+1XXXXXXXXXX)hasMaplinking to Google Maps or Apple Maps for the exact addresspriceRangeusing $ symbols — AI agents use this for "affordable stores near me" queries- For click-and-collect: Product Offer has
availableAtOrFromreferencing the store by@id
FAQ
Do I still need Google My Business if I add LocalBusiness schema to my Shopify store?
Yes — they serve different systems. Google My Business (now Google Business Profile) controls your Google Maps listing and local pack rankings. LocalBusiness schema on your website signals structured data to Google's indexer, AI agents (ChatGPT, Perplexity, Claude), and Bing. Both are necessary for full local discovery coverage. Schema.org data is also read by AI agents that don't have GMB access, making it the more universal signal for conversational AI shopping queries.
My Shopify store is online-only — should I still add LocalBusiness schema?
No. LocalBusiness requires a physical address that customers can visit. Online-only stores should use Organization or OnlineBusiness schema instead. Adding a fake physical address to LocalBusiness to game local results is a violation of Google's guidelines and can result in penalty. If you have a registered business address but no customer-facing retail space, omit LocalBusiness and use Organization with your registered address in the contactPoint.
How do I handle seasonal or holiday hours in schema.org?
Use the specialOpeningHoursSpecification property with validFrom and validThrough dates to declare temporary hours. For holiday closures, add a special specification with opens and closes set to "00:00" (indicating closed). Remove these after the period ends — stale special hours confuse AI agents about your current operating status.
Check Your Store's Local Schema Coverage
CatalogScan identifies omni-channel Shopify stores missing LocalBusiness structured data. Get your AI readiness score and pinpoint which structured data gaps are costing you local discovery.
Scan your store free