Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Validates HTML5 semantic elements, ARIA landmarks, skip navigation, and page structure. Use when auditing semantic HTML, accessibility, or content structure for SEO. For the lang attribute, see the international-seo skill.
.claude/skills/thisisahsaniqbal-semantic-layout/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 147% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 14% | 0% |
Audit the page for proper use of HTML5 semantic elements and accessibility.
> Note: The lang attribute check is handled by the international-seo skill. Do not duplicate it here.
These elements must be present:
| Element | Missing = | |---|---| | <header> | ❌ FAIL | | <main> | ❌ FAIL | | <footer> | ❌ FAIL | | <nav> | ❌ FAIL |
Report count if present: ✅ PASS "<tag> element found (N instance(s))"
These elements should be present:
| Element | Missing = | |---|---| | <article> | ⚠️ WARN "Consider using for content structure" | | <section> | ⚠️ WARN | | <aside> | ⚠️ WARN | | <figure> | ⚠️ WARN |
Check for accessibility skip links: <a href="#main-content">, <a href="#content">, or <a href="#main">
Count <div> elements vs semantic elements (header, main, footer, nav, article, section, aside, figure):
| Condition | Status | |---|---| | Divs > 0 but zero semantic elements | ❌ FAIL "Restructure with semantic HTML" | | Divs > 5× semantic element count | ⚠️ WARN "High div-to-semantic ratio" |
Check for these roles: banner, navigation, main, contentinfo, search
<main><main> elements → ⚠️ WARN "Wrap primary content in <main>"<main> → ⚠️ WARN "Should have only one"<h2>, <h3>, <h4> that are NOT inside <section>, <article>, <aside>, or <main><section> or <article>"<figure><figure> → ⚠️ WARN "Use <figure>/<figcaption>"<time> elements found → ✅ PASS<time> elements → ⚠️ WARN "Wrap dates in <time datetime=\"...\">"<ul> or <ol> found → ⚠️ WARN "Use lists for list-type content (improves featured snippet eligibility)"<caption> → ⚠️ WARN "Add captions for accessibility"<div id="__next"> or <div id="root"> — this does not count as "div-soup"; evaluate the semantic elements inside it<template> or <slot> elements are not visible in static HTML — note this limitation<article>, <section>, or <aside> — do not flag as WARN| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | pass→pass | 9,907 | 9,371 | -5% | 1 | 1 | 0% | 1,782 | 2,299 | +29% | 0 | 0 | — |
case-06 | fail→pass | 11,428 | 4,459 | -61% | 1 | 1 | 0% | 1,870 | 1,644 | -12% | 0 | 0 | — |
case-07 | pass→pass | 10,857 | 7,859 | -28% | 1 | 1 | 0% | 1,946 | 2,384 | +23% | 0 | 0 | — |
case-01 | fail→fail | 13,639 | 3,622 | -73% | 1 | 1 | 0% | 2,258 | 1,422 | -37% | 0 | 0 | — |
case-02 | pass→fail | 4,585 | 3,999 | -13% | 1 | 1 | 0% | 733 | 1,504 | +105% | 0 | 0 | — |
case-03 | fail→pass | 11,475 | 12,803 | +12% | 1 | 1 | 0% | 1,355 | 3,341 | +147% | 0 | 0 | — |
case-04 | pass→pass | 8,135 | 11,719 | +44% | 1 | 1 | 0% | 1,683 | 3,156 | +88% | 0 | 0 | — |
case-05 | fail→pass | 8,525 | 6,343 | -26% | 1 | 1 | 0% | 1,619 | 2,144 | +32% | 0 | 0 | — |
case-09 | pass→pass | 7,417 | 3,835 | -48% | 1 | 1 | 0% | 1,194 | 1,307 | +9% | 0 | 0 | — |
case-10 | pass→pass | 9,842 | 6,717 | -32% | 1 | 1 | 0% | 1,670 | 1,528 | -9% | 0 | 0 | — |
case-11 | pass→pass | 8,560 | 3,870 | -55% | 1 | 1 | 0% | 1,445 | 1,571 | +9% | 0 | 0 | — |
case-12 | fail→pass | 12,028 | 3,030 | -75% | 1 | 1 | 0% | 1,809 | 1,358 | -25% | 0 | 0 | — |
case-13 | pass→pass | 11,644 | 3,550 | -70% | 1 | 1 | 0% | 2,032 | 1,532 | -25% | 0 | 0 | — |
case-14 | pass→pass | 6,804 | 2,216 | -67% | 1 | 1 | 0% | 1,222 | 1,236 | +1% | 0 | 0 | — |
case-15 | pass→pass | 7,948 | 2,460 | -69% | 1 | 1 | 0% | 1,322 | 1,197 | -9% | 0 | 0 | — |
case-16 | pass→pass | 11,205 | 4,835 | -57% | 1 | 1 | 0% | 1,468 | 1,723 | +17% | 0 | 0 | — |
case-17 | pass→pass | 9,664 | 3,802 | -61% | 1 | 1 | 0% | 1,609 | 1,469 | -9% | 0 | 0 | — |
case-18 | pass→pass | 15,241 | 12,312 | -19% | 1 | 1 | 0% | 2,559 | 2,879 | +13% | 0 | 0 | — |
case-19 | pass→pass | 11,843 | 5,756 | -51% | 1 | 1 | 0% | 1,928 | 1,714 | -11% | 0 | 0 | — |
case-20 | pass→pass | 12,248 | 5,800 | -53% | 1 | 1 | 0% | 2,275 | 1,954 | -14% | 0 | 0 | — |
case-21 | fail→pass | 8,805 | 5,593 | -36% | 1 | 1 | 0% | 1,619 | 1,846 | +14% | 0 | 0 | — |
case-22 | fail→pass | 7,753 | 3,362 | -57% | 1 | 1 | 0% | 1,113 | 1,314 | +18% | 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 +23 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.