audit-agents
Audit or rewrite AGENTS.md so it holds only lasting principles. Run it only when the user…
Best-practice rulebook for a marketing site's pages, organized by page class — campaign landers, product pages, programmatic SEO trees, editorial. Use when writing or updating a landing/marketing page, wiring a campaign lander to an attribution identifier, changing site-wide
$ npx -y skills add dzhng/skills --skill marketing-pages --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/marketing-pagesContext preview
The summary Claude sees to decide when to auto-load this skill.
Best-practice rulebook for a marketing site's pages, organized by page class — campaign landers, product pages, programmatic SEO trees, editorial. Use when writing or updating a landing/marketing page, wiring a campaign lander to an attribution identifier, changing site-wide
name: marketing-pages description: Best-practice rulebook for a marketing site's pages, organized by page class — campaign landers, product pages, programmatic SEO trees, editorial. Use when writing or updating a landing/marketing page, wiring a campaign lander to an attribution identifier, changing site-wide nav/footer links, touching sitemap/robots/agent-readable surfaces, or auditing a public site's indexing, reachability, and conversion setup.
A rulebook, not a workflow: every rule below is simultaneously a constraint to build against and a check to audit against. Classify the page first — every public page belongs to exactly one **page class**, and the class decides its indexing, linking, chrome, and wiring.
| Class | Indexing | Reachability | Chrome | |---|---|---|---| | **Campaign lander** | `noindex, follow`; never in a sitemap | never linked from nav/footer | minimal: logo + ONE CTA, legal-only footer, no site nav | | **Product page** | indexed | nav Product section and/or footer | full chrome | | **SEO tree page** (programmatic: per-persona, per-industry, per-competitor) | indexed | footer link grid + hub pages | full chrome | | **Editorial** (blog/guides) | indexed | header + footer | full chrome | | Legal/utility | indexed | footer | full chrome |
linked, indexed class or make it a campaign lander. Never leave the halfway state.
`startsWith` covers blanket noindex and "never nav-linked" checks, and slug collisions with real pages become impossible.
Campaign landers are alternate main landers — one audience, one promise, paid traffic. They trade SEO for message-match freedom; indexed near-duplicates split authority and freeze copy that should be A/B-able daily.
unbroken promise. Where the product supports it, the campaign identifier flows through signup into onboarding and analytics, so the first-run experience continues the promise and conversions attribute per lander.
microcopy ("no credit card"); capture only what qualifies later (usually just email).
LCP is a conversion input on paid traffic.
(lead → signup → purchase) must be readable somewhere before ads spend.
Search Console afterward are the intended signal, not a defect.
Each of these has one owner in the codebase — find the current owner rather than trusting remembered paths:
check against.
sitemap is a contradictory signal, as is an indexed page missing from it. `lastmod` is honest (content date, not build time).
render from the same copy source the page renders from — never from built HTML, never hand-drifted duplicates.
campaign landers and internal surfaces. robots, meta robots, and the sitemap must agree on every URL.
grid is the crawl rail. Pages discoverable only via the sitemap sit in "Discovered — not indexed" for weeks and receive no internal authority.
the product code owns — restated numbers drift silently and nothing turns red.
verify every authored target resolves.
(redirect to the canonical locale, not 404) — sitewide chrome prefetches every link from every page.
registry, sitemap, agent-readable twin, links from kept pages, visual baselines, and e2e/journey anchors (grep the test suites — a rename that keeps local gates green can break a live journey hours later).
than footer anchors — add them where content genuinely relates.
refreshed on a real cadence — a stale dated page is worse than an undated one.
thin templated pages are doorway-page bait.
its hub, and the hub from the site chrome.
(playground/storybook entry) that owns their visual coverage; the fixture menu doubles as the component catalog new pages are composed from.
Routes churn; fixtures are the stable oracle. New template → one new representative route; new section → a fixture, not more route shots.
primed by the change pass defects fresh eyes catch.
Auditing a site = evaluating every rule above, plus these cross-cutting sweeps; each must come back empty or explained:
1. Zombie pages (noindexed AND unlinked). 2. Sitemap/robots/meta disagreements. 3. Campaign lander linked from any indexed page, or
AI skills for building software factories. My personal library of domain-agnostic agent skills, reused across every project.
Repo: dzhng/skills
Audit or rewrite AGENTS.md so it holds only lasting principles. Run it only when the user…
Eval and improve a skill against golden cases — run the target skill blind in a fresh,…
Create or revise agent skills. Use when adding a new skill file, renaming a skill,…
Audit the choices an implementing agent made, not its diff — a pure decision audit that…
Audit and prioritize performance work through bounded-work and forward-progress checks. Use…
Audit whether tests earn their maintenance cost and which suite owns each contract. Use when…