Structured Data Rules
Rules for validating JSON-LD, microdata, and schema.org markup.
json-ld
Validates JSON-LD structured data.
Checks
- Valid JSON syntax
- Uses schema.org context
- Required properties present
- Correct @type values
Schema Types
- Article, NewsArticle, BlogPosting
- Product
- Organization, Person
- WebSite, WebPage
- BreadcrumbList
- FAQPage
- HowTo
- Event
Examples
Pass (Article):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "React Hooks Guide",
"author": {
"@type": "Person",
"name": "John Doe"
},
"datePublished": "2024-01-15",
"image": "https://example.com/image.jpg"
}
</script>
Pass (Product):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget Pro",
"description": "The best widget",
"offers": {
"@type": "Offer",
"price": "29.99",
"priceCurrency": "USD"
}
}
</script>
Fail (invalid JSON):
<script type="application/ld+json">
{
"@type": "Article",
name: "Missing quotes"
}
</script>
<!-- Error: Invalid JSON in structured data -->
Warning (missing context):
<script type="application/ld+json">
{
"@type": "Article",
"headline": "Title"
}
</script>
<!-- Warning: Missing @context in JSON-LD -->
Configuration
rules: {
'json-ld': {
severity: 'info',
},
}
microdata
Validates microdata markup (itemscope/itemtype/itemprop).
Checks
- itemscope has itemtype
- itemprop inside itemscope
- Valid schema.org types
Examples
Pass:
<div itemscope itemtype="https://schema.org/Product">
<span itemprop="name">Widget Pro</span>
<span itemprop="price">$29.99</span>
</div>
Warning:
<div itemscope>
<span itemprop="name">Widget</span>
</div>
<!-- Warning: itemscope without itemtype -->
Warning:
<span itemprop="name">Widget</span>
<!-- Warning: itemprop outside of itemscope -->
Configuration
rules: {
'microdata': {
severity: 'info',
},
}
breadcrumb
Checks for BreadcrumbList schema when navigation detected.
Checks
- Breadcrumb navigation has schema
- BreadcrumbList is properly structured
- Position numbers are sequential
Examples
Pass:
<nav aria-label="Breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/"><span itemprop="name">Home</span></a>
<meta itemprop="position" content="1">
</li>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a itemprop="item" href="/guides"><span itemprop="name">Guides</span></a>
<meta itemprop="position" content="2">
</li>
</ol>
</nav>
JSON-LD alternative:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Guides",
"item": "https://example.com/guides"
}
]
}
</script>
Info (breadcrumb without schema):
<nav class="breadcrumb">
<a href="/">Home</a> > <a href="/guides">Guides</a>
</nav>
<!-- Info: Breadcrumb detected but no BreadcrumbList schema -->
Configuration
rules: {
'breadcrumb': {
severity: 'info',
},
}
Common Schema Types
WebSite
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "My Site",
"url": "https://example.com",
"potentialAction": {
"@type": "SearchAction",
"target": "https://example.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
Organization
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Company Name",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://twitter.com/company",
"https://linkedin.com/company/name"
]
}
Article
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article Title",
"author": { "@type": "Person", "name": "Author" },
"datePublished": "2024-01-15",
"dateModified": "2024-01-20",
"image": "https://example.com/image.jpg",
"publisher": {
"@type": "Organization",
"name": "Publisher",
"logo": { "@type": "ImageObject", "url": "https://..." }
}
}
SoftwareApplication
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "App Name",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
Testing Tools