# 06A getaiemail Technical SEO / GEO / AEO Recheck

Task: `t_1cb74a82`
Site: `getaiemail.com`
Production: `https://getaiemail.com`
Tenant: `site-getaiemail-20260527`
Input brief: `/root/.hermes/reports/site-getaiemail-20260527/input-brief.md`
Canonical implementation parent: `t_b8daf6e2`, plus later frontend-only auth/payment/pricing corrections through commit `f6e8dbdabb877ad480c7fb75999bd4bbec013187`

## Verdict

`SEO_NO_GO`

The site is live on Cloudflare Workers/OpenNext and the page matrix mostly renders, but it does not pass the SEO/GEO/AEO launch gate. The blockers are content-quality and metadata issues on the indexable generator pages, not basic uptime.

## Blocking issues

### P0 — Homepage canonical missing

- `/` returns 200.
- Expected canonical: `https://getaiemail.com`
- Actual canonical: missing.
- This fails the indexability gate for the homepage primary keyword `AI Email Generator`.

### P0 — All 9 indexable SEO pages are thin for this pipeline gate

Required gate for homepage / core tool / hub pages: parsable main content >= 800 words.

Observed main-content word counts:

| Route | Words | Result |
|---|---:|---|
| `/` | 556 | FAIL |
| `/cold-email-generator` | 547 | FAIL |
| `/follow-up-email-generator` | 525 | FAIL |
| `/professional-email-generator` | 508 | FAIL |
| `/sales-email-generator` | 514 | FAIL |
| `/reply-email-generator` | 512 | FAIL |
| `/thank-you-email-generator` | 502 | FAIL |
| `/apology-email-generator` | 513 | FAIL |
| `/meeting-email-generator` | 497 | FAIL |

The current pages are good product pages, but they are not yet SEO indexable content pages under our gate.

### P1 — Scenario meta descriptions exceed 160 characters on 7/8 indexable scenario pages

| Route | Meta description length | Result |
|---|---:|---|
| `/cold-email-generator` | 172 | FAIL |
| `/follow-up-email-generator` | 229 | FAIL |
| `/professional-email-generator` | 198 | FAIL |
| `/sales-email-generator` | 158 | PASS |
| `/reply-email-generator` | 202 | FAIL |
| `/thank-you-email-generator` | 199 | FAIL |
| `/apology-email-generator` | 185 | FAIL |
| `/meeting-email-generator` | 182 | FAIL |

Target: unique, accurate, non-keyword-stuffed descriptions in the 140-160 character preferred range; 70-160 acceptable.

### P1 — Keyword coverage is below the declared page targets

Phrase density is below the 2.5%-3.6% target on every core page.

| Route | Primary keyword | Density |
|---|---|---:|
| `/` | `ai email generator` | 0.54% |
| `/cold-email-generator` | `cold email generator` | 1.10% |
| `/follow-up-email-generator` | `follow up email generator` | 1.52% |
| `/professional-email-generator` | `professional email generator` | 1.18% |
| `/sales-email-generator` | `sales email generator` | 1.17% |
| `/reply-email-generator` | `email reply generator` | 1.17% |
| `/thank-you-email-generator` | `thank you email generator` | 1.59% |
| `/apology-email-generator` | `apology email generator` | 1.17% |
| `/meeting-email-generator` | `meeting email generator` | 1.21% |

This should be fixed naturally by adding route-specific answer blocks, examples, safety notes, and FAQs; do not stuff exact phrases.

### P1 — Schema is too thin for GEO/AEO

Current JSON-LD:

- Homepage: `WebApplication`
- Scenario pages: `WebPage` with `SoftwareApplication` as `mainEntity`

Missing / recommended before SEO_GO:

- `FAQPage` for visible FAQ questions.
- `BreadcrumbList` for scenario pages.
- `WebSite` + `SearchAction` optional if search is added later.
- Route-specific `SoftwareApplication` or `WebApplication` feature lists should mention subject, body, shorter/warmer/more-direct variants, one-click copy, and review-before-send guardrails.

