View contents
Schema.org Markup Guide: Complete Technical Reference for Structured Data
Introduction
Structured data is a standardized vocabulary—schema.org—added to HTML to explicitly describe a page's content to search engines: what it is (an article, a product, a recipe), who created it, and what properties it has. The UXR SEO Analyzer evaluates the presence, validity, and type coverage of structured data on every analyzed page.
This guide covers the recommended format, the most-used types, a complete implementation example, and the mistakes that most often invalidate markup.
Why Structured Data Matters
Without structured data, a search engine has to infer a page's meaning from indirect signals: text position, generic HTML tags, surrounding context. With structured data, that inference becomes an explicit statement: "this is a product, it costs $29.99, and it has 89 reviews averaging 4.5 stars." That precision doesn't just enable traditional rich results—it's also how AI-driven answer systems extract verifiable facts from a page instead of having to interpret them.
JSON-LD Is the Recommended Format
There are three syntaxes for implementing schema.org: JSON-LD, Microdata, and RDFa. Google explicitly recommends JSON-LD because it's declared in a <script> block separate from the visible HTML, which makes it easier to maintain, generate dynamically, and validate without touching the page's markup:
| Syntax | Where It Lives | Maintainability |
|---|---|---|
| JSON-LD | Standalone <script> block | High—generated and updated without touching visible HTML |
| Microdata | Inline itemscope/itemprop attributes | Low—mixed in with visual markup |
| RDFa | Inline vocab/typeof attributes | Low—requires specialized templates |
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article title",
"author": {
"@type": "Person",
"name": "Author name"
},
"datePublished": "2026-07-13",
"dateModified": "2026-07-13"
}
</script>
Most-Used Types in SEO
| Type | Main Use | Rich Result |
|---|---|---|
Article / BlogPosting / NewsArticle | Editorial content | News carousel, visible author and date |
Product | E-commerce product pages | Price, availability, and reviews in the snippet |
FAQPage | Frequently asked questions sections | Expandable questions in the search result |
BreadcrumbList | Page's navigation path | Breadcrumb trail instead of the raw URL |
Organization | Site-level brand identity | Logo and entity data in the Knowledge Panel |
LocalBusiness | Businesses with a physical location | Hours, address, and phone in the snippet |
The Most Important Rule: Only Mark Up Visible Content
Google's policy is explicit: structured data must describe content the user can actually see on the page. If the JSON-LD declares a product price, that price needs to exist in the visible content; if the FAQPage contains questions and answers, those questions and answers need to be on the page. Marking up content that isn't visible is a guideline violation and can result in a manual action.
Combining Several Types on One Page
A real page almost never carries just one schema.org type—it usually combines several independent JSON-LD blocks that describe different aspects of the same page. A typical blog article includes:
ArticleorBlogPostingfor the editorial content itselfBreadcrumbListfor the navigation path (Home > Blog > Category > Article)Organizationto identify the publishing brand, usually reused across every page on the site
Each block can live in its own <script type="application/ld+json">, or be combined into an @graph array when entities reference each other via @id. What matters is that identifiers stay consistent: if the Organization has "@id": "https://example.com/#organization", the Article must reference that exact same URL when declaring its publisher.
Structured Data for E-commerce (Product)
E-commerce sites face an additional layer of validation: Google Merchant Center runs its own structured data check focused on Product, separate from the generic Rich Results Test. That check catches issues the generic test misses, such as missing GTINs, price mismatches between the product feed and the JSON-LD markup, or an InStock status declared for products that are actually out of stock. Keeping price and availability in sync across the visible HTML, the JSON-LD, and the Merchant Center feed is essential to avoid suspensions.
Nesting Types
Schema.org types nest inside each other to describe relationships. An Article nests a Person as its author; a Product nests an Offer for pricing and an AggregateRating for reviews:
{
"@type": "Product",
"name": "Product name",
"offers": {
"@type": "Offer",
"price": "29.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "89"
}
}
How to Choose the Right Type
A common mistake is forcing a generic type when a more specific one exists. Before marking up a page, ask: is the content editorial (use Article), a purchasable item (use Product), answering explicit questions visible on the page (use FAQPage), or describing a business with a physical location (use LocalBusiness)? Google's Search Gallery documentation lists, for every supported rich result, exactly which type and properties to use—checking it before improvising avoids most wrong-type mistakes.
Validation
Before publishing, all markup should pass through validation tools: Google's Rich Results Test catches critical errors (missing required properties) and non-critical warnings (missing recommended properties) that are still worth fixing to maximize rich-result eligibility. Google's Search Gallery documents, type by type, which properties are required and which are recommended.
Recommended Validation Workflow
- Write the JSON-LD markup alongside the visible content it describes, never in isolation
- Validate JSON syntax (quotes, commas, braces) before testing it against Google's guidelines
- Run the Rich Results Test and resolve every critical error
- Review non-critical warnings and decide whether to add recommended properties
- Publish and monitor the Rich Results report in Search Console to catch regressions
Common Mistakes
- Invented content: declaring a
ratingValueor a price that doesn't appear on the page - Missing required properties: for example, an
Articlewithoutheadlineor withoutdatePublished - Wrong type: using generic
Articlewhen the content is clearly aRecipeor aProduct - Multiple contradictory JSON-LD blocks: two scripts describing the same entity with different data
- Inconsistent @id values: cross-references between entities that don't resolve to the same identifier
- Stale sample data: leaving placeholder author names, prices, or dates from a template that were never replaced with real content
Structured Data and Crawl Budget
Structured data itself doesn't consume crawl budget any differently than regular HTML—but bloated or duplicated JSON-LD blocks add page weight, and pages with broken markup that trigger repeated re-crawls to check for fixes can indirectly slow down how quickly Google revisits a site's most important pages. Keeping JSON-LD minimal, valid on the first attempt, and free of duplicated blocks is good practice both for search engines and for page load performance.
Long-Term Maintenance
Schema.org markup isn't a one-time exercise. Sites that generate pages dynamically (CMS, e-commerce, template engines) should treat JSON-LD as part of the template, not a manual patch—otherwise every new page risks inheriting sample values or placeholders that were never swapped for real data. It's worth including a structured data check in the review process before publishing new content, which is exactly what the UXR SEO Analyzer automates.
What the UXR SEO Analyzer Checks
The tool identifies which schema.org types are present on the page, validates that required properties exist, detects malformed JSON-LD blocks (invalid JSON), and flags when the marked-up content doesn't match the content visible in the HTML.
References
- Schema.org - Product type
- Schema.org - Offer type
- Schema.org - AggregateRating type
- Schema.org - CreativeWork type (headline, datePublished, publisher)
- Schema.org - Organization type
- Schema.org - BreadcrumbList type
- Google Search Central - Article Structured Data Markup
- Google Search Central - Search Gallery of Structured Data
- Google Search Central - Structured Data for Q&A Pages
