# 07 Technical SEO / GEO / AEO Recheck — aieditorrsp

- task_id: t_1b3eb07d
- tenant: site-aieditorrsp-20260528
- project_slug: aieditorrsp
- domain: https://aieditorrsp.net
- source commit reviewed: b071eb9c49a149ad7ec5f1ba5b9f4a2f49903c26
- primary keyword: AI image editor with prompt
- verdict: NO_GO_FOR_SEO_INDEXING
- generated_at: 2026-05-29

## 1. Executive verdict

NO-GO.

Production is reachable and crawlable for Googlebot/Bingbot, but it does not satisfy the frozen SEO-Copy contract or the launch SEO/GEO/AEO gate. The main blockers are missing JSON-LD schema, thin core SEO pages, weak keyword coverage, missing image alt text, page-level OG URL mismatch, and no build-time `seo:audit` deployment gate.

This should not be submitted to GSC/Bing/IndexNow as an SEO-ready site yet.

## 2. What passed

- Production route availability: browser-like UA returned 200 for required public routes.
- Googlebot/Bingbot access: homepage returned 200 for both tested bot UAs.
- robots.txt: 200, allows `/`, disallows only `/api/checkout` and `/api/stripe`, points to sitemap.
- sitemap.xml: 200 and includes the expected 11 public routes.
- canonical: present and self-referential on audited public routes.
- noindex: no `noindex` found on indexable audited routes.
- internal link crawl: no 4xx internal links found in audited anchors.
- API health: `/api/health` returned 200.
- local source verification: `npm run verify` passed.
- local build after dependency install: `npm ci && npm run build` passed and generated `.open-next/worker.js`.

## 3. P0 blockers

### P0-1. JSON-LD schema is absent on all core SEO pages

Frozen contract required:
- `/`: WebApplication + FAQPage + BreadcrumbList
- `/ai-photo-prompt-editor`: WebApplication + FAQPage
- `/chatgpt-photo-editing-prompts`: Article + FAQPage + BreadcrumbList
- `/ai-photo-editing-prompts`: CollectionPage + FAQPage
- `/prompt-library`: CollectionPage + FAQPage

Production result: no `application/ld+json` detected on audited pages.

Impact: GEO/AEO citation structure is weak; Google rich-result/entity understanding is not supported; this fails the project-level schema gate.

### P0-2. Core SEO content is too thin

Gate: core indexable pages should be ≥800 crawlable words unless explicitly waived with SERP evidence.

Measured production:
- `/`: 523 words
- `/ai-photo-prompt-editor`: 506 words
- `/chatgpt-photo-editing-prompts`: 448 words
- `/ai-photo-editing-prompts`: 392 words
- `/prompt-library`: 981 words

Four of five core SEO pages fail the content-depth gate. The page copy is visually strong but not enough for an indexable SEO page competing on prompt/image-editing intent.

### P0-3. Keyword coverage misses the agreed density band

Gate: natural primary keyword / close semantic coverage around 2.5%–3.6% for core SEO pages, or documented waiver.

Measured exact primary phrase density:
- `/`: `AI image editor with prompt` — 1.91%
- `/ai-photo-prompt-editor`: `AI photo prompt editor` — 1.58%
- `/chatgpt-photo-editing-prompts`: `ChatGPT photo editing prompts` — 1.79%
- `/ai-photo-editing-prompts`: `AI photo editing prompts` — 2.04%
- `/prompt-library`: `reusable photo editing prompts` — 0.00%

All five core pages fail the density/coverage target. This is not asking for keyword stuffing; the fix is to add useful answer-first sections, examples, comparison blocks, and FAQ copy that naturally uses the target terms and close variants.

### P0-4. Image alt text is missing on important visual pages

Missing non-empty `alt` counts:
- `/`: 4
- `/ai-photo-prompt-editor`: 4
- `/chatgpt-photo-editing-prompts`: 3
- `/ai-photo-editing-prompts`: 5
- `/pricing`: 1
- `/contact`: 1

