Skip to main content
SEO

Structured Data and Schema Markup Guide

Learn how to implement structured data and schema markup for better SEO. Covers JSON-LD implementation, common schema types, testing, and rich results optimization.

Structured Data and Schema Markup Guide
5 min read
Updated 3 hours ago

When you search Google, some results stand out. They have star ratings, prices, FAQs, recipes with images, event dates. These enhanced results get more clicks.

The secret? Structured data.

Structured data is code you add to your pages that helps search engines understand your content. When implemented correctly, it can unlock rich results—those eye-catching search features that boost click-through rates.

Let's learn how to speak Google's language.

What Is Structured Data?

Structured data is a standardized format for providing information about your page content. It tells search engines explicitly what things on your page represent.

Without structured data, Google infers meaning from your content. With structured data, you state meaning directly.

Without structured data:
Google sees text that looks like a recipe—ingredients, steps, times.

With structured data:
You explicitly tell Google: "This is a Recipe. It takes 30 minutes. Here are the ingredients."

The Schema.org Standard

Schema.org is the vocabulary search engines agreed to use. It defines hundreds of types and properties to describe content.

Types represent things: Product, Article, Recipe, Event, Organization, Person, etc.

Properties describe attributes: name, description, price, rating, author, etc.

Most major search engines (Google, Bing, Yahoo) understand Schema.org markup.

Formats for Structured Data

Three formats exist for adding structured data:

JSON-LD (Recommended)

JSON-LD is a script block added to your HTML. Google recommends this format.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Add Structured Data",
  "author": {
    "@type": "Person",
    "name": "John Doe"
  },
  "datePublished": "2026-06-28"
}
</script>

Advantages:

  • Separate from HTML (easier to maintain)
  • Can be added anywhere on page
  • Doesn't affect page rendering
  • Easy to generate dynamically

Microdata

Microdata adds attributes to existing HTML elements:

<article itemscope itemtype="https://schema.org/Article">
  <h1 itemprop="headline">How to Add Structured Data</h1>
  <span itemprop="author" itemscope itemtype="https://schema.org/Person">
    <span itemprop="name">John Doe</span>
  </span>
</article>

Drawbacks:

  • Mixed with HTML (harder to maintain)
  • Verbose
  • Must modify existing markup

RDFa

Similar to Microdata, with different attributes:

<article vocab="https://schema.org/" typeof="Article">
  <h1 property="headline">How to Add Structured Data</h1>
  <span property="author" typeof="Person">
    <span property="name">John Doe</span>
  </span>
</article>

Recommendation: Use JSON-LD. It's what Google prefers, and it's cleanest to implement.

Common Schema Types

Organization

Every business website should have Organization schema:

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Duo Dev Technologies",
  "url": "https://duodev.in",
  "logo": "https://duodev.in/logo.png",
  "description": "Web and mobile application development",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "City Name",
    "addressCountry": "IN"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+91-XXX-XXXX",
    "contactType": "customer service"
  },
  "sameAs": [
    "https://twitter.com/duodev",
    "https://linkedin.com/company/duodev"
  ]
}

Add to homepage. This helps Google understand your business and may enable Knowledge Panel features.

LocalBusiness

For businesses with physical locations:

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Business Name",
  "image": "https://example.com/photo.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "City",
    "addressRegion": "State",
    "postalCode": "12345",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 40.7128,
    "longitude": -74.0060
  },
  "telephone": "+1-555-123-4567",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ]
}

Article/BlogPosting

For blog posts and articles:

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Structured Data and Schema Markup Guide",
  "description": "Learn how to implement structured data...",
  "image": "https://example.com/article-image.jpg",
  "datePublished": "2026-06-28",
  "dateModified": "2026-06-28",
  "author": {
    "@type": "Organization",
    "name": "Duo Dev Team"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Duo Dev",
    "logo": {
      "@type": "ImageObject",
      "url": "https://duodev.in/logo.png"
    }
  }
}

Product

For e-commerce product pages:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Widget Pro",
  "image": "https://example.com/widget.jpg",
  "description": "The best widget on the market",
  "brand": {
    "@type": "Brand",
    "name": "WidgetCo"
  },
  "sku": "WP-12345",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/widget-pro",
    "priceCurrency": "USD",
    "price": "99.99",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2026-12-31"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "142"
  }
}

Products with proper schema can show prices, availability, and ratings in search results.

FAQPage

For FAQ content:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is structured data?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Structured data is code that helps search engines understand your content."
      }
    },
    {
      "@type": "Question",
      "name": "How do I add structured data?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Add JSON-LD script blocks to your HTML pages."
      }
    }
  ]
}

FAQ schema can display expandable questions directly in search results—taking up significant space.

BreadcrumbList

For navigation breadcrumbs:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://example.com/blog/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "SEO",
      "item": "https://example.com/blog/seo/"
    }
  ]
}

Breadcrumbs appear in search results, showing page hierarchy.

HowTo