### P1 — No build-time SEO audit gate in package scripts

Current scripts:

```json
{
  "build": "next build",
  "worker:build": "opennextjs-cloudflare build",
  "deploy": "opennextjs-cloudflare deploy",
  "verify": "node scripts/verify.mjs"
}
```

There is no `seo:audit` script and `deploy` is not chained through `build && seo:audit && worker/deploy`. This violates the site-seo-review launch gate.

## Non-blocking / deferred risks

### Workers-first runtime signal

PASS for runtime surface:

- Production responses include `x-opennext: 1`.
- `npm run worker:build` passes.
- Wrangler deployment exists for Worker `getaiemail`; latest observed version: `00c34765-5db4-4b75-827e-d5294bd7f67c` at `2026-05-30T03:09:43Z`.
- Latest source commit checked locally: `f6e8dbdabb877ad480c7fb75999bd4bbec013187` (`fix: add pricing billing toggle`).

Deferred by owner / not counted as this SEO content gate blocker:

- `GET /api/health`: 404
- `GET /api/generate`: 404
- `POST /api/generate`: 404
- No D1/KV/R2/secrets/rate-limit checks are possible yet.

Before real launch with AI generation, backend/API SEO/QA must recheck Worker route, bindings, secrets, rate limits, server-side safety, and API health.

### HTTPS redirect

`http://getaiemail.com/` returned 200 in a no-redirect probe. Configure Cloudflare Always Use HTTPS or an explicit redirect rule before broad launch. This is P1 security/SEO hygiene, not the main SEO_NO_GO reason.

### Core Web Vitals baseline

Fresh Lighthouse run on `https://getaiemail.com/`:

- Performance: 98
- Accessibility: 96
- Best Practices: 100
- SEO: 100
- FCP: 0.9s
- LCP: 2.4s
- TBT: 30ms
- CLS: 0
- Speed Index: 2.1s

Performance baseline is acceptable. The SEO_NO_GO is not caused by Lighthouse.

## Passing checks

- `/`, 8 indexable scenario pages, `/resignation-email-generator`, legal pages, `/robots.txt`, `/sitemap.xml` return 200.
- Sitemap contains `/`, 8 indexable generator pages, and legal pages.
- `/resignation-email-generator` is absent from sitemap and has `noindex, follow`.
- Robots disallows `/resignation-email-generator`, `/login`, `/checkout`; does not block core pages.
- Scenario pages have self canonical URLs.
- Titles are in the 40-60 character range on all core indexable pages.
- H1 count is 1 on all core pages.
- H2/H3 structure passes minimum count.
- No `<img>` missing alt was detected in rendered HTML; image count is effectively zero on core pages.
- OG/Twitter required fields are present on core pages.
- `og-image.png`, favicon, and apple touch icon return 200.
- Cold/sales copy includes anti-spam / permission-based guardrails.
- Product flow copy includes scenario, recipient, purpose, tone, key points, subject/body, shorter/warmer/more direct variants, and one-click copy affordances.

## Acceptance checklist

