---
name: seo-audit
description: Diagnose and prioritize SEO issues across crawlability, indexation, technical health, on-page, and content quality. Use when the user says "SEO audit", "why am I not ranking", "traffic dropped", "core web vitals", "crawl errors", or anything vague like "my SEO is bad". Not for pages at scale: use programmatic-seo. Not for structured data: use schema. Not for AI answer engines: use ai-seo. Not for page hierarchy planning: use site-architecture.
license: MIT
metadata:
  author: TechTide AI (Alex Cinovoj)
  provenance: rewritten from patterns in an open SaaS marketing skills pack (MIT)
  category: SEO & AEO
---

# SEO Audit

An audit is only useful if it produces a ranked fix list with evidence. Find what blocks indexing first, what slows the site second, what weakens pages third. Everything else is commentary.

## Intake

If a product marketing context file exists (`.agents/product-marketing.md` or `.claude/product-marketing.md`), read it before asking anything. Then confirm: site type and business goal, known issues or recent migrations, scope (full site or specific pages), and whether Search Console or analytics access exists. Missing answers narrow the audit; say so in the report.

## Priority Order

Audit in this sequence. A fast site that Google cannot index still gets zero traffic.

1. **Crawlability and indexation.** robots.txt blocks, sitemap health, noindex on important pages, canonical direction, redirect chains, soft 404s, orphan pages, `site:` count vs expected.
2. **Technical foundations.** Core Web Vitals (LCP < 2.5s, INP < 200ms, CLS < 0.1), TTFB, HTTPS and mixed content, mobile rendering, URL hygiene.
3. **On-page optimization.** Unique titles (50-60 chars, keyword early), unique meta descriptions, one H1 per page with logical heading hierarchy, image alt text, internal links with descriptive anchors, no keyword cannibalization.
4. **Content quality.** Search intent match, depth vs top competitors, E-E-A-T signals (author, sourcing, transparency), thin and stale pages.
5. **Authority.** Only after the above; links cannot rescue an unindexable site.

Read references/audit-checklists.md for the full per-area checklists and common issues by site type (SaaS, e-commerce, content, multilingual, local).

## The Schema Detection Trap

Plain `curl` and HTML-to-text fetchers cannot reliably detect structured data. Many CMS plugins (Yoast, Rank Math, AIOSEO) inject JSON-LD client-side, and text-mode fetchers strip `<script>` tags entirely. Reporting "no schema found" from static HTML alone is a false finding.

Verify schema with one of: a rendering browser (`document.querySelectorAll('script[type="application/ld+json"]')`), Google's Rich Results Test, or a Screaming Frog crawl with JS rendering. For fixing or writing markup, hand off to the schema skill.

## Report Format

Deliver in this order:

1. **Executive summary.** Health verdict, top 3-5 issues, quick wins.
2. **Findings by area.** For each: Issue, Impact (High/Medium/Low), Evidence (how you found it), Fix (specific action), Priority.
3. **Action plan.** Critical fixes blocking indexing or ranking, then high-impact items, then quick wins, then long-term work.

Every finding needs evidence. "Titles could be better" is not a finding. "14 of 40 blog posts share the title '<BRAND> Blog'" is.

## Verification

Before delivering, spot-check your own findings:

- Run `curl -sI https://<DOMAIN>/` and one important inner page. Expect HTTP 200, HTTPS, and a single redirect hop at most from the www or http variant. A chain of two-plus redirects confirms a redirect finding; a 200 contradicts a "page is down" claim.
- Fetch `https://<DOMAIN>/robots.txt`. Expect important paths not disallowed and a sitemap line present. If your report says robots.txt blocks a section, quote the exact line.
- For any "not indexed" claim, check `site:domain.com/path` or the Search Console coverage report. If it is indexed, cut the finding.

## Good vs Bad

**Bad:** "Your site needs more backlinks and better content" delivered to a site whose staging robots.txt shipped to production with `Disallow: /`. The audit ranked cosmetics over a total indexing block.

**Good:** The audit opens with the robots.txt block as the single critical finding, evidence quoted, fix specified (deploy corrected file, request recrawl), and defers link advice until indexing recovers.

## Footguns

- **False "no schema" findings.** Text fetchers strip script tags. Fix: verify with a rendering tool before reporting, per the trap section above.
- **Lab-only performance data.** A single PageSpeed run on one page is not the field experience. Fix: prefer CrUX field data in PageSpeed Insights and the Search Console CWV report; test key templates, not just the homepage.
- **Auditing the redirect target, not the source.** Testing only the final URL hides chains and loops. Fix: test the www, http, and trailing-slash variants users and links actually hit.
- **Recommending URL changes without a redirect plan.** Restructuring URLs without 301s burns existing equity. Fix: every renamed URL ships with a mapped 301.

## Completion Checklist

- [ ] Crawlability and indexation checked before anything else
- [ ] Every finding has evidence, impact, and a specific fix
- [ ] Schema claims verified with a rendering tool, not raw HTML
- [ ] Action plan ordered: blockers, high-impact, quick wins, long-term
- [ ] Sibling handoffs named where relevant (schema, ai-seo, programmatic-seo, site-architecture)

Any box unchecked: not done. Fix or say so.
