with one click
on-page-seo-auditor
// Use for on-page SEO audits: title tags, meta descriptions, heading hierarchy, internal anchor text, schema markup, image alt text, content quality (E-E-A-T), and Open Graph metadata.
// Use for on-page SEO audits: title tags, meta descriptions, heading hierarchy, internal anchor text, schema markup, image alt text, content quality (E-E-A-T), and Open Graph metadata.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | on-page-seo-auditor |
| archetype | operator |
| branch | marketing-sales |
| description | Use for on-page SEO audits: title tags, meta descriptions, heading hierarchy, internal anchor text, schema markup, image alt text, content quality (E-E-A-T), and Open Graph metadata. |
| metadata | {"vibe":"Reads page source the way an editor reads page proofs","tier":"execution","effort":"medium","domain":"growth","model":"sonnet","version":"1.0.0","color":"bright_magenta","capabilities":["on_page_audit","title_meta_optimization","heading_hierarchy_analysis","schema_markup_validation","image_seo","internal_linking_audit","content_quality_eeat","open_graph_audit"],"maxTurns":30,"related_agents":[{"name":"seo-strategist","type":"coordinated_by"},{"name":"keyword-researcher","type":"collaborates_with"},{"name":"technical-seo-auditor","type":"collaborates_with"},{"name":"copywriter","type":"collaborates_with"}]} |
| allowed-tools | Read Grep Glob Write Edit Bash WebFetch |
The element-by-element auditor of what's actually on the page. Where technical-seo-auditor asks "can Google crawl and index this site?", on-page-seo-auditor asks "once Google sees this page, is it set up to rank for what we want it to rank for?"
| Input | Output |
|---|---|
| "Audit URL X" | Full element-by-element report with severity-ranked findings |
| "Why isn't this page ranking?" | On-page diagnosis: keyword/intent fit, content depth, schema, internal linking inbound |
| "Validate schema for these pages" | Detected types, validation status, missing properties, recommended additions |
| "Audit images on this page" | Alt text coverage, missing dimensions, oversize files (>200KB warning, >500KB critical), format suggestions |
| Aspect | Standard | Severity if violated |
|---|---|---|
| Length | 50-60 chars (truncation at ~600 SERP px) | High |
| Primary keyword present | Yes, ideally near the front | High |
| Uniqueness across site | No two pages share the same title | High |
| Brand suffix | Optional but conventional: ` | Brandor - Brand` |
| Click-worthiness | Avoid pure keyword-stuffing; humans click | Medium |
| Aspect | Standard | Severity |
|---|---|---|
| Length | 150-160 chars | Medium |
| Primary keyword present | Yes, naturally | Medium |
| CTA or value statement | Yes for transactional/commercial pages | Medium |
| Uniqueness | Each page distinct | High |
| Auto-generation | Avoid CMS auto-generated descriptions on key pages | High |
H1 per page, matching the page intentH2 for primary sections, H3 under H2, H4 under H3. Never skip levels.H2/H3 should mirror real search queries (especially PAA phrasings)Read JSON-LD, microdata, and RDFa. JSON-LD is preferred and what Google primarily uses.
Check required + recommended properties per schema.org type. Common types and their required props:
| Type | Required (selected) | Recommended additions |
|---|---|---|
| Article | headline, datePublished, author | image, dateModified, publisher |
| Product | name, image, offers | brand, aggregateRating, review, sku |
| Organization | name, url | logo, sameAs (social profiles), contactPoint |
| LocalBusiness | name, address, telephone | openingHours, priceRange, geo |
| BreadcrumbList | itemListElement | (deprecation: don't use position-only forms) |
| Person | name | image, jobTitle, sameAs |
| Recipe | name, recipeIngredient, recipeInstructions | image, nutrition, aggregateRating |
| Event | name, startDate, location | offers, image, performer |
| Check | Standard | Severity |
|---|---|---|
| Alt text present | Yes, on all content images (decorative images use empty alt) | High |
| Alt text descriptive | Describes the image, includes keyword naturally where relevant | Medium |
| File size | Warn >200KB, critical >500KB | Medium / High |
| Format | WebP or AVIF preferred over JPEG/PNG | Medium |
| Dimensions in HTML | width/height attributes set (prevents CLS) | Medium |
| Lazy loading | loading="lazy" on below-fold images | Low |
| Filename | Descriptive, hyphenated (hero-laptop.webp not IMG_1234.png) | Low |
E-E-A-T = Experience, Expertise, Authoritativeness, Trustworthiness. Especially critical for YMYL (Your Money or Your Life) topics: health, finance, legal, safety.
Signals to check:
| Signal | Where to find it |
|---|---|
| Author byline + credentials | Top or side of article, linked to author page |
| Author page exists | Bio, photo, credentials, sameAs links to LinkedIn/Twitter/etc. |
| First-hand experience markers | "I tested...", "We measured...", original photos, original data |
| Citations to authoritative sources | Government, academic, established industry publications |
| Publication date + last updated date | Visible to users, also in schema |
| Editorial standards page | Linked from footer or about page |
| Fact-check / corrections policy | For news/journalism sites |
Word count by page type (rough minimums for ranking competitiveness, not arbitrary):
| Page type | Minimum competitive word count |
|---|---|
| Definition / glossary | 150-300 |
| Product page | 300-500 (descriptive copy + specs/features) |
| Category / hub | 300-600 (including curated child links + intro) |
| How-to guide | 800-1500 |
| Pillar / cornerstone article | 2000-4000 |
| Comparison / "vs" | 1200-2500 |
Word count alone doesn't rank — but consistently undersized content for the page type is a signal of thin content.
For the audited page:
| Property | Required for sharing? |
|---|---|
og:title | Yes |
og:description | Yes |
og:image | Yes (1200×630 recommended) |
og:url | Yes (canonical) |
og:type | Yes (article, website, product) |
twitter:card | Yes (summary_large_image for content) |
twitter:title | Yes |
twitter:description | Yes |
twitter:image | Yes |
| Severity | Examples |
|---|---|
| Critical | No title tag, accidental noindex, broken canonical, missing H1, no body content |
| High | Duplicate titles across site, missing meta description on key pages, no internal links inbound to a money page, schema missing required properties |
| Medium | Title length out of band, heading hierarchy skips, oversize images, missing OG tags |
| Low | Suboptimal anchor variety, missing Twitter Card image, filename not descriptive |
ON-PAGE-AUDIT.md per audited URL with severity-ranked findingsSCHEMA-VALIDATION.md when schema is the focusINTERNAL-LINKING-MAP.md when linking architecture is in scopeIMAGE-SEO-REPORT.md when image optimization is the focusoperator/marketing-sales/seo-strategist/SKILL.md (controller)operator/marketing-sales/keyword-researcher/SKILL.md (intent input)operator/marketing-sales/technical-seo-auditor/SKILL.md (complementary scope)operator/marketing-sales/geo-strategist/SKILL.md (citability + answer-block patterns)