Schema Markup: A Practical Guide to Structured Data for SEO
Schema markup tells search engines what a page is about. Here is what it still earns you in Google in 2026, which types to use, copy-ready JSON-LD examples, and how to test it without falling into the common traps.
Searvia · 10/24/2026 · 16 min read
In short: Schema markup is code, usually a JSON-LD script, that describes a page with the schema.org vocabulary so search engines know exactly what it contains: a product and its price, an article and its author, a business and its address. In Google it makes pages eligible for rich results such as prices, review stars and breadcrumbs, but it does not guarantee them and is not a ranking boost. Several rich results have been retired, including FAQ in May 2026, so mark up what Google still supports, keep the markup identical to what visitors see, and test it before and after every template change.
Most sites that "have schema" have one of two problems: markup added years ago for a rich result Google no longer shows, or a theme, a plugin and an app each adding their own contradicting block. This guide covers what structured data does today, the types worth your time as of October 2026, copy-ready JSON-LD and a testing routine.
What schema markup is
Schema.org is a shared vocabulary for describing things on the web, founded by Google, Microsoft, Yahoo and Yandex and maintained as a community project. It defines types (Product, Article, LocalBusiness, Event) and the properties each type can have (price, author, address, startDate). Schema.org says that as of 2024 more than 45 million web domains use it.
"Structured data" is the general term for information in a fixed format that machines can read without guessing. "Schema markup" is structured data written with the schema.org vocabulary. In practice the terms are used interchangeably.
Without markup, a search engine reads "$32" near the word "mug" and infers that this is probably a price. With markup, the page states it: this is a Product named "Speckled Stoneware Mug", offered at 32.00 USD, in stock. Google's introduction to structured data describes the purpose this way: Google uses structured data to understand the content of a page, and it can enable search results that are more engaging to users.
JSON-LD, Microdata and RDFa
Google Search supports three formats. All of them express the same vocabulary; they differ in where the information lives.
| Format | Where it lives | Pros | Cons |
|---|---|---|---|
| JSON-LD | A separate <script type="application/ld+json"> block | Easy to add, read and generate; does not touch the visible HTML | Can drift from the visible content if generated from a different data source |
| Microdata | Attributes (itemscope, itemprop) on the visible HTML elements | Markup and visible content are tied together | Clutters templates, easy to break during redesigns |
| RDFa | Attributes (vocab, property) on the visible HTML elements | Same as Microdata, also used outside search | Same as Microdata |
Google states that, in general, it recommends JSON-LD if your site setup allows it. Use JSON-LD for anything new. If your platform already outputs correct Microdata, there is no reason to rewrite it, but do not add a JSON-LD block that describes the same item differently on top of it.
What structured data does, and what it doesn't
It makes pages eligible for rich results. Rich results are the enhanced search listings: product price and availability, review stars, breadcrumb trails instead of a bare URL, video thumbnails, event dates. Google's documentation includes case studies where rich results improved click-through rates, for example Rotten Tomatoes measuring a 25% higher click-through rate on pages with structured data.
It does not guarantee anything. Google's general structured data guidelines state that Google does not guarantee that your structured data will show up in search results. Valid markup makes a page eligible; Google still decides, per query, whether the rich result helps.
It is not a ranking shortcut. Google frames structured data as a way to understand content and qualify for search features. The clearest signal is how it treats abuse: a structured data manual action means a page loses eligibility for rich results, and Google says it does not affect how the page ranks in web search.
It helps disambiguation. Organization markup, according to Google's Organization documentation, helps Google understand your administrative details, tell your organization apart from others, and can influence which logo appears in search results and knowledge panels.
Which rich results Google still supports (October 2026)
Google has been trimming the list for three years. Markup written for a retired feature is not harmful, but it is wasted maintenance, and plugins still generate some of it by default.
Retired or restricted features
| Feature | What happened | Source |
|---|---|---|
| HowTo | Limited to desktop in August 2023, no longer shown at all from September 13, 2023 | Search Central Blog |
| FAQ | Limited to well-known government and health sites in August 2023; Google's docs state it no longer appears in Google Search as of May 7, 2026, and the documentation was removed in June 2026 | Documentation updates |
| Sitelinks search box | Removed from results on November 21, 2024 | Search Central Blog |
| Course info, estimated salary, learning video, special announcement, vehicle listing | Announced for phase-out in June 2025 as part of simplifying the results page; Google's docs say they are no longer shown, documentation removed September 2025 | Search Central Blog |
| ClaimReview, book actions | Also flagged in June 2025; Google later removed the book actions deprecation banner because a feature still uses the markup | Documentation updates |
| Practice problem | Deprecated November 2025, documentation removed January 2026 | Documentation updates |
When Google retired the sitelinks search box, it said there was no need to remove the markup because unsupported structured data does not cause issues in Search. The same logic applies to the others: clean them up when you next touch the template, but do not panic.
Types worth using for most sites
The search gallery, last updated in October 2026, lists the features Google currently supports. These are the ones most businesses can use:
| Type | Use it on | What it can earn | Required by Google |
|---|---|---|---|
| Organization | Home page or About page | Logo and details in knowledge panels; clearer identity | No required properties |
| LocalBusiness (most specific subtype) | Each location page | Business details in Search and Maps | name, address |
| Product (merchant listing) | Pages where people can buy | Price, availability, shipping and returns in results | name, image, offers with price and priceCurrency |
| Product (product snippet) | Review or comparison pages where people can't buy | Ratings, price range, pros and cons for editorial reviews | name plus one of review, aggregateRating, offers |
| Article, NewsArticle, BlogPosting | Articles and blog posts | Better title, image and date in results | No required properties |
| BreadcrumbList | Any page below the home page | Breadcrumb trail instead of the raw URL | itemListElement with at least two items |
| VideoObject | The page where the video plays | Video thumbnail, key moments | name, thumbnailUrl, uploadDate |
| Event | Pages for real-world events | Date, venue and ticket details | name, startDate, location (a Place) |
| SoftwareApplication | App or software product pages | Rating and price | name, offers.price, and aggregateRating or review |
| Recipe | Recipe pages | Image, rating, cooking time | See the recipe guide |
| Review snippet | Reviews of products, books, recipes and other supported items | Review stars | author, reviewRating, and itemReviewed unless nested |
The gallery also covers job postings, datasets, discussion forums, Q&A pages, profile pages, movies, vacation rentals, paywalled content and a few more. Two rules from the docs are worth knowing before you start: online-only events are not eligible for Event rich results, which need a physical location, and the pros and cons appearance is only for editorial product reviews, not merchant pages.
Copy-ready JSON-LD examples
Each block goes inside <script type="application/ld+json"> in the page's HTML, usually in the head. Replace every value with your real data, and only mark up what the page actually shows.
Organization (home page)
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.example.com/#organization",
"name": "Copperleaf Ceramics",
"url": "https://www.example.com/",
"logo": "https://www.example.com/images/logo-512.png",
"description": "Handmade stoneware mugs, plates and bowls, shipped across the United States.",
"email": "[email protected]",
"sameAs": [
"https://www.instagram.com/example",
"https://www.linkedin.com/company/example"
]
}
Google recommends placing Organization markup on the home page or a single page that describes the organization, not on every page. Its logo guidelines ask for an image of at least 112×112 pixels that is crawlable, indexable and looks right on a white background. sameAs takes the URLs of other sites that describe you, such as social or review profiles. Google also lists identifiers such as vatID and iso6523Code for organizations that have them.
LocalBusiness (location page)
{
"@context": "https://schema.org",
"@type": "Bakery",
"name": "North Street Bakery",
"url": "https://www.example.com/locations/north-street",
"telephone": "+1-555-010-0199",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "120 North Street",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.80172,
"longitude": -89.64371
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "14:00"
}
]
}
Google's local business guide asks for the most specific subtype available (Bakery, Dentist, HealthClub) rather than plain LocalBusiness, latitude and longitude with at least five decimal places, a phone number with country and area code, and a priceRange shorter than 100 characters. Keep the details identical to your Google Business Profile; our Google Business Profile optimization guide covers that side.
Product with an offer (merchant listing)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Speckled Stoneware Mug, 12 oz",
"image": [
"https://www.example.com/images/mug-1x1.jpg",
"https://www.example.com/images/mug-4x3.jpg",
"https://www.example.com/images/mug-16x9.jpg"
],
"description": "Wheel-thrown stoneware mug with a speckled glaze. Dishwasher safe.",
"sku": "MUG-SPK-12",
"brand": {
"@type": "Brand",
"name": "Copperleaf Ceramics"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/shop/speckled-mug",
"price": "32.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "14"
}
}
The merchant listing guide requires name, image and an offers object with price and priceCurrency (a three-letter ISO 4217 code). It recommends availability, condition, brand, a GTIN where one exists, shipping details and a return policy. The schema.org price definition asks for a plain number with a full stop as the decimal point, and the currency in priceCurrency rather than a "$" in the value. For a sale, Google now documents validFrom with validThrough or priceValidUntil to define the sale period. Google also says that sending both on-page markup and a Merchant Center feed maximizes eligibility for shopping experiences.
Article (blog post)
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to Care for Handmade Stoneware",
"image": ["https://www.example.com/images/stoneware-care-16x9.jpg"],
"datePublished": "2026-09-14T08:00:00+00:00",
"dateModified": "2026-10-02T09:30:00+00:00",
"author": [
{
"@type": "Person",
"name": "Maya Lindqvist",
"url": "https://www.example.com/about/maya"
}
],
"publisher": {
"@id": "https://www.example.com/#organization"
}
}
The Article guide has no required properties and recommends author, dates, headline and image. Put only the person's name in author.name, with no job title or "posted by", and give each author a separate entry. The publisher here points to the Organization block by its @id, so the two describe one connected entity instead of two unrelated ones.
BreadcrumbList
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Shop",
"item": "https://www.example.com/shop"
},
{
"@type": "ListItem",
"position": 2,
"name": "Mugs",
"item": "https://www.example.com/shop/mugs"
},
{
"@type": "ListItem",
"position": 3,
"name": "Speckled Stoneware Mug"
}
]
}
Per the breadcrumb guide, a trail needs at least two items, the last item can omit item (Google then uses the page's own URL), and the trail should follow the path a typical user takes to the page rather than mirror your URL folders.
Linking blocks into one graph
A page often describes several things: the page, the organization behind it, a product, the breadcrumb trail. Google's guidelines say it understands multiple items on a page whether you nest them or specify each separately, and that you can link separate blocks with @id. Many WordPress setups already do this: Yoast SEO, for example, outputs a single @graph in which WebPage, WebSite, Organization or Person, Article and BreadcrumbList are separate nodes that reference each other by @id.
Two practical rules follow. Give your Organization one stable @id and reference it everywhere instead of repeating the details. And mark up the page's main item, a Product or a Recipe, in addition to secondary items such as a VideoObject, as Google's guidelines ask.
Schema markup and AI search
Much advice claims schema is the key to AI answers. Google's own guidance on AI features and your website is plain: there is no special schema.org structured data you need to add to appear in AI Overviews or AI Mode, and you do not need new machine-readable files either. Among its listed best practices is making sure your structured data matches the visible text on the page.
Other assistants have not published markup requirements either. What structured data does reliably is remove ambiguity: Organization markup with a consistent name, logo and sameAs profiles states which entity a site belongs to, and Product or SoftwareApplication markup states what you sell and at what price. That is useful to any system that reads the page, which is why the identity markup check is part of our AI search readiness checker. Treat it as hygiene, not a lever. The levers for AI answers, such as crawler access and third-party mentions, are covered in our guide to generative engine optimization, and measuring the result is covered in AI visibility tracking.
How to test structured data
Use three tools, for three different questions.
- Rich Results Test: "Is this eligible for a Google rich result?" It shows which rich result types it found, with errors and warnings, and tests as a smartphone by default. Use the URL input rather than pasted code when your markup is generated with JavaScript; Google's JavaScript guide says Google processes structured data present in the rendered DOM, but the code input has limitations.
- Schema Markup Validator: "Is this valid schema.org?" Google moved its old Structured Data Testing Tool to schema.org in 2021 as a general validator without Google-specific checks. Use it for types Google does not show as rich results, such as Organization details beyond the logo.
- Search Console rich result reports: "Is it working across the site?" Reports appear for supported types once Google finds markup. Valid items can show as rich results; items with critical issues cannot until fixed. After a fix, use Validate fix to have Google recheck the affected pages.
One caution on JavaScript: Google notes that dynamically generated Product markup can make Shopping crawls less frequent and less reliable, which matters for fast-changing prices and stock. Put product markup in the server-rendered HTML when you can.
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Markup describes content visitors can't see | Google's guidelines say not to mark up hidden content; it can lead to a manual action | Mark up only what is on the page |
| Ratings that don't match the page, or that no customer wrote | Reviews not by actual users may result in a manual action | Show the reviews on the page; use real counts |
| Star ratings on your own LocalBusiness or Organization | Google says businesses that control reviews about themselves are ineligible for review stars on that markup, even via a third-party widget | Keep reviews on the page if you like; don't expect stars |
| Undisclosed incentivized reviews | Added to Google's review guidelines in July 2026 | Disclose any incentive clearly, or leave those reviews out |
| Missing required properties | Items missing required properties are not eligible for rich results | Check each type's required list in Google's docs |
| Two plugins outputting two different Product blocks | Conflicting prices or ratings; unclear which item is the main one | Disable one source; keep a single block per item |
| Price with a currency symbol or comma decimal | Violates the schema.org price format | "price": "32.00", currency in priceCurrency |
| Generic LocalBusiness type | Google asks for the most specific type | Use Dentist, Bakery, AutoRepair and so on |
| Organization markup on every page with different details | Contradictory identity signals | One Organization node with a stable @id, referenced elsewhere |
Worked example: fixing a shop's product page (hypothetical)
The following is a hypothetical example, not real data. Copperleaf Ceramics, an invented online shop on a popular e-commerce platform, notices that its product pages show plain blue links while competitors show price and stock in results. An audit of the mug page finds:
| Check | Before | Problem |
|---|---|---|
| JSON-LD blocks on the page | 2 Product blocks | Theme and a review app each output one |
| Price | "$32" in one block, "32.00" in the other | Symbol in value; two different values |
priceCurrency | Missing in the theme block | Required for merchant listings |
availability | Missing | Recommended; shoppers see stock in results |
aggregateRating | 4.9 from 31 reviews in the app block | The page shows 14 reviews averaging 4.8 |
| Images | One 300×300 thumbnail | Google asks for multiple high-resolution images |
| Organization markup | None | No logo or identity data |
| FAQPage markup | On every product page, about shipping | FAQ rich results retired in May 2026 |
The fixes took one afternoon:
- Turned off the theme's product markup and configured the review app to add its rating into a single Product block, using the live review data.
- Rewrote the offer:
"price": "32.00","priceCurrency": "USD",availabilityanditemConditionadded, and the sale price window set withvalidFromandpriceValidUntilduring promotions. - Added three image ratios.
- Added Organization markup to the home page with logo and
sameAs, referenced from product pages by@id. - Left the FAQ section visible, because customers read it, and stopped treating its markup as a search feature.
- Ran the Rich Results Test on five product URLs, then watched the Search Console merchant listing report over the next weeks: the invalid items fell to zero as Google recrawled the pages.
The shop cannot force the rich result to appear, but every page is now eligible, and nothing on it contradicts what shoppers see.
Implementing schema in common platforms
- WordPress. Yoast SEO and Rank Math output Organization or Person, WebSite, WebPage, Article and BreadcrumbList once you fill in the site representation settings. WooCommerce adds Product markup. Check for duplicates when a theme or another plugin adds its own.
- Shopify. Themes usually output product markup, often through the Liquid
structured_datafilter, which turns a product into a schema.org Product, or a ProductGroup when it has variants, and an article into an Article. Review apps may add a second block; check the page source. - Custom sites and frameworks. Generate JSON-LD on the server from the same data that renders the page, so price and stock can never disagree.
- Schema markup generators. Fine for one-off blocks like Organization. For prices, ratings or dates, static output goes stale; generate it from your data.
A 30-minute schema checklist
- Run the free schema markup checker on your home page and key pages to see which JSON-LD types each one declares and whether it has Organization or LocalBusiness identity markup with
sameAs. - Run the Rich Results Test on one page per template: home, product or service, article, location.
- Mark each type found as supported, retired or not a rich result type, and remove duplicates.
- Fill in required properties for the types you keep.
- Compare every marked-up value with the visible page: price, rating, hours, dates.
- Check the social sharing tags too; the same template changes often break them.
- Recheck in Search Console two to four weeks later.
How Searvia checks your structured data
The free schema markup checker runs the same engine as our website SEO checker: it reads the JSON-LD in the HTML of the page you enter (your home page if you enter only a domain), lists the types it finds, checks for Organization, LocalBusiness or Person identity markup and sameAs links, and looks for question-and-answer content, alongside the rest of the 38 checks. In the app, the site audit crawls your pages every week, records the schema types on each one and flags a home page without structured data, together with titles, broken pages and sitemap issues. For the bigger picture of what to check and in which order, see our technical SEO audit guide.
Frequently Asked Questions
- What is schema markup?
- Schema markup is code added to a web page that describes its content with the shared schema.org vocabulary: for example that the page is a product with a price, an article with an author and a date, or a local business with an address and opening hours. Search engines read it to understand the page and, for supported types, to show rich results such as product prices, review stars or breadcrumbs.
- Does schema markup improve rankings?
- Google presents structured data as a way to understand pages and to become eligible for rich results, not as a ranking boost. Rich results can make a listing more noticeable and earn more clicks, but Google does not guarantee them, and even a structured data manual action only removes rich result eligibility; Google says it does not change ranking in web search.
- Which schema format should I use: JSON-LD, Microdata or RDFa?
- Google Search supports all three, and recommends JSON-LD when your site setup allows it. JSON-LD sits in a single script block, separate from the visible HTML, so it is easier to add, read and maintain. Use Microdata or RDFa only when your platform already produces them correctly.
- Do FAQ rich results still work?
- No. Google limited FAQ rich results to well-known government and health sites in August 2023, and its documentation states that FAQ rich results no longer appear in Google Search as of May 7, 2026. FAQPage markup that matches a visible FAQ does no harm, but it no longer produces the expandable questions in search results.
- Do I need schema markup to appear in Google AI Overviews or ChatGPT?
- Not for Google. Google's guidance on AI features says there is no special schema.org structured data you need to add to appear in AI Overviews or AI Mode, and that structured data should match the visible text. For other assistants there is no published requirement either. Markup that clearly identifies your organization, products and authors is still useful, because it removes ambiguity about who you are.
Sources
- Introduction to structured data markup in Google Search – Google Search Central
- General structured data guidelines – Google Search Central
- Structured data markup that Google Search supports (search gallery) – Google Search Central
- Latest Google Search documentation updates – Google Search Central
- Changes to HowTo and FAQ rich results – Google Search Central Blog
- Simplifying the search results page – Google Search Central Blog
- Farewell, sitelinks search box – Google Search Central Blog
- Organization structured data – Google Search Central
- Local business structured data – Google Search Central
- Merchant listing structured data – Google Search Central
- Product snippet structured data – Google Search Central
- Review snippet structured data – Google Search Central
- Article structured data – Google Search Central
- Breadcrumb structured data – Google Search Central
- Video structured data – Google Search Central
- Software app structured data – Google Search Central
- Event structured data – Google Search Central
- Generate structured data with JavaScript – Google Search Central
- AI features and your website – Google Search Central
- Rich Results Test – Search Console Help
- Rich result status reports – Search Console Help
- The future of the Structured Data Testing Tool – Google Search Central Blog
- Schema.org
- price property – Schema.org
- structured_data filter – Shopify Liquid reference
- Schema functional specification – Yoast developer portal