Structured Data Rules

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