Impact: fails Media/Social SEO gate and accessibility baseline. Most missing images are externally hosted `lh3.googleusercontent.com` Stitch assets; if they are decorative, use empty alt intentionally only when not carrying meaning, but current gate requires explicit handling.

### P0-5. No build-time SEO audit gate exists

Current `package.json` scripts:
- `build`: `opennextjs-cloudflare build`
- `deploy`: `opennextjs-cloudflare deploy`
- no `seo:audit` script
- deploy is not chained as `build && seo:audit && deploy`

This violates the launch requirement: audit failures must block deployment. Add a production/static SEO audit script covering metadata, canonical, noindex, sitemap inclusion, robots, heading depth, word count, keyword coverage, image alt, OG/Twitter, and JSON-LD schema.

## 4. P1 issues

### P1-1. Title lengths are outside the 40–60 character target

Examples:
- `/`: 37 chars. Frozen title expected `AI Image Editor With Prompt Templates | AI Editor RSP`; production title omits brand suffix.
- `/ai-photo-prompt-editor`: 65 chars.
- `/chatgpt-photo-editing-prompts`: 65 chars.
- `/ai-photo-editing-prompts`: 82 chars.
- legal/support pages have very short titles: 29–33 chars.

### P1-2. Meta description edge case

`/pricing` meta description is 163 chars, slightly above the 160 char gate.

### P1-3. Heading depth is weak on content pages

- `/chatgpt-photo-editing-prompts`: only 1 H2.
- `/ai-photo-editing-prompts`: only 2 H2.
- `/prompt-library`: only 2 H2.

The frozen copy expected richer H2 sections, examples, and FAQ blocks.

### P1-4. `og:url` is global, not page-specific

Audited pages inherit `og:url=https://aieditorrsp.net` from root layout. Each indexable route should emit its own `og:url` matching canonical.

### P1-5. External Stitch image hosting / performance risk

Several production images are loaded from `lh3.googleusercontent.com`. This is a performance, reliability, and asset-control risk for launch SEO. Prefer project-owned optimized assets under the app/public/R2 path with stable alt text, width/height, lazy-loading, and compression.

## 5. P2 / follow-up issues

- `npm audit` reports 4 moderate vulnerabilities through Next/PostCSS dependency chain. Not a direct SEO blocker, but should be reviewed before a paid/production launch.
- IndexNow key file and submission evidence were not found or provided in this review. This is a post-launch discovery accelerator, not a Google indexing substitute; keep as P2 after SEO gate passes and owner approves launch submissions.
- Cloudflare Browser Integrity returns 403/1010 for Python default UA, but Googlebot, Bingbot, curl, and browser UA returned 200 in tests. Current crawlability risk is acceptable, but keep this monitored if GSC fetch/render later reports blocked resources.

## 6. Audit table

