Onpage optimization
Skill thisisAhsanIqbal/nextjs-seo-audit/skills/onpage-optimization
AI Agent Skills for SEO auditing , 11 SKILL.md files that teach Cursor, Claude Code, Copilot & more to perform comprehensive SEO audits. Zero dependencies.
npx -y skills add thisisAhsanIqbal/nextjs-seo-audit --skill onpage-optimizationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 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.
What its author says it does
Copied from the file, not written here
Validates heading hierarchy, keyword density and placement, and internal/external link structure. Use when auditing on-page SEO factors for an HTML page.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.5 KB, as published. Nobody here has run it
On-Page Optimization
Analyse the HTML page for heading structure, keyword usage, and link health.
Note: This skill owns internal link analysis. For external/outbound link strategy (dofollow/nofollow, anchor text quality, domain diversity), see the backlink-monitoring skill.
1. Heading validation
Check all <h1> through <h6> elements:
| Check | Status | Rule |
|---|---|---|
| No headings at all | ❌ FAIL | Every page must have at least one heading |
No <h1> tag | ❌ FAIL | Every page must have exactly one <h1> |
Multiple <h1> tags | ⚠️ WARN | Recommend a single <h1> per page |
| Hierarchy skipped (e.g. H2 → H4) | ⚠️ WARN | Headings should follow sequential order: H1 → H2 → H3 |
| Empty heading (no text content) | ❌ FAIL | All headings must have descriptive text |
| Single H1, proper hierarchy | ✅ PASS | Heading structure is correct |
2. Keyword analysis
If a target keyword is provided, check its usage across the page:
Keyword density
- Calculate:
(keyword_count / total_words) × 100 - Ideal range: 1.0–3.0%
- Below 1.0% → ⚠️ WARN "Keyword density is low"
- Above 3.0% → ❌ FAIL "Keyword stuffing detected"
- Within range → ✅ PASS
Keyword placement — check all of these:
| Location | How to check | Missing = |
|---|---|---|
<title> tag | Does the title contain the keyword? | ⚠️ WARN |
<h1> tag | Does the H1 text contain the keyword? | ⚠️ WARN |
| Meta description | Does <meta name="description"> contain the keyword? | ⚠️ WARN |
First <p> tag | Does the first paragraph contain the keyword? | ⚠️ WARN |
| Image alt text | Does any <img alt="..."> contain the keyword? | ⚠️ WARN |
Title keyword position
- Keyword at position 0 (start of title) → ✅ PASS "Best placement"
- Keyword at position ≤ 20 → ✅ PASS "Near the start"
- Keyword at position > 20 → ⚠️ WARN "Place it earlier for better ranking"
3. Link analysis
Examine all <a href="..."> elements:
Classify links
- Internal:
hrefstarts with/,./,../, or# - External:
hrefstarts withhttp://orhttps://
Checks
| Check | Threshold | Status |
|---|---|---|
| Internal link count ≥ 3 | Minimum 3 per page | ⚠️ WARN if below |
Links with no anchor text (and no child <img>) | Any count > 0 | ⚠️ WARN |
Internal links with rel="nofollow" | Any count > 0 | ⚠️ WARN "Prevents PageRank flow within your site" |
Always report the count of internal and external links found.
Edge cases
- If no keyword is supplied, skip keyword analysis and note: "No target keyword supplied — skipping keyword analysis"
- Count words by splitting text on whitespace; keyword matching is case-insensitive
- For link classification, ignore
javascript:,mailto:, andtel:hrefs - Single-page applications (SPAs) with hash-based routing (
#/page) — treat#-prefixed hrefs as internal links - Next.js
<Link>components render as standard<a>tags in HTML output — audit the rendered HTML, not the JSX - Pages with zero links (e.g. legal/privacy pages) should receive ⚠️ WARN, not ❌ FAIL