Structured Data Guide
Shopify Service Product Schema: Service Type JSON-LD for AI Agents
Thousands of Shopify stores sell services — repairs, consultations, installations, sessions — alongside or instead of physical products. AI shopping agents understand the difference between a thing and a service. If your service listing outputs @type: Product, agents treat it as a physical good and get confused. Here's how to use Service schema correctly on Shopify.
@type: Service (not Product) for non-physical service listings. Key properties: serviceType (what kind of service), areaServed (geographic coverage), provider (your business), availableChannel (ServiceChannel for online/in-person), and offers (pricing). In Shopify Liquid, detect service products by product tag or product_type and output the correct @type conditionally in product.liquid.
Service vs. Product: Why the Distinction Matters
Schema.org treats Service and Product as fundamentally different types, even though Shopify's commerce platform treats them identically as "products" in the admin. The distinction matters because:
- AI agent classification: An agent answering "find me a furniture assembly service" knows to look for Service @type pages — a Product @type with "assembly service" in the title is ambiguous and lower confidence
- Validator warnings: Product type expects gtin, sku, weight, and brand — a cleaning service has none of these. Service type expects serviceType, areaServed, and provider instead
- Google's rich results: Service structured data can qualify for Local Services rich results and service-type rich snippets distinct from product listings
- Booking integration: Service supports potentialAction → ReserveAction / BookAction for booking systems — Product does not have this built-in
Service Schema.org Properties Reference
| Property | Type | Description |
|---|---|---|
@type |
Text | Service (or a subtype: HomeAndConstructionBusiness, ProfessionalService, etc.) |
name |
Text | Service name: "2-Hour Deep Cleaning Session" |
serviceType |
Text | Category of service: "House Cleaning", "Tax Preparation", "Laptop Repair" |
description |
Text | Full description of what the service includes |
provider |
Organization / Person | The business or person delivering the service |
areaServed |
Place / DefinedRegion / Text | Geographic area where the service is available |
availableChannel |
ServiceChannel | How the service is delivered: online, phone, in-person |
offers |
Offer | Pricing, availability, and purchase URL |
serviceOutput |
Thing | The result of the service: "a cleaned home", "a repaired laptop" |
potentialAction |
Action | ReserveAction or BookAction for online booking |
termsOfService |
URL / Text | Link to your service terms |
aggregateRating |
AggregateRating | Star rating for the service (from reviews) |
Service Subtypes for Common Shopify Businesses
Schema.org has specialized subtypes of Service for common business categories. Using a subtype gives AI agents more precise classification:
| Service Category | Schema.org @type | Example Shopify Business |
|---|---|---|
| Home cleaning, repair, renovation | HomeAndConstructionBusiness |
Cleaning service, handyman store |
| Legal, accounting, consulting | ProfessionalService |
Legal document service, bookkeeping |
| Electronics, appliance repair | ElectronicsStore + service listings |
Phone repair shop, laptop service center |
| Personal care (haircuts, spa) | BeautySalon / HealthAndBeautyBusiness |
Hair salon booking, spa service |
| Fitness, personal training | SportsActivityLocation / Service |
Personal training sessions, fitness classes |
| Pet grooming, pet care | AnimalShelter / Service |
Pet grooming, dog walking |
| Moving, delivery | MovingCompany |
Local moving service, furniture delivery |
| Automotive | AutoRepair |
Detailing service, oil change package |
| Creative / digital services | ProfessionalService / Service |
Copywriting, logo design, SEO audit |
Service JSON-LD Example: Home Cleaning Session
{
"@context": "https://schema.org",
"@type": "Service",
"name": "2-Hour Deep Cleaning Session",
"serviceType": "House Cleaning",
"description": "Professional deep-clean of your home by trained cleaners. Covers kitchen, bathrooms, living areas, and 2 bedrooms. All supplies included. Book online and choose your date.",
"provider": {
"@type": "Organization",
"name": "SparkleClean Co.",
"url": "https://sparkle-clean.myshopify.com",
"telephone": "+1-555-0123"
},
"areaServed": {
"@type": "City",
"name": "San Francisco",
"containedInPlace": {"@type": "State", "name": "California"}
},
"availableChannel": {
"@type": "ServiceChannel",
"serviceUrl": "https://sparkle-clean.myshopify.com/products/deep-clean-session",
"servicePhone": "+1-555-0123",
"availableLanguage": "English"
},
"offers": {
"@type": "Offer",
"price": "149.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://sparkle-clean.myshopify.com/products/deep-clean-session"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "127",
"bestRating": "5"
}
}
Service JSON-LD Example: Laptop Repair (Variable Pricing)
{
"@context": "https://schema.org",
"@type": "Service",
"name": "MacBook Screen Replacement",
"serviceType": "Electronics Repair",
"description": "Professional MacBook Pro and MacBook Air screen replacement. Genuine or OEM-equivalent parts. 90-day warranty on all repairs. Same-day service available.",
"provider": {
"@type": "Organization",
"name": "FixIt Tech Repair",
"url": "https://fixit-tech.com"
},
"areaServed": "United States",
"availableChannel": {
"@type": "ServiceChannel",
"serviceUrl": "https://fixit-tech.com/products/macbook-screen-replacement",
"serviceLocation": {
"@type": "Place",
"name": "FixIt Tech — Downtown",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701"
}
}
},
"offers": {
"@type": "Offer",
"priceRange": "$149–$399",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://fixit-tech.com/products/macbook-screen-replacement"
}
}
Shopify Liquid Template: Product vs. Service Conditional
The cleanest Shopify implementation uses a product tag (schema-service) or product.type to switch the JSON-LD @type. This keeps one template handling both physical products and service listings correctly.
{% comment %} product.liquid — conditional Product vs. Service schema {% endcomment %}
{% assign is_service = false %}
{% if product.tags contains 'schema-service' or product.type == 'Service' %}
{% assign is_service = true %}
{% endif %}
Required metafields for service products
| Metafield key | Type | Example value |
|---|---|---|
seo.service_type | Single line text | "House Cleaning" |
seo.area_served | Single line text | "San Francisco, CA" or "United States" |
seo.service_channel | Single line text | "online" or "in-person" |
seo.service_output | Single line text | "A cleaned, sanitized home" |
Hourly Service Pricing with UnitPriceSpecification
For services priced per hour, per session, or per unit of delivery, use UnitPriceSpecification within the Offer. The unitCode field uses UN/CEFACT codes: HUR for hour, DAY for day, MON for month. This lets AI agents answer "find a consultant under $150/hour" accurately:
"offers": {
"@type": "Offer",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "125.00",
"priceCurrency": "USD",
"unitCode": "HUR",
"unitText": "per hour",
"referenceQuantity": {
"@type": "QuantitativeValue",
"value": "1",
"unitCode": "HUR"
}
},
"availability": "https://schema.org/InStock"
}
CatalogScan Service Schema Checks
CatalogScan's AI Readiness scan detects Shopify products that appear to be services (by product_type, tags, or keywords in title/description) and checks whether they output Service @type or Product @type in their JSON-LD. Products classified as services but outputting Product structured data receive a service-type mismatch warning in the scan report. The scan also checks for missing serviceType, areaServed, and provider on confirmed Service type blocks.
Related guides: Shopify schema markup overview · Booking & appointment schema for Shopify · Product availability schema · AI readiness checklist
FAQ
Should Shopify service listings use Service or Product schema.org type?
Use Service @type for non-physical offerings. While Shopify treats services as "products" in the admin, schema.org distinguishes them. Product expects gtin, weight, and brand; Service expects serviceType, areaServed, and provider. Using the wrong type causes validator warnings and reduces AI agent confidence in classifying your listing correctly.
What kinds of Shopify stores should use Service schema?
Any store selling home services (cleaning, repair), personal services (haircuts, training), professional services (consulting, accounting), installation services (furniture assembly, TV mounting), repair services (electronics, shoes, appliances), or creative services (design, copywriting). Use Product type for physical goods and Service type for service listings in the same store.
What is ServiceChannel and how do I use it?
ServiceChannel describes how customers access the service: online (serviceUrl), by phone (servicePhone), or in-person (serviceLocation with PostalAddress). For a Shopify booking link, set serviceUrl to the product page URL. For in-person services, add a serviceLocation with a PostalAddress. AI agents use ServiceChannel to route "online" vs. "in-person" service queries correctly.
How do I implement Service JSON-LD in Shopify Liquid?
In product.liquid, check for a product tag (e.g. 'schema-service') or product.type == 'Service' and conditionally output @type: Service instead of Product. Use metafields to store service_type, area_served, and service_channel values. Loop through service metafields to populate the Service JSON-LD block; fall back to standard Product JSON-LD for physical goods.
Can I include pricing on Service schema.org blocks?
Yes. Service supports the same offers property as Product. Add an Offer with price and priceCurrency. For hourly services, use UnitPriceSpecification with unitCode: HUR. For variable-price services, use priceRange ("$149–$399"). AI agents use the price from Offer to filter service recommendations by budget — without pricing, your service won't appear in price-constrained queries.