SKILL.md
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.
- Crawlability and indexation. robots.txt blocks, sitemap health, noindex on important pages, canonical direction, redirect chains, soft 404s, orphan pages,
site:count vs expected. - Technical foundations. Core Web Vitals (LCP < 2.5s, INP < 200ms, CLS < 0.1), TTFB, HTTPS and mixed content, mobile rendering, URL hygiene.
- 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.
- Content quality. Search intent match, depth vs top competitors, E-E-A-T signals (author, sourcing, transparency), thin and stale pages.
- 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:
- Executive summary. Health verdict, top 3-5 issues, quick wins.
- Findings by area. For each: Issue, Impact (High/Medium/Low), Evidence (how you found it), Fix (specific action), Priority.
- 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/pathor 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.