Structured data is one of the few areas of SEO where the work is unambiguous: you either describe your page in a machine-readable format or you do not. What is ambiguous is which types are worth implementing. Schema.org defines hundreds. Google produces a visible rich result for a couple of dozen. The gap between those numbers is where a lot of wasted effort lives.
What Schema Markup Actually Does
Schema markup is a vocabulary for describing what a page is about in a form machines read without guessing. Instead of a search engine inferring that "March 12, 2026" is a publication date, you state it. Instead of it inferring that a number is a price, you label it.
It is not a ranking factor in itself. Google has been consistent about this. What it does is make your page eligible for enhanced presentation, and give retrieval systems an unambiguous description of your content, which matters more every year as AI systems decide what to quote.
Use JSON-LD. It sits in a script tag in the head, it is separate from your markup, and it is the format Google explicitly recommends. Microdata sprinkled through your HTML is harder to maintain and easier to break.
The Types That Produce a Visible Result
Article and BlogPosting
Establishes headline, author, publication date and image for editorial content. It feeds the article presentation in results and Top Stories, and it is the foundation for any content site. Include dateModified and keep it accurate: freshness is a genuine signal, and a stale date on genuinely updated content is a wasted opportunity.
FAQPage
Marks up question and answer pairs. Google narrowed FAQ rich results to authoritative government and health sites for most queries, so the visible carousel is no longer a reliable win for commercial sites. It remains worth implementing because it hands question and answer pairs to AI systems in a form that needs no parsing, which is exactly what generative answers consume.
Product and Offer
Price, availability, currency, condition and reviews. This is the highest-value markup on the web for e-commerce, because it drives the price and stock information that appears directly in results. Get it wrong and you can be penalized for mismatched pricing, so it must reflect what is actually on the page.
LocalBusiness
Name, address, phone, opening hours, service area and geo-coordinates. Essential for anyone with a physical location or a defined service region, and a direct input to local pack visibility. Keep it identical to your Google Business Profile: inconsistency between the two is a common and entirely avoidable problem.
BreadcrumbList
Replaces the raw URL in the search result with a readable hierarchy. Cheap to implement, immediately visible, and genuinely improves click-through by making the result look navigable rather than technical.
HowTo and Recipe
Step-by-step content with materials, timings and images. Recipe markup remains one of the richest presentations Google produces. HowTo has been scaled back significantly and no longer generates the results it did, so weigh the effort accordingly.
The Ones That Quietly Help
Some markup produces no rich result but does real work behind the scenes.
- Organization with a stable
@idties every page on your site to one entity. This is how machines build a coherent picture of who you are. - WebSite with a
SearchActiondeclares your internal search endpoint and is the prerequisite for a sitelinks searchbox. - Person for author bios supports the experience and expertise signals that matter for content in sensitive categories.
- ImageObject with explicit dimensions gives systems the image metadata they would otherwise have to fetch and infer.
Use One Graph, Not Six Scripts
A common mistake is emitting separate, disconnected script blocks: one for the article, one for breadcrumbs, one for the organization, none of which reference each other. Machines then have to guess how they relate.
The better pattern is a single JSON-LD block using @graph, where each node has an @id and nodes reference each other by that id. Your article references the publisher by id rather than repeating the organization details. Everything on the page is described once, and the relationships are explicit.
A second common mistake is subtler and easy to miss: nesting a node under a property that does not exist in the vocabulary. Putting a BreadcrumbList inside a property literally named BreadcrumbList on your Article looks reasonable and validates as JSON, but it is not a real schema.org property, so the breadcrumb is silently ignored. Always emit BreadcrumbList as its own node in the graph.
Validate, Then Validate Again After Deploy
Two tools, and they do different jobs. Google's Rich Results Test tells you whether a page is eligible for a specific rich result. The Schema Markup Validator checks your markup against the vocabulary itself, including types Google does not use.
Test the live URL, not a pasted snippet. Markup that is injected by JavaScript, mangled by a caching layer or stripped by a security plugin will pass as a snippet and fail in reality. Then watch the Enhancements reports in Search Console over the following weeks, because that is where errors at scale surface.
The Rule That Prevents Most Problems
Markup must describe what is visibly on the page. Marking up reviews that do not appear, prices that are not offered or questions that are not answered is a structured data spam violation, and manual actions for it are enforced. Structured data is a translation of your page, not an enhancement of it.