# SEO Health

> Basic technical + on-page SEO health check for any site — verify crawlability, indexation, meta, schema, and per-page sanity are 100%. NOT keyword/content optimization. Use for "seo health check", "is the technical seo sane", "audit the site basics", "any seo errors".

- Skill: `danielimad/seo-health` (Agent Skill)
- Install (CLI): `npx skillmds@latest add danielimad/seo-health`
- Raw SKILL.md: https://api.skillmd.com/api/skills/danielimad/seo-health/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: danielimad (https://skillmd.com/u/danielimad)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/danielimad/seo-health

---


# SEO Health — technical sanity pass (not optimization)

Goal: confirm the site is technically sound and every page is sane — nothing to *rank better*, just nothing *broken*. This is the floor that gates everything else: keyword and content work is wasted on a site that can't be crawled or indexed. Diagnose with data, report Pass/Warn/Fail — don't mass-edit on a hunch.

For a crawl-export-driven audit of an existing site, the /technical-seo-audit skill goes deeper on redirect chains, duplicates, and orphans.

## Part A — Site-wide technical
1. **robots.txt** — reachable, no `Disallow` on money/content pages, AI/search bots not accidentally blocked, sitemap referenced.
2. **XML sitemap** — valid, all URLs canonical + 200 + indexable, no 404/redirect/noindex entries; submitted in Search Console.
3. **Indexation** — indexed count ≈ intended count (Search Console's Pages report / URL inspection); flag "discovered – currently not indexed", "crawled – currently not indexed", accidental `noindex`, and orphans.
4. **Canonicals** — every page self-canonical or correctly cross-canonical; no canonical→noindex/redirect chains; no duplicate-content splits (trailing slash, www/non-www, http/https all resolve one way).
5. **Status & redirects** — no broken internal links (404), no redirect chains/loops, 301 (not 302) for permanent moves.
6. **HTTPS/security headers** — valid TLS, HSTS, no mixed content.
7. **Core Web Vitals** — LCP/CLS/INP in "good" per PageSpeed/CrUX; flag failing templates (don't tune, just flag).
8. **Mobile** — responsive, viewport meta, no horizontal overflow, tap targets sane.

## Part B — Per-page on-page sanity (crawl every route/template)
For each page: one `<title>` (unique, ~50-60ch, present), one `<meta description>` (unique, ~150-160ch), exactly one `<h1>`, sane heading order (no skipped levels), `lang` attribute correct (+ `hreflang` if multilingual), canonical tag present, OG + Twitter card tags, favicon resolves, images have alt text, no `noindex` on pages meant to rank.

## Part C — Structured data
Schema present + valid where expected (Organization/WebSite site-wide; Article/Product/FAQ/BreadcrumbList per type); validate against Rich Results (no errors/warnings that break eligibility). Verify on the **rendered** HTML, not the source template.

## Rules
- **Verify rendered output** (live fetch or rendered DOM), not the source file — SSR/CSR and head-injection make the template a poor witness. Favicon, robots, sitemap, and schema are load-bearing: a "small" change to the document head breaks them silently and nothing in the build fails.
- Multilingual sites: run Part B once per locale, and check RTL rendering for right-to-left languages.
- Output: a Pass/Warn/Fail scorecard (site-wide checks plus a per-page/template table), Fails ranked first, each with the offending URL and the exact issue. Lead with a one-line headline (`N pages, X fails, Y warns — <top issue>`), table below.
- Fixes only after approval; then re-crawl the fixed pages and confirm the check flips to Pass. This skill diagnoses — it does not optimize copy or chase keywords.

