Schema Markup for Beginners: What It Is and How to Add It

Learn what schema markup is, why it matters for SEO, and how to add your first JSON-LD structured data block. Beginner-friendly guide with copy-paste examples.

BugViso

14 min read

Schema markup is a standardized vocabulary of tags you add to your HTML that tells search engines exactly what your content means, not just what it says. When a search engine reads "Apple" on your page, it doesn't know if you're talking about the fruit, the company, or a person's surname. Schema markup removes that ambiguity by wrapping your content in machine-readable labels — declaring "this is a Product with a price of $49.99 and 4.5 stars" or "this is a FAQPage with 6 questions and answers." The result: Google can display rich results (star ratings, FAQ accordions, recipe cards, event dates) directly in search, and AI answer engines can extract structured facts from your pages with higher confidence.

Think of schema markup as nutrition labels for your website. A nutrition label doesn't change what's inside the food — it gives consumers (and regulators) a structured, machine-readable summary of what's there. Schema markup does the same for search engines: it doesn't change your visible content, but it provides a structured summary that machines can parse instantly instead of guessing.

What Schema Markup Actually Looks Like

Schema markup is written in a format called JSON-LD (JavaScript Object Notation for Linked Data), which lives inside a <script> tag in your HTML. It's invisible to visitors — only machines read it:

html
<!-- This is schema markup — visitors never see it -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Downtown Coffee Roasters",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "Portland",
    "addressRegion": "OR",
    "postalCode": "97201"
  },
  "telephone": "+1-503-555-0123",
  "openingHours": "Mo-Fr 06:00-18:00",
  "priceRange": "$$"
}
</script>

This block tells Google: "This page is about a local business named Downtown Coffee Roasters, located at 123 Main Street, Portland, OR, open Monday–Friday 6am–6pm, with moderate pricing." Without this markup, Google would need to parse your entire page text, infer the business name from context, and guess at the address format — a process that's error-prone and often incomplete.

Why Schema Markup Matters for SEO in 2026

Pages with valid schema markup qualify for rich results — enhanced search listings that include star ratings, prices, FAQ accordions, event dates, recipe cook times, and other visual elements. Rich results occupy more visual space and typically earn higher click-through rates than standard blue links:

Rich Result TypeRequired SchemaCTR Improvement (Industry Average)
Review StarsProduct, AggregateRating+15–25% vs plain listing
FAQ AccordionFAQPage, Question, Answer+10–15% (expanded SERP real estate)
Recipe CardRecipe (image, cook time, nutrition)+25–35% (visual thumbnail)
Event ListingEvent (date, location, offers)+20% (date/location visible)
How-To StepsHowTo, HowToStep+10% (step preview in SERP)
BreadcrumbsBreadcrumbListImproved navigation display

AI Search Engine Citations

Generative AI answer engines (ChatGPT Search, Perplexity, Google AI Overviews) extract structured data more reliably from pages with schema markup. When your page declares explicit FAQPage schema, an AI engine can pull question-answer pairs directly instead of attempting to parse them from unstructured paragraphs. Pages with strong content extractability signals — including schema markup — are cited more frequently in AI-generated answers.

Knowledge Graph Connections

Schema markup creates explicit entity relationships that feed Google's Knowledge Graph. An Organization schema with sameAs links to your social profiles connects your brand entity across platforms. A Person schema for your author with alumniOf, jobTitle, and worksFor properties establishes the E-E-A-T signals that Google's quality raters evaluate.

The Five Schema Types Every Website Should Implement

1. Organization Schema (Every Business Website)

This establishes your brand entity in Google's Knowledge Graph:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company Name",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "description": "Brief description of your business.",
  "foundingDate": "2020",
  "sameAs": [
    "https://twitter.com/yourcompany",
    "https://linkedin.com/company/yourcompany",
    "https://github.com/yourcompany"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-555-123-4567",
    "contactType": "customer service",
    "email": "support@example.com"
  }
}
</script>

