Most schema tutorials were written when adding FAQ markup to any page put a stack of expandable questions under your result. That was cut back in 2023 and switched off entirely in May 2026, and a lot of the advice has not caught up. Markup still matters, but which types are worth the effort has changed, and so has what Google asks of the data before it shows anything.
What Structured Data Does
Structured data is a description of the page written for machines, using the vocabulary maintained at schema.org. It tells a search engine that this string is a price, that one is a cooking time and this URL is the product photo, things a crawler would otherwise have to guess from the layout.
Google uses it for two separate things. The visible one is rich results: stars, prices, cooking times, event dates and breadcrumb trails drawn into the search listing. The less visible one is understanding, connecting your organization to its logo and social profiles, or a recipe to its ingredients.
What it does not do is rank the page. Google has said repeatedly that structured data is not a general ranking signal. A rich result can lift click-through rate, because a result with a price and four and a half stars takes up more room and answers part of the question before the click, but the position itself comes from the content.
Why JSON-LD and Not Microdata
Schema.org vocabulary can be written three ways: as JSON-LD in a script block, as Microdata attributes on HTML elements, or as RDFa. Google reads all three, and recommends JSON-LD.
The reason is practical. Microdata is woven into the markup, so itemprop="price" has to sit on the exact element that displays the price, and a redesign that moves that element can silently break the data. JSON-LD sits in one <script type="application/ld+json"> block, in the head or the body, and does not care how the page is laid out. It can be generated from the same data the template uses, which is how most sites end up producing it.
JSON-LD is a W3C Recommendation (version 1.1 since 2020), and the @context line at the top is what tells a parser that the names inside, such as name, offers and startDate, are schema.org terms rather than words you made up.
Which Types Still Earn Something
Based on Google Search Central's structured data documentation as of October 2026. Google changes this list without much notice, so check the search gallery before building a large template.
| Type | What it can show | Required by Google | Worth it? |
|---|---|---|---|
| Product | Price, availability, review stars | name, plus offers, review or aggregateRating | Yes, for any page selling one product |
| Recipe | Photo, cooking time, rating, calories | name, image | Yes, recipe results are almost all rich |
| Event | Date, venue, ticket link | name, startDate, location | Yes, for public events with a page each |
| Article | Headline, image and date in Top Stories and Discover | None strictly | Yes, cheap to add on any article |
| BreadcrumbList | A readable path in place of the URL | Two or more items, each with a name | Yes, on any site with real hierarchy |
| LocalBusiness | Details in the knowledge panel | name, address | Yes, but Business Profile matters more |
| Organization | Logo and details in the knowledge panel | None strictly | Yes, once, on the home or about page |
| VideoObject | Thumbnail, length, key moments | name, thumbnailUrl, uploadDate | Yes, on any page built around a video |
| JobPosting | A listing in Google's job search | title, description, datePosted, hiringOrganization, jobLocation | Yes, it is how jobs get into that search |
| SoftwareApplication | Price and rating for an app | name, offers.price, a rating or review | Yes, for an app page with real ratings |
| Review | Stars for one review of a book, film, product and so on | author, itemReviewed.name, reviewRating | Yes, on editorial review pages |
| ProfilePage | Name and details of a person or member | mainEntity with a name | Yes, on author and member pages |
| WebSite | The site name shown above your results | name, url | Yes, once, on the home page |
| FAQPage | Nothing, since May 2026 | n/a | No |
| HowTo | Nothing; the feature was retired | n/a | No |
What Was Taken Away, and Why
In August 2023 Google limited FAQ rich results to well-known, authoritative government and health websites, and dropped HowTo rich results, first on mobile and a few weeks later on desktop. The stated reason was a cleaner results page. The real pattern was easy to see in any search: FAQ markup had become a way to take up three times the vertical space with questions nobody had asked.
The sitelinks search box followed in late 2024, and in June 2025 Google retired another batch of less used features, among them course info, estimated salary, special announcements and vehicle listings. Then on May 7, 2026 FAQ rich results stopped appearing for every site, government and health included, and the documentation for them was taken down in June.
None of this makes the markup invalid. A FAQPage block still validates, other search engines can still read it, and there is no penalty for leaving it in place. It no longer produces anything visible in Google, so it is not worth writing for new pages.
The markup must describe what is on the page
Google's structured data policy is the part people skip. Everything in the JSON-LD has to be visible to someone reading the page: the price, the questions and answers, the rating. Marking up content that is hidden, out of date or invented is the usual reason for a structured data manual action, which removes rich results from the whole site, not only the page that broke the rule.
The Details Each Type Gets Wrong
The validators catch syntax. These are the problems that pass validation and still cost the rich result.
Product: a price without a currency
An Offer with price but no priceCurrency is ambiguous, and Google treats it as incomplete. Write the price as a plain number too: 89.99, not $89.99 or 89,99.
Product and LocalBusiness: reviews of yourself
Since 2019 Google ignores review stars that a business publishes about itself on its own site, for LocalBusiness and Organization. Stars on a product page are fine when they come from customers and are shown on that page.
Recipe: times as words
prepTime and cookTime are ISO 8601 durations, so twenty minutes is PT20M and an hour and a half is PT1H30M. "20 minutes" is not read as a time at all.
Event: past events left marked up
An Event block on a page about something that ended last year is stale data. Either remove it or keep it accurate, and use eventStatus for postponed or cancelled events instead of deleting the markup.
Breadcrumbs: a trail that does not match the page
The BreadcrumbList should follow the path a visitor would take through the site, and its positions start at 1. A single-item trail earns nothing; there has to be at least a parent and the page.
Organization: no sameAs
The sameAs list of official profiles (LinkedIn, Wikipedia, Crunchbase, social accounts) is what lets Google be sure your organization is the one it already knows about. It is the most useful line in the block and the one most often left out.
Video: the page link given as the player
embedUrl is the player itself, such as a YouTube /embed/ address, not the page the video sits on. Google prefers contentUrl, the video file, over either. Each video also needs a thumbnail of its own; one placeholder image shared by every video on the site is a common reason none of them get a thumbnail in results.
Job posting: the job that closed months ago
Google expects a filled job to come down or to carry a validThrough date that has passed. A listing that keeps its markup after the role is gone is the kind of stale data that gets a site's postings dropped from job search.
Generate the JSON-LD for your page
Fill in a form, copy the script block, and see what is still missing for the rich result.
Testing It Before and After
Two free tools cover different questions. The Rich Results Test from Google answers whether this page is eligible for a Google rich result, and it renders the page the way Googlebot does, so it also catches markup that a JavaScript framework fails to output. The Schema Markup Validator at validator.schema.org checks the markup against the full schema.org vocabulary, whatever Google happens to support.
Passing the Rich Results Test means eligible, not guaranteed. Google decides per query whether to show the rich version, and new markup takes a recrawl before anything changes. After that, the Enhancements reports in Search Console list every page with a given type and flag the ones whose data broke, which is how you find out that a template change removed the price from three hundred product pages.
One mistake shows up in nearly every audit: two blocks describing the same thing. A theme outputs its own Product markup, a plugin adds another, and the page ends up with two products with different prices. Check the page source for every application/ld+json block before adding a new one.
Frequently Asked Questions
Related Tools
Keep Reading
Title and Meta Description Length: Pixels, Not Characters
Google truncates by rendered width, so a title of capitals runs out thirty characters early. Plus why it rewrites most descriptions anyway.
JSON Errors Explained: Trailing Commas, NaN and Other Rejections
Why valid-looking JSON fails to parse, how to read a parser's error position, and the number precision bug that silently corrupts large IDs.
URL Slugs: What Belongs in a Path and What Quietly Breaks It
Four punctuation marks are safe in a URL and the rest are not. What happens to accents once they leave the address bar, and why renaming costs more than it looks.
HTML Entities: Five Characters, and Why Escaping Depends on Context
Only five characters truly need escaping, and doing it is not enough on its own. Where each context needs its own rule, and how double encoding announces itself.