Back to Seo

schema-markup

schemastructured dataJSON-LDrich snippetsSEOGoogle Search Consoleweb developmentmarkup
33.6k📄 MIT🕒 2026-06-15Source ↗

Install this skill

npx skills add coreyhaines31/marketingskills

Works across Claude Code, Cursor, Codex, Copilot & Antigravity

Schema markup provides search engines with precise definitions of your content using the schema.org vocabulary. By embedding JSON-LD snippets directly into your HTML, you transform raw text into machine-readable data structures. This helps search algorithms index your site more effectively and creates opportunities for rich snippets, such as star ratings, product availability, or search bars, to appear directly in search results. This skill focuses on generating clean, syntactically correct JSON-LD that complies with specific guidelines from major search engines. By mapping page elements like author, price, or software specifications to standard properties, you move beyond simple keyword indexing. The process involves identifying the correct entity types for your content, writing the corresponding objects, and validating the final output against search engine requirements to ensure technical compliance and visibility.

When to Use This Skill

  • Injecting product data into e-commerce pages for price and rating displays
  • Defining software details on SaaS landing pages to support app-specific snippets
  • Structuring FAQ sections for immediate visual expansion in search results
  • Communicating entity identity for corporate homepages through Organization schema

How to Invoke This Skill

Example prompts that trigger this skill in Claude Code, Cursor, or Antigravity:

  • Generate JSON-LD for this product page
  • Help me write schema markup for a blog post
  • Create a FAQPage schema block based on this content
  • Check if this schema markup follows Google guidelines
  • Define the correct organization schema for my company site

Pro Tips

  • 💡Always test your JSON-LD schema with Google's Rich Results Test tool before deployment to catch errors and confirm eligibility.
  • 💡Prioritize implementing schema types that are most relevant to your core business goals and page content, focusing on high-impact rich results.
  • 💡Regularly monitor your schema performance and error reports in Google Search Console's Enhancements section for continuous optimization opportunities.

What this skill does

  • Generates valid JSON-LD objects for diverse entity types
  • Maps HTML content to standardized schema.org properties
  • Configures rich result signals for search engines
  • Constructs nested objects for complex data relationships
  • Validates markup syntax against industry standards

When not to use it

  • When the content on the page does not match the markup data
  • For content that is intentionally hidden from user view
  • When attempting to influence search rankings via spam or keyword stuffing

Example workflow

  1. Identify the entity type that fits the page content
  2. Select required and recommended fields from official documentation
  3. Draft the JSON-LD snippet matching the current page information
  4. Inject the script into the document head or footer
  5. Run the code through a structured data testing tool
  6. Monitor performance metrics in Search Console

Prerequisites

  • Access to the website source code or injection tool
  • Specific details regarding product prices or page metadata

Pitfalls & limitations

  • !Data mismatch where schema claims attributes not visible to the human reader
  • !Invalid syntax or malformed JSON preventing search engine parsing
  • !Over-markup leading to potential manual actions or penalties
  • !Failure to update schema when content values like prices change

FAQ

Should I use microdata or JSON-LD?
JSON-LD is the format recommended by Google because it is easier to implement and manage without modifying existing HTML structures.
Will schema markup guarantee rich results?
Schema provides the technical eligibility for rich results, but search engines still determine whether to display them based on ranking and quality signals.
Where should I place the schema code?
Place your JSON-LD script block within the <head> section or at the end of the <body> for best results.

How it compares

While manual coding is prone to syntax errors, this skill automates the object structure, ensuring you follow strict schema.org hierarchies that generic LLM prompts often ignore.

Source & trust

34k stars📄 MIT🕒 Updated 2026-06-15
📄 Full skill instructions — original source: coreyhaines31/marketingskills
# Schema Markup

You are an expert in structured data and schema markup. Your goal is to implement schema.org markup that helps search engines understand content and enables rich results in search.

## Initial Assessment

Before implementing schema, understand:

1. **Page Type**
- What kind of page is this?
- What's the primary content?
- What rich results are possible?

2. **Current State**
- Any existing schema?
- Errors in current implementation?
- Which rich results are already appearing?

3. **Goals**
- Which rich results are you targeting?
- What's the business value?

---

## Core Principles

### 1. Accuracy First
- Schema must accurately represent page content
- Don't markup content that doesn't exist
- Keep updated when content changes

### 2. Use JSON-LD
- Google recommends JSON-LD format
- Easier to implement and maintain
- Place in <head> or end of <body>

### 3. Follow Google's Guidelines
- Only use markup Google supports
- Avoid spam tactics
- Review eligibility requirements

### 4. Validate Everything
- Test before deploying
- Monitor Search Console
- Fix errors promptly

---

## Common Schema Types

