No Service schema on a service page
What is this issue?
This issue reports a Service schema block your page already declares that is
missing name — the only property this check requires. It does not report a page
that has no Service schema at all.
What this issue is not: it does not guess that a page under /services/ or
/consulting/, or one titled around a service offering, ought to declare Service
schema. A page with none declared is never reported. description, provider,
serviceType, areaServed and nested offers are recommended enrichments, not
checked by this issue.
Why it matters
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
Offerprovides pricing information to search engines
Resolving this issue improves your SEO health score by ensuring service offerings are properly structured for maximum visibility.
How to fix it
If this issue was raised, your page already declares a Service block with no
name — that is the only property this check requires; everything else below is
recommended enrichment PixyScan does not verify. The steps below are for a page that
declares no Service schema yet: worthwhile to add, and never reported as a defect
while absent.
Identify service pages: Look for pages with:
- URL patterns (
/services/,/solutions/,/offerings/,/consulting/) - Page titles containing "service", "solution", "consulting", "agency"
- Service descriptions and offerings
- URL patterns (
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": "PixyScan Digital", "url": "https://www.pixyscan.com" }, "areaServed": { "@type": "Country", "name": "United States" }, "url": "https://www.pixyscan.com/services/seo-consulting", "offers": { "@type": "Offer", "price": "1500", "priceCurrency": "USD" } }Include recommended properties:
name: Service namedescription: Service descriptionprovider: Organization or Person providing the service (link to Organization schema)serviceType: Type of service (improves categorization signals)areaServed: Geographic area where service is availableoffers: Pricing information (nest Offer schema)url: URL of the service page
Combine with other schemas:
- Use with
Offerto provide pricing signals - Use with
LocalBusinessto indicate locally available service
- Use with
Validate with Google's Rich Results Test
Examples
Example 1: No Schema Declared — Not This Issue
<!-- Service page with full copy, but no 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>Nothing is reported, however clearly the page describes a service.
Example 1b: The Same Page, With Service Declared (passes)
{
"@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": "PixyScan Digital",
"url": "https://www.pixyscan.com"
},
"areaServed": { "@type": "Country", "name": "United States" },
"offers": { "@type": "Offer", "price": "1500", "priceCurrency": "USD" }
}name alone is what this check requires — everything else here is recommended
enrichment (see How to fix it).
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: Service Schema Missing name (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "Service",
"description": "Custom website design and development services.",
"provider": { "@type": "Organization", "name": "Design Studio" }
}Reported: name missing. A missing description or provider is not part of
this finding — they are recommended, not checked.
Corrected state:
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Web Design",
"description": "Custom website design and development services.",
"provider": {
"@type": "Organization",
"name": "Design Studio"
}
}How PixyScan detects this
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened.Select declared
Serviceentities: any schema block whose@typeisService. A page that declares none is not examined — this check does not infer a service page from its URL (/services/,/consulting/) or page title.Check the required property: a declared
Servicemust have aname.This is reported when: the page declares a
Serviceschema missingname. A page describing a service with noServiceschema at all is never reported.description,provider,serviceType,areaServedandoffersare recommended but are not checked at all today.
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
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
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