| Check | Status | Evidence |
|---|---|---|
| Required brief read | PASS | `/root/.hermes/reports/site-getaiemail-20260527/input-brief.md` |
| Production route availability | PASS | all checked core routes 200 |
| Preferred domain | PASS | `https://getaiemail.com` available; `www` returns 200 |
| Sitemap | PASS | expected indexable URLs present; no resignation URL |
| Robots | PASS | core allowed; noindex routes disallowed |
| Indexability | FAIL | homepage canonical missing |
| Canonical | FAIL | homepage missing; scenarios pass |
| Titles | PASS | 47-57 chars on core pages |
| Meta descriptions | FAIL | 7 scenario pages >160 chars |
| H1/H2/H3 | PASS | core pages have 1 H1, >=4 H2, >=3 H3 |
| Content depth | FAIL | 497-556 words; target >=800 |
| Keyword coverage | FAIL | exact phrase density 0.54%-1.59%; target 2.5%-3.6% unless waived with SERP rationale |
| OG/Twitter | PASS | og:title, og:description, og:url, twitter:card present |
| Image alt | PASS | no missing alt detected |
| Schema | FAIL | lacks FAQPage/BreadcrumbList; WebApplication/WebPage only |
| AEO answer blocks | PARTIAL | visible short product/task blocks exist, but need more route-specific answer-first sections |
| GEO citation blocks | PARTIAL | workflow and safety blocks exist; schema and deeper route examples insufficient |
| CWV baseline | PASS | Lighthouse Perf 98, LCP 2.4s, CLS 0 |
| Workers-first surface | PASS_WITH_DEFERRED_BACKEND | OpenNext Worker deployed; `/api/generate` deferred/404 |
| SEO deploy gate | FAIL | no `seo:audit`; `deploy` does not run audit before deploy |

## Required remediation before SEO_GO

1. Add homepage canonical self-reference.
2. Add `scripts/seo-audit.*` and package scripts:
   - `seo:audit`
   - `deploy` must run build + SEO audit before deploy.
3. Expand each core indexable page to >=800 parsable words without hiding text.
4. Keep above-fold UX compact, but add visible/collapsible route-specific blocks:
   - 40-70 word short answer.
   - How to use this generator.
   - Good input examples.
   - Subject/body/variant examples.
   - Safety/review-before-send notes.
   - Scenario-specific FAQ.
5. Rewrite scenario meta descriptions to <=160 chars, ideally 140-160.
6. Add `FAQPage` JSON-LD from visible FAQ; add `BreadcrumbList` on scenario pages.
7. Re-run production SEO audit after deploy and require zero P0/P1 failures.
8. Configure HTTP→HTTPS redirect before launch.

## Artifact paths

- Report: `/root/.hermes/reports/site-getaiemail-20260527/06a-technical-seo-geo-recheck.md`
- Raw audit JSON: `/root/.hermes/kanban/boards/site-factory/workspaces/t_1cb74a82/getaiemail-seo-audit.json`
- Clean summary JSON: `/root/.hermes/kanban/boards/site-factory/workspaces/t_1cb74a82/getaiemail-seo-summary.json`
- Lighthouse JSON: `/root/.hermes/kanban/boards/site-factory/workspaces/t_1cb74a82/lighthouse-home-20260530.json`
- Audit script: `/root/.hermes/kanban/boards/site-factory/workspaces/t_1cb74a82/getaiemail_seo_audit.py`

## Verification

Commands / checks run:

```bash
npm run verify
npm run typecheck
npm run build
npm run worker:build
python3 getaiemail_seo_audit.py
npx --yes lighthouse https://getaiemail.com/ --output=json
curl -I https://getaiemail.com/
curl -I http://getaiemail.com/
curl -I https://www.getaiemail.com/
curl -I https://getaiemail.com/api/generate
npx wrangler deployments list
browser render smoke on / and /cold-email-generator
```

## Residual risk

- Current site should not be marked SEO-ready for indexing scale until remediation is deployed.
- Backend is intentionally absent; a later backend pass must validate real AI proxy, rate limit, safety, auth/quota/payment bindings, and API health.
- Deployment source in Wrangler remains `Unknown`; source sync is inferred from local clean git + pushed commit + rebuild discipline, not Cloudflare Git source metadata.
- The current browser console probe reported blank JS exceptions with no console messages; retest after remediation to rule out client runtime noise.

## Next inputs

For the remediation owner:

- Use current source repo: `/root/projects/getaiemail`
- Fix from commit: `f6e8dbdabb877ad480c7fb75999bd4bbec013187`
- Preserve Workers/OpenNext deployment path.
- Do not implement real AI/auth/payment unless a backend task explicitly authorizes it.
- Preserve anti-spam positioning for cold/sales email pages.
