Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing a page's heading structure, generating H1 text for landing pages or blog posts, or reviewing a CMS template that may produce empty or missing H1 elements.
.claude/skills/thedaviddias-h1/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-16 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-22 | ✓→✗ | ▼ Worse | 29% | 0% |
| case-01 | ✓→✓ | = Same ✓ | -5% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 5% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -4% | 0% |
The H1 is the most prominent heading on a page and a strong on-page ranking signal. Google uses it to understand the page's primary topic. Missing, duplicate, or keyword-free H1 tags reduce topical clarity, hurting rankings for the page's target terms.
<h1> tag that describes the page's primary topic with relevant keywords<title> tag, but they should be topically consistent<h1> tags, multiple <h1> tags on one page, or H1s containing only the brand name are all issues to fixParse the rendered DOM of each page. Count all <h1> elements. Flag: (1) Pages with zero <h1> tags. (2) Pages with more than one <h1> tag. (3) <h1> elements whose text content is empty or contains only whitespace. (4) <h1> elements that contain only the brand name with no page-specific topic. (5) <h1> text that does not reflect the page's primary content topic.
<h1>.display:none or visibility:hidden).Before: <h1>Acme Corp</h1> (brand only) After: <h1>Project Management Software for Enterprise Teams</h1>
Google's John Mueller has confirmed that H1 tags help Google understand page structure. While H1 is not the strongest ranking factor in isolation, it contributes to on-page topical relevance signals. Multiple H1 tags on one page dilute the primary topic signal; a missing H1 leaves a structural gap that reduces confidence in what the page is about.
Query the DOM for all <h1> elements. Assert exactly one exists per page. Check that innerText.trim() is non-empty. Compare H1 text to the page <title> — they should share core topic keywords. Flag if H1 is inside a <header> element shared across all pages (often the site logo alt text) rather than specific to the page content.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/seo/h1
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 8,038 | 4,958 | -38% | 1 | 1 | 0% | 1,651 | 1,563 | -5% | 0 | 0 | — |
case-02 | pass→pass | 7,147 | 4,195 | -41% | 1 | 1 | 0% | 1,448 | 1,521 | +5% | 0 | 0 | — |
case-03 | pass→pass | 9,969 | 5,996 | -40% | 1 | 1 | 0% | 1,944 | 1,867 | -4% | 0 | 0 | — |
case-04 | pass→pass | 8,232 | 7,555 | -8% | 1 | 1 | 0% | 1,632 | 2,113 | +29% | 0 | 0 | — |
case-05 | pass→pass | 5,405 | 4,534 | -16% | 1 | 1 | 0% | 1,140 | 1,642 | +44% | 0 | 0 | — |
case-06 | pass→pass | 7,756 | 3,044 | -61% | 1 | 1 | 0% | 1,475 | 1,213 | -18% | 0 | 0 | — |
case-07 | pass→pass | 8,350 | 8,233 | -1% | 1 | 1 | 0% | 1,798 | 2,114 | +18% | 0 | 0 | — |
case-08 | pass→pass | 10,650 | 9,077 | -15% | 1 | 1 | 0% | 2,104 | 2,350 | +12% | 0 | 0 | — |
case-09 | pass→pass | 10,024 | 8,416 | -16% | 1 | 1 | 0% | 1,814 | 2,250 | +24% | 0 | 0 | — |
case-10 | pass→pass | 9,058 | 2,330 | -74% | 1 | 1 | 0% | 1,654 | 1,085 | -34% | 0 | 0 | — |
case-11 | pass→pass | 6,791 | 3,105 | -54% | 1 | 1 | 0% | 1,383 | 1,190 | -14% | 0 | 0 | — |
case-12 | pass→pass | 6,155 | 6,465 | +5% | 1 | 1 | 0% | 1,364 | 1,933 | +42% | 0 | 0 | — |
case-13 | pass→pass | 9,054 | 2,903 | -68% | 1 | 1 | 0% | 1,719 | 1,202 | -30% | 0 | 0 | — |
case-14 | pass→pass | 5,792 | 3,376 | -42% | 1 | 1 | 0% | 1,039 | 1,266 | +22% | 0 | 0 | — |
case-15 | pass→pass | 8,853 | 5,557 | -37% | 1 | 1 | 0% | 1,819 | 1,795 | -1% | 0 | 0 | — |
case-16 | fail→pass | 10,535 | 8,933 | -15% | 1 | 1 | 0% | 2,047 | 2,208 | +8% | 0 | 0 | — |
case-17 | pass→pass | 8,356 | 3,814 | -54% | 1 | 1 | 0% | 1,694 | 1,424 | -16% | 0 | 0 | — |
case-18 | pass→pass | 5,762 | 3,135 | -46% | 1 | 1 | 0% | 1,101 | 1,193 | +8% | 0 | 0 | — |
case-19 | pass→pass | 7,623 | 2,470 | -68% | 1 | 1 | 0% | 1,268 | 1,093 | -14% | 0 | 0 | — |
case-20 | pass→pass | 8,175 | 3,308 | -60% | 1 | 1 | 0% | 1,350 | 1,277 | -5% | 0 | 0 | — |
case-21 | pass→pass | 8,076 | 10,874 | +35% | 1 | 1 | 0% | 1,520 | 2,222 | +46% | 0 | 0 | — |
case-22 | pass→fail | 11,308 | 10,113 | -11% | 1 | 1 | 0% | 1,972 | 2,549 | +29% | 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 0 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.