On-Page SEO
Optimize a single page for search relevance, click-through, and crawler comprehension. Stack-agnostic. Works on any CMS, framework, or static site.
When to use
- Auditing or optimizing a single page (homepage, product page, article, landing page)
- Writing or reviewing title tags and meta descriptions
- Fixing header structure or content hierarchy
- Reviewing internal links from or to a page
- Improving a page's CTR from search results
When NOT to use
- Site-wide crawl, indexing, or speed issues (use
seo-technical)
- Keyword research or intent mapping (use
seo-keyword)
- Competitor SERP analysis (use
seo-competitor)
- Auditing many pages at once for prune/merge decisions (use
seo-content-audit)
Required inputs
- The page URL or the draft content if pre-launch
- The primary target query (one phrase the page should rank for)
- The page's role in the site (commercial, informational, navigational)
If the target query is unknown, run seo-keyword first or ask the user to name one.
The framework: 8 dimensions
A complete on-page audit covers eight dimensions. Score each as Pass, Needs work, or Fail. Note the specific fix.
1. Title tag
- One unique title per URL across the site
- Roughly 50 to 60 characters (longer gets truncated in SERPs)
- Primary query near the front
- Brand at the end if it earns inclusion
- Distinct from the H1 (often very similar, but should not be identical word-for-word)
2. Meta description
- One unique description per URL
- Roughly 150 to 160 characters
- Restates the value proposition, not the title
- Includes a soft CTA where natural
- Treats the description as ad copy that earns the click
3. Header structure
- Exactly one H1 per page
- H1 contains or paraphrases the primary query
- H2 sections cover the major sub-topics
- H3+ used only when an H2 has genuine sub-points
- No skipped levels (no H2 followed by H4)
- Headers describe sections accurately enough that a reader could navigate by them alone
4. Body content
- Opens with the primary user intent answered in the first paragraph
- Covers the topic comprehensively (define your competition's depth, then match or exceed it)
- Includes related entities and supporting concepts naturally
- Avoids keyword stuffing (write for the reader, not the bot)
- Reading level matches the audience (run a readability check)
- Paragraphs short enough to scan on mobile (3 to 5 lines)
5. Internal links
- At least 2 to 3 outbound internal links to closely related pages
- At least 2 to 3 inbound internal links from related pages
- Anchor text is descriptive, not "click here" or "learn more"
- Links to canonical URLs, not redirects
- No broken internal links
6. Images and media
- Every meaningful image has descriptive alt text (skip alt for purely decorative images)
- File names are descriptive ("blue-running-shoe.jpg" not "IMG_4032.jpg")
- Modern format used where supported (WebP, AVIF)
- Lazy loading on below-the-fold images
- Width and height attributes set to prevent layout shift
7. URL slug
- Lowercase, hyphen-separated
- Includes the primary query naturally (no stuffing)
- Short (under 60 characters where possible)
- No dates unless the page is genuinely time-bound
- No session IDs, tracking parameters, or random hashes
- Matches the site's URL pattern conventions
8. On-page schema
- Appropriate Schema.org type for the content (Article, Product, FAQPage, HowTo, Recipe, etc.)
- Required properties filled (review Schema.org docs for the type)
- Validates in Google's Rich Results Test or equivalent
- Matches what is visible on the page (do not lie to crawlers)
- Author and publisher schema linked correctly for content pages
Workflow
- Confirm the target query. If unclear, ask. Do not optimize without one.
- Render the page. View it as a user would. Read the content top to bottom.
- View the rendered HTML. Inspect the actual served markup, not just the visual page. Check
<title>, <meta>, headers, and schema in the source.
- Run the 8-dimension framework. Score each, note specific fixes.
- Prioritize. Group fixes into Critical (broken or missing), Important (suboptimal), and Nice-to-have (polish).
- Write the report. Use the template in
references/audit-template.md.
- Offer to draft fixes. If the user wants, draft the new title, meta, headers, or copy directly.
Failure patterns
When you spot one of these, push back before delivering.
- "Make it more SEO." Vague. Ask for the target query and what's broken first.
- "Add the keyword 5 times in the body." Keyword density is not a real ranking signal. Prioritize relevance and topical depth instead.
- Optimizing a page that is not crawlable or indexable. Check
seo-technical first. No on-page work helps a noindexed page.
- Optimizing a page with no clear user intent. A page that does not serve a real query will not rank no matter how well-tagged it is.
- Targeting the same query as another page on the site. This is cannibalization. Use
seo-content-audit to decide which page should rank.
Output format
Default output is a markdown audit at seo-audit-[page-slug].md in the project root. Structure:
- Page summary (URL, target query, role)
- Score across 8 dimensions
- Critical fixes
- Important fixes
- Nice-to-have polish
- Drafted replacements (if requested)
Keep audits under 1500 words. If a page needs more detail, link to deeper appendices.
Reference files
references/audit-template.md - Fillable audit template, copy and use.
references/onpage-checklist.md - Quick-reference checklist for the 8 dimensions.
references/title-and-meta-patterns.md - Patterns for writing strong titles and meta descriptions.
1---2name: seo-onpage3description: Run a comprehensive on-page SEO audit or optimization pass covering title tags, meta descriptions, header structure, content quality, internal links, image optimization, URL hygiene, and on-page schema. Use this skill whenever the user asks to optimize a page, audit on-page SEO, fix titles or meta tags, review header structure, check internal linking, improve a single URL's search performance, or write SEO-friendly copy. Triggers on on-page SEO, page audit, title tag, meta description, H1, header structure, internal links, image alt, URL slug, page optimization, optimize this page, SEO this page. Also triggers for any single-page review where ranking, click-through, or relevance signal quality is the goal, even if the user does not say 'SEO' explicitly.4---5
6# On-Page SEO
7
8Optimize a single page for search relevance, click-through, and crawler comprehension. Stack-agnostic. Works on any CMS, framework, or static site.
9
10---
11
12## When to use
13
14- Auditing or optimizing a single page (homepage, product page, article, landing page)
15- Writing or reviewing title tags and meta descriptions
16- Fixing header structure or content hierarchy
17- Reviewing internal links from or to a page
18- Improving a page's CTR from search results
19
20## When NOT to use
21
22- Site-wide crawl, indexing, or speed issues (use `seo-technical`)
23- Keyword research or intent mapping (use `seo-keyword`)
24- Competitor SERP analysis (use `seo-competitor`)
25- Auditing many pages at once for prune/merge decisions (use `seo-content-audit`)
26
27---
28
29## Required inputs
30
31- The page URL or the draft content if pre-launch
32- The primary target query (one phrase the page should rank for)
33- The page's role in the site (commercial, informational, navigational)
34
35If the target query is unknown, run `seo-keyword` first or ask the user to name one.
36
37---
38
39## The framework: 8 dimensions
40
41A complete on-page audit covers eight dimensions. Score each as Pass, Needs work, or Fail. Note the specific fix.
42
43### 1. Title tag
44- One unique title per URL across the site
45- Roughly 50 to 60 characters (longer gets truncated in SERPs)
46- Primary query near the front
47- Brand at the end if it earns inclusion
48- Distinct from the H1 (often very similar, but should not be identical word-for-word)
49
50### 2. Meta description
51- One unique description per URL
52- Roughly 150 to 160 characters
53- Restates the value proposition, not the title
54- Includes a soft CTA where natural
55- Treats the description as ad copy that earns the click
56
57### 3. Header structure
58- Exactly one H1 per page
59- H1 contains or paraphrases the primary query
60- H2 sections cover the major sub-topics
61- H3+ used only when an H2 has genuine sub-points
62- No skipped levels (no H2 followed by H4)
63- Headers describe sections accurately enough that a reader could navigate by them alone
64
65### 4. Body content
66- Opens with the primary user intent answered in the first paragraph
67- Covers the topic comprehensively (define your competition's depth, then match or exceed it)
68- Includes related entities and supporting concepts naturally
69- Avoids keyword stuffing (write for the reader, not the bot)
70- Reading level matches the audience (run a readability check)
71- Paragraphs short enough to scan on mobile (3 to 5 lines)
72
73### 5. Internal links
74- At least 2 to 3 outbound internal links to closely related pages
75- At least 2 to 3 inbound internal links from related pages
76- Anchor text is descriptive, not "click here" or "learn more"
77- Links to canonical URLs, not redirects
78- No broken internal links
79
80### 6. Images and media
81- Every meaningful image has descriptive alt text (skip alt for purely decorative images)
82- File names are descriptive ("blue-running-shoe.jpg" not "IMG_4032.jpg")
83- Modern format used where supported (WebP, AVIF)
84- Lazy loading on below-the-fold images
85- Width and height attributes set to prevent layout shift
86
87### 7. URL slug
88- Lowercase, hyphen-separated
89- Includes the primary query naturally (no stuffing)
90- Short (under 60 characters where possible)
91- No dates unless the page is genuinely time-bound
92- No session IDs, tracking parameters, or random hashes
93- Matches the site's URL pattern conventions
94
95### 8. On-page schema
96- Appropriate Schema.org type for the content (Article, Product, FAQPage, HowTo, Recipe, etc.)
97- Required properties filled (review Schema.org docs for the type)
98- Validates in Google's Rich Results Test or equivalent
99- Matches what is visible on the page (do not lie to crawlers)
100- Author and publisher schema linked correctly for content pages
101
102---
103
104## Workflow
105
1061. **Confirm the target query.** If unclear, ask. Do not optimize without one.
1072. **Render the page.** View it as a user would. Read the content top to bottom.
1083. **View the rendered HTML.** Inspect the actual served markup, not just the visual page. Check `<title>`, `<meta>`, headers, and schema in the source.
1094. **Run the 8-dimension framework.** Score each, note specific fixes.
1105. **Prioritize.** Group fixes into Critical (broken or missing), Important (suboptimal), and Nice-to-have (polish).
1116. **Write the report.** Use the template in [`references/audit-template.md`](references/audit-template.md).
1127. **Offer to draft fixes.** If the user wants, draft the new title, meta, headers, or copy directly.
113
114---
115
116## Failure patterns
117
118When you spot one of these, push back before delivering.
119
120- **"Make it more SEO."** Vague. Ask for the target query and what's broken first.
121- **"Add the keyword 5 times in the body."** Keyword density is not a real ranking signal. Prioritize relevance and topical depth instead.
122- **Optimizing a page that is not crawlable or indexable.** Check `seo-technical` first. No on-page work helps a noindexed page.
123- **Optimizing a page with no clear user intent.** A page that does not serve a real query will not rank no matter how well-tagged it is.
124- **Targeting the same query as another page on the site.** This is cannibalization. Use `seo-content-audit` to decide which page should rank.
125
126---
127
128## Output format
129
130Default output is a markdown audit at `seo-audit-[page-slug].md` in the project root. Structure:
131
1321. Page summary (URL, target query, role)
1332. Score across 8 dimensions
1343. Critical fixes
1354. Important fixes
1365. Nice-to-have polish
1376. Drafted replacements (if requested)
138
139Keep audits under 1500 words. If a page needs more detail, link to deeper appendices.
140
141---
142
143## Reference files
144
145- [`references/audit-template.md`](references/audit-template.md) - Fillable audit template, copy and use.
146- [`references/onpage-checklist.md`](references/onpage-checklist.md) - Quick-reference checklist for the 8 dimensions.
147- [`references/title-and-meta-patterns.md`](references/title-and-meta-patterns.md) - Patterns for writing strong titles and meta descriptions.