Where to place it: Your homepage. One instance per site is sufficient — don't repeat it on every page.

This enables the sitelinks search box in Google results — a search field directly in your SERP listing:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Your Company Name",
  "url": "https://example.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://example.com/search?q={search_term_string}"
    },
    "query-input": "required name=search_term_string"
  }
}
</script>

Where to place it: Your homepage only.

3. BreadcrumbList Schema (Every Interior Page)

Breadcrumbs show the page's position in your site hierarchy directly in Google results:

html
<!-- Page: /products/electronics/headphones -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Products",
      "item": "https://example.com/products"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Electronics",
      "item": "https://example.com/products/electronics"
    },
    {
      "@type": "ListItem",
      "position": 4,
      "name": "Headphones"
    }
  ]
}
</script>

Where to place it: Every page that has a hierarchical position (everything except the homepage).

4. Article Schema (Blog Posts and Content Pages)

This qualifies your content for article-specific rich results and establishes authorship for E-E-A-T:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Optimize Images for Web Performance",
  "description": "Complete guide to image optimization...",
  "image": "https://example.com/images/hero-image-optimization.webp",
  "author": {
    "@type": "Person",
    "name": "Sarah Chen",
    "url": "https://example.com/team/sarah-chen",
    "jobTitle": "Senior Performance Engineer"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Your Company Name",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "datePublished": "2026-09-15T00:00:00.000Z",
  "dateModified": "2026-09-18T00:00:00.000Z",
  "mainEntityOfPage": "https://example.com/blog/image-optimization-guide"
}
</script>

Where to place it: Every blog post, news article, or long-form content page.

5. FAQPage Schema (Pages With Q&A Content)

FAQ schema produces accordion-style rich results in Google and is heavily referenced by AI answer engines:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is schema markup?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Schema markup is a standardized vocabulary of HTML tags that helps search engines understand the meaning of your content. It uses the Schema.org vocabulary to describe entities like products, articles, events, and organizations in a machine-readable format."
      }
    },
    {
      "@type": "Question",
      "name": "Does schema markup improve rankings?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Schema markup is not a direct ranking factor, but it qualifies pages for rich results which can increase click-through rates by 15-35%. Higher CTR sends positive engagement signals that indirectly support rankings."
      }
    }
  ]
}
</script>

Where to place it: Any page that contains question-and-answer pairs — FAQ sections, support pages, and blog posts with FAQ sections at the end.

How to Add Schema Markup to Your Site (Step by Step)

Step 1: Identify Your Page Type

Match each page type on your site to the appropriate schema:

Page TypePrimary SchemaOptional Schema
HomepageOrganization, WebSiteSearchAction
Product pageProduct, AggregateRating, OfferBreadcrumbList
Blog postArticle, BreadcrumbListFAQPage (if FAQ section exists)
Service pageService, BreadcrumbListFAQPage
Contact pageContactPage, LocalBusinessPostalAddress
About pageAboutPage, Person/OrganizationsameAs social links
Event pageEvent, BreadcrumbListOffer, Place

Step 2: Write or Generate the JSON-LD

You can write JSON-LD manually (it's standard JSON with a few special keys), or use Google's Structured Data Markup Helper to generate it visually.

The required keys in every JSON-LD block:

json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Required: the entity name",
  "description": "Recommended: brief description"
}
  • @context — Always "https://schema.org" — declares the vocabulary
  • @type — The entity type from the Schema.org hierarchy
  • Properties — Type-specific fields (varies by @type)

Step 3: Add the Script Tag to Your HTML

Place the JSON-LD <script> tag inside the <head> or at the end of <body>. Google accepts both positions:

html
<head>
  <title>Widget Pro — Example Store</title>
  <!-- Schema markup in the head -->
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": "Widget Pro",
    "description": "Premium widget with advanced features.",
    "offers": {
      "@type": "Offer",
      "price": "49.99",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock"
    }
  }
  </script>
