Structured data is machine-readable code (almost always JSON-LD) added to a page's <head> that explicitly labels the meaning of its content — "this is a product", "this is its price", "this is the author", "this is the rating". The vocabulary is defined by Schema.org, jointly maintained by Google, Microsoft, Yahoo, and Yandex. Correct schema markup makes pages eligible for rich results in Google and increases the rate at which AI engines (ChatGPT, Perplexity, Google AI Overviews, Claude) cite the page accurately.
Not every Schema.org type produces a visual enhancement in search. Here's the current state of the most-used types:
| Schema type | Rich result? | AI value | Notes |
|---|---|---|---|
| Product / Offer | Yes | High | Price, availability, ratings |
| Recipe | Yes | High | Ingredients, time, ratings |
| Review / AggregateRating | Yes (limited) | High | Tied to specific types only |
| LocalBusiness | Yes | High | Pairs with Google Business Profile |
| Event | Yes | High | Date, location, ticket info |
| Article / NewsArticle | Yes (Top Stories) | High | Author, datePublished, image |
| VideoObject | Yes | High | Thumbnails, key moments |
| BreadcrumbList | Yes | Medium | Replaces URL in SERP |
| FAQPage | Limited (2023+) | High | No SERP enhancement for most sites |
| HowTo | Removed (2023) | Medium | No SERP enhancement, still AI-readable |
| Organization | No (Knowledge Panel) | High | Logo, sameAs links to social |
| Person | No (Knowledge Panel) | High | Author E-E-A-T signal |
| WebSite + SearchAction | Sitelinks Searchbox | Low | Brand searches only |
| SoftwareApplication | Yes | High | App ratings, price |
| Course | Yes | Medium | Education sites only |
| JobPosting | Yes (Google for Jobs) | High | Strict requirements |
Product.offers.price or Article.author.name. Without schema, AI engines guess from raw text and frequently get it wrong.sameAs links to your social profiles and Wikipedia, are how Google builds its internal entity model of your brand or you as an author.JSON-LD lives in a <script type="application/ld+json"> tag inside <head>. It's separate from your visible HTML, which means you can add it without touching the markup users see.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Joe's Pizza",
"image": "https://example.com/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Anytown",
"addressRegion": "CA",
"postalCode": "12345",
"addressCountry": "US"
},
"telephone": "+1-555-123-4567",
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "11:00",
"closes": "22:00"
}],
"priceRange": "$$",
"servesCuisine": "Italian",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "89"
}
}
</script>Note: Use the most specific subtype (Restaurant, Dentist, Plumber) rather than generic LocalBusiness — Google ranks specific types higher in local results.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Bluetooth Headphones",
"image": "https://example.com/headphones.jpg",
"description": "High-quality wireless headphones with active noise cancellation.",
"sku": "TS-NC-100",
"brand": { "@type": "Brand", "name": "TechSound" },
"offers": {
"@type": "Offer",
"url": "https://example.com/headphones",
"priceCurrency": "USD",
"price": "149.99",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.3",
"reviewCount": "127"
}
}
</script>2026 requirement: Google now requires shippingDetails and hasMerchantReturnPolicy for Product rich results in major markets. Without them, you'll see "merchant listing experience" warnings in Search Console.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "10 Tips for Better Website SEO",
"image": ["https://example.com/seo-tips-1x1.jpg",
"https://example.com/seo-tips-4x3.jpg",
"https://example.com/seo-tips-16x9.jpg"],
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://example.com/authors/jane-smith"
},
"publisher": {
"@type": "Organization",
"name": "SEO Blog",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2026-01-15T08:00:00+00:00",
"dateModified": "2026-04-28T10:30:00+00:00"
}
</script>Tip: Always provide images in 1:1, 4:3, and 16:9 aspect ratios. Google chooses based on the surface (Top Stories vs. mobile carousel vs. Discover) and pages with all three are eligible for more placements.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Greadme",
"url": "https://www.greadme.com",
"logo": "https://www.greadme.com/logo.png",
"sameAs": [
"https://twitter.com/greadme",
"https://www.linkedin.com/company/greadme",
"https://github.com/greadme"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"email": "support@greadme.com"
}
}
</script>The sameAs array is what Google uses to consolidate your entity across the web — keep it accurate and exhaustive.
Adding a 4.8 aggregate rating in JSON-LD when the page shows no reviews violates Google's structured data guidelines and can trigger a manual action. The rule: schema must reflect what's on the page.
"price": "$149.99" fails validation. The correct form is "price": "149.99" with a separate "priceCurrency": "USD". Dates must be ISO 8601 (2026-04-28 or 2026-04-28T10:30:00+00:00), not April 28, 2026.
Each rich-result type has required and recommended properties. Product needs name + image + offers at minimum. Article needs headline + image + datePublished + author. Skip one and the rich result silently disappears.
Two Article blocks on the same page with different headline values confuse Google — it picks one or ignores both. If you need multiple schemas (e.g., Article + BreadcrumbList + Organization), put them in one @graph array or as separate scripts with no overlap.
priceValidUntil in the past, dateModified from two years ago, availability showing InStock when the product is sold out — all silently disable the rich result. Tie schema to your CMS or build pipeline so it updates with the content.
Three formats can carry Schema.org markup. Use only one:
itemscope, itemtype, itemprop) on existing HTML. Older, harder to maintain, mixes data with presentation.Don't mix formats on the same page.If you're migrating a legacy site, remove the old format before adding JSON-LD — duplicate schema in two formats is a common cause of conflicting markup.
Not directly. Google has stated repeatedly that schema markup itself doesn't boost rankings. What it does is unlock rich results, which raise click-through rate, and help Google's entity-understanding systems — both of which indirectly improve performance.
JSON-LD. Google has recommended it as the preferred format since 2015. It's easier to maintain, doesn't mix with your visible HTML, and is the format AI engines parse most reliably.
Mostly no. In August 2023 Google restricted FAQ rich results to authoritative health and government sites, and in September 2023 it removed HowTo rich results entirely. The schemas are still valid and still useful for AI engines (ChatGPT, Perplexity), but most sites no longer get a SERP enhancement from them.
Yes. Generative engines parse JSON-LD directly to extract structured facts (author names, prices, dates, ratings). Industry data from 2025 shows pages with proper schema have 30–40% higher AI citation rates than pages without it.
Yes — and you usually should. A blog post might have Article + BreadcrumbList + Organization (sitewide). Either use separate <script> tags or combine them in a single @grapharray. Don't duplicate the same type with conflicting values.
Google can issue a manual action for "Spammy structured data" — visible in Search Console under Manual Actions. The rich result disappears immediately and the whole site can lose enhancement eligibility until you fix the markup and submit a reconsideration request.
No. Use it where it adds meaning: products, articles, recipes, events, local business pages. Add Organization sitewide on the homepage and BreadcrumbListon every page that has a breadcrumb trail. Plain marketing pages usually don't need any.
Either works — Google parses both — but <head>is the convention. Server-rendered JSON-LD is preferred over client-side injected schema; some crawlers don't execute JavaScript fully and miss late-added scripts.
Schema markup is the most underused, highest-leverage SEO investment most sites can make in 2026. It costs almost nothing to implement, it unlocks rich results that lift CTR, and — increasingly — it's how AI search engines decide which sites to cite and which to ignore. Pick the right type, fill in the required properties, validate, deploy, and monitor. That's the whole job.