.cursor/skills/structured-data-generator/SKILL.md
Generate JSON-LD schema markup for GEO optimization. Use when creating structured data for articles, products, FAQs, how-to guides, organizations, and other content types to improve AI search visibility and rich results.
npx skillsauth add ihmissuti/kimmoihanus-nextjs-site structured-data-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate JSON-LD schema markup to help AI search engines understand and cite your content correctly.
Structured data helps AI systems:
Key statistics:
Use for: Blog posts, news articles, guides, tutorials
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Complete Guide to Generative Engine Optimization",
"description": "Learn how to optimize content for AI search engines like ChatGPT, Perplexity, and Google AI Mode.",
"image": "https://example.com/images/geo-guide.jpg",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://example.com/authors/author-name",
"jobTitle": "Content Strategist"
},
"publisher": {
"@type": "Organization",
"name": "Company Name",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png",
"width": 600,
"height": 60
}
},
"datePublished": "2026-01-15T08:00:00+00:00",
"dateModified": "2026-01-30T10:30:00+00:00",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/geo-guide"
},
"keywords": ["GEO", "AI Search", "Content Optimization"],
"articleSection": "Marketing",
"wordCount": 2500
}
Required properties:
headline - Article titleauthor - Author informationdatePublished - Original publish datepublisher - Publishing organizationRecommended properties:
dateModified - Last update date (critical for AI freshness signals)description - Article summaryimage - Featured imagekeywords - Relevant termsUse for: FAQ sections, Q&A pages, help documentation
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is Generative Engine Optimization (GEO)?",
"acceptedAnswer": {
"@type": "Answer",
"text": "GEO (Generative Engine Optimization) is the practice of optimizing content to be discovered, understood, and cited by AI search engines like ChatGPT, Perplexity, and Google AI Mode. It builds on traditional SEO by focusing on brand visibility, citation rate, and AI share of voice."
}
},
{
"@type": "Question",
"name": "How does GEO differ from traditional SEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "While SEO focuses on ranking in search results and driving clicks, GEO focuses on being mentioned and cited inside AI-generated answers. GEO success is measured by brand visibility percentage, citation frequency, and share of voice in AI responses."
}
},
{
"@type": "Question",
"name": "How often should content be updated for GEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "High-value pages should be refreshed every 60-90 days to maintain freshness signals. Update statistics, examples, and dates. AI engines prioritize recently updated content when generating answers."
}
}
]
}
Required properties:
mainEntity - Array of Question objectsname and acceptedAnswerBest practices:
Use for: Tutorials, step-by-step guides, processes
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Create an llms.txt File for AI Search",
"description": "Step-by-step guide to creating an llms.txt file that helps AI crawlers discover and understand your content.",
"image": "https://example.com/images/llms-txt-guide.jpg",
"totalTime": "PT15M",
"estimatedCost": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": "0"
},
"supply": [
{
"@type": "HowToSupply",
"name": "Text editor"
},
{
"@type": "HowToSupply",
"name": "Web hosting access"
}
],
"tool": [
{
"@type": "HowToTool",
"name": "Code editor (VS Code, Cursor)"
}
],
"step": [
{
"@type": "HowToStep",
"name": "Audit your content",
"text": "Identify your most important pages: documentation, pricing, policies, and key product pages.",
"url": "https://example.com/llms-txt-guide#step1",
"image": "https://example.com/images/step1.jpg"
},
{
"@type": "HowToStep",
"name": "Create the file structure",
"text": "Create a new file named llms.txt at your domain root. Start with your brand name as H1 and a blockquote description.",
"url": "https://example.com/llms-txt-guide#step2"
},
{
"@type": "HowToStep",
"name": "Add content sections",
"text": "Organize links into sections like Docs, Product, Support, and Optional. Include brief descriptions for each link.",
"url": "https://example.com/llms-txt-guide#step3"
},
{
"@type": "HowToStep",
"name": "Deploy and test",
"text": "Upload the file and verify it's accessible at https://yourdomain.com/llms.txt. Test by asking AI assistants about your product.",
"url": "https://example.com/llms-txt-guide#step4"
}
]
}
Required properties:
name - Title of the how-tostep - Array of HowToStep objectsUse for: Product pages, SaaS offerings, e-commerce
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Analytics Platform Pro",
"description": "Business intelligence platform that helps companies track, visualize, and act on their data in real-time.",
"image": "https://example.com/images/product.jpg",
"brand": {
"@type": "Brand",
"name": "Acme Analytics"
},
"offers": {
"@type": "AggregateOffer",
"lowPrice": "99",
"highPrice": "499",
"priceCurrency": "USD",
"offerCount": "3",
"offers": [
{
"@type": "Offer",
"name": "Starter",
"price": "99",
"priceCurrency": "USD",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "Professional",
"price": "299",
"priceCurrency": "USD",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "Enterprise",
"price": "499",
"priceCurrency": "USD",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock"
}
]
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "127"
}
}
Use for: Company pages, about pages, homepage
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Acme Analytics",
"alternateName": "Acme",
"url": "https://acme.com",
"logo": "https://acme.com/logo.png",
"description": "Business intelligence platform for enterprises and growing companies.",
"foundingDate": "2020",
"founders": [
{
"@type": "Person",
"name": "Jane Smith"
}
],
"address": {
"@type": "PostalAddress",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"addressCountry": "US"
},
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"url": "https://acme.com/contact",
"email": "[email protected]"
},
"sameAs": ["https://www.linkedin.com/company/acme", "https://twitter.com/acme", "https://github.com/acme"]
}
Use for: Author pages, team member pages, expert profiles
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Jane Smith",
"jobTitle": "Head of Content Strategy",
"url": "https://example.com/team/jane-smith",
"image": "https://example.com/images/jane-smith.jpg",
"description": "Jane is a content strategist with 10+ years of experience in SEO and GEO optimization.",
"worksFor": {
"@type": "Organization",
"name": "Acme Analytics"
},
"sameAs": ["https://www.linkedin.com/in/janesmith", "https://twitter.com/janesmith"],
"knowsAbout": ["GEO", "SEO", "Content Strategy", "AI Search"]
}
Use for: Navigation paths on any page
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Articles",
"item": "https://example.com/articles"
},
{
"@type": "ListItem",
"position": 3,
"name": "GEO Guide",
"item": "https://example.com/articles/geo-guide"
}
]
}
Use for: Service offerings, consulting, agencies
{
"@context": "https://schema.org",
"@type": "Service",
"name": "GEO Optimization Consulting",
"description": "Expert consulting services to improve your brand's visibility in AI search engines.",
"provider": {
"@type": "Organization",
"name": "Acme Consulting"
},
"serviceType": "Marketing Consulting",
"areaServed": {
"@type": "Country",
"name": "United States"
},
"offers": {
"@type": "Offer",
"price": "5000",
"priceCurrency": "USD",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "5000",
"priceCurrency": "USD",
"unitText": "engagement"
}
}
}
Place JSON-LD in the <head> section:
<head>
<title>Page Title</title>
<meta name="description" content="..." />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article Title",
...
}
</script>
</head>
You can include multiple schema types on one page using @graph:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"name": "Company Name",
"@id": "https://example.com/#organization"
},
{
"@type": "WebPage",
"name": "Page Title",
"isPartOf": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "Article",
"headline": "Article Title",
"author": {
"@type": "Person",
"name": "Author Name"
}
}
]
}
| Content Type | Schema | Key Properties | | ------------ | -------------- | --------------------------------------------- | | Blog/Article | Article | headline, author, datePublished, dateModified | | FAQ | FAQPage | mainEntity (Questions with Answers) | | Tutorial | HowTo | name, step (HowToSteps) | | Product | Product | name, offers, brand | | Company | Organization | name, url, logo, description | | Navigation | BreadcrumbList | itemListElement (ListItems) | | Person | Person | name, jobTitle, url | | Service | Service | name, provider, description |
Before deploying schema markup:
// components/ArticleSchema.tsx
export function ArticleSchema({ article }) {
const schema = {
'@context': 'https://schema.org',
'@type': 'Article',
headline: article.title,
description: article.description,
author: {
'@type': 'Person',
name: article.author.name,
url: article.author.url,
},
datePublished: article.publishedAt,
dateModified: article.updatedAt,
publisher: {
'@type': 'Organization',
name: 'Your Company',
logo: {
'@type': 'ImageObject',
url: 'https://yoursite.com/logo.png',
},
},
};
return <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }} />;
}
Usage in page:
export default function ArticlePage({ article }) {
return (
<>
<Head>
<title>{article.title}</title>
<ArticleSchema article={article} />
</Head>
<article>{/* Article content */}</article>
</>
);
}
data-ai
Generate and optimize Schema.org structured data for AI/LLM visibility. Use when adding schema markup, improving structured data, or optimizing for rich results and AI search engines.
development
Audit websites for AI search visibility and Generative Engine Optimization (GEO). Use when auditing a website for LLM/AI search presence, checking how ChatGPT or Perplexity see a brand, or optimizing content for AI recommendations.
tools
Score developer tools and SaaS products for AI agent compatibility. Use when evaluating how well a devtool works with AI coding assistants, or when optimizing a product for the agent era.
development
Next.js development conventions and patterns for kimmoihanus.com. Use when working on pages, components, or API routes in this project.