Audit
Produce a scored technical and content audit of the target site. Findings, not vibes: every issue gets a severity, evidence, and a one-line fix direction.
Inputs
- Target domain (ask if not given).
- Search Console MCP connected (tools available for queries/pages). If missing, say so and continue with crawl-only checks.
Steps
- Pull real search data (Search Console MCP): top 50 queries and pages by clicks for the last 90 days vs prior 90. Flag:
- Pages with falling clicks at stable position (content decay)
- Two of your pages ranking for the same query (cannibalisation)
- Queries at position 5-15 with high impressions (quick wins)
- Crawl the site: fetch the homepage, sitemap.xml, robots.txt, llms.txt, and the top 10 pages from step 1. For each page check:
- Title and meta description present, unique, right length (titles 50-60 chars, descriptions 140-160)
- Exactly one H1; heading hierarchy sane
- JSON-LD structured data present and valid (Organization on home, Article/Product/FAQ where relevant)
- Canonical tags, image alt text, internal links in and out
- llms.txt exists at the root (if not: P1, AI crawlers get no guidance)
- robots.txt does not block AI crawlers you WANT (GPTBot, Google-Extended, PerplexityBot, ClaudeBot) unless intentional
- Core Web Vitals (free, no key needed for low volume): for the top 5 pages hit
https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=<page>&strategy=mobile
and read LCP, INP, CLS from the CrUX field data. Failing CWV on money pages = P0.
- Score and rank: every finding gets:
- P0 — actively losing you traffic or blocking indexing/AI access
- P1 — meaningful gap vs competitors (missing schema, no llms.txt, decay)
- P2 — hygiene (alt text, minor titles)
Output
A single report, this exact shape:
AUDIT: <domain> — <date>
SCORE SUMMARY: X P0 · Y P1 · Z P2
P0 FINDINGS
1. <finding> — evidence: <data> — fix: <one line>
...
QUICK WINS (from real GSC data)
1. "<query>" at position <n>, <impressions> impressions — <action>
...
Save the report to seo-reports/audit-<date>.md in the project. The diagnose skill consumes it.
Rules
- Never invent numbers. Every position, click count and CWV value comes from the MCP or the API response.
- If a check cannot run (no GSC access, API error), list it under "NOT CHECKED" rather than skipping silently.
1---2name: audit3description: Crawl a website and produce a scored SEO audit (P0/P1/P2 findings) using the Search Console MCP for real ranking data, free Google APIs for Core Web Vitals, and direct crawling for technical checks. Use when asked to "audit", "run the audit", or "check what's broken" on a site.4---56# Audit78Produce a scored technical and content audit of the target site. Findings, not vibes: every issue gets a severity, evidence, and a one-line fix direction.910## Inputs11- Target domain (ask if not given).12- Search Console MCP connected (tools available for queries/pages). If missing, say so and continue with crawl-only checks.1314## Steps15161. **Pull real search data** (Search Console MCP): top 50 queries and pages by clicks for the last 90 days vs prior 90. Flag:17 - Pages with falling clicks at stable position (content decay)18 - Two of your pages ranking for the same query (cannibalisation)19 - Queries at position 5-15 with high impressions (quick wins)202. **Crawl the site**: fetch the homepage, sitemap.xml, robots.txt, llms.txt, and the top 10 pages from step 1. For each page check:21 - Title and meta description present, unique, right length (titles 50-60 chars, descriptions 140-160)22 - Exactly one H1; heading hierarchy sane23 - JSON-LD structured data present and valid (Organization on home, Article/Product/FAQ where relevant)24 - Canonical tags, image alt text, internal links in and out25 - llms.txt exists at the root (if not: P1, AI crawlers get no guidance)26 - robots.txt does not block AI crawlers you WANT (GPTBot, Google-Extended, PerplexityBot, ClaudeBot) unless intentional273. **Core Web Vitals** (free, no key needed for low volume): for the top 5 pages hit28 `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=<page>&strategy=mobile`29 and read LCP, INP, CLS from the CrUX field data. Failing CWV on money pages = P0.304. **Score and rank**: every finding gets:31 - **P0** — actively losing you traffic or blocking indexing/AI access32 - **P1** — meaningful gap vs competitors (missing schema, no llms.txt, decay)33 - **P2** — hygiene (alt text, minor titles)3435## Output3637A single report, this exact shape:3839```40AUDIT: <domain> — <date>41SCORE SUMMARY: X P0 · Y P1 · Z P24243P0 FINDINGS441. <finding> — evidence: <data> — fix: <one line>45...46QUICK WINS (from real GSC data)471. "<query>" at position <n>, <impressions> impressions — <action>48...49```5051Save the report to `seo-reports/audit-<date>.md` in the project. The diagnose skill consumes it.5253## Rules54- Never invent numbers. Every position, click count and CWV value comes from the MCP or the API response.55- If a check cannot run (no GSC access, API error), list it under "NOT CHECKED" rather than skipping silently.