Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Validates existing JSON-LD structured data and suggests relevant schemas based on auto-detected page type. Does NOT enforce all schema types — only checks what is applicable to the current page context. Use when auditing or generating structured data for search engine rich results.
.claude/skills/thisisahsaniqbal-schema-json-optimization/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-09 | ✓→✓ | = Same ✓ | -7% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 51% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 6% | 0% |
Validate existing JSON-LD and suggest only relevant schemas based on the detected page type.
> Important: Do NOT blindly check for all schema types. First detect what kind of page this is, then only validate/suggest schemas that are applicable.
Look for all <script type="application/ld+json"> elements:
@context → ❌ FAIL@type → ❌ FAILScan the HTML for signals to determine what type of page this is. A page may match zero, one, or multiple types:
| Page type | Detection signals | |---|---| | Article / Blog | <meta property="article:published_time">, <article> tag, blog-like URL patterns (/blog/, /post/, /news/) | | LocalBusiness | <address> tag, <a href="tel:...">, [itemprop="telephone"], [itemprop="address"], contact page patterns | | Product | <meta property="og:type" content="product">, price elements ([itemprop="price"]), add-to-cart buttons | | FAQ | Multiple <details>/<summary> or FAQ-patterned heading + paragraph pairs | | Organization | About page with company info, <meta property="og:type" content="website"> on homepage | | BreadcrumbList | <nav aria-label="breadcrumb">, .breadcrumb class, <ol> with breadcrumb-like links | | WebSite | Homepage with site-wide search form |
If no type is detected → only validate existing schemas, do not suggest new ones.
Check existing Article schema for:
| Field | Missing = | |---|---| | headline | ⚠️ WARN | | datePublished | ⚠️ WARN | | author | ⚠️ WARN | | image | ⚠️ WARN | | description | ⚠️ WARN |
If no Article schema exists, suggest generating one:
json{ "@context": "https://schema.org", "@type": "Article", "headline": "[from og:title, <title>, or <h1>]", "datePublished": "[from article:published_time or <time datetime>]", "author": { "@type": "Person", "name": "[from meta author]" }, "image": "[from og:image or first article img]", "description": "[from meta description]", "url": "[from canonical or og:url]" }
Check for:
| Field | Missing = | |---|---| | name | ❌ FAIL | | address | ⚠️ WARN | | telephone | ⚠️ WARN |
If no LocalBusiness schema exists, suggest generating one:
json{ "@context": "https://schema.org", "@type": "LocalBusiness", "name": "[from og:site_name or <title>]", "address": "[from <address> or itemprop=address]", "telephone": "[from itemprop=telephone or tel: link]", "url": "[from canonical or og:url]", "image": "[from og:image]" }
Check for:
| Field | Missing = | |---|---| | name | ❌ FAIL | | offers (with price and priceCurrency) | ⚠️ WARN | | image | ⚠️ WARN | | description | ⚠️ WARN |
Suggest FAQPage schema with Question/Answer pairs extracted from the page.
Suggest BreadcrumbList schema from the breadcrumb navigation structure.
DO: "This page looks like a blog post → checking for Article schema"
DON'T: "Missing LocalBusiness schema" on a blog post pageThe goal is relevance, not completeness. Only flag missing schemas that would actually benefit the detected page type.
@type can be an array (e.g. ["Article", "NewsArticle"])| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | pass→pass | 11,427 | 4,933 | -57% | 1 | 1 | 0% | 2,305 | 2,147 | -7% | 0 | 0 | — |
case-01 | pass→pass | 11,640 | 4,441 | -62% | 1 | 1 | 0% | 1,331 | 2,011 | +51% | 0 | 0 | — |
case-02 | pass→pass | 12,073 | 4,956 | -59% | 1 | 1 | 0% | 1,963 | 2,075 | +6% | 0 | 0 | — |
case-03 | pass→pass | 8,404 | 4,495 | -47% | 1 | 1 | 0% | 1,562 | 1,965 | +26% | 0 | 0 | — |
case-04 | fail→pass | 9,711 | 2,575 | -73% | 1 | 1 | 0% | 1,654 | 1,694 | +2% | 0 | 0 | — |
case-05 | pass→pass | 10,394 | 5,627 | -46% | 1 | 1 | 0% | 1,791 | 2,264 | +26% | 0 | 0 | — |
case-06 | pass→pass | 5,437 | 2,381 | -56% | 1 | 1 | 0% | 911 | 1,600 | +76% | 0 | 0 | — |
case-07 | pass→pass | 5,542 | 2,426 | -56% | 1 | 1 | 0% | 1,003 | 1,609 | +60% | 0 | 0 | — |
case-08 | pass→pass | 9,241 | 5,601 | -39% | 1 | 1 | 0% | 1,705 | 2,178 | +28% | 0 | 0 | — |
case-10 | pass→pass | 8,116 | 3,966 | -51% | 1 | 1 | 0% | 1,346 | 1,861 | +38% | 0 | 0 | — |
case-11 | pass→pass | 7,421 | 4,637 | -38% | 1 | 1 | 0% | 1,503 | 2,110 | +40% | 0 | 0 | — |
case-12 | fail→pass | 6,418 | 2,832 | -56% | 1 | 1 | 0% | 1,182 | 1,641 | +39% | 0 | 0 | — |
case-13 | pass→pass | 3,150 | 2,645 | -16% | 1 | 1 | 0% | 468 | 1,577 | +237% | 0 | 0 | — |
case-14 | pass→pass | 10,382 | 4,389 | -58% | 1 | 1 | 0% | 1,847 | 1,977 | +7% | 0 | 0 | — |
case-15 | pass→pass | 4,611 | 3,355 | -27% | 1 | 1 | 0% | 784 | 1,707 | +118% | 0 | 0 | — |
case-16 | pass→pass | 8,547 | 4,420 | -48% | 1 | 1 | 0% | 1,515 | 2,177 | +44% | 0 | 0 | — |
case-17 | pass→pass | 9,153 | 2,812 | -69% | 1 | 1 | 0% | 1,515 | 1,645 | +9% | 0 | 0 | — |
case-18 | pass→pass | 8,520 | 4,434 | -48% | 1 | 1 | 0% | 1,256 | 1,993 | +59% | 0 | 0 | — |
case-19 | pass→pass | 5,370 | 2,247 | -58% | 1 | 1 | 0% | 934 | 1,561 | +67% | 0 | 0 | — |
case-20 | pass→pass | 1,836 | 1,876 | +2% | 1 | 1 | 0% | 315 | 1,471 | +367% | 0 | 0 | — |
case-21 | pass→pass | 8,618 | 10,374 | +20% | 1 | 1 | 0% | 1,686 | 3,070 | +82% | 0 | 0 | — |
case-22 | pass→pass | 5,763 | 4,765 | -17% | 1 | 1 | 0% | 992 | 1,961 | +98% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.