</head>

For CMS platforms without direct HTML access:

  • WordPress: Use a plugin like Yoast SEO or Rank Math which generates schema automatically
  • Shopify: Product schema is auto-generated by most themes; add custom schema via theme.liquid
  • Squarespace: Built-in schema for basic types; custom JSON-LD via Code Injection
  • Next.js/React: Inject via <Head> component or metadata.other in the App Router

Step 4: Validate Your Markup

After adding schema, validate it with two tools:

bash
# Tool 1: Google's Rich Results Test
# https://search.google.com/test/rich-results
# Tests whether your schema qualifies for specific rich result types

# Tool 2: Schema.org Validator
# https://validator.schema.org/
# Validates JSON-LD syntax and property completeness

Common validation errors:

ErrorCauseFix
Missing required propertyE.g., Product without offersAdd the missing property
Invalid @typeTypo in type name (e.g., "Artcle")Check spelling against Schema.org
Invalid URL in imageRelative path instead of absolute URLUse full https:// URL
JSON syntax errorTrailing comma, unquoted keyRun through a JSON linter
Mismatched contentSchema says "In Stock" but page says "Sold Out"Keep schema and visible content in sync

Step 5: Monitor Rich Results in Google Search Console

After validation, monitor GSC → Enhancements to track which rich result types Google detects on your site and whether any pages have errors:

  • Valid items: Pages with correct schema that qualify for rich results
  • Valid with warnings: Pages with schema that works but has optional fields missing
  • Errors: Pages with schema that Google cannot process — these need immediate fixes

Common Mistakes Beginners Make

Mistake 1: Adding schema that doesn't match visible content. Google's structured data guidelines require that schema markup accurately represents the content visible on the page. Adding a Product schema with a price of "$29.99" when the visible page shows "$39.99" violates Google's policies and can result in a manual action (penalty).

Mistake 2: Over-marking content with irrelevant schema. A blog post about "how to bake bread" doesn't need Product or Organization schema. Match the schema type to the page's actual content purpose. Using inappropriate schema types doesn't help rankings and may trigger quality review.

Mistake 3: Placing schema on pages it shouldn't apply to. FAQPage schema should only appear on pages that are primarily an FAQ — not on every product page that happens to have one question in the footer. Google has tightened eligibility for FAQ rich results to pages where FAQ is the core content purpose.

Mistake 4: Using Microdata instead of JSON-LD. While Google supports both formats, JSON-LD is Google's explicitly preferred format because it's decoupled from the HTML — you can add, modify, or remove schema without touching the page template. Microdata requires inline attributes on HTML elements, making it harder to maintain and test.

Mistake 5: Setting dateModified to the current date on every page load. Dynamic dateModified timestamps that update to "today" on every request train Google that the page is constantly changing when it isn't. Only update dateModified when the page content has genuinely been revised.

How BugViso Validates Your Schema Markup Automatically

BugViso's Advanced SEO Intelligence engine includes a Structured Data & Schema.org Validation module that audits JSON-LD and Microdata on every page crawled during a multi-page site scan.

The validator extracts inline application/ld+json blocks (including @graph containers with multiple entities) and Microdata attributes, then validates them against common landing-page types — Organization, Product, SoftwareApplication, WebSite, and more. It flags missing required properties (like offers.price and priceCurrency on product pages), malformed JSON-LD syntax, and pages with pricing sections that lack matching commerce schema.

For pages with FAQ and Q&A content, BugViso's AI Search Readiness engine evaluates content extractability — whether question-style headings, list/table structures, and summary blocks are present alongside any FAQPage or QAPage schema. This combination of structured data validation and content structure analysis identifies pages that have the content but lack the schema to surface it in rich results and AI citations.