| route | HTTP | title len | desc len | H1/H2/H3 | words | kw density | JSON-LD types | missing alt | failures |
|---|---:|---:|---:|---:|---:|---:|---|---:|---|
| `/` | 200 | 37 | 125 | 1/6/4 | 523 | 1.91% | none | 4 | title_len 37; word_count 523; keyword_density 1.91%; missing_schema WebApplication,FAQPage,BreadcrumbList; img_alt_missing 4; not_in_sitemap |
| `/ai-photo-prompt-editor` | 200 | 65 | 110 | 1/5/6 | 506 | 1.58% | none | 4 | title_len 65; word_count 506; keyword_density 1.58%; missing_schema WebApplication,FAQPage; img_alt_missing 4 |
| `/chatgpt-photo-editing-prompts` | 200 | 65 | 120 | 1/1/5 | 448 | 1.79% | none | 3 | title_len 65; h2_count 1; word_count 448; keyword_density 1.79%; missing_schema Article,FAQPage,BreadcrumbList; img_alt_missing 3 |
| `/ai-photo-editing-prompts` | 200 | 82 | 108 | 1/2/3 | 392 | 2.04% | none | 5 | title_len 82; h2_count 2; word_count 392; keyword_density 2.04%; missing_schema CollectionPage,FAQPage; img_alt_missing 5 |
| `/prompt-library` | 200 | 56 | 116 | 1/2/20 | 981 | 0.0% | none | 0 | h2_count 2; keyword_density 0.00%; missing_schema CollectionPage,FAQPage |
| `/pricing` | 200 | 33 | 163 | 1/3/4 | 433 | -% | none | 1 | title_len 33; meta_desc_len 163; img_alt_missing 1 |
| `/privacy` | 200 | 30 | 154 | 1/3/7 | 418 | -% | none | 0 | title_len 30 |
| `/terms` | 200 | 32 | 156 | 1/3/3 | 339 | -% | none | 0 | title_len 32 |
| `/cookie-policy` | 200 | 29 | 150 | 1/1/4 | 310 | -% | none | 0 | title_len 29 |
| `/refund` | 200 | 29 | 160 | 1/1/6 | 351 | -% | none | 0 | title_len 29 |
| `/contact` | 200 | 33 | 147 | 1/3/4 | 222 | -% | none | 1 | title_len 33; img_alt_missing 1 |

## 7. Required remediation contract

Assign to frontend/dev before final launch SEO approval:

1. Add page-level JSON-LD:
   - WebApplication for `/` and `/ai-photo-prompt-editor`.
   - FAQPage on all five core SEO pages with visible matching FAQ copy.
   - BreadcrumbList on `/`, `/chatgpt-photo-editing-prompts`, and any hub/detail-style page.
   - Article for `/chatgpt-photo-editing-prompts`.
   - CollectionPage for `/ai-photo-editing-prompts` and `/prompt-library`.
2. Expand crawlable copy on the four thin core pages to ≥800 useful words each.
3. Fix keyword/semantic coverage naturally with answer-first blocks, prompt examples, safety notes, use-case sections, and FAQ.
4. Bring title tags into 40–60 chars and align homepage with the frozen branded title.
5. Emit page-specific OG/Twitter metadata, especially `og:url`.
6. Add non-empty meaningful alt text to all non-decorative images; deliberately decorative images must be implemented consistently and exempted in audit logic only if documented.
7. Add `scripts/seo-audit.*` and `npm run seo:audit`; chain deployment so SEO audit blocks deploy.
8. Re-run production audit after deploy and attach the output to the next SEO recheck.

## 8. Verification evidence

Commands / checks run:

```bash
cd /root/.hermes/kanban/boards/site-factory/workspaces/t_1b3eb07d
git clone https://github.com/mengjian-github/aieditorrsp.git .
git rev-parse HEAD
npm run verify
npm ci && npm run build
python3 audit_prod.py > audit_prod.json
npm audit --audit-level=moderate --json > npm-audit.json || true
```

Key results:
- reviewed commit: `b071eb9c49a149ad7ec5f1ba5b9f4a2f49903c26`
- `npm run verify`: pass
- `npm ci && npm run build`: pass
- production crawl: 11 public routes audited
- broken internal links: 0
- schema types detected on core pages: 0
- moderate npm vulnerabilities: 4

Raw audit artifacts in worker workspace:
- `/root/.hermes/kanban/boards/site-factory/workspaces/t_1b3eb07d/audit_prod.py`
- `/root/.hermes/kanban/boards/site-factory/workspaces/t_1b3eb07d/audit_prod.json`
- `/root/.hermes/kanban/boards/site-factory/workspaces/t_1b3eb07d/npm-audit.json`

## 9. Final decision

SEO/GEO/AEO verdict: **NO_GO_FOR_SEO_INDEXING**.

Do not treat the current production site as SEO-ready. The site can remain reachable for internal/product QA, but search submission and launch amplification should wait until the P0 items are fixed and a second production SEO audit passes.
