site-launch-checklist
此技能提供全面的网站上线前审计和设置工作流,确保新网站在发布前满足各项要求。它能协调分析工具配置、法律合规、安全头部、SEO优化、文案一致性、OpenGraph设置、网站质量门控(如Lighthouse、Core Web Vitals和WCAG可访问性),并协助设置每周SEO代理,帮助用户顺利、高质量地发布网站。
npx skills add https://github.com/samber/cc-skills --skill site-launch-checklistBefore / After 效果对比
1 组在没有此技能之前,开发者或团队需要手动执行繁琐的网站上线前检查,包括SEO、安全、性能和法律合规等多个方面。这不仅耗时耗力,还容易遗漏关键项,导致网站上线后出现问题,影响用户体验和业务表现。
此技能通过自动化和引导式流程,显著缩短了网站上线前的审计时间。它能系统性地检查所有关键环节,减少人为疏漏,确保网站以最佳状态发布,提升上线质量和效率。
Site Launch Checklist
Pre-launch audit and setup workflow for shipping a new website. Opinionated for Cloudflare DNS + Vercel hosting + PostHog + Legal context.
Interaction style (READ FIRST)
This skill is intentionally interactive. Use ask_user_input_v0 aggressively instead of assuming. Ask one question at a time with 2-4 tappable options. The user will tap, not type.
Always ask these questions at the start of a run (one at a time, in this order):
- Site type:
doc-site|marketing/lead-gen|SaaS-app|training/paid-course|personal-portfolio - Migration:
greenfield-new-domain|migration-need-301-redirects|replacing-existing-on-same-domain - Multilingual:
single-locale|en|fr+en|other-multi - PostHog setup:
hogpost.samber.dev|set-up-new-proxy|skip-PostHog - AI scraper policy:
use-default-for-site-type|customize-per-bot|block-all - Browser tool available:
claude-chrome-extension|playwright|neither-skip-browser-checks
Ask again at every decision point throughout the phases, including:
- Whether to install Sentry / BetterStack / Crisp (depends on site type, ask explicitly)
- www vs apex canonical preference (most sites: apex; ask anyway)
- Which AI bots to allow if user chose
customize-per-bot - CSP tightness level:
strict-default-src-none|balanced-allow-self|permissive-for-marketing - Whether to skip a phase entirely (e.g., skip Phase 3 if non-FR site)
Never proceed past a decision point without explicit user input. Verbose checklists without checkpoints are not the goal.
Never install any MCP server or skill without explicit user confirmation. Always ask via ask_user_input_v0 before running npx skills add, claude mcp add, or any equivalent install command — even when the skill selection workflow proposes a curated subset.
How to use this skill
- Run the start-of-session questions above.
- Walk the user through phases 1-10 in order. For each phase: a. List items, ask if any should be skipped. b. For each remaining item, run the verification command (see "Verification tools" below). c. Report pass/fail. On fail, ask the user if they want to fix now or queue for later.
- End with a status report grouped by phase, with blockers, recommended fixes, and optional improvements clearly separated.
Companion skills
Six skill packs are useful for site launches. Never install full multi-skill packs. The actual subset to install is decided at invocation time based on the site type the user confirms.
Pack inventory
| Pack | What it covers | Typically useful for |
|---|---|---|
AgriciDaniel/claude-seo | SEO + GEO + schema + hreflang + sitemaps audits, parallel sub-agents | All site types |
addyosmani/web-quality-skills | Lighthouse, Core Web Vitals, accessibility, performance, best practices | All site types |
trailofbits/skills | Security audit (OWASP, headers, dependencies) | All site types |
aaron-he-zhu/seo-geo-claude-skills | 20 SEO+GEO skills, CORE-EEAT + CITE frameworks, /seo: slash commands | Content-heavy sites, competitive niches |
coreyhaines31/marketingskills | ~30 marketing skills (CRO, copywriting, ads, popups, email, paywalls, etc.) | marketing/lead-gen, SaaS-app, training/paid-course |
jonathimer/devmarketing-skills | 33 developer-marketing skills (persona, docs-as-marketing, technical tutorials, etc.) | doc-site, SaaS-app for developers |
Skill selection workflow (run at session start)
After the user confirms site type, for each pack relevant to that site type:
- List available sub-skills:
npx skills add owner/repo --list - Propose a curated subset based on site type and the phases this skill will execute. Match each phase's needs to specific sub-skills the listing returns.
- Confirm with the user via
ask_user_input_v0. Use multi-select when the proposed list has more than 3 items, single-select (install-as-proposed|let-me-modify|skip-this-pack) otherwise. - Bulk install the agreed subset:
npx skills add owner/repo --skill A B C
Rules:
- Sub-skill names live in the pack, not in this SKILL.md. Always query
--listfor the current state. Pack contents change. - Never run
npx skills add owner/repowithout--skill(that installs everything). - Site type → packs mapping (which packs to enumerate, sub-skills still selected per workflow):
doc-site: claude-seo, web-quality-skills, trailofbits, seo-geo-claude-skills, devmarketing-skillsmarketing/lead-gen: claude-seo, web-quality-skills, trailofbits, seo-geo-claude-skills, marketingskillsSaaS-app: all sixtraining/paid-course: claude-seo, web-quality-skills, trailofbits, marketingskillspersonal-portfolio: claude-seo, web-quality-skills, trailofbits, seo-geo-claude-skills (lightweight subset)
- If the user later requests a phase that needs a sub-skill not yet installed, run the workflow again for that single sub-skill rather than re-installing the whole subset.
This avoids importing 80+ skills the user does not need, avoids going stale on sub-skill names, and avoids overfitting to a single pack version.
When delegating during a phase, do not duplicate work this skill orchestrates. Call the specialist with a narrow scope (e.g., "run only the security headers sub-audit on URL X").
Copywriting voice and humanizer pass
Every site has visible marketing copy (hero, features, CTAs, meta descriptions, OG descriptions, blog posts, 404 page text). Two layers of polish are mandatory before launch:
1. Define TONE.md once per site
Ask the user (ask_user_input_v0): "Does this site already have a TONE.md?" (yes-already-exists | no-create-from-template | skip-use-default).
If creating: write it to .agents/TONE.md or repo root TONE.md. See references/templates.md (section "TONE.md template") for the structure.
TONE.md specifies: voice (terse, contrarian, etc.), forbidden patterns (e.g., "delve", "crucial", em dashes, AI-sounding openers), sentence length preference, audience reading level, examples of good and bad sentences from the user's own writing.
2. Run a humanizer pass in the matching language
After every drafting step (whether by a copywriting skill, by hand, or by Claude directly), run a humanizer to strip AI patterns.
Ask the user (ask_user_input_v0) for the site's primary audience language at the start of the session if not already known:
english-global→npx skills add https://github.com/blader/humanizer --skill humanizerfrench→ usesamber/humaniseur-fr(custom French humanizer) or equivalent French-tuned skillother→ install matching humanizer if available; otherwise the skill writes a short language-specific anti-pattern checklist inline
Apply the humanizer to: hero copy, feature descriptions, CTA buttons, meta descriptions, OG/Twitter card descriptions, blog posts, email signup confirmations, 404 page text. Skip for legal pages (mentions légales, CGV) since they have rigid wording requirements.
3. Always reference TONE.md when invoking copywriting skills
When delegating to any copywriting or content-writing sub-skill (selected at invocation per the skill selection workflow), include TONE.md in the prompt context. Pass voice constraints explicitly: "Follow .agents/TONE.md. Avoid the listed patterns. Apply the humanizer after drafting."
Browser interaction preference
Many checks require a real browser (Lighthouse runs, securityheaders.com scan, opengraph.xyz validation, Twitter card validator, mobile viewport, screen reader smoke, Network tab inspection).
Always prefer the Claude Chrome extension. Fall back to Playwright only if the Chrome extension is unavailable. If neither is available, ask the user (ask_user_input_v0) whether to skip browser checks entirely or wait until they enable one.
Verification tools
Most checks are doable from the command line without third-party services. Use these tools inline at every phase. Don't trust panels in Cloudflare/Vercel/Google dashboards alone, verify with curl.
DNS (Phase 1):
dig +short A example.com # A record
dig +short AAAA example.com # AAAA (IPv6)
dig +short MX example.com # MX (mail)
dig +short TXT example.com # SPF + verification TXT
dig +short TXT _dmarc.example.com # DMARC
dig +short TXT default._domainkey.example.com # DKIM (selector varies)
dig +short CAA example.com # CAA
dig +dnssec example.com | grep RRSIG # DNSSEC active
TLS / HTTPS (Phase 1):
curl -sIL https://example.com | head # follow redirects
curl -sI https://www.example.com # check www handling
openssl s_client -showcerts -connect example.com:443 < /dev/null 2>/dev/null | openssl x509 -noout -dates
Headers (Phase 4):
curl -sI https://example.com | grep -iE 'content-security-policy|strict-transport-security|x-frame-options|x-content-type-options|referrer-policy|permissions-policy'
# Full header dump:
curl -sI https://example.com
# External graders:
curl -s "https://api.securityheaders.com/?q=https://example.com&followRedirects=on&hide=on" -I | grep -i 'x-grade'
SEO files (Phase 5):
curl -s https://example.com/robots.txt
curl -sI https://example.com/sitemap.xml
curl -s https://example.com/sitemap.xml | head -40
curl -s https://example.com/llms.txt
# Schema (JSON-LD):
curl -s https://example.com/ | grep -A 50 'application/ld+json'
# hreflang:
curl -s https://example.com/ | grep -i hreflang
Open Graph & social (Phase 6):
curl -s https://example.com/page | grep -iE 'og:|twitter:|<title|name="description"'
Favicons & manifest (Phase 7):
curl -sI https://example.com/favicon.ico
curl -sI https://example.com/favicon.svg
curl -sI https://example.com/apple-touch-icon.png
curl -s https://example.com/manifest.json | jq .
404 / 500 / redirects:
curl -sI https://example.com/this-does-not-exist
curl -sIL https://example.com/old-url # verify 301 chain
Always run the relevant command, paste the output to the user when reporting, then ask (via ask_user_input_v0) whether to fix immediately or queue.
Phase 1: Domain & Infrastructure
Most of this is one-click via Cloudflare's dashboard if the domain is on Cloudflare.
Ask first: "Is the domain already on Cloudflare with the standard config from previous launches?" (yes-standard | yes-needs-review | no-fresh-setup)
Checklist:
- Cloudflare: proxy ON for apex + www, TLS 1.3 minimum, "Always Use HTTPS" enabled, HSTS preload enabled in Cloudflare SSL/TLS settings
- DNS A/AAAA or CNAME pointing to Vercel (verify with
dig +short A example.com) - MX records for Google Workspace (verify with
dig +short MX example.com) - SPF, DKIM, DMARC records (verify all 3 with the dig commands above)
- CAA records restricting cert issuance (verify with
dig +short CAA example.com) - DNSSEC enabled at registrar level (verify with
dig +dnssec) - Vercel: project linked to repo, prod + preview env vars set, custom domain attached, prod and preview aliases correct
- Decide www vs apex canonical, configure 308 redirect for the non-canonical (verify with
curl -sIL https://www.example.com) - Custom 404 page renders (verify with
curl -sI https://example.com/does-not-exist) - Custom 500 page exists (cannot easily verify without forcing an error, ask user)
- If migration: 301 redirect map for every old URL (loop verification with
curl -sILper URL)
Backups
If you don't configure backups at launch, you never will. Do it now.
Ask the user (ask_user_input_v0): "Which data stores does this app write to?" (database-only | database-plus-file-storage | file-storage-only | stateless-no-persistent-data). If stateless-no-persistent-data, skip this section.
Database:
- Automated daily backups enabled at the provider level (Neon, Supabase, PlanetScale, Railway, RDS — each has a one-click toggle). Verify by opening the backup panel and confirming the last backup timestamp is recent.
- Retention policy set to ≥30 days
- Point-in-time recovery (PITR) enabled if available (Neon, Supabase, RDS all support it)
- Off-site copy: if the provider stores backups in the same region as the primary, configure cross-region replication or a nightly export to a separate storage account (S3, R2, GCS)
- Restore drill performed before launch: pick a recent backup, restore to a staging database, verify row counts and a sample query. A backup you haven't tested is not a backup.
File storage (if applicable — S3, R2, GCS, Cloudflare Images):
- Versioning enabled on the primary bucket
- Cross-region replication or a scheduled sync to a secondary bucket. Backblaze B2 is a cheap, reliable option for off-site copies (significantly cheaper than S3/GCS egress). Use
rcloneto sync from S3/R2/GCS → B2 on a daily cron. - Lifecycle rule: transition old versions to cheaper storage after 30 days, delete after 90 days (adjust to cost tolerance)
Secrets / environment variables:
- All env vars documented and stored in a secrets manager (1Password, Doppler, Vault, or equivalent). Not in a
.envfile on someone's laptop. - Verify: if every engineer's machine burned tonight, could a new team member restore prod from scratch using only the secrets manager + git?
Monitoring:
- Set up an alert (email or Slack) if the daily backup job fails. Most providers support this natively; configure it before closing the backup panel.
Phase 2: Analytics & Observability
Most third-party integrations are one-click via Cloudflare or Vercel.
For the conditional tools (Crisp, Sentry, BetterStack), use ask_user_input_v0 to confirm per site type. See references/decisions.md for the observability tier matrix.
Always-on:
- Google Analytics 4: property created, measurement ID embedded, gated behind CNIL consent
- PostHog: based on user's earlier answer:
- If
hogpost.samber.dev: configure client withapi_host: "https://hogpost.samber.dev"and verify CORS allows the new domain (test with browser console orcurl -H "Origin: https://newsite.com" -I https://hogpost.samber.dev/decide) - If
set-up-new-proxy: add path rewrite innext.config.jstous.i.posthog.comandus-assets.i.posthog.com, init client withapi_host: "/ingest" - If
skip-PostHog: skip
- If
- Google Search Console: site verified (DNS TXT or HTML file), sitemap submitted
- Bing Webmaster Tools: site verified, sitemap submitted, IndexNow key file at
/{key}.txton root (verify withcurl -sI https://example.com/{key}.txt) - Ahrefs: site added to dashboard for tracking
- Add the site to the inte
...
用户评价 (0)
发表评价
暂无评价
统计数据
用户评分
为此 Skill 评分