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.

TL;DR Use @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:

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_typeSingle line text"House Cleaning"
seo.area_servedSingle line text"San Francisco, CA" or "United States"
seo.service_channelSingle line text"online" or "in-person"
seo.service_outputSingle 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.