What Is Schema Markup? A Practical Guide to Structured Data
Schema markup is structured data written with the schema.org vocabulary: code added to a page that labels what its content is, such as a product and its price, an event and its date, or a recipe and its cooking time. Google’s introduction to structured data defines structured data as “a standardized format for providing information about a page and classifying the page content.” In practice, schema markup does two jobs: it helps Google understand a page, and it can make the page eligible for rich results. Using it well means choosing a format, marking up only what the page shows, and validating before and after launch.
The Schema.org Vocabulary
Schema.org is a shared set of types and properties, such as Product, Article, Recipe, and LocalBusiness, that search engines recognize. Its about page names the founding companies, “Google, Microsoft, Yahoo and Yandex,” and explains: “Since April 2015, the W3C Schema.org Community Group is the main forum for schema collaboration.”
JSON-LD, Microdata, and RDFa
Google accepts three formats. Its guidance: “In general, we recommend using a format that’s easiest for you to implement and maintain (in most cases, that’s JSON-LD); all 3 formats are equally fine for Google, as long as the markup is valid and properly implemented per the feature’s documentation.”
| Format | How it works | Practical note |
|---|---|---|
| JSON-LD | A script block, separate from the visible HTML | Google's recommended format; can be added dynamically |
| Microdata | Attributes added to the HTML elements that display the content | Markup and content are edited together |
| RDFa | Attributes added to HTML elements, similar to microdata | Same trade-off as microdata |
Of JSON-LD, Google notes: “The markup is not interleaved with the user-visible text.” It adds that Google “can read JSON-LD data when it is dynamically injected into the page’s contents,” for example by JavaScript or a CMS widget. The block below is a minimal JSON-LD example; a real recipe page would add the properties Google’s Recipe documentation lists, matched to what the page shows.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Non-Alcoholic Piña Colada",
"image": ["https://example.com/photos/1x1/photo.jpg"]
}
</script>
What Schema Does for Search
Google presents schema markup as a way to become eligible for rich results, and its structured data policies mention ranking only when describing the penalty for misuse: a structured data manual action removes a page’s eligibility for rich results but does not change how it ranks in Google web search.
Its value is in how a page can appear. Google’s introduction cites two results: “Rotten Tomatoes added structured data to 100,000 unique pages and measured a 25% higher click-through rate for pages enhanced with structured data,” and “Nestlé has measured pages that show as rich results in search have an 82% higher click through rate than non-rich result pages.” These are the companies’ own measurements of their sites, not a forecast for every page.
Which Types Can Produce Rich Results
Google’s search gallery lists the features structured data can enable. Today it includes, among others, Article, Breadcrumb, Course list, Dataset, Event, Job posting, Local business, Movie, Organization, Product, Profile page, Q&A, Recipe, Review snippet, Software app, and Video.
Two once-common types are gone from that list:
- How-to. Google stopped showing How-to rich results on desktop on September 13, 2023, after removing them on mobile, and declared the type deprecated.
- FAQ. Google’s documentation updates record that FAQ rich results stopped appearing in Google Search on May 7, 2026.
Markup for those types no longer produces a rich result. A site planning its markup should start from the current gallery, not from older guides.
The Rules That Apply to Every Type
- Mark up what readers can see. The policies state: “Don’t mark up content that is not visible to readers of the page.”
- Include required properties where the type has them. Each feature’s documentation lists them (Article, for one, has none), and the policies’ completeness rule reads: “Specify all required properties listed in the documentation for your specific rich result type.”
- Prefer accuracy over volume. Google advises that “it is more important to supply fewer but complete and accurate recommended properties rather than trying to provide every possible recommended property with less complete, badly-formed, or inaccurate data.”
- Expect no guarantee. “Using structured data enables a feature to be present, it does not guarantee that it will be present.”
Common Errors
- Values in the markup that differ from the page, such as an old price after a price change.
- Templates redesigned without updating the structured data block.
- Two blocks describing the same entity with conflicting values, for example a plugin’s block and a hand-added one that disagree on the name or price. Several blocks are fine when they describe the entity consistently.
- Markup for types that no longer produce rich results, kept in the belief that they still do.
Validating Markup
Google recommends checking structured data “using the Rich Results Test during development, and the Rich result status reports after deployment, to monitor the validity of your pages, which might break after deployment due to templating or serving issues.”
- The Rich Results Test checks a URL or code against the features Google supports and can preview the result.
- The Schema Markup Validator checks markup against the full schema.org vocabulary, including types that produce no Google rich result.
- After launch, the rich result reports in Search Console show errors on indexed pages. Check several pages built from each template, not one.