schema-markup
Skill723 starsChanged 5 months agoMITView on GitHub
Generate Schema.org structured data (JSON-LD) for any page type. Use when the user says "schema markup", "structured data", "JSON-LD", "rich snippets", "rich results", "FAQ schema", "product schema", "article schema", "breadcrumb schema", "organization schema", "how-to schema", "review schema", or asks about structured data for SEO.
We split this skill into the rules it gives an agent
18 rules. 0 are common, 14 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 54 edited versions we read keep these.
14
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 208
Must be visible on the page (not hidden behind tabs/accordions without proper implementation)
- Distinctive: line 210
Do not use for advertising purposes
- Distinctive: line 277
Do not use HowTo for recipes (use Recipe schema instead)
- Very specific: line 397
Use specific subtypes when possible: Restaurant, Dentist, LegalService, RealEstateAgent, etc.
- Distinctive: line 437
Must match the visible breadcrumb on the page
- Distinctive: line 532
When the user asks for schema markup:
- Distinctive: line 534
Determine page type: - Ask what kind of page this is for (or infer from context)
- Distinctive: line 535
Gather information: - Ask for or collect the required fields.
- Distinctive: line 537
Generate JSON-LD: - Create complete, valid markup
- Distinctive: line 538
Validate: - Check against Google's requirements for each type
- Distinctive: line 593
After generating the markup, remind the user to validate using:
- Distinctive: line 599
Do not add schema for content that is not visible on the page
- Very specific: line 600
Do not use Review schema for self-serving reviews of your own business
- Very specific: line 601
Do not markup content behind a paywall as isAccessibleForFree: true
- Distinctive: line 602
Do not use fake or placeholder data in production schema
- Very specific: line 603
Do not add AggregateRating without actual user reviews
- Distinctive: line 604
Always use absolute URLs, never relative
- Distinctive: line 605
Always use ISO 8601 date format
“Common” is measured: kept by at least 6 in 10 of the 54 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Schema Markup Generator Skill
You are an expert in Schema.org structured data and Google's rich results requirements. Generate valid, complete JSON-LD markup that maximizes eligibility for Google rich results.
Supported Schema Types
This skill supports the following schema types. When the user asks for schema, determine which type(s) are appropriate based on the page content.
1. Article / BlogPosting / NewsArticle
Use for: Blog posts, news articles, editorial content Rich result: Article carousel, headline in search
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article Title (max 110 characters)",
"description": "Brief description of the article (max 160 characters)",
"image": [
"https://example.com/image-16x9.jpg",
"https://example.com/image-4x3.jpg",
"https://example.com/image-1x1.jpg"
],
"datePublished": "2025-01-15T08:00:00+00:00",
"dateModified": "2025-01-20T10:30:00+00:00",
"author": [{
"@type": "Person",
"name": "Author Name",
"url": "https://example.com/author/name",
"jobTitle": "Senior Editor",
"sameAs": [
"https://twitter.com/authorhandle",
"https://linkedin.com/in/authorname"
]
}],
"publisher": {
"@type": "Organization",
"name": "Publisher Name",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 600,
"height": 60
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/article-url"
},
"wordCount": 2500,
"articleSection": "Technology",
"keywords": ["keyword1", "keyword2", "keyword3"],
"isAccessibleForFree": true
}Google requirements:
headlineis required (max 110 characters)imageis required (provide 3 aspect ratios: 16:9, 4:3, 1:1; each > 696px wide)datePublishedis required (ISO 8601 format)author.nameis required- For
NewsArticle, also adddatelineif applicable - For
BlogPosting,@typechanges to"BlogPosting"
2. Product
Use for: Product pages, e-commerce listings Rich result: Product snippet with price, availability, reviews
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product Name",
"description": "Product description",
"image": [
"https://example.com/product-1.jpg",
"https://example.com/product-2.jpg"
],
"sku": "SKU-12345",
"mpn": "MPN-67890",
"gtin13": "0123456789012",
"brand": {
"@type": "Brand",
"name": "Brand Name"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/product",
"priceCurrency": "USD",
"price": "99.99",
"priceValidUntil": "2025-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "Seller Name"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"bestRating": "5",
"ratingCount": "142"
},
"review": [{
"@type": "Review",
"author": {
"@type": "Person",
"name": "Reviewer Name"
},
"datePublished": "2025-01-10",
"reviewBody": "Review text here",
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
}
}]
}Google requirements:
nameis requiredoffers,review, oraggregateRating- at least one requiredoffers.priceandoffers.priceCurrencyrequired if offers presentoffers.availabilitymust use Schema.org enum values- As of 2024,
shippingDetailsandhasMerchantReturnPolicyare recommended for merchant listings
3. FAQPage
Use for: FAQ sections, Q&A pages Rich result: Expandable FAQ in search results
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is the first question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "<p>The answer with <strong>HTML formatting</strong> allowed. You can include <a href=\"https://example.com\">links</a>.</p>"
}
},
{
"@type": "Question",
"name": "What is the second question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Plain text answers also work."
}
}
]
}Google requirements:
- Each
Questionmust have exactly oneacceptedAnswer - Answer
textcan include HTML:<h2>through<h6>,<br>,<ol>,<ul>,<li>,<a>,<p>,<b>,<strong>,<i>,<em> - Must be visible on the page (not hidden behind tabs/accordions without proper implementation)
- Google may show up to 3 FAQ rich results per page
- Do not use for advertising purposes
4. HowTo
Use for: Tutorial pages, step-by-step guides, DIY instructions Rich result: Step-by-step display in search results
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Do Something",
"description": "Brief description of the task",
"image": {
"@type": "ImageObject",
"url": "https://example.com/howto-main.jpg",
"height": "406",
"width": "305"
},
"totalTime": "PT30M",
"estimatedCost": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": "20"
},
"supply": [
{
"@type": "HowToSupply",
"name": "Supply item 1"
},
{
"@type": "HowToSupply",
"name": "Supply item 2"
}
],
"tool": [
{
"@type": "HowToTool",
"name": "Tool 1"
}
],
"step": [
{
"@type": "HowToStep",
"name": "Step 1 Title",
"text": "Detailed instructions for step 1.",
"url": "https://example.com/howto#step1",
"image": "https://example.com/step1.jpg"
},
{
"@type": "HowToStep",
"name": "Step 2 Title",
"text": "Detailed instructions for step 2.",
"url": "https://example.com/howto#step2",
"image": "https://example.com/step2.jpg"
}
]
}Google requirements:
nameis requiredsteparray is required with at least one step- Each step needs either
textoritemListElementwithHowToDirection/HowToTip totalTimeuses ISO 8601 duration format (PT1H30M = 1 hour 30 minutes)- Do not use HowTo for recipes (use Recipe schema instead)
5. Organization
Use for: Homepage, about page, company information Rich result: Knowledge panel, logo in search
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Company Name",
"alternateName": "Company Abbreviation",
"url": "https://example.com",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 512,
"height": 512
},
"description": "Company description",
"foundingDate": "2020-01-01",
"founder": {
"@type": "Person",
"name": "Founder Name"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
},
"contactPoint": [{
"@type": "ContactPoint",
"telephone": "+1-555-555-5555",
"contactType": "customer service",
"areaServed": "US",
"availableLanguage": "English"
}],
"sameAs": [
"https://twitter.com/company",
"https://linkedin.com/company/company",
"https://facebook.com/company",
"https://github.com/company"
],
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 10,
"maxValue": 50
}
}6. LocalBusiness
Use for: Local business pages, Google Business Profile support Rich result: Local business panel, map results
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://example.com/#business",
"name": "Business Name",
"description": "Business description",
"url": "https://example.com",
"telephone": "+1-555-555-5555",
"email": "info@example.com",
"image": "https://example.com/storefront.jpg",
"logo": "https://example.com/logo.png",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "37.7749",
"longitude": "-122.4194"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "14:00"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"bestRating": "5",
"ratingCount": "312"
},
"areaServed": {
"@type": "City",
"name": "San Francisco"
},
"hasMap": "https://maps.google.com/?cid=123456789"
}Google requirements:
name,addressare required- Use specific subtypes when possible:
Restaurant,Dentist,LegalService,RealEstateAgent, etc. geocoordinates should be accurate to the business locationopeningHoursSpecificationmust reflect actual business hours
7. BreadcrumbList
Use for: Any page with breadcrumb navigation Rich result: Breadcrumb trail in search results
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Category",
"item": "https://example.com/category"
},
{
"@type": "ListItem",
"position": 3,
"name": "Current Page Title"
}
]
}Google requirements:
positionmust be sequential starting at 1- Last item should not have
item(it's the current page) - Must match the visible breadcrumb on the page
8. Review / AggregateRating
Use for: Review pages, product reviews, service reviews Rich result: Star rating in search results
{
"@context": "https://schema.org",
"@type": "Review",
"name": "Review Title",
"reviewBody": "Full review text...",
"datePublished": "2025-01-15",
"author": {
"@type": "Person",
"name": "Reviewer Name"
},
"itemReviewed": {
"@type": "Product",
"name": "Product Being Reviewed",
"image": "https://example.com/product.jpg"
},
"reviewRating": {
"@type": "Rating",
"ratingValue": "4",
"bestRating": "5",
"worstRating": "1"
},
"publisher": {
"@type": "Organization",
"name": "Review Site Name"
}
}Google requirements:
authoris required (must be a validPersonorOrganization)itemReviewedis requiredreviewRatingis recommended- Self-serving reviews (reviewing your own product) are against guidelines
Multi-Schema Pages
Most pages need multiple schema types. Combine them using @graph:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Company Name",
"url": "https://example.com",
"logo": "https://example.com/logo.png"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com",
"name": "Site Name",
"publisher": { "@id": "https://example.com/#organization" }
},
{
"@type": "WebPage",
"@id": "https://example.com/page/#webpage",
"url": "https://example.com/page/",
"name": "Page Title",
"isPartOf": { "@id": "https://example.com/#website" }
},
{
"@type": "Article",
"mainEntityOfPage": { "@id": "https://example.com/page/#webpage" },
"headline": "Article Title",
"author": { "@type": "Person", "name": "Author" },
"publisher": { "@id": "https://example.com/#organization" },
"datePublished": "2025-01-15"
},
{
"@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": "Article Title" }
]
}
]
}Generation Process
When the user asks for schema markup:
- Determine page type - Ask what kind of page this is for (or infer from context)
- Gather information - Ask for or collect the required fields. If the user provides a URL, fetch it to extract data.
- Select schema types - Choose all applicable schemas (most pages need 2-4 types)
- Generate JSON-LD - Create complete, valid markup
- Validate - Check against Google's requirements for each type
- Provide implementation instructions - Tell the user exactly where to place it
Implementation Instructions
For Next.js App Router:
// In your page component or layout
export default function Page() {
const jsonLd = {/* generated schema */};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
{/* page content */}
</>
);
}For Next.js with next/head (Pages Router):
import Head from 'next/head';
export default function Page() {
const jsonLd = {/* generated schema */};
return (
<>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</Head>
{/* page content */}
</>
);
}For plain HTML:
<head>
<script type="application/ld+json">
{/* generated schema */}
</script>
</head>Validation
After generating the markup, remind the user to validate using:
- Google Rich Results Test: https://search.google.com/test/rich-results
- Schema.org Validator: https://validator.schema.org/
Common Mistakes to Avoid
- Do not add schema for content that is not visible on the page
- Do not use
Reviewschema for self-serving reviews of your own business - Do not markup content behind a paywall as
isAccessibleForFree: true - Do not use fake or placeholder data in production schema
- Do not add
AggregateRatingwithout actual user reviews - Always use absolute URLs, never relative
- Always use ISO 8601 date format
priceValidUntilmust be a future dateavailabilitymust use full Schema.org URL (e.g.,https://schema.org/InStock)- Image URLs must be crawlable and indexable
Other versions55 projects use a version of this.
Word for word · 0
None found.
Edited · 3
- searchfit/searchfit-seo★ 914% same
- Samin12/skills★ 812% same
- silvainfm/claude-skills★ 212% same
Wrote their own version · 52
- TheCraigHewitt/seomachine★ 7.5ksame name
- LeoYeAI/openclaw-marketing-skills★ 1ksame name
- mysticaltech/marketingskills★ 352same name
- boraoztunc/skills★ 337same name
- textura-agency/next16-claude-starter★ 141same name
- b1rdmania/ghostclaw★ 91same name
- akii-technologies-ltd/akii-seo-ai-search-optimizer★ 78same name
- robertbstillwell/marketing-skills★ 26same name
- ukunal91app/Marketing-Skills-by-Corey-Haines★ 26same name
- Hassaan146/claude-skills★ 18same name
42 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use internal-link-audit, product-marketing-context and 9 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
semrushSkillinternal-link-audit
Audit internal linking to find orphan pages, broken internal links, crawl-depth problems, and weak anchor distribution, then plan the hub-and-spoke structure that fixes them. Use when the user asks about internal links, orphan pages, site architecture, crawl depth, or how to pass authority to priority pages.
Also in 3 projects that use this
xfstudioSkillproduct-marketing-context
When the user wants to create or update their product marketing context document. Also use when the user mentions 'product context,' 'marketing context,' 'set up context,' 'positioning,' or wants to avoid repeating foundational information across marketing tasks. Creates `.claude/product-marketing-context.md` that other marketing skills reference.
Also in 18 projects that use this
ukunal91appSkillrevops
When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes. Also use when the user mentions 'RevOps,' 'revenue operations,' 'lead scoring,' 'lead routing,' 'MQL,' 'SQL,' 'pipeline stages,' 'deal desk,' 'CRM automation,' 'marketing-to-sales handoff,' 'data hygiene,' 'leads aren't getting to sales,' 'pipeline management,' 'lead qualification,' or 'when should marketing hand off to sales.' Use this for anything involving the systems and processes that connect marketing to revenue. For cold outreach emails, see cold-email. For email drip campaigns, see email-sequence. For pricing decisions, see pricing-strategy.
Also in 14 projects that use this
VercelSkillsite-architecture
Use when planning or restructuring what pages a site has and how they connect: hierarchy, navigation, URL patterns, breadcrumbs, and internal linking. Not for XML sitemaps, which are in seo-audit.
Also in 16 projects that use this
ukunal91appSkillchurn-prevention
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers or wants to build systems to prevent it. For post-cancel win-back email sequences, see email-sequence. For in-app upgrade paywalls, see paywall-upgrade-cro.
Also in 14 projects that use this
alaraakcasizSkilltechnical-seo-audit
Technical and on-page SEO audit of any website — a client site, your own site, a competitor, or a staging build before a CMS migration. Use this skill whenever the user asks for an SEO audit, technical SEO audit, on-page audit, site health check, crawl analysis, or the SEO section of a broader digital marketing audit. Also trigger for migration/replatform work ("are we losing pages", "build a redirect map", "compare old site vs new site", Webflow to Framer, WordPress to Shopify, any CMS to any CMS), and whenever the user uploads Screaming Frog exports (internal_all.csv, image_details.csv, All Inlinks), a GSC Pages export, or a sitemap and wants them analysed. Covers indexability, canonicals, crawl directives, headings, titles and metas, alt text, schema markup, page speed, robots.txt, llms.txt, internal linking, page-inventory diffing and redirect mapping.
Also in 3 projects that use this
- +3 more from ukunal91app
In this repository77 other files it gives its agents.
- ab-test-setupSkill
- affiliate-marketingSkill
- ahrefs-pythonSkill
- ai-citations-reportSkill
- generate-imageSkill
- apollo-outreachSkill
- backlink-auditSkill
- blueskySkill
- brand-monitorSkill
- brand-devSkill
- competitor-analysisSkill
- competitor-traffic-reportSkill
- content-calendarSkill
- content-gap-analysisSkill
- content-repurposingSkill
- content-strategySkill
- copy-editingSkill
- copywritingSkill
- demand-genSkill
- discord-botSkill
- domain-researchSkill
- email-sequenceSkill
- email-subject-linesSkill
- facebook-adsSkill
- feishu-larkSkill
- geo-analysisSkill
- geo-difficultySkill
- geo-query-finderSkill
- github-starsSkill
- glasser-researchSkill
- google-ads-reportSkill
- google-adsSkill
- google-analyticsSkill
- google-reviewsSkill
- growth-strategySkill
- gsc-portfolio-auditSkill
- hubspotSkill
- i18nSkill
- icp-builderSkill
- keyword-researchSkill
- launch-strategySkill
- lead-magnetSkill
- linkedin-adsSkill
- linkedin-contentSkill
- marketing-ideasSkill
- marketing-slidesSkill
- newsletterSkill
- onboarding-croSkill
- organize-skillsSkill
- page-croSkill
- podcast-editSkill
- podcast-marketingSkill
- pricing-strategySkill
- product-marketingSkill
- programmatic-seoSkill
- publish-articleSkill
- reddit-marketingSkill
- referral-programSkill
- search-consoleSkill
- semrush-researchSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

