- Service is the schema for any non-product business offering. Consulting, agency work, professional services, repairs, subscriptions, B2B SaaS implementation engagements.
- No rich result, but high leverage for AI engines. ChatGPT, Perplexity, and Gemini ingest Service schema to answer "agencies that do X" / "consultants for Y" queries with concrete citations.
- Required:
name,provider,serviceType. Recommended floor:areaServed,hasOfferCatalog,audience,brand. - Don't use Service for products or apps. Use
Productfor physical goods,SoftwareApplicationfor software,Coursefor courses. - Pair with Organization. Service schema without a parent Organization breaks the entity graph - AI engines need both to attribute the service to a real business.
Chapter 1. Before you start
Service schema lives in an unusual position in the Google rich-result catalog: it doesn't produce one. There's no "Service" SERP feature, no special CTA, no visual enhancement. The reason to ship it anyway: AI engines parse Service schema heavily. For queries like "best Shopify SEO agency", "GA4 consultants in Chicago", or "AI search optimization services for SaaS", ChatGPT and Perplexity surface providers that have shipped Service schema with detail.
- Confirm the page is a service detail page, not the company homepage. Convention:
/services/{service-slug}or/what-we-do/{slug}. - Decide on serviceType. The recommended values are domain-specific - "SEO Audit", "Brand Strategy Consulting", "PCB Manufacturing".
- Pull the parent Organization data for
provider. Service schema referencing a Person provider is rare; Organization is almost always correct. - Decide on tier modeling. If your service has multiple tiers (Starter / Pro / Enterprise), use
hasOfferCatalogwrapping each tier as an Offer.
Chapter 2. Service has no rich result. Why ship it?
Three reasons, in descending order of importance.
- AI engine citation. The single biggest value. Service-schema'd pages with detailed serviceType, audience, and hasOfferCatalog get cited heavily in Perplexity, ChatGPT, and Gemini for service-discovery queries. Without the schema, AI engines have to parse marketing pages and often pick competitors.
- Knowledge Graph entity completion. The Organization's services are part of its identity. Linking Service records to the Organization via
providertightens the entity graph and signals breadth of capability. - Future rich result opportunity. Google has signaled multiple times that service-oriented rich results are on their roadmap (the Google Maps "services" panel for LocalBusiness is one early form). Sites that have shipped Service schema correctly are positioned for whenever broader rich-result coverage lands.
What Service schema is not useful for: trying to claim review stars (use Product or SoftwareApplication if you sell something review-eligible), or trying to qualify for the LocalBusiness rich result (use LocalBusiness directly).
Chapter 3. Required and recommended properties
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://www.example.com/services/seo-audit#service",
"name": "Capconvert SEO + GEO Audit",
"serviceType": "Search Engine Optimization Audit",
"description": "A 47-signal audit covering Google E-E-A-T, Core Web Vitals, schema completeness, AI engine citation, and the full GEO readiness checklist for ecommerce stores.",
"url": "https://www.example.com/services/seo-audit",
"provider": {
"@type": "Organization",
"@id": "https://www.capconvert.com/#organization",
"name": "Capconvert"
},
"brand": { "@id": "https://www.capconvert.com/#organization" },
"areaServed": {
"@type": "Country",
"name": "United States"
},
"audience": {
"@type": "BusinessAudience",
"audienceType": "Ecommerce brands with $1M-$50M ARR on Shopify"
},
"termsOfService": "https://www.example.com/terms",
"image": "https://www.example.com/services/seo-audit/hero-16x9.jpg",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Audit packages",
"itemListElement": [
{
"@type": "Offer",
"name": "Sentry Lite",
"description": "Single-domain audit with 47-signal report",
"price": 1500,
"priceCurrency": "USD"
},
{
"@type": "Offer",
"name": "Sentry Pro",
"description": "Multi-domain audit with quarterly re-audits",
"price": 4500,
"priceCurrency": "USD"
}
]
}
}
audience is unusually high-leverage here. AI engines use it to match a service to a query's audience context - "agency for Shopify ecommerce" hits services with a Shopify-ecommerce audience description much more reliably than ones without.
Chapter 4. hasOfferCatalog and tier modeling
For services with multiple tiers, use OfferCatalog wrapping individual Offer objects. Each Offer carries the tier's name, description, and price.
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Subscription tiers",
"itemListElement": [
{
"@type": "Offer",
"name": "Starter",
"price": "299",
"priceCurrency": "USD",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "299",
"priceCurrency": "USD",
"billingDuration": "P1M",
"billingIncrement": 1
},
"description": "Up to 5 domains, monthly Sentry audits, AI-engine citation tracking"
},
{ ...next tier... }
]
}
billingDuration: "P1M" for monthly, "P1Y" for annual. For freemium with paid upgrades, ship the free tier as an Offer with price: "0" and add the paid tiers as additional Offers.
Chapter 5. areaServed and digital vs geographic
| Service type | areaServed pattern |
|---|---|
| In-person service in one city | City with name |
| In-person service across multiple metros | Array of City or State |
| Remote service to one country | Country with name |
| Remote service to multiple countries | Array of Country |
| Remote service worldwide | Omit areaServed OR use {"@type": "AdministrativeArea", "name": "Worldwide"} |
| Hybrid (remote anywhere + in-person in HQ city) | Array combining Country and City |
Don't omit areaServed for remote services - explicitly stating "worldwide" or naming the served countries makes the AI engine match much sharper for geo-qualified queries. "SEO agency US" should match Service records that name USA in areaServed; agencies that left it blank get demoted.
Chapter 6. Where do you place Service schema on the site?
One Service record per service detail page. The provider Organization typically lives once on the site root; reference it from each Service via provider with @id.
For a services index page that lists all offerings (/services), use ItemList referencing each Service detail page by @id. Don't ship Service records inline on the index - they belong on their canonical detail pages.
Chapter 7. The breakages we see most often
Ranked by frequency across 37 agency and service-business audits:
- Service schema with self-serving Review markup attempting to get stars in the SERP. Ineligible since 2019 - the schema is fine, but the Review attempt is policy violation. 24 of 37.
- No
provider, breaking the Service-to-Organization entity link. 19 of 37. - No
areaServed, even for businesses with clear geographic service areas. 14 of 37. - No
serviceType, leaving Google to infer what the service actually is. 11 of 37. - Tier pricing in body copy but no
hasOfferCatalog, missing the AI-engine signal. 8 of 37. - No
audience, so AI engines can't match the service to the right buyer query. 5 of 37.
We track these on running sites through our Sentry structured-data rule set.
FAQ
Service has no rich result - should I really bother with it?
Yes, for AI engine citation. Service-schema'd pages are cited 2-3x more often by Perplexity, ChatGPT, and Gemini for service-discovery queries than equivalent unschemed pages. The work is 20 minutes per service; the upside compounds.
Should I use Service or LocalBusiness for my service business?
Both, with different roles. LocalBusiness covers the physical-location entity (or service-area definition). Service covers the specific offerings. A Chicago dental clinic has one LocalBusiness (Dentist subtype) and Service records for cleanings, fillings, implants, etc.
Can I ship Service schema with customer testimonials as Reviews?
The schema is valid. The rich-result eligibility for stars on the Service is not - Review on Service / Organization is the self-serving disqualifier. Ship Service correctly; don't try to bolt on Review for stars.
How do I handle a SaaS that's both a software product and a service?
Two separate records linked. The product is a SoftwareApplication; the implementation / consulting / support around it is a Service. Both reference the same parent Organization.
What's the difference between Service and ProfessionalService?
ProfessionalService is a LocalBusiness subtype - it's for the business itself (the law firm, the accounting firm). Service is for the individual offering (a specific legal service, a specific accounting engagement). Use ProfessionalService on the firm's homepage; Service on each service detail page.
Does Service need updates over time?
Yes, especially pricing and tiers. AI engines cache schema and stale prices cause friction when a prospect calls. Set a quarterly review on Service schemas with hasOfferCatalog to catch tier or price drift.
References
- Schema.org. "Service." schema.org/Service
- Schema.org. "OfferCatalog." schema.org/OfferCatalog
- Schema.org. "audience." schema.org/audience
- Schema.org. "areaServed." schema.org/areaServed
- Google Search Central. "Introduction to structured data markup." developers.google.com/search/docs/appearance/structured-data/intro-structured-data
- Schema.org. "Schema Markup Validator." validator.schema.org