### Organization
**Use for**: Company/brand homepage or about page

**Required properties**:
- name
- url

**Recommended properties**:
- logo
- sameAs (social profiles)
- contactPoint

{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Company",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://twitter.com/example",
"https://linkedin.com/company/example",
"https://facebook.com/example"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-555-555-5555",
"contactType": "customer service"
}
}


### WebSite (with SearchAction)
**Use for**: Homepage, enables sitelinks search box

**Required properties**:
- name
- url

**For search box**:
- potentialAction with SearchAction

{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Example",
"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"
}
}


### Article / BlogPosting
**Use for**: Blog posts, news articles

**Required properties**:
- headline
- image
- datePublished
- author

**Recommended properties**:
- dateModified
- publisher
- description
- mainEntityOfPage

{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Implement Schema Markup",
"image": "https://example.com/image.jpg",
"datePublished": "2024-01-15T08:00:00+00:00",
"dateModified": "2024-01-20T10:00:00+00:00",
"author": {
"@type": "Person",
"name": "Jane Doe",
"url": "https://example.com/authors/jane"
},
"publisher": {
"@type": "Organization",
"name": "Example Company",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "A complete guide to implementing schema markup...",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/schema-guide"
}
}


### Product
**Use for**: Product pages (e-commerce or SaaS)

**Required properties**:
- name
- image
- offers (with price and availability)

**Recommended properties**:
- description
- sku
- brand
- aggregateRating
- review

{
"@context": "https://schema.org",
"@type": "Product",
"name": "Premium Widget",
"image": "https://example.com/widget.jpg",
"description": "Our best-selling widget for professionals",
"sku": "WIDGET-001",
"brand": {
"@type": "Brand",
"name": "Example Co"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/widget",
"priceCurrency": "USD",
"price": "99.99",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2024-12-31"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "127"
}
}


### SoftwareApplication
**Use for**: SaaS product pages, app landing pages

**Required properties**:
- name
- offers (or free indicator)

**Recommended properties**:
- applicationCategory
- operatingSystem
- aggregateRating

{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Example App",
"applicationCategory": "BusinessApplication",
"operatingSystem": "Web, iOS, Android",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"ratingCount": "1250"
}
}


### FAQPage
**Use for**: Pages with frequently asked questions

**Required properties**:
- mainEntity (array of Question/Answer)

{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is schema markup?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Schema markup is a structured data vocabulary that helps search engines understand your content..."
}
},
{
"@type": "Question",
"name": "How do I implement schema?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The recommended approach is to use JSON-LD format, placing the script in your page's head..."
}
}
]
}


### HowTo
**Use for**: Instructional content, tutorials

**Required properties**:
- name
- step (array of HowToStep)

**Recommended properties**:
- image
- totalTime
- estimatedCost
- supply/tool

{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Add Schema Markup to Your Website",
"description": "A step-by-step guide to implementing JSON-LD schema",
"totalTime": "PT15M",
"step": [
{
"@type": "HowToStep",
"name": "Choose your schema type",
"text": "Identify the appropriate schema type for your page content...",
"url": "https://example.com/guide#step1"
},
{
"@type": "HowToStep",
"name": "Write the JSON-LD",
"text": "Create the JSON-LD markup following schema.org specifications...",
"url": "https://example.com/guide#step2"
},
{
"@type": "HowToStep",
"name": "Add to your page",
"text": "Insert the script tag in your page's head section...",
"url": "https://example.com/guide#step3"
}
]
}


### BreadcrumbList
**Use for**: Any page with breadcrumb navigation

{
"@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 Guide",
"item": "https://example.com/blog/seo-guide"
}
]
}


### LocalBusiness
**Use for**: Local business location pages

**Required properties**:
- name
- address
- (Various by business type)

{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Example Coffee Shop",
"image": "https://example.com/shop.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "37.7749",
"longitude": "-122.4194"
},
"telephone": "+1-555-555-5555",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
}
],
"priceRange": "$$"
}


### Review / AggregateRating
**Use for**: Review pages or products with reviews

Note: Self-serving reviews (reviewing your own product) are against guidelines. Reviews must be from real customers.

{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Product",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"bestRating": "5",
"worstRating": "1",
"ratingCount": "523"
},
"review": [
{
"@type": "Review",
"author": {
"@type": "Person",
"name": "John Smith"
},
"datePublished": "2024-01-10",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5"
},
"reviewBody": "Excellent product, exceeded my expectations..."
}
]
}


### Event
**Use for**: Event pages, webinars, conferences

**Required properties**:
- name
- startDate
- location (or eventAttendanceMode for online)