For step-by-step instructions:

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Add Structured Data to Your Website",
  "totalTime": "PT30M",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Choose Schema Type",
      "text": "Identify which schema type fits your content."
    },
    {
      "@type": "HowToStep",
      "name": "Write JSON-LD",
      "text": "Create the JSON-LD script with required properties."
    },
    {
      "@type": "HowToStep",
      "name": "Test and Validate",
      "text": "Use Google's Rich Results Test to validate."
    }
  ]
}

Event

For events and happenings:

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Tech Conference 2026",
  "startDate": "2026-09-15T09:00",
  "endDate": "2026-09-17T17:00",
  "location": {
    "@type": "Place",
    "name": "Convention Center",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "addressCountry": "US"
    }
  },
  "offers": {
    "@type": "Offer",
    "price": "299",
    "priceCurrency": "USD",
    "url": "https://example.com/event-tickets"
  }
}

Implementation Best Practices

Add to Every Relevant Page

Don't add schema to homepage only. Add appropriate types to:

  • Organization schema on homepage
  • Article/BlogPosting on blog posts
  • Product on product pages
  • FAQPage on FAQ sections
  • BreadcrumbList on all pages

Match Content Accurately

Only add schema for content that exists on the page. If you claim a 5-star rating, it must be visible on the page.

Wrong:
Adding Product schema with price to an informational article.

Right:
Adding Article schema to article pages, Product schema to product pages.

Include Required Properties

Each schema type has required and recommended properties. Check Google's documentation for your specific type.

Missing required properties = schema may be ignored.

Use Specific Types

Schema.org has a hierarchy. Use the most specific type applicable.

Generic: Thing > CreativeWork > Article
Specific: Thing > CreativeWork > Article > BlogPosting

BlogPosting is more specific than Article. Use it for blog posts.

Testing and Validation

Google's Rich Results Test

Test individual URLs:
https://search.google.com/test/rich-results

Shows:

  • Whether schema is valid
  • What rich results are eligible
  • Warnings and errors

Schema Markup Validator

Test schema syntax:
https://validator.schema.org/

Validates schema structure against Schema.org vocabulary.

Google Search Console

Monitor structured data across your site:

  • Enhancements reports show coverage
  • Error counts by type
  • Pages with valid/invalid markup

Check regularly for new errors.

Common Errors

Missing required field:

Field "image" is required

Add the missing property.

Invalid value:

"2026-28-06" is not a valid date

Use proper ISO 8601 format: "2026-06-28"

Type mismatch:

Expected "Thing", got "string"

Use proper nested objects, not strings.

Rich Results Types

Schema markup can enable various rich results:

Schema Type Potential Rich Results
Article Article snippets
Product Price, availability, ratings
FAQPage FAQ accordions
HowTo Step-by-step cards
Recipe Recipe cards with images
Event Event listings
Review Star ratings
VideoObject Video thumbnails
BreadcrumbList Breadcrumb trail

Note: Schema makes you eligible for rich results. It doesn't guarantee them. Google decides what to show.

Dynamic Schema Generation

For CMS and dynamic sites, generate schema programmatically:

// Example: Generate BlogPosting schema
function generateArticleSchema(article) {
  return {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": article.title,
    "description": article.excerpt,
    "datePublished": article.publishDate,
    "dateModified": article.updateDate,
    "author": {
      "@type": "Person",
      "name": article.author
    },
    "image": article.featuredImage
  };
}

Inject into page templates. Most CMS platforms have plugins for this.

Schema and SEO

Structured data supports broader SEO efforts:

Rich results drive higher click-through rates, which indirectly supports rankings.

Getting Started Checklist

  1. Add Organization schema to homepage
  2. Add BreadcrumbList to all pages
  3. Add Article/BlogPosting to blog posts
  4. Add Product schema to product pages (if applicable)
  5. Add FAQPage to FAQ sections
  6. Test with Rich Results Test
  7. Monitor in Search Console

Start with basics. Expand to other types as relevant to your content.


Need help implementing structured data on your website? Contact Duo Dev for technical SEO and development services.

Related Articles

How to Plan Website Architecture for SEO
Web Development

How to Plan Website Architecture for SEO

Learn how to structure your website for better SEO performance. Covers site hierarchy, URL structure, internal linking,...

H
HARIHARAN K
Off-page SEO Checklist (2026)
SEO

Off-page SEO Checklist (2026)

Complete off-page SEO checklist for 2026. Learn link building strategies, social signals, brand mentions, and authority...

H
HARIHARAN K
How to Choose Domain Name for Business
Business

How to Choose Domain Name for Business

Learn how to pick the perfect domain name for your business. Practical tips on branding, SEO, extensions, availability,...

H
HARIHARAN K
How to Rank a New Website on Google Faster
SEO

How to Rank a New Website on Google Faster

Learn proven strategies to get your new website indexed and ranking on Google faster. Practical steps for technical SEO,...

H
HARIHARAN K