Seenos.ai
GEO Visibility Reports

How to Implement Schema Markup: Step-by-Step Guide

How to implement schema markup step by step

Key Takeaways

  • JSON-LD is the standard — Google-recommended format, easiest to implement and maintain
  • Start with essential types — Organization, Article, BreadcrumbList, then expand
  • Always validate — Use Google Rich Results Test before and after deployment
  • CMS plugins simplify it — WordPress, Shopify, and others have built-in schema tools
  • Monitor continuously — Check Search Console for schema errors regularly

Implementing schema markup involves adding JSON-LD structured data to your website's HTML. This step-by-step guide walks you through the entire process — from choosing the right schema types to validating your implementation — with specific instructions for WordPress, Shopify, Next.js, and static HTML sites.

Methodology note: This guide is based on Google's official structured data guidelines, hands-on implementation across 50+ sites, and our monitoring of AI search citation patterns using GEO-Lens.

New to schema? Start with What Is Schema Markup? first. This guide is part of our Schema Markup Mastery series.

Step 1: Audit Your Current Schema #

Before adding new schema, check what you already have:

Document what schema already exists (your CMS theme or plugins may have added some automatically) and identify gaps.

Step 2: Choose Your Schema Types #

Prioritize schema types based on your content and business goals:

PrioritySchema TypeWhere to Add
🔴 HighOrganizationHomepage
🔴 HighBreadcrumbListAll pages
🔴 HighArticleBlog posts
🟡 MediumFAQPagePages with FAQ sections
🟡 MediumProductProduct pages (e-commerce)
🟡 MediumLocalBusinessHomepage, contact page
🟢 Nice-to-haveHowToTutorial pages
🟢 Nice-to-haveVideoObjectPages with video content

Step 3: Create Your JSON-LD Markup #

Organization Schema (Homepage)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company Name",
  "url": "https://yoursite.com",
  "logo": "https://yoursite.com/logo.png",
  "sameAs": [
    "https://twitter.com/yourcompany",
    "https://linkedin.com/company/yourcompany",
    "https://github.com/yourcompany"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "email": "support@yoursite.com"
  }
}
</script>

Article Schema (Blog Posts)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Your Article Title",
  "description": "A brief description of the article",
  "image": "https://yoursite.com/article-image.jpg",
  "author": {
    "@type": "Person",
    "name": "Author Name",
    "url": "https://yoursite.com/about"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Your Company",
    "logo": {
      "@type": "ImageObject",
      "url": "https://yoursite.com/logo.png"
    }
  },
  "datePublished": "2026-02-06",
  "dateModified": "2026-02-06"
}
</script>

BreadcrumbList Schema

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://yoursite.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://yoursite.com/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Article Title"
    }
  ]
}
</script>
Flowchart showing the complete schema markup implementation process from audit to monitoring

Step 4: Add Schema to Your Website #

WordPress Implementation #

Option A: Use a plugin (easiest)

  • Yoast SEO — Automatically generates Organization, Article, and BreadcrumbList schema. Add FAQ schema through the FAQ block.
  • Rank Math — Built-in schema generator with support for 20+ types. Uses a visual editor.
  • Schema Pro — Dedicated schema plugin with conditional rules and automation.

Option B: Add manually

Add JSON-LD to your theme's header.php or use the wp_head action hook:

// In your theme's functions.php
function add_schema_markup() {
  if (is_front_page()) {
    echo '<script type="application/ld+json">';
    echo json_encode($organization_schema);
    echo '</script>';
  }
}
add_action('wp_head', 'add_schema_markup');

Shopify Implementation #

  • JSON-LD for SEO app — Automatic schema for products, articles, and more
  • Manual: Edit theme.liquid — Add JSON-LD scripts in the <head> section of your theme

Next.js / React Implementation #

Use Next.js Script component or the metadata API:

import Script from 'next/script';

export default function Page() {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Article",
    headline: "Your Article Title",
    // ... other properties
  };

  return (
    <>
      <Script
        id="article-schema"
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify(jsonLd)
        }}
      />
      {/* page content */}
    </>
  );
}

Static HTML Implementation #

Simply paste the JSON-LD script tag into your HTML file's <head> section:

<!DOCTYPE html>
<html>
<head>
  <title>Your Page</title>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "name": "Your Company"
  }
  </script>
</head>
<body>
  <!-- page content -->
</body>
</html>

Step 5: Validate Your Implementation #

Step-by-step schema validation process showing Google Rich Results Test and Schema.org Validator

After adding schema to your pages, validate thoroughly:

  • 1Rich Results Test — Paste your URL into Google's Rich Results Test. Fix any errors or warnings.
  • 2Schema.org Validator — Verify compliance at validator.schema.org.
  • 3View Source — Check that the JSON-LD appears correctly in your page's HTML source.
  • 4JSON Syntax Check — Use jsonlint.com to validate raw JSON before embedding.
  • 5Test across pages — Validate at least one page of each type (homepage, blog post, product page).

Step 6: Monitor & Maintain #

  • Google Search Console — Check the Enhancements section weekly for new errors
  • Track rich result impressions — Monitor whether your rich results are appearing
  • Update schema when content changes — Keep dateModified, prices, hours, etc. current
  • Monitor AI search citations — Use GEO-Lens to track how AI engines use your schema
  • Audit schema quarterly — Review all structured data for accuracy, especially on high-traffic pages. See our AI Overviews optimization guide for AI-specific monitoring.

Common Implementation Issues #

IssueCauseFix
Schema not detectedJSON-LD not in rendered HTMLCheck if client-side rendering prevents crawling
Validation errorsMissing required propertiesAdd all required fields per Google docs
Rich results not showingGoogle needs time to processWait 2-4 weeks; request re-indexing
Duplicate schemaPlugin + manual implementationRemove one source; keep single implementation
Invalid JSON syntaxMissing commas, bracketsUse a JSON validator (jsonlint.com)

Advanced Implementation Tips #

  • Nest related schemas — Embed Author inside Article, Address inside LocalBusiness
  • Use @id for cross-referencing — Link schemas across pages using unique identifiers
  • Automate with templates — Create schema templates that pull from your CMS data
  • Combine multiple types — A page can have Article + FAQPage + BreadcrumbList schemas
  • Test in staging first — Validate schema on staging before deploying to production

Common Implementation Pitfalls #

  • Client-side rendering traps — If your schema is only rendered via JavaScript (React SPA without SSR), Googlebot may not see it. Always verify with the Rich Results Test "live URL" mode. Prefer SSR/SSG to ensure schema is in the initial HTML.
  • Plugin conflicts — CMS plugins and themes may both output schema, creating duplicate Organization or Article objects. Audit your rendered HTML to check for duplicates.
  • Schema drift — Schema added once and never updated becomes stale. Outdated dateModified, wrong prices, or old business hours hurt trust with both Google and AI engines.
  • Over-implementation — Adding every possible schema type to every page is counterproductive. Focus on the types most relevant to each page's content and purpose.
  • Copy-paste errors — A single missing comma or bracket in JSON-LD breaks the entire schema block. Always validate with jsonlint.com before deploying.

Conclusion: Empowering Your Content with Structured Data #

Schema markup implementation is a one-time investment that pays continuous dividends. Start with the essentials (Organization, Article, BreadcrumbList), validate rigorously, then expand to page-specific types like FAQPage, LocalBusiness, and Product. Whether you use CMS plugins, manual JSON-LD, or framework-specific approaches, the key is consistency: ensure your schema accurately reflects your content, stays updated, and is validated regularly. As AI search engines increasingly rely on structured data for content extraction and citation, well-implemented schema is your competitive advantage across every search platform. For the strategic framework behind AI-ready content, see our What Is GEO? guide.

Frequently Asked Questions #

Where should I place JSON-LD on my page?

Google recommends placing JSON-LD in the <head> section of your HTML, but it also works in the <body>. The <head> is preferred because it's processed first by crawlers and doesn't affect page rendering. In modern frameworks like Next.js, you can use dedicated components (like Next.js Script) that handle placement automatically.

Can I have multiple JSON-LD scripts on one page?

Yes. You can have multiple JSON-LD script tags on a single page, each containing different schema types. For example, a blog post might have separate scripts for Article, BreadcrumbList, and FAQPage schemas. Google processes all valid JSON-LD on the page.

Do I need coding skills to implement schema?

Not necessarily. WordPress plugins like Yoast and Rank Math allow you to add schema without writing code. However, understanding JSON-LD basics helps you troubleshoot issues and implement custom schema types that plugins may not support. For static sites or custom CMSs, basic HTML and JSON knowledge is required.

How do I implement schema on a single-page application (SPA)?

For SPAs built with React, Vue, or Angular, ensure your schema is included in the server-rendered HTML (SSR/SSG). Client-side-only rendering may prevent crawlers from seeing your schema. Use pre-rendering or SSR solutions, and test with Google's Rich Results Test using the "live URL" option to verify Googlebot can see your schema.

Monitor Your Schema Performance

GEO-Lens audits your structured data and tracks how AI search engines extract and cite your schema markup.

Try GEO-Lens Free