# Publish a new SEO page — ops checklist

**Live:** https://aidaide.app/seo-page-checklist  
**Source:** `FREE_TRAFFIC_GROWTH_PLAN.md` §2c + Team HQ growth-pack DoD  
**Board:** https://aidaide.app/team?task=113  
**Updated:** 2026-07-20

Use this before merging any new comparison, tutorial, hub spoke, or docs chapter page.

## Pricing (never ship stale)

- Free forever (core SSH + SFTP workspace)
- Pro **$19/mo** or **$190/yr**
- Teams Pro **$70/mo**
- **Forbidden as current price:** `$7/mo`, “Single User $7”

## Checklist

### 1. Intent
- [ ] One primary query written down (e.g. `aidaide vs winscp`)
- [ ] One slug / URL (`/vs/winscp`, `/tutorial-…`, `/docs/…`)
- [ ] Parent hub chosen (`/ssh`, `/embedded`, `/tutorials`, `/vs`, `/docs`, `/faq`)

### 2. Head + discoverability
- [ ] Unique `<title>` (primary query + brand)
- [ ] Unique meta description (no `$7`; Free forever / Pro $19/mo when pricing appears)
- [ ] Canonical `https://aidaide.app{path}` (no `.html` in canonical)
- [ ] `robots` = `index,follow` (unless ops-only → `noindex`)
- [ ] OG + Twitter: title, description, `og-image.png` (or page crop), `og:url`
- [ ] JSON-LD when it fits (`WebPage`, `FAQPage`, `HowTo`, `SoftwareApplication`, `Article`)

### 3. Body
- [ ] One H1 matching the primary query
- [ ] Honest comparison / how-to — no fake logos or invented quotes
- [ ] Screenshots from `/screenshots/` with descriptive `alt`
- [ ] Internal links: spoke → hub → `/pricing` and `/signup.html`
- [ ] CTA: prefer `/signup.html`; if direct exe, match `data/download-cta-policy.json` version (no `/#download`)

### 4. Ship plumbing
- [ ] Add `<url><loc>…</loc><lastmod>YYYY-MM-DD</lastmod>…` to `sitemap.xml` (image title/caption: no `$7`)
- [ ] Link from the hub page (+ footer Resources if marketing landing)
- [ ] Flask clean URL in `app.py` only if local-dev needs it (Vercel `cleanUrls` covers `.html`)
- [ ] Note on `/changelog` if material
- [ ] `node scripts/validate-manifest.mjs` + `npm run lint:download-ctas` when CTAs changed

### 5. After deploy
- [ ] Hard-refresh live URL; confirm meta in View Source
- [ ] GSC: request indexing for money pages ([/gsc-sitemap](/gsc-sitemap))
- [ ] Team HQ proof: live `https://aidaide.app/…` link

## Templates

| Type | Copy from |
| --- | --- |
| Comparison | `/vs/putty.html`, `/vs/winscp.html` |
| Tutorial | `/tutorial-ssh-raspberry-pi-windows.html` |
| Ops note | `/gsc-sitemap.html`, `/download-cta-check.html` |
| Docs chapter | `/docs-pages/…` |
