# 07R3 SEO Alt Remediation — aieditorrsp

- task_id: t_74dc23ce
- tenant: site-aieditorrsp-20260528
- project_slug: aieditorrsp
- domain: https://aieditorrsp.net
- commit: b5b1ced4514b8cdb6a48e0f2e2f71ed039c09034
- deploy: Cloudflare Workers/OpenNext manual deploy from the same pushed source commit
- worker version: b0524093-48d7-4100-b7de-546b9837b644
- generated_at_utc: 2026-05-28T18:21:43Z
- verdict: ALT_REMEDIATION_DONE

## Changes

1. Fixed rendered image alt handling in `src/lib/rawDesign.ts`.
   - Root cause: the prior regex treated `data-alt=` as if it were a real `alt=` attribute, so Stitch images with `data-alt` were not given rendered `alt` attributes.
   - New behavior: every rendered `<img>` keeps an existing non-empty `alt`, otherwise uses `data-alt`, otherwise uses the route fallback alt.
   - Empty `alt` is replaced with non-empty fallback text unless the source already has meaningful alt.

2. Hardened `scripts/seo-audit.mjs`.
   - It now audits built/rendered HTML from `.next/server/app/*.html` when build output exists.
   - It falls back to production-like transformed Stitch HTML only when rendered build output is absent.
   - It checks image alt for core SEO routes and support routes.
   - Local audit output records `rendered_build_output: true` and the exact rendered HTML source path after `npm run build`.

3. Trimmed `/ai-photo-editing-prompts` rendered title.
   - Before: `AI Photo Editing Prompts by Style and Use Case | AI Editor RSP` = 62 chars.
   - After: `AI Photo Editing Prompts by Use Case | AI Editor RSP` = 52 chars.

## Verification commands

All required commands passed after rebase onto latest origin/main:

```text
npm run verify
# {"ok":true,"routes":11,"hrefPlaceholders":0,"forbiddenCopy":0,"runtime_architecture":"workers_first_frontend_with_api_stubs"}

npm run seo:audit
# ok=true; rendered/prod-like image alt attributes check passed
# rendered HTML sources include .next/server/app/*.html with rendered_build_output=true

npm run build
# OpenNext Cloudflare build complete; .open-next/worker.js generated

npm run deploy
# Chains npm run build && npm run seo:audit && opennextjs-cloudflare deploy
# Current Version ID: b0524093-48d7-4100-b7de-546b9837b644
```

Additional smoke checks:

```text
https://aieditorrsp.net/api/health => 200
https://aieditorrsp.net/prompts/seo-recheck-thin-slug => 404
```

## Production image alt proof

Raw JSON proof: `/root/.hermes/reports/site-aieditorrsp-20260528/07r3-prod-alt-proof.json`

| route | HTTP | title len | img count | missing alt |
|---|---:|---:|---:|---:|
| `/` | 200 | 46 | 4 | 0 |
| `/ai-photo-prompt-editor` | 200 | 56 | 4 | 0 |
| `/chatgpt-photo-editing-prompts` | 200 | 58 | 3 | 0 |
| `/ai-photo-editing-prompts` | 200 | 52 | 5 | 0 |
| `/prompt-library` | 200 | 60 | 0 | 0 |
| `/pricing` | 200 | 59 | 1 | 0 |
| `/privacy` | 200 | 59 | 0 | 0 |
| `/terms` | 200 | 56 | 1 | 0 |
| `/cookie-policy` | 200 | 57 | 0 | 0 |
| `/refund` | 200 | 56 | 0 | 0 |
| `/contact` | 200 | 56 | 2 | 0 |

All audited production images now have non-empty `alt`; no decorative-empty-alt exception was needed.

## Artifacts

- `/root/.hermes/reports/site-aieditorrsp-20260528/07r3-seo-alt-remediation.md`
- `/root/.hermes/reports/site-aieditorrsp-20260528/07r3-prod-alt-proof.json`
- `/root/.hermes/reports/site-aieditorrsp-20260528/07r3-seo-audit-local.json`

## Git / deploy state

- branch: `main`
- pushed commit: `b5b1ced4514b8cdb6a48e0f2e2f71ed039c09034`
- commit message: `fix: harden rendered image alt seo audit`
- deploy source: same checked-out clean commit
- working tree after deploy: clean

## Scope guard

No GSC, Bing, or IndexNow submission was performed.