{
"@context": "https://schema.org",
"@type": "Event",
"name": "Annual Marketing Conference",
"startDate": "2024-06-15T09:00:00-07:00",
"endDate": "2024-06-15T17:00:00-07:00",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/conference"
},
"image": "https://example.com/conference.jpg",
"description": "Join us for our annual marketing conference...",
"offers": {
"@type": "Offer",
"url": "https://example.com/conference/tickets",
"price": "199",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2024-01-01"
},
"performer": {
"@type": "Organization",
"name": "Example Company"
},
"organizer": {
"@type": "Organization",
"name": "Example Company",
"url": "https://example.com"
}
}


---

## Multiple Schema Types on One Page

You can (and often should) have multiple schema types:

{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example Company",
"url": "https://example.com"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com",
"name": "Example",
"publisher": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [...]
}
]
}


---

## Validation and Testing

### Tools
- **Google Rich Results Test**: https://search.google.com/test/rich-results
- **Schema.org Validator**: https://validator.schema.org/
- **Search Console**: Enhancements reports

### Common Errors

**Missing required properties**
- Check Google's documentation for required fields
- Different from schema.org minimum requirements

**Invalid values**
- Dates must be ISO 8601 format
- URLs must be fully qualified
- Enumerations must use exact values

**Mismatch with page content**
- Schema doesn't match visible content
- Ratings for products without reviews shown
- Prices that don't match displayed prices

---

## Implementation Patterns

### Static Sites
- Add JSON-LD directly in HTML template
- Use includes/partials for reusable schema

### Dynamic Sites (React, Next.js, etc.)
- Component that renders schema
- Server-side rendered for SEO
- Serialize data to JSON-LD

// Next.js example
export default function ProductPage({ product }) {
const schema = {
"@context": "https://schema.org",
"@type": "Product",
name: product.name,
// ... other properties
};

return (
<>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
</Head>
{/* Page content */}
</>
);
}


### CMS / WordPress
- Plugins (Yoast, Rank Math, Schema Pro)
- Theme modifications
- Custom fields to structured data

---

## Output Format

### Schema Implementation
// Full JSON-LD code block
{
"@context": "https://schema.org",
"@type": "...",
// Complete markup
}


### Placement Instructions
Where to add the code and how

### Testing Checklist
- [ ] Validates in Rich Results Test
- [ ] No errors or warnings
- [ ] Matches page content
- [ ] All required properties included

---

## Questions to Ask

If you need more context:
1. What type of page is this?
2. What rich results are you hoping to achieve?
3. What data is available to populate the schema?
4. Is there existing schema on the page?
5. What's your tech stack for implementation?

---

## Related Skills

- **seo-audit**: For overall SEO including schema review
- **programmatic-seo**: For templated schema at scale
- **analytics-tracking**: For measuring rich result impact

How to Use This Skill Unit

Option A: Project-Specific (Recommended)

  1. Click "Download" above
  2. In your project, create the directory: .agent/skills/schema-markup/
  3. Save the file as SKILL.md
  4. The agent will automatically discover the skill based on its description.

Option B: Global Installation (All Agents)

Save the file to these locations to make it available across all projects:

  • Claude Code: ~/.claude/skills/coreyhaines31/marketingskills/schema-markup/SKILL.md
  • Cursor: ~/.cursor/skills/coreyhaines31/marketingskills/schema-markup/SKILL.md
  • Antigravity: ~/.gemini/antigravity/skills/coreyhaines31/marketingskills/schema-markup/SKILL.md

🚀 Install with CLI:
npx skills add coreyhaines31/marketingskills

Read the Master Guide: Mastering Agent Skills

Related Skill Units

Recommended Rules

View more rules

Recommended Workflows

View more workflows

Recommended MCP Servers

View more MCP servers

Take It Further

Maximize your productivity with these powerful resources

📋

Define Your Standards

Set up coding standards to ensure this workflow produces consistent, high-quality results.

Browse Rules Library
📖

Master Workflows

Learn how to create custom workflows, use Turbo Mode, and build your automation library.

Complete Guide

How to use this Skill in Claude Code & Cursor

For Claude Code (CLI)

To use this skill in Claude Code, copy the rule content into your project's custom instructions or follow our Add-Skill CLI guide. This ensures Claude follows your standards during every code generation.

For Cursor & Windsurf

For Cursor or Windsurf, individual skills are best used in the "Rules for AI" section. This specific unit helps the agent avoid seo issues, leading to cleaner, more efficient code.

Why the skill format matters: the standardized Agent Skills format lets your AI agent load detailed instructions only when they are relevant, keeping your prompt clean while improving results.

Source & attribution

This skill is categorized under Seo and is published by Corey Haines, maintained in coreyhaines31/marketingskills.

← Browse All Agent Skills
Sponsored AI assistant. Recommendations may be paid.