Seo structured data
Skill mvstepanek/nextjs-ecommerce-seo-skills/global-skills/seo-structured-data
Schema.org structured data rules for JSON-LD markup in Next.js. Use when adding or modifying structured data, product schemas, breadcrumbs, or FAQ markup.From its SKILL.md
npx -y skills add mvstepanek/nextjs-ecommerce-seo-skills --skill seo-structured-dataAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.7 KB, 871 tokens by cl100k_base, as published. Nobody here has run it
Structured Data (JSON-LD) Guidelines
Follow these rules when implementing schema.org structured data.
General Rules
- Always use JSON-LD — Google's preferred format (not Microdata or RDFa)
- Render server-side — ensure JSON-LD is in the initial HTML (Server Components in App Router, or rendered in the page component with SSR in Pages Router)
- Validate — test with Google Rich Results Test before deploying
- Prefer one script tag per page — use
@graphto combine multiple schemas. Multiple tags are valid but harder to maintain. - Data must match visible content — Google penalizes mismatches
Implementation Pattern
export function JsonLd({ data }: { data: Record<string, unknown> }) {
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}
/>
);
}
Common Schema Types
Product (e-commerce pages)
{
"@type": "Product",
name: product.name,
description: product.description,
sku: product.sku,
brand: { "@type": "Brand", name: siteConfig.brandName },
image: product.images,
offers: {
"@type": "Offer",
price: product.price,
priceCurrency: getCurrencyForLocale(locale),
availability: "https://schema.org/InStock", // or OutOfStock, PreOrder
seller: { "@type": "Organization", name: siteConfig.brandName },
}
}
Required for rich results: name, image, offers.price, offers.priceCurrency, offers.availability.
BreadcrumbList
{
"@type": "BreadcrumbList",
itemListElement: [
{ "@type": "ListItem", position: 1, name: "Home", item: `${siteConfig.url}/` },
{ "@type": "ListItem", position: 2, name: "Category", item: `${siteConfig.url}/category` },
{ "@type": "ListItem", position: 3, name: "Current Page" }, // No item URL for current page
]
}
FAQPage
Note: Since August 2023, Google has progressively restricted FAQ rich results to a small number of well-known, authoritative government and health websites. For e-commerce sites, FAQ schema provides essentially zero value from Google. Other search engines (Bing) may still use it, but the ROI is minimal. Skip FAQ schema on e-commerce sites unless you have a specific non-Google reason.
{
"@type": "FAQPage",
mainEntity: [
{ "@type": "Question", name: "Q text", acceptedAnswer: { "@type": "Answer", text: "A text" } },
]
}
Only add FAQ schema on pages with visible Q&A content. Min 2 questions. Implementation is optional given the restricted eligibility above.
WebSite (with Search)
{
"@type": "WebSite",
name: siteConfig.brandName,
url: siteConfig.url,
potentialAction: {
"@type": "SearchAction",
target: { "@type": "EntryPoint", urlTemplate: `${siteConfig.url}/search?q={query}` },
"query-input": "required name=query"
}
}
Combining Schemas
Use @graph when a page has multiple schema types:
<JsonLd data={{
"@context": "https://schema.org",
"@graph": [productSchema, breadcrumbSchema]
}} />
Common Mistakes
- Missing price/availability on Product — prevents rich results
- FAQ schema without visible FAQ — Google considers this spam
- Breadcrumbs don't match visible UI — must be identical
- Multiple script tags — prefer
@graphto keep structured data organized (multiple tags are valid but harder to maintain) - Relative URLs in schema — always use absolute URLs
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most marketing audience skills give in 871 tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- use JSON-LD
- render structured data server-side
- validate with Google Rich Results Test before deploying
- use one script tag per page
- use @graph to combine multiple schemas
- match structured data to visible content
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.