Skip to main content
Structured data is how you tell Google exactly what’s on a page — this is an article, this is a product, this is an event starting at 7pm. When you add it, Google can show rich results (star ratings, event times, recipe thumbnails, FAQ accordions) in search, which meaningfully lifts click-through rate.
Structured data doesn’t guarantee rich results — Google decides based on content quality, relevance, and trust. It’s a prerequisite, not a magic toggle.

Three Paths

Describe what you want:
Add Article schema to my blog posts, Product schema to 
/shop/* pages, and Organization schema site-wide.
The AI will detect your page types, generate the appropriate JSON-LD, and inject it into your page templates.

Common Schema Types by Page Type

Page typeSchema type
Home / AboutOrganization
Blog postArticle / BlogPosting
ProductProduct + Offer
EventEvent
RecipeRecipe
ReviewReview / AggregateRating
FAQFAQPage
Local businessLocalBusiness
Most pages use 1-2 schema types. Don’t stack unrelated schema hoping for more rich results — Google treats that as spam.

Example: Article Schema

For a blog post:
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "5 Tips for Better Website Performance",
  "author": { "@type": "Person", "name": "Jane Doe" },
  "datePublished": "2026-04-19T09:00:00Z",
  "image": "https://yoursite.com/images/hero.jpg",
  "publisher": {
    "@type": "Organization",
    "name": "Acme Inc",
    "logo": {
      "@type": "ImageObject",
      "url": "https://yoursite.com/logo.png"
    }
  }
}
</script>
Eligible rich result: article with thumbnail, date, and author in the search snippet.

Example: Product Schema

For a product detail page:
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Blue Widget",
  "image": "https://yoursite.com/widget.jpg",
  "description": "High-quality blue widget",
  "offers": {
    "@type": "Offer",
    "price": "29.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>
Eligible rich result: price, availability, and (with AggregateRating added) star ratings.

Example: FAQ Schema

Stick this on any page with genuine Q&A content:
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you offer refunds?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, within 30 days of purchase."
      }
    },
    {
      "@type": "Question",
      "name": "How long does shipping take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Standard shipping is 3-5 business days."
      }
    }
  ]
}
</script>

Dynamic Schema for Blog and Product Pages

Hardcoded JSON-LD only works for static content. For blogs and products, generate it from your data:
1

Fetch the page data

Load the blog post or product from your database.
2

Build the schema object

function articleSchema(post) {
  return {
    "@context": "https://schema.org",
    "@type": "Article",
    headline: post.title,
    author: { "@type": "Person", name: post.author_name },
    datePublished: post.published_at,
    dateModified: post.updated_at,
    image: post.hero_image_url,
    publisher: {
      "@type": "Organization",
      name: "Acme Inc",
      logo: { "@type": "ImageObject", url: "https://yoursite.com/logo.png" }
    }
  };
}
3

Inject into the page head

In Next.js, use the built-in Script component or render the JSON inside a script tag via children:
import Script from 'next/script';

<Script
  id="article-schema"
  type="application/ld+json"
>
  {JSON.stringify(articleSchema(post))}
</Script>
JSON.stringify produces safe JSON — no user-generated HTML is inserted, so there’s no XSS risk as long as you’re only serializing your own structured data object.

Test Your Schema

Google provides a free validator:
1

Visit the Rich Results Test

2

Paste your page URL

Or paste raw HTML if the page isn’t deployed yet.
3

Review results

The test shows:
  • Which schema types were detected
  • Whether the page is eligible for rich results
  • Any errors or warnings (missing required fields)
4

Fix errors, leave warnings

Errors block rich results. Warnings mention optional fields and are safe to ignore unless you want the richest possible snippet.
Don’t stuff schema for entities that aren’t actually visible on the page. Google detects this as manipulation and may issue a manual penalty that’s painful to recover from. Schema should describe what’s on the page — not what you wish were on the page.

Monitor Rich-Result Coverage

Google Search Console shows you what’s working:
2

Go to Enhancements

Left sidebar > Enhancements. You’ll see a report per schema type (Articles, Products, FAQ, etc.).
3

Watch for errors

Google crawls new pages and flags schema issues here. Check weekly after launching new schema; fixed errors usually clear within a week of a re-crawl.

Verify It Worked

1

Validate via the Rich Results Test

Paste the URL of a page with schema. Confirm zero errors.
2

View the raw JSON-LD in the browser

Open the page, view source, search for application/ld+json. The script tag should contain your generated schema.
3

Wait for Google to index

Rich results take weeks to show up. Watch Search Console > Enhancements for indexing activity, and run occasional searches for your content.

Troubleshooting

Rich results aren’t guaranteed. Google considers content quality, site trust, and relevance. Also: it takes weeks to months for new schema to reflect in SERPs — be patient and monitor Search Console.
Fix per the tool’s guidance. Common errors: missing required properties (e.g., Article requires headline, image, author, datePublished), invalid dates (use ISO 8601), invalid URLs (must be absolute), incorrectly formatted prices (use string like "29.99", not number).
Warnings are safe to ignore, but adding the recommended fields can unlock richer snippets. For Article, adding publisher.logo and dateModified tends to help.
Google penalizes misleading schema. If your page says “In Stock” but the product is actually out of stock in your DB, fix one. Ensure schema is generated from the same data that renders the visible page — don’t maintain them separately.
You have schema from Site Enhancements AND your manual tags, and they disagree. Pick one source of truth — usually your manual tags win because they’re more specific. Turn off redundant auto-generated schema or override it.

What’s Next?

SEO Basics

Titles, descriptions, sitemaps, and other on-page SEO

SEO Audit

Find gaps in your site’s SEO coverage