prod-page-audit
Skill20 starsChanged 15 days agoMITView on GitHub
Run a production readiness audit on a web page or site and fix the gaps it finds — covering SEO, favicon, Open Graph / social previews, and mobile optimization. Use whenever the user asks for a production check, launch checklist, SEO or OG audit, mobile readiness check, mentions going live, or asks about favicon, meta tags, social previews, or viewport issues.
In this repository21 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- a11y-page-auditSkill
- branch-comment-cleanupSkill
- branch-test-planSkill
- context7-mcpSkill
- env-example-syncSkill
- feature-based-architectureSkill
- great-readmeSkill
- harvest-reviewsSkill
- light-dark-modeSkill
- localizationSkill
- minimal-code-changesSkill
- quantum-design-tokensSkill
- reviewable-commitsSkill
- shell-aliases-socialSkill
- skill-best-practices-syncSkill
- skills-auditSkill
- skills-socialSkill
- stacked-pr-splitterSkill
- team-reviewerSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 2 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 31
If ambiguous, ask one focused question before proceeding.
- Very specific: line 36
If a11y-page-audit already ran on this page, skip the landmarks, single <h1>, alt and lang checks below and report them as covered there.
- Very specific: line 50
Fix: add/rewrite title, description, canonical, and lang inline.
- Very specific: line 98
No fixed widths wider than the viewport.
- Very specific: line 106
Fix: add/correct the viewport meta.
- Distinctive: line 117
When a URL or dev server is available, run Lighthouse (it emulates a mobile device by default) and an OG preview check.
- Very specific: line 150
Dynamic OG images: if the project uses @vercel/og or similar, audit the template instead of replacing it.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Production Page Audit
Audit + auto-fix workflow for web pages before they go to production. Don't restructure
HTML blindly, and don't generate robots.txt or sitemap.xml unless asked.
| Area | What's checked | Auto-fix? |
| SEO | Title, description, semantic HTML, canonical, robots | Fix meta; flag structural issues |
| Favicon | Presence, sizes, formats, manifest | Generate if missing |
| Open Graph | og: tags, Twitter Card, image dimensions | Generate OG image if missing |
| Mobile | Viewport, font sizes, input zoom, touch targets | Fix in-place where possible |
Phase 0 — Understand the target
- Input type: file path / project directory → read source directly; URL → fetch or ask for the HTML.
- Page type: landing, blog post, product, portfolio — determines what the OG image and favicon should look like.
- Brand context: colors, logo, name — pull from CSS variables,
<meta>, or ask.
If ambiguous, ask one focused question before proceeding.
Phase 1 — SEO
For each item in Phases 1–4, record the file path, current state, and verdict (✅/⚠️/❌).
If a11y-page-audit already ran on this page, skip the landmarks, single <h1>, alt
and lang checks below and report them as covered there.
Check:
<title>: exists, 50–60 chars, descriptive and unique<meta name="description">: exists, 120–160 chars, action-oriented<link rel="canonical">present;<meta name="robots">not accidentallynoindex- Single
<h1>, logical heading nesting - Images have meaningful
alt; links have descriptive text (not "click here") - Landmarks:
<header>,<main>,<footer>,<nav>,<article>/<section>where appropriate <html lang="...">set- JSON-LD structured data if applicable (article, product, local business)
Fix: add/rewrite title, description, canonical, and lang inline. Add missing alt
with descriptive placeholders marked <!-- TODO: update alt -->. Flag structural issues
(heading hierarchy, missing <main>) with a TODO comment and suggested fix — don't
restructure HTML blindly.
Phase 2 — Favicon
Check: <link rel="icon"> exists; sizes 16/32 (ICO or PNG), 180 (apple-touch-icon),
192 + 512 (PWA manifest); <link rel="manifest"> if PWA icons expected; SVG favicon for
modern browsers.
Fix if missing:
- Extract brand identity: primary color from CSS custom properties or dominant styles;
initials from
<title>/og:site_name; any existing logo SVG. - Generate an SVG favicon — brand initial(s) on a rounded rect in the primary color.
- Save as
favicon.svg; render the PNG sizes from it and pack 16/32/48 intofavicon.ico. Node projects: sharp for the PNGs,png-to-icofor the ICO (sharp can't write ICO). Python projects: Pillow for both (img.save("favicon.ico", sizes=[(16, 16), (32, 32), (48, 48)])). If neither is installed, note conversion is a build-time step. - Inject the standard
<head>links: SVG icon, 32×32 PNG, apple-touch-icon, manifest. - Generate
site.webmanifestif missing (name, short_name, 192/512 icons, theme/background color,display: standalone).
Phase 3 — Open Graph & social previews
Check: og:title, og:description, og:image (absolute URL, 1200×630), og:url
(canonical), og:type, og:site_name; Twitter Card tags (twitter:card,
twitter:title, twitter:description, twitter:image).
Fix if missing: derive basic OG tags from existing meta content. If og:image is
missing or placeholder, generate one:
- Pick the source by page type: article → hero image; product → product image; landing/portfolio → generate a branded card.
- Generate at 1200×630 with ~60px safe-zone padding: brand background, logo, title (max 2 lines), subtitle, site name/URL in a corner. Render with sharp + resvg in Node projects or Pillow in Python projects; fall back to an HTML template screenshot at build time only when neither is installed.
- Save under
/public/og/and injectog:image(+ width/height) andtwitter:card: summary_large_image.
Phase 4 — Mobile
Check:
<meta name="viewport" content="width=device-width, initial-scale=1">— and nouser-scalable=no/maximum-scale=1(accessibility violation)- All
<input>/<select>/<textarea>havefont-size≥ 16px — iOS Safari zooms on focus below that; the most common overlooked issue - No fixed widths wider than the viewport; images
max-width: 100%; no horizontal scroll at 375px @mediacoverage: ≤640px and ≤1024px if the layout is complex- Touch targets ≥ 44×44px with ≥ 8px gaps
- Typography: base ≥ 16px, line-height ≥ 1.5, nothing below 12px
- Performance (flag, don't fix): image
width/heightattributes (CLS),loading="lazy"below the fold,defer/asyncon scripts
Fix: add/correct the viewport meta; add
input, select, textarea { font-size: max(16px, 1rem); } if missing; add missing
max-width: 100% on images; flag touch-target issues with specific selectors and
suggested fixes.
Phase 5 — Verify
- Re-run the Phase 1–4 checks against the modified files; every item that was ❌ is now ✅ or explicitly listed under "Still needs human attention".
- The
<head>still parses: no duplicate<title>/og:*tags, every injected<link>points at a file that exists. When a URL or dev server is available, run Lighthouse (it emulates a mobile device by default) and an OG preview check; treat the scores as a regression catch, not the verdict. Lighthouse needs Chrome; without it, list the check under "Still needs human attention".
npx lighthouse <url> --only-categories=seo,best-practices --output=json --quiet \ --chrome-flags="--headless"
Fix any failure and rerun these checks before the report.
Report
## Production Readiness Report — [Page Title]
SEO ✅/⚠️/❌ per item, one line each
Favicon [PASS / GENERATED / FAIL]
Open Graph [PASS / GENERATED / FAIL]
Mobile ✅/⚠️/❌ per item, one line each
### Changes made
- [files modified or created]
### Still needs human attention
- [items requiring manual decision or content]Notes & edge cases
- Framework-specific: Next.js →
metadataexports inapp/layout.tsx; Nuxt →useHead()/useSeoMeta(). Fix via the framework-idiomatic pattern, not raw HTML. - Dynamic OG images: if the project uses
@vercel/ogor similar, audit the template instead of replacing it. - i18n: multiple languages → recommend
hreflangalternates. - Dark mode: suggest an SVG favicon with a
prefers-color-schememedia query inside the SVG. robots.txt/sitemap.xml: mention if missing, but don't generate unless asked.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