The duplicate <title>, <meta description>, and <h1> detection module also catches a common schema-related issue: multiple pages sharing identical schema properties (same name, same description) across different URLs, which dilutes the entity signals Google uses for Knowledge Graph connections.

Schema Types for Specific Business Contexts

E-Commerce: Product + Offer + AggregateRating

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Noise-Canceling Headphones",
  "image": "https://example.com/images/headphones-hero.webp",
  "description": "Premium wireless headphones with active noise cancellation.",
  "brand": {
    "@type": "Brand",
    "name": "AudioTech"
  },
  "offers": {
    "@type": "Offer",
    "price": "149.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/products/wireless-headphones",
    "priceValidUntil": "2027-01-01"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "342"
  }
}
</script>

SaaS / Software: SoftwareApplication

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "BugViso",
  "applicationCategory": "WebApplication",
  "operatingSystem": "Web",
  "description": "Premium website audit tool for SEO, performance, and accessibility.",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "ratingCount": "156"
  }
}
</script>

Local Business: LocalBusiness + GeoCoordinates

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Fresh Kitchen Downtown",
  "image": "https://example.com/images/restaurant-exterior.webp",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "456 Oak Avenue",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94102",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.7749,
    "longitude": -122.4194
  },
  "telephone": "+1-415-555-0199",
  "servesCuisine": "Farm-to-table American",
  "priceRange": "$$$",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "11:00",
      "closes": "22:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "09:00",
      "closes": "23:00"
    }
  ]
}
</script>

Frequently Asked Questions

Is schema markup a direct ranking factor?

No — Google has explicitly stated that structured data is not a direct ranking signal. However, schema qualifies pages for rich results, which increase click-through rates, and higher CTR is an engagement signal that indirectly supports rankings. Schema also feeds the Knowledge Graph, which influences entity disambiguation and featured snippet selection.

How many schema types can I put on one page?

Multiple. A product page can have Product, BreadcrumbList, and Organization schema simultaneously. Use the @graph container to bundle multiple entities in a single JSON-LD block:

html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "Product", "name": "Widget Pro", ... },
    { "@type": "BreadcrumbList", "itemListElement": [...] },
    { "@type": "Organization", "name": "Example Corp", ... }
  ]
}
</script>

Do I need schema on every page?

Not necessarily. Prioritize pages that can qualify for rich results: product pages (star ratings), blog posts (article features), FAQ pages (accordion), and your homepage (sitelinks search box). Pages like privacy policies, terms of service, and login screens generally don't benefit from schema.

Will Google penalize me for incorrect schema?

Google won't penalize you for honest mistakes in schema syntax. However, spammy or misleading schema (fake reviews, fabricated prices, marking non-FAQ content as FAQPage) can result in a manual action that removes rich results from your entire site. Always ensure schema accurately reflects visible content.

What's the difference between JSON-LD, Microdata, and RDFa?

All three are formats for embedding structured data. JSON-LD is a JavaScript block in your <head> or <body> — Google's recommended format. Microdata uses inline HTML attributes (itemscope, itemprop). RDFa uses typeof and property attributes. JSON-LD is preferred because it's decoupled from your HTML template, making it easier to implement and test without modifying page markup.

How do I add schema to a WordPress site without coding?

Use an SEO plugin (Yoast SEO, Rank Math, or All in One SEO) that generates schema automatically based on your content type. These plugins add Article schema to posts, WebSite/Organization schema to the homepage, and allow custom schema through their settings UI — no code editing required.

Conclusion

Schema markup is the bridge between human-readable content and machine-readable entities — adding JSON-LD structured data to your pages unlocks rich results, strengthens Knowledge Graph connections, and improves AI citation probability, and validating that your schema is syntactically correct and complete is exactly what BugViso's structured data audit checks automatically across every page it crawls.

Found this useful? Share it.

See where your site stands

Run a free BugViso audit for SEO, speed, accessibility and AI search readiness — with fixes you can ship today.