What schema markup is
Schema markup is a way to describe a page’s content so that a machine understands it unambiguously. A person looking at a product page has no trouble telling the name from the price, or the price from the SKU. A parser sees only text inside tags, and without hints it has to guess.
The vocabulary the markup is built on is Schema.org: a joint project of Google, Microsoft, Yahoo and Yandex that describes entity types (Product, Organization, Review) and their properties (price, availability, ratingValue).
Markup changes nothing for a site visitor. Its consumers are search crawlers, aggregators, messaging apps building link previews and, more recently, the crawlers of language models.
Formats: JSON-LD, microdata, RDFa
| Format | What it looks like | When it is used |
|---|---|---|
| JSON-LD | A separate <script type="application/ld+json"> block in the head or body |
The default choice: decoupled from the layout, generated on the back end, easy to validate |
| Microdata | The itemscope, itemtype and itemprop attributes inside the HTML tags |
Legacy projects; a redesign takes the markup away with the layout |
| RDFa | The vocab, typeof and property attributes |
Rare, mostly in academic and government sources |
An example JSON-LD structure for a product page:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "the name exactly as in the H1",
"sku": "the SKU",
"brand": { "@type": "Brand", "name": "the brand" },
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "128"
},
"offers": {
"@type": "Offer",
"price": "249.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
One page, one primary entity. If the product page is marked up by the theme template, by a plugin and by an external review script all at once, the search engine receives several conflicting Product objects and most often shows no rich snippet at all. Before adding new markup, check what the page already outputs.
The key types for e-commerce
| Type | What it describes | What it gives you in the results |
|---|---|---|
Product |
The product: name, SKU, brand, image | A product snippet and entry into shopping blocks |
Offer |
The offer: price, currency, availability, validity | Price and stock status directly in the results |
AggregateRating |
The aggregate rating and review count | Rating stars — a noticeable CTR lift |
Review |
An individual review with author and score | Review fragments in the rich result |
BreadcrumbList |
The path through the catalogue | A navigation trail instead of a long URL |
FAQPage |
Questions and answers on the page | Expandable questions under the snippet, material for AI answers |
Organization |
The company: logo, contacts, profiles | A brand panel and a link to the knowledge graph |
ItemList |
The list of products in a category | Understanding of the listing structure, carousels |
Article |
A blog article: author, dates, section | Authorship and freshness signals for E-E-A-T |
VideoObject |
Video on the page | A video preview in the results |
For an online store the minimum working set looks like this: Organization on every page, BreadcrumbList throughout the catalogue, Product plus Offer on product pages, AggregateRating wherever reviews genuinely exist, ItemList on listings and FAQPage on pages that carry a question block.
Why markup matters more since AI search arrived
The classic role of markup is to earn a better snippet. A second, more significant role has been added to it.
Generative systems — AI Overviews, assistants, search chats — assemble an answer from fragments of many pages. A model parsing HTML has to reconstruct meaning from the layout: which figure is the price and which is the struck-through old price, whether the rating belongs to the product or to the store. An explicitly labelled fact removes that uncertainty.
The practical consequences for GEO and AEO:
FAQPageis ready-made citation material. A question paired with a short, precise answer drops into a generated answer almost unchanged.Organizationties the site to the brand entity. The logo, the legal name and directory profiles help a model understand which company stands behind the content and work more accurately with the knowledge graph.Articlewith an author and a date supports E-E-A-T signals: a claim acquires a source and a time.- Accurate price and availability matter more than before. An assistant quoting the wrong price damages a brand more than a stale snippet: the user gets an answer and never visits the site to check it.
Markup does not replace the rest of the work: it makes a page readable, not authoritative. Crawler accessibility, indexation and the llms.txt file remain separate tasks.
Common mistakes
- The markup does not match the visible content. One set of attributes in the JSON-LD, another on the page. The most direct route to losing rich results.
- Price and availability diverge from the site. The markup is generated from a cache or from an overnight export while the storefront price updates in real time. What you need to check is not that markup exists but that its values match the feed.
- A rating with no reviews.
AggregateRatingwithreviewCount: 0, or a rating set purely for decoration, is a straightforward rule violation. - Store reviews on a product page. A
ReviewinsideProductmust relate to that product, not to delivery quality. - Duplicated entities. The theme, a plugin and an external widget mark up the same thing — the search engine picks a version at random or ignores all of them.
- Markup for a hidden block.
FAQPagefor questions that are not in the visible part of the page counts as a content mismatch. ItemListon pagination without accounting for pages. An identical list on every pagination page confuses the engine’s model of the catalogue structure.- Markup forgotten after a redesign. Microdata lived in layout attributes and vanished with them — the CTR drop is noticed a month later.
How to check
| Tool | What it shows | When to use it |
|---|---|---|
| validator.schema.org | Syntax and conformance to the vocabulary | While developing new markup |
| Google Rich Results Test | Which rich results the page qualifies for | Before shipping a template |
| Google Search Console, Enhancements | Errors across the whole site, over time | Continuous monitoring |
| Yandex Webmaster structured data validator | Markup errors for Yandex, the dominant search engine in Russia and several CIS markets | Checking the catalogue and product data |
| Your own crawler plus a feed comparison | Price and availability gaps between markup and the product database | Regular automated control |
A one-off check of ten URLs does not catch the main problem, which is data drift. One scheduled report is far more useful: once a week, crawl a sample of product pages, pull price and availability from the JSON-LD and compare them with the product feed. A gap above a fraction of a percent is a signal that the markup cache has started living its own life.