Deep single-page SEO audit — on-page elements (title, meta, headers, links), content-quality signals, technical meta tags, schema detection, image checks, and Core Web Vitals signals inferred from HTML. Use when the user says "analyze this page", "check page SEO", "single URL", "page analysis", or hands over one URL/page for review.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add trungdo9/ClauKit --skill seo-page --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Seo Page?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/trungdo9-seo-page)More formats (shields.io, HTML) on the badges page.
---
name: seo-page
description: Deep single-page SEO audit — on-page elements (title, meta, headers, links), content-quality signals, technical meta tags, schema detection, image checks, and Core Web Vitals signals inferred from HTML. Use when the user says "analyze this page", "check page SEO", "single URL", "page analysis", or hands over one URL/page for review.
allowed-tools: Read, Write, Glob, Grep
---
# SEO Page — Single-Page On-Page Audit
> A page can lose the click with a great body and a weak title tag, or lose the ranking with great copy and a broken header hierarchy. This skill scores everything between the URL bar and the last image on the page — on one URL, in one pass.
## When this skill activates
**Implicit:** "analyze this page", "check page SEO", "single URL", "check this page", "page analysis", or the user hands over one URL (or raw HTML) for review.
**Explicit:** "Use the seo-page skill to [task]."
**Routed from:** `/mk:seo audit` (single-page mode), [[seo-writing]] Stage 4 (on-page optimization).
**Boundary with [[seo-writing]] Stage 4:** `seo-page` is the general-purpose on-page audit — it runs against *any* page (yours, a competitor's, published or still a draft) and produces a scored report of what's wrong. Stage 4 of the writing pipeline (`references/stage-4-optimize.md` in [[seo-writing]]) is not an audit — it is a narrow *generation* step for the one article the pipeline just wrote: it invents a meta description/slug/tags from scratch, runs a deterministic keyword-density count, resolves image placeholders, and re-checks truth-only compliance. It executes a subset of this skill's Content Quality and Images checks, scoped to a single in-flight draft, and it never produces the score card or the full on-page/technical/schema sweep below. Run `seo-page` on an article after Stage 4 (or independently, on any page) when a full audit is wanted; use Stage 4 only inside the production pipeline to fill in fields a fresh draft doesn't have yet.
## Scope
Covers:
- On-page SEO: title tag, meta description, H1–H6 hierarchy, URL structure, internal/external link quality.
- Content-quality signals: word count vs. page-type minimum, readability, keyword density, E-E-A-T markers, freshness.
- Technical meta elements: canonical tag, meta robots, Open Graph, Twitter Card, hreflang.
- Schema detection and gap-spotting (what's present, what rich-result opportunities are missing).
- Image checks: alt text, file size, format, dimensions, lazy-load method.
- Core Web Vitals *signals* inferable from static HTML (not a live measurement).
Does NOT cover:
- Generating meta/slug/tags for an article still in production, its density re-check, or its truth-only re-pass → [[seo-writing]] Stage 4 (see boundary above).
- Authoring or deep-validating JSON-LD schema → [[seo-schema]] (this skill only detects what's there and flags gaps).
- Site-wide crawl/index/architecture audits or actually-measured Core Web Vitals → [[seo-technical]].
## What to analyze
### On-page SEO
- Title tag: 50–60 characters, includes the primary keyword, unique on the site.
- Meta description: 150–160 characters, compelling, includes the keyword.
- H1: exactly one, matches page intent, includes the keyword.
- H2–H6: logical hierarchy, no skipped levels, descriptive text.
- URL: short, descriptive, hyphenated, no parameters.
- Internal links: sufficient count, relevant anchor text, no orphan pages.
- External links: to authoritative sources, reasonable count.
### Content quality
- Word count against the page-type minimum (homepage / service / blog / product / location — thresholds live with the [[seo]] orchestrator's quality gates).
- Readability: Flesch Reading Ease score, grade level.
- Keyword density: natural (1–3%), semantic variations present.
- E-E-A-T signals: author bio, credentials, first-hand-experience markers.
- Freshness: publication date, last-updated date.
### Technical elements
- Canonical tag: present, self-referencing or correctly pointed.
- Meta robots: index/follow unless intentionally blocked.
- Open Graph: `og:title`, `og:description`, `og:image`, `og:url`.
- Twitter Card: `twitter:card`, `twitter:title`, `twitter:description`.
- Hreflang: correct implementation if the site is multi-language.
### Schema markup
- Detect all types present (JSON-LD preferred).
- Validate required properties are populated.
- Identify missing rich-result opportunities.
- Never recommend HowTo (deprecated) or FAQ for rich results (retired May 2026); existing FAQPage need not be removed — use QAPage for genuine Q&A going forward.
### Images
- Alt text: present, descriptive, includes keywords where natural.
- File size: flag >200KB (warning), >500KB (critical).
- Format: recommend WebP/AVIF over JPEG/PNG.
- Dimensions: width/height set, for CLS prevention.
- Lazy loading: report `lazy_method` per image (native | perfmatters | ewww | js-generic | none). Do not flag "not lazy-loaded" when a JS lazy-loader (Perfmatters, EWWW, lazysizes) is detected — those intentionally strip the native `loading="lazy"` attribute in favor of `data-src` placeholders.
### Core Web Vitals (signals only — not measurable from HTML alone)
- Flag potential LCP issues: oversized hero images, render-blocking resources.
- Flag potential INP issues: heavy JS, missing async/defer.
- Flag potential CLS issues: missing image dimensions, content injected after load.
## Key concepts
- **Score card, not a pass/fail** — every category (on-page, content, technical, schema, images) gets its own 0–100 score plus an overall roll-up, so a page can be told apart from "broken" vs. "one weak category".
- **Signal vs. measurement** — the Core Web Vitals section flags *risk factors* visible in static HTML; it is never a substitute for field/lab CWV data, which belongs to [[seo-technical]].
- **Lazy-load false positives** — a page missing the native `loading="lazy"` attribute is not automatically a defect; JS lazy-loaders remove it on purpose. Check for `data-src`/known plugin markers before flagging.
## Output
### Page score card
```
Overall Score: XX/100
On-Page SEO: XX/100 ████████░░
Content Quality: XX/100 ██████████
Technical: XX/100 ███████░░░
Schema: XX/100 █████░░░░░
Images: XX/100 ████████░░
```
### Issues found
Organized by priority: Critical → High → Medium → Low.
### Recommendations
Specific, actionable improvements with expected impact.
### Schema suggestions
Ready-to-use JSON-LD for detected opportunities (hand off deep authoring to [[seo-schema]]).
Written to `plans/marketing/<campaign>/seo-page.md`, with the score card and top issues surfaced inline in the conversation.
### DataForSEO integration (optional)
If DataForSEO MCP tools are available, use `serp_organic_live_advanced` for real SERP positions and `backlinks_summary` for backlink data and spam scores.
## Error handling
| Scenario | Action |
|---|---|
| URL unreachable (DNS failure, connection refused) | Report the error clearly. Do not guess page content. Suggest the user verify the URL and try again. |
| Page requires authentication (401/403) | Report that the page is behind authentication. Suggest the user provide the rendered HTML directly or a publicly accessible URL. |
| JavaScript-rendered content (empty body in raw HTML) | Note that key content may render client-side. Analyze the available HTML and flag that results may be incomplete. Suggest a browser-rendered snapshot if one is available. |
## Cross-references
- `plans/marketing-context.md` — required hub
- [[seo-writing]] — Stage 4 (`references/stage-4-optimize.md`) executes a narrow generation/density-check subset of this skill's checks for one in-flight article
- [[seo-schema]] — deep JSON-LD authoring and validation for schema gaps this skill identifies
- [[seo-technical]] — site-wide crawl/index/architecture and actually-measured Core Web Vitals
- `.claude/workflows/marketing-rules.md` — content quality rules
- `.claude/skills/marketing/README.md` — full kit overview
- `.claude/skills/marketing/seo/SKILL.md` — orchestrator (parent); quality-gate word-count minimums
## Provenance
Imported from `AgriciDaniel/claude-seo` (`skills/seo-page/SKILL.md`) and adapted for KitForge. Adaptations: KitForge frontmatter, scoped to the marketing kit namespace (`/mk:`), added an explicit scope boundary against [[seo-writing]] Stage 4, references `plans/marketing-context.md`. Domain checks (on-page, content quality, technical, schema, images, CWV signals) and the error-handling table are preserved from the source.Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!