Structured data is code, usually JSON-LD, that describes a page in a vocabulary search engines can parse: this is a product, this is its price, this is the author, these are the breadcrumbs. Google uses it to understand pages and to show rich results such as review stars, prices and breadcrumb trails. It does not get a page indexed and it is not a direct ranking boost. It makes an already indexed page eligible for a better looking listing.
What it looks like
A minimal Article example in JSON-LD, placed anywhere in the <head> or <body>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Structured Data Basics: Schema Markup for SEO",
"image": ["https://www.example.com/images/structured-data.jpg"],
"datePublished": "2026-09-10T08:00:00+00:00",
"dateModified": "2026-09-10T08:00:00+00:00",
"author": [{
"@type": "Person",
"name": "Jane Example",
"url": "https://www.example.com/authors/jane"
}]
}
</script>
The vocabulary comes from schema.org. Google supports three syntaxes (JSON-LD, Microdata and RDFa) and recommends JSON-LD.
Keep one distinction in mind: schema.org defines hundreds of types, and Google has search features for only a fraction of them. Markup outside that fraction is harmless and may help understanding, but it produces nothing visible in Google.
What structured data does and does not do
| Claim | Reality |
|---|---|
| Gets pages indexed | No. Indexing depends on crawlability, canonicals and quality |
| Boosts rankings directly | No, according to Google. It can help Google understand the topic |
| Enables rich results | Yes. This is its main purpose |
| Guarantees rich results | No. Google's guidelines say valid markup does not guarantee display |
| Improves click-through rate | Often, when a rich result is shown |
| Feeds other Google surfaces | Yes: merchant listings, knowledge panels, Google Images badges, job and event experiences |
One link to indexing does exist. Google's Indexing API is officially limited to pages with JobPosting markup or BroadcastEvent embedded in a VideoObject. For those page types, correct structured data is a requirement for using the API as documented. See the Google Indexing API guide.
Types worth implementing
Google adds and retires rich result types regularly. It removed HowTo rich results and restricted FAQ rich results to well-known, authoritative government and health sites in 2023, and retired several rarely used types in 2025. Always check the Search Gallery in Google's Search Central documentation before building something new. At the time of writing, these are the dependable ones:
| Page type | Schema type | What you can get |
|---|---|---|
| Any inner page | BreadcrumbList |
Breadcrumb trail in place of the raw URL |
| Homepage | Organization |
Logo, company details in the knowledge panel |
| Blog post, news | Article, NewsArticle, BlogPosting |
Better headline, image and date handling |
| Product page | Product with Offer, AggregateRating |
Price, availability, review stars, merchant listing features |
| Local business | LocalBusiness (or a subtype) |
Hours, address and details in local features |
| Recipe | Recipe |
Image, rating, cook time, recipe carousel |
| Event | Event |
Event listing experience |
| Job advert | JobPosting |
Google job search experience, Indexing API eligibility |
| Video | VideoObject |
Video results, key moments |
| Review of an item | Review, AggregateRating |
Review snippet, for supported item types |
| Software | SoftwareApplication |
Rating and price |
| Forum or Q&A | DiscussionForumPosting, QAPage |
Forum and Q&A features |
| Person or organisation profile | ProfilePage |
Better handling of creator information |
If you run a normal content or business site, start with Organization, BreadcrumbList and Article or Product. That covers most of the value.
About FAQ markup
FAQPage markup is still valid schema.org and you can use it. For most sites it no longer produces a rich result in Google, because of the 2023 restriction. Other consumers, Bing among them, may still read it. Add it if it is cheap to do, but do not expect the expandable questions in Google results.
Adding it correctly
1. Generate
Most platforms handle the basics: Yoast and Rank Math on WordPress, most Shopify themes for Product, and the major frameworks have helpers. For hand-built pages, the Schema Markup Generator produces JSON-LD for Article, FAQ, Product, LocalBusiness, Breadcrumb and more.
2. Fill every required property, and the recommended ones you can
Each Google feature has its own required and recommended properties, documented per type. Required ones missing means no rich result. Recommended ones missing means a warning in Search Console and a plainer result. A Product example with the properties Google needs for a product snippet:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Trail Running Shoe X2",
"image": ["https://www.example.com/img/x2-side.jpg"],
"description": "Lightweight trail shoe with a 6 mm drop and a rock plate.",
"sku": "X2-BLK-42",
"brand": { "@type": "Brand", "name": "Example Sports" },
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/trail-running-shoe-x2",
"priceCurrency": "EUR",
"price": "129.00",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "87"
}
}
</script>
3. Match the visible page
Google's structured data guidelines are strict on this: mark up only content that is visible to users on that page. The price in the markup has to be the price on the page. Reviews in the markup have to be readable on the page. Marking up content that is hidden or does not exist is the most common route to a manual action.
4. Put it on the right page
- Mark up the page the data belongs to. Do not put
Productmarkup for one item on a category page listing twenty. - Put
Organizationon the homepage, not on every URL. - Keep the same markup on the mobile version. Google indexes mobile.
- Duplicate pages should carry the same markup as their canonical.
5. Test
| Tool | What it checks |
|---|---|
| Google Rich Results Test | Whether the page is eligible for Google rich results, with errors and warnings. Tests live URLs or pasted code, renders JavaScript |
| Schema Markup Validator (validator.schema.org) | Syntax and vocabulary against schema.org in general, with no Google-specific rules |
| Search Console > URL Inspection | What Google detected on the indexed version and in a live test |
| Search Console > Enhancements and Shopping reports | Site-wide valid and invalid item counts over time |
To see which JSON-LD blocks a page currently outputs, including blocks from plugins you forgot about, use the Structured Data Viewer. Two plugins emitting conflicting Product or Article blocks is a frequent finding.
6. Monitor
After deployment, reports appear in Search Console under Enhancements (and Shopping for products) once Google has recrawled some pages. Fix errors first, since those remove eligibility, and then warnings. After a fix, use Validate fix. Search Console also emails owners when new structured data issues spike, which often happens after a theme or plugin update.
Common errors and what they mean
| Message | Cause | Fix |
|---|---|---|
| Missing field "x" | A required property is absent | Add it, with real data |
| Either "offers", "review" or "aggregateRating" should be specified | Product with no supporting data |
Add at least one of them |
| Invalid value type / Invalid enum value | For example, availability: "in stock" |
Use the schema.org URL: https://schema.org/InStock |
| Invalid date format | 10/09/2026 |
Use ISO 8601: 2026-09-10 |
| Unparsable structured data | Broken JSON: trailing comma, smart quotes, unescaped characters | Validate the JSON, escape quotes inside strings |
| Review has multiple aggregate ratings | Duplicate markup from theme and plugin | Disable one source |
Rules that get sites into trouble
Google can issue a manual action for structured data. The site stays indexed and loses rich result eligibility until it is fixed and a reconsideration request is approved. The usual causes:
- Self-serving reviews. Google does not show review stars for
LocalBusinessandOrganizationwhen the entity controls the reviews about itself, for example by marking up testimonials on its own site. Do not try to work around it with a different type. - Invented ratings. An
AggregateRatingwith no real, visible reviews behind it. - Marking up hidden content.
- Wrong type on purpose. Marking a service page as
Productor an advert asEventto get a richer result. - Site-wide copies. The same
Productor rating markup repeated on every page.
If a rich result you had disappears, check Security & Manual Actions > Manual actions first.
Structured data and indexing: how they interact
The interaction runs mostly one way. Structured data is read at indexing time, so:
- A page that is not indexed gets no rich results, whatever the markup says. Confirm indexing first with URL Inspection. See how to check if a page is indexed.
- Markup updates need a recrawl. A changed price or new rating appears in results only after Google recrawls the page. For products with frequent price changes, a Merchant Center feed is the more reliable channel.
- JavaScript-injected markup depends on rendering, which may happen later than the first crawl. Server-rendered JSON-LD is picked up with the HTML.
- Blocked resources break it. If the page or the script that injects markup is disallowed in robots.txt, Google never sees it.
A sensible rollout plan
- List your page templates: home, category, product, article, location, and so on.
- Pick one or two supported types for each from the table above.
- Implement in the template, server-side, with data from the same source as the visible page.
- Test three URLs per template in the Rich Results Test.
- Deploy, then watch Search Console's enhancement reports for two to four weeks.
- Revisit after every theme, plugin or template change, because that is when markup breaks.
Structured data is a finishing step. Get crawling, indexing and content right first, as described in how Google Search works, then use markup to make the indexed pages look their best.
Frequently asked questions
- Does structured data help pages get indexed?
- No. Structured data does not influence whether Google indexes a page. It helps Google understand an indexed page and makes it eligible for rich results. The one indirect link is that JobPosting and BroadcastEvent markup are the page types Google's Indexing API officially supports.
- Is structured data a ranking factor?
- Google has said that structured data itself is not a generic ranking boost. Rich results can improve click-through rate because the listing is larger and more informative, and markup helps Google understand what the page is about.
- Which format should I use: JSON-LD, Microdata or RDFa?
- Google supports all three and recommends JSON-LD, because it sits in one script block that is separate from the HTML and is easier to maintain at scale.
- Why is my valid structured data not showing rich results?
- Valid markup makes a page eligible and nothing more. Google's documentation says rich results are not guaranteed. Common reasons are that the page is not indexed, the markup does not match visible content, the rich result type is restricted to certain sites, or Google's systems judge that a plain result serves the query better.
- Can I add structured data with Google Tag Manager?
- Yes, Google can read JSON-LD injected by JavaScript, including through Tag Manager. It depends on rendering, which is slower and less reliable than markup in the server HTML, so server-side output is the safer choice for Product and other frequently changing data.