---
name: schema-markup-strategy
slug: schema-markup-strategy
description: This skill should be used when the user asks to "plan schema markup", "structured data strategy", "which schema to use", "schema markup plan", "implement structured data across the site", "schema strategy for SEO", "structured data for SaaS", "plan site-wide schema", or any variation of planning, designing, or implementing a comprehensive schema markup strategy for SEO and AEO across a B2B SaaS website.
category: general
---

# Schema Markup Strategy

Schema markup is structured data that tells search engines and AI engines what your content represents. It bridges the gap between human-readable content and machine-readable data. A comprehensive schema strategy improves rich results in Google, extraction accuracy in AI engines, and entity recognition across all search surfaces.

Most SaaS sites have no schema or only basic Article schema on blog posts. A full schema strategy covers every page type with the appropriate markup, creating a machine-readable layer over your entire site.

## The Schema Priority Matrix

Implement in this order for maximum impact:

| Priority | Schema type | Pages | SEO impact | AEO impact |
|----------|-----------|-------|-----------|-----------|
| 1 | Organization | Site-wide (every page) | Medium (knowledge panel) | Very high (entity identity) |
| 2 | FAQPage | Any page with Q&A section | High (FAQ rich results) | Very high (Q&A extraction) |
| 3 | Article | All blog posts, guides, comparison pages | Medium (author, date display) | High (recency signal) |
| 4 | HowTo | Tutorial and step-by-step pages | High (how-to rich results) | High (step extraction) |
| 5 | Product + Offer | Pricing page | Medium (pricing rich results) | High (pricing extraction) |
| 6 | SoftwareApplication | Product and feature pages | Medium | Medium (product recognition) |
| 7 | BreadcrumbList | All pages | Low (breadcrumb display) | Low |
| 8 | WebSite + SearchAction | Homepage | Low (sitelinks search box) | Low |

**Start with Organization + FAQPage.** These two schemas provide the highest combined SEO + AEO value and cover the most pages.

---

## Schema by Page Type

| Page type | Primary schema | Secondary schema | Required properties |
|-----------|---------------|-----------------|-------------------|
| Homepage | Organization | WebSite + SearchAction | name, url, logo, sameAs, description |
| Blog post | Article | FAQPage (if FAQ section exists) | headline, author, datePublished, dateModified, publisher |
| Comparison page | Article | FAQPage | Same as blog post + comparison content |
| How-to guide | HowTo | Article | name, step[], totalTime, description |
| Pricing page | Product + Offer | FAQPage | name, offers[]{price, priceCurrency}, description |
| Feature page | SoftwareApplication | FAQPage | name, operatingSystem, applicationCategory, offers |
| Glossary page | DefinedTermSet | FAQPage | name, description, hasPart[] |
| Case study | Article | Organization (customer) | headline, author, datePublished, about |
| Integration page | SoftwareApplication | HowTo | name, description, setup steps |
| Category page (pSEO) | CollectionPage | FAQPage | name, description, hasPart[] |

---

## Implementation Rules

### Format: JSON-LD only
- Always use `<script type="application/ld+json">` format
- Place in `<head>` section
- Never use Microdata or RDFa — JSON-LD is the industry standard and all engines parse it reliably
- One `<script>` block per schema type — multiple schemas get multiple blocks

### Required properties for every schema

| Property | Why | How |
|----------|-----|-----|
| `@context` | Validates the schema | Always `"https://schema.org"` |
| `@type` | Identifies what the content is | Match to page type |
| `name` or `headline` | Primary identifier | Use the page title |
| `description` | Summary for engines | 1-2 sentence extractable summary |
| `dateModified` | Recency signal (critical for AEO) | Update to actual last-edit date on every edit |
| `url` | Canonical page URL | Use the canonical URL |

### Author and publisher (Article schema)

```json
"author": {
  "@type": "Person",
  "name": "Jane Kim",
  "url": "https://example.com/team/jane-kim",
  "jobTitle": "Head of Content"
},
"publisher": {
  "@type": "Organization",
  "name": "Acme",
  "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
}
```

**Rules:**
- Use real author names with verifiable profile URLs
- Never use "Admin" or "Team" as author
- Publisher should match your Organization schema `name` exactly
- Include `jobTitle` to strengthen author expertise signals

### Organization schema (site-wide)

```json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme",
  "url": "https://acme.com",
  "logo": "https://acme.com/logo.png",
  "description": "Acme is a revenue intelligence platform for B2B sales teams.",
  "sameAs": [
    "https://linkedin.com/company/acme",
    "https://twitter.com/acme",
    "https://github.com/acme"
  ],
  "foundingDate": "2020",
  "numberOfEmployees": { "@type": "QuantitativeValue", "value": 150 }
}
```

**Deploy on every page.** This is your entity identity signal for AI engines.

---

## Validation and Testing Process

### Before publishing

| Step | Tool | What to check |
|------|------|---------------|
| 1. Validate JSON syntax | jsonlint.com or VS Code | No trailing commas, valid JSON |
| 2. Validate schema structure | Google Rich Results Test | All required properties present, no errors |
| 3. Test schema-content match | Manual review | Schema text matches visible page content exactly |
| 4. Check for conflicts | Google Rich Results Test | No conflicting schemas on the same page |

### After publishing

| Check | Tool | Frequency |
|-------|------|-----------|
| Rich results appearing | GSC → Enhancements | 1-2 weeks after publish |
| Schema errors | GSC → Enhancements → Issues | Weekly |
| Rich result CTR | GSC → Performance → Search Appearance | Monthly |
| AI extraction accuracy | Manual test in ChatGPT/Perplexity | Monthly |

---

## Rollout Plan for a New Site

| Week | Action | Pages affected |
|------|--------|---------------|
| 1 | Deploy Organization schema site-wide | All pages |
| 1 | Add Article schema to top 20 blog posts/guides | 20 pages |
| 2 | Add FAQPage schema to all pages with FAQ sections | 10-30 pages |
| 2 | Add HowTo schema to tutorial pages | 5-15 pages |
| 3 | Add Product + Offer schema to pricing page | 1 page |
| 3 | Add SoftwareApplication to product/feature pages | 3-10 pages |
| 4 | Add BreadcrumbList site-wide | All pages |
| 4 | Validate all schemas and fix errors | All pages |

---

## Pre-Implementation Checklist

- [ ] Page type inventory completed (how many of each page type exist?)
- [ ] Schema priority matrix reviewed and implementation order set
- [ ] Organization schema drafted with consistent brand name and sameAs links
- [ ] Author profiles created with names, URLs, and credentials
- [ ] JSON-LD templates built for each schema type
- [ ] Validation tools bookmarked (Google Rich Results Test, jsonlint)
- [ ] `dateModified` update process defined (who updates, when)
- [ ] Schema-content match review process defined
- [ ] GSC Enhancements monitoring set up
- [ ] Rollout schedule set with weekly milestones

---

## Anti-Pattern Check

- No schema on any page → Start with Organization (site-wide) and FAQPage (any page with Q&A). These two schemas take 2-3 hours total to implement across the site and have the highest combined impact
- Same Article schema on every page → Different page types need different schemas. A pricing page needs Product + Offer, not Article. A tutorial needs HowTo, not just Article. Match schema to page type
- Schema text doesn't match page content → Google penalizes schema-content mismatches. If the schema says "Starting at $29/month" but the page says "$49/month," both SEO and AEO suffer. Always sync
- `dateModified` never updated → This is the most important AEO schema property. Update it on every edit. A stale `dateModified` tells AI engines the content is old — even if it's been updated
- Using Microdata instead of JSON-LD → JSON-LD is the standard all engines parse reliably. Microdata is harder to maintain and less consistently supported. Convert everything to JSON-LD
- Never validating after deployment → Schema errors are silent — you won't know they exist until you check. Validate with Google Rich Results Test before publishing. Check GSC Enhancements weekly for errors