Skip to Content

No Service schema on a service page

What Is This Issue

Pages describing a service offering are missing Service schema. Without it, search engines cannot identify and surface the page’s service details in rich results or AI-generated overviews, reducing discoverability for service-based businesses.

Without Service schema:

  • Search engines can’t identify your service offerings
  • Rich snippets showing service details won’t display
  • AI search engines can’t understand what services you provide
  • Service pages won’t be eligible for AI Overview citations
  • Entity association between service and organization is weakened

A proper Service schema should include: @type (Service), name, description, provider, and optionally serviceType, areaServed, offers, url.

Why Is This Important

Service schema is important for service-based businesses:

  • AI Overview citations: Increases eligibility for AI Overview citations for service-related queries
  • Rich snippets: Enables service details to appear in search results
  • Entity association: Strengthens the association between the service and the providing organization
  • AI search readiness: AI engines use Service schema to understand and recommend services
  • Service discoverability: Helps search engines properly categorize and surface your services
  • Pricing signals: Combining with Offer provides pricing information to search engines

Resolving this issue improves your SEO health score by ensuring service offerings are properly structured for maximum visibility.

How XeoPix Detects This

XeoPix follows these logical steps to detect missing Service schema:

  1. Detect service pages: The crawler identifies pages with:

    • URL patterns (/services/, /solutions/, /offerings/, /consulting/)
    • Page titles containing “service”, “solution”, “consulting”, “agency”
    • Service descriptions and offerings
  2. Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page

  3. Check for Service schema: The crawler verifies if any schema block has:

    • @type set to Service
    • Required properties: name, description
  4. Validate schema completeness: If Service schema is found, the crawler checks for:

    • provider property (linking to Organization schema)
    • serviceType property
    • areaServed property
    • offers property (Offer schema nested inside)
  5. Trigger conditions: The issue is flagged when:

    • Service page detected but no Service schema found
    • Service schema exists but provider is missing
    • Service schema exists but serviceType is missing

How To Fix

  1. Identify service pages: Look for pages with:

    • URL patterns (/services/, /solutions/, /offerings/, /consulting/)
    • Page titles containing “service”, “solution”, “consulting”, “agency”
    • Service descriptions and offerings
  2. Add Service JSON-LD structured data to the page’s <head> or before </body>:

    { "@context": "https://schema.org", "@type": "Service", "name": "SEO Consulting", "description": "Professional SEO consulting services to improve organic search visibility for B2B and e-commerce businesses.", "serviceType": "SEO Consulting", "provider": { "@type": "Organization", "name": "XeoPix Digital", "url": "https://www.xeopix.com" }, "areaServed": { "@type": "Country", "name": "United States" }, "url": "https://www.xeopix.com/services/seo-consulting", "offers": { "@type": "Offer", "price": "1500", "priceCurrency": "USD" } }
  3. Include recommended properties:

    • name: Service name
    • description: Service description
    • provider: Organization or Person providing the service (link to Organization schema)
    • serviceType: Type of service (improves categorization signals)
    • areaServed: Geographic area where service is available
    • offers: Pricing information (nest Offer schema)
    • url: URL of the service page
  4. Combine with other schemas:

    • Use with Offer to provide pricing signals
    • Use with LocalBusiness to indicate locally available service
  5. Validate with Google’s Rich Results Test

What We Store

Storage Level

Page Level — This issue is evaluated for each individual URL that contains structured data.


Database Table / Prisma Model

PageStructuredData


Stored Fields

FieldTypeDescription
schemaTypeSchemaTypeThe type of schema (e.g., Organization, Person)
schemaFormatSchemaFormatThe format of the schema (JSON-LD, Microdata, RDFa)
schemaIdentifierString?Unique identifier for the schema
rawJsonJson?The raw JSON-LD or structured data content
schemaErrorsJson?Array of validation errors found in the schema
isValidSchemaBoolean?Whether the schema is valid according to validation
missingFieldsJson?Array of required fields that are missing

Detection Dependencies

  • The following data sources are required to evaluate this issue:
  • HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
  • Structured Data Validation — The extracted schema is validated against Schema.org definitions
  • Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed

Examples

Example 1: Missing Service Schema on Service Page

Problematic state:

<!-- Service page without Service schema --> <html> <head> <title>SEO Consulting Services</title> </head> <body> <h1>SEO Consulting Services</h1> <p> Professional SEO consulting services to improve organic search visibility. </p> <p><strong>Area Served:</strong> United States</p> <p><strong>Price:</strong> $1,500/month</p> </body> </html>

Corrected state:

<!-- Service page with Service schema --> <html> <head> <title>SEO Consulting Services</title> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Service", "name": "SEO Consulting", "description": "Professional SEO consulting services to improve organic search visibility for B2B and e-commerce businesses.", "serviceType": "SEO Consulting", "provider": { "@type": "Organization", "name": "XeoPix Digital", "url": "https://www.xeopix.com" }, "areaServed": { "@type": "Country", "name": "United States" }, "url": "https://www.xeopix.com/services/seo-consulting", "offers": { "@type": "Offer", "price": "1500", "priceCurrency": "USD" } } </script> </head> <body> <h1>SEO Consulting Services</h1> <p> Professional SEO consulting services to improve organic search visibility. </p> <p><strong>Area Served:</strong> United States</p> <p><strong>Price:</strong> $1,500/month</p> </body> </html>

Example 2: Service Schema with LocalBusiness

Corrected state for local service:

{ "@context": "https://schema.org", "@type": "Service", "name": "Plumbing Services", "description": "24/7 emergency plumbing services for residential and commercial properties.", "provider": { "@type": "LocalBusiness", "name": "Fast Plumbing Co.", "telephone": "+1-555-123-4567" }, "areaServed": { "@type": "City", "name": "Austin, TX" }, "serviceType": "Emergency Plumbing" }

Example 3: Incomplete Service Schema

Problematic state:

{ "@context": "https://schema.org", "@type": "Service", "name": "Web Design" }

Missing required properties: description, provider

Corrected state:

{ "@context": "https://schema.org", "@type": "Service", "name": "Web Design", "description": "Custom website design and development services.", "provider": { "@type": "Organization", "name": "Design Studio" } }

Unit Test

Test File

xeopix-crawling-v2/__tests__/seo-audit-checks/structuredDataRichResults/issue-153-service-schema.test.js

Purpose

Validates that the crawler correctly validates Service JSON-LD schemas and does not report false positives when the schema is properly formed.

Tested Function

runStructuredDataRichResults()

Issue Information

  • Issue Number: 153
  • Issue Code: service_schema_service
  • Toggle Group: structuredDataRichResults

Test Scenarios

Positive Test Cases

  • Valid Service schema: Page has a Service schema with name — no issue reported.

Negative Test Cases

None — the test only validates that valid schemas pass.

Boundary Cases

None.

Edge Cases

  • Empty HTML: <html></html> — no crash.

Expected Outcome

Pass

Issue should not be reported when a valid Service schema with required properties is present.

Fail

No negative test cases are defined.

Validation

  • Correct pass-through of valid Service schemas
  • Graceful handling of empty HTML
  • xeopix-crawling-v2/toggleGroups/structuredDataRichResults.js
  • xeopix-crawling-v2/issueCodes.js
  • xeopix-crawling-v2/utils/context.js
  • xeopix-crawling-v2/utils/issues.js
  • xeopix-crawling-v2/utils/schema.js

Coverage Summary

  • Covers valid Service schema detection
  • Covers empty HTML resilience

References

Last updated on