A technical SEO audit and content plan that runs against your own site and data: a polite crawl, structured data, internal links, Core Web Vitals, keyword clusters from your exports, briefs, draft checks and a re-crawl, each ending in evidence.
Nine skills that do the first pass of an SEO agency's audit and content plan as scripts against your own site, each ending in a machine-checked gate that prints PASS, FAIL or BLOCKED with the URL and the evidence. Write the SEO contract (production origin, the hosts the crawler may touch, limits, page templates, priority pages, locales); crawl the site politely with robots.txt obeyed, retries and every template sampled, sitemap indexes and gzip sitemaps read, and find redirect chains and loops, broken links, canonicals that point at redirects, noindex pages in the sitemap, hreflang that is not reciprocal, mixed content, duplicate titles and near-duplicate pages; check JSON-LD against the properties on Google's Search Central pages and against what the page shows (a schema price that is not on the page); map click depth, orphans and internal PageRank; measure Core Web Vitals per template with Lighthouse, lab and field labelled; cluster your Search Console and keyword-tool exports, find cannibalisation and gaps; assemble briefs from evidence for your agent to outline; check drafts against them with an answer map, keyword stuffing included (structure, coverage and that the brief's facts are asserted, not that they are true: a person still reads every draft); and re-crawl after the fixes, with a report that shows what was fixed, what regressed and refuses stale evidence. Python 3 standard library only; Lighthouse is optional. It reads server HTML (no JavaScript rendering), uses no SERP or backlink data, and the report says what it did not check. Requires an AI that can run commands on your computer (Claude Code, Codex or Cursor). The worked example is a fictional field service software company; every skill reads your own contract first.
Quaywise is not a real company. Field service software: a marketing site, blog and docs, about 90 pages in English and German. Quaywise is built as a static site with 22 planted defects, served by a local server that does redirects, status codes and headers, with Search Console and keyword-tool exports that carry ground-truth clusters, plus two drafts and a fixed twin. The whole chain ran on both from a clean checkout, using the scripts exactly as the skills ship them.
Audit crawl: FAIL, with all 37 expected findings raised and every keyword clustered as in the ground truth
| Gate | Skill | Status | Blocker | Major | Minor |
|---|---|---|---|---|---|
| contract | seo-contract | PASS | 0 | 0 | 0 |
| crawl | site-crawl-audit | FAIL | 1 | 17 | 39 |
| schema | structured-data-check | FAIL | 0 | 3 | 31 |
| links | internal-link-graph | FAIL | 0 | 3 | 4 |
| cwv | core-web-vitals-lab | FAIL | 0 | 3 | 0 |
| keywords | keyword-cluster-map | FAIL | 0 | 2 | 2 |
| briefs | content-brief-builder | PASS | 0 | 0 | 3 |
| draft (time tracking) | draft-brief-check | PASS | 0 | 0 | 1 |
| draft (service agreement) | draft-brief-check | FAIL | 0 | 11 | 6 |
Re-crawl after fixes: FAIL: 47 findings fixed, 1 regression introduced by the fixes, 1 major still open, none unverified (94 URLs observed in both crawls)
Fixed twin: PASS, with every gate PASS on a crawl and a re-crawl
From the report
CANON-TO-REDIRECT · /features/route-optimization/
Canonical /features/routing redirects (301 -> /features/route-optimization/).
Fix: Point the canonical at the final URL.
SCHEMA-PRICE-MISMATCH · /pricing/ (Offer "Team")
Offer Team price 59 USD is not on the page; the page shows 29, 79 and 149.
Fix: Make the markup match the visible price.
KW-CANNIBALIZATION · cluster "dispatch software"
5 queries, 9,936 impressions split across /features/dispatch/ (52%) and /blog/best-dispatch-software/ (44%).
Fix: Choose one page for the cluster; merge or retarget the other and point cluster anchors at the chosen page.
RECRAWL-REGRESSION · /industries/hvac/
New since the baseline crawl: in the sitemap but noindex, introduced by the duplicate-title fix.
Fix: Remove the noindex, or drop the page from the sitemap if it should not rank.
The crawl and Lighthouse in the proof run against a local copy of the site served by the fixture, not a deployed site, and the report labels both LOCAL.
No Chrome UX Report key was used, so Core Web Vitals in the sample are lab measurements only.
Optional
Questions or a problem with 1.4.2? Email support@skillme.dev.
Arranged in the author's recommended order. Walk through them in sequence, or open any one on its own.
Starts a technical SEO audit and content plan for a website you own – writes the .seo/seo-contract.json every later step obeys (production origin, the hosts the crawler may touch, crawl limits and rate, user agent, page templates by URL pattern.
Crawls a site you own politely with a standard-library crawler (robots.txt obeyed for its own user agent, retries with back-off, sitemap index and .gz sitemaps read, rate, page and depth limits.
Checks the JSON-LD structured data on every crawled page against the required and recommended properties on Google's Search Central pages (each rule cites its page) (Organization, LocalBusiness and its subtypes, Product, Offer, AggregateOffer.
Builds the internal link graph from the crawl and judges the site's architecture with evidence – click depth from the home page (with the shortest path), orphan pages that are in the sitemap but linked from nowhere, indexable pages missing from the sitemap.
Measures Core Web Vitals for one representative URL per page template (plus priority pages) by running Lighthouse through npx with Chrome, three runs per URL with the median run kept (a majority must succeed).
Clusters the site owner's own keyword exports (Google Search Console query and page data, and/or a keyword tool's keyword, volume, difficulty export) by shared ranking pages where Search Console has them and by weighted term overlap otherwise.
Writes one content brief per keyword gap (plus underserved or named clusters) where every field comes from the site's own data – target URL in the right template's folder, search intent.
Checks a draft article or page (Markdown with front matter, or HTML) against its content brief before publishing and returns PASS/FAIL/BLOCKED with evidence – title and meta description lengths with the keyword, one H1, every required subtopic covered.
Closes a technical SEO audit – after fixes go live it diffs the re-crawl against the baseline crawl (fixed, still open, regressed, new pages) with the same rules on both.