Schema Validation Module
Module ID: schema_validator | Type: Conditional | Profiles: full, seo, local, ecommerce
The Schema Validation module extracts all JSON-LD blocks from the page, validates JSON syntax, checks that @context is schema.org, verifies @type against known Schema.org types, and ensures required properties are present for common types.
What It Checks
| Check |
What It Looks For |
| JSON syntax |
Valid JSON in all <script type="application/ld+json"> blocks |
| @context |
Must be "https://schema.org" or "http://schema.org" |
| @type |
Must be a recognised Schema.org type |
| Required properties |
Type-specific required fields (e.g. Product needs name, offers) |
| Nested types |
Validates nested objects (e.g. Offer within Product) |
| Multiple schemas |
Checks all JSON-LD blocks on the page |
| @graph support |
Handles @graph arrays with multiple entities |
Type-Specific Checks
| Schema Type |
Required Properties |
| Organization |
name, url |
| LocalBusiness |
name, address, telephone |
| Product |
name, offers |
| Article |
headline, author, datePublished |
| BreadcrumbList |
itemListElement |
| FAQPage |
mainEntity |
| WebSite |
name, url |
| Event |
name, startDate, location |
Scoring Breakdown
| Criterion |
Deduction |
Condition |
| Invalid JSON syntax |
-15 per block |
JSON parse error |
| Missing @context |
-10 per block |
No schema.org context |
| Unknown @type |
-10 per block |
Type not in Schema.org vocabulary |
| Missing required properties |
-5 per property |
Type-specific required fields absent |
| No JSON-LD at all |
-10 |
No structured data on the page |
Example Findings
P0 CRITICAL: Invalid JSON in JSON-LD block
The second JSON-LD block has a syntax error: trailing comma before
closing brace. Search engines will ignore this structured data.
Fix: Remove the trailing comma and validate with Google's Rich Results Test.
Effort: Low
P1 HIGH: Product schema missing "offers" property
The Product JSON-LD has name and description but no offers. Google
cannot show price information in rich results without offers.
Fix: Add an "offers" property with @type Offer, price, priceCurrency.
Effort: Low