# 05A SEO/GEO/AEO Recheck — Subnautica2Maps

Task: t_d54ed9f8
Project: subnautica2maps
Tenant: site-rerun-subnautica2maps-20260520-stitch-sdk-clean
Commit under review: e96f259461b9a59decd37bf5c732623303cef874
Production: https://subnautica2maps.com/
Preview: https://e1ea5ff8.subnautica2maps.pages.dev
Checked at: 2026-05-20T17:17Z

## Verdict

SEO_NO_GO / PM_BLOCK_RECOMMENDED.

The clean frontend is much better than the previous history-only state, but it does not pass the SEO/GEO/AEO release gate. The main blocker is index-state inconsistency: sitemap lists biome URLs that are not valid indexable pages. On the immutable Pages preview both biome URLs are 404; on the custom domain they still serve stale noindex legacy/prototype content. Canonical tags and JSON-LD schema are also absent across the audited pages.

No evidence found that placeholder/prototype pages are currently indexable: the stale biome pages on the custom domain are noindex, and sulfur is noindex and absent from sitemap. However, noindex/404/stale URLs are still present in sitemap, so GSC submission should stay blocked.

## Evidence

### Deployment/source sync

- Repo: /root/projects/subnautica2maps
- `git rev-parse HEAD`: e96f259461b9a59decd37bf5c732623303cef874
- `git status --short --branch`: clean on main
- Parent release metadata says production deploy source commit: e96f259

### Robots

https://subnautica2maps.com/robots.txt returns 200.

Observed rules:

```txt
User-Agent: *
Allow: /
Allow: /map/
Allow: /resources/silver/
Allow: /resources/copper/
Allow: /guides/
Disallow: /search/
Disallow: /markers/
Sitemap: https://subnautica2maps.com/sitemap.xml
```

Robots does not block core pages or core resources. PASS.

### Sitemap

https://subnautica2maps.com/sitemap.xml returns 200 and lists 11 URLs:

- https://subnautica2maps.com
- https://subnautica2maps.com/map/
- https://subnautica2maps.com/resources/silver/
- https://subnautica2maps.com/resources/copper/
- https://subnautica2maps.com/biomes/shallows/
- https://subnautica2maps.com/biomes/graveyard/
- https://subnautica2maps.com/guides/how-to-find-coordinates/
- https://subnautica2maps.com/guides/does-subnautica-2-have-a-map/
- https://subnautica2maps.com/legal/
- https://subnautica2maps.com/privacy-policy/
- https://subnautica2maps.com/terms-of-service/

FAIL:

- `/biomes/shallows/` and `/biomes/graveyard/` are included in sitemap but are not valid indexable pages.
- `src/app/sitemap.ts` includes both biome URLs, but there is no committed `src/app/biomes/[slug]/page.tsx`.
- Immutable preview result:
  - `https://e1ea5ff8.subnautica2maps.pages.dev/biomes/shallows/` => 404 + noindex
  - `https://e1ea5ff8.subnautica2maps.pages.dev/biomes/graveyard/` => 404 + noindex
- Custom domain result:
  - `https://subnautica2maps.com/biomes/shallows/` => 200 + noindex + stale title `Subnautica 2 Map — Public-Reference Resources & Route Hints`
  - `https://subnautica2maps.com/biomes/graveyard/` => 200 + noindex + stale title `Subnautica 2 Map — Public-Reference Resources & Route Hints`

This indicates either stale custom-domain artifacts/caching for old biome routes, or route cleanup did not fully propagate. In both cases, sitemap must not list them until real indexable biome pages exist.

### Canonical

FAIL. No audited HTML page exposes a `<link rel="canonical">` tag.

Observed missing canonical on:

- `/`
- `/map/`
- `/resources/silver/`
- `/resources/copper/`
- `/resources/sulfur/`
- `/guides/how-to-find-coordinates/`
- `/guides/does-subnautica-2-have-a-map/`
- `/legal/`
- `/privacy-policy/`
- `/terms-of-service/`
- `/biomes/shallows/`
- `/biomes/graveyard/`

Required: self-canonical for all indexable pages; no sitemap URL should point to a non-canonical/noindex/404 page.

### Noindex state

PASS for sulfur, FAIL for biome sitemap consistency.

- `/resources/sulfur/`: 200, `robots: noindex, follow`, absent from sitemap. Correct because sulfur is limited/noindex.
- `/biomes/shallows/`: in sitemap but noindex/404 or stale noindex depending host. Incorrect.
- `/biomes/graveyard/`: in sitemap but noindex/404 or stale noindex depending host. Incorrect.

### Schema / GEO / AEO

FAIL. `application/ld+json` count is 0 across audited pages.

Missing minimum schema for this site type:

- `WebApplication` or `SoftwareApplication` on map/tool page
- `BreadcrumbList` on indexable pages
- `FAQPage` on guide/resource pages where FAQ/short-answer blocks exist
- `CreativeWork` / `Article` for guide pages with source/version/confidence context

AEO content exists in copy form (`Short answer`, steps, source confidence), but it is not reinforced with structured data.

### Internal links

PARTIAL PASS.

Good:

- Global nav links to Map, Silver, Copper, Coordinates, Legal.
- Footer links core route cluster: Map, Silver, Copper, Does Subnautica 2 have a map, Privacy, Terms, Legal.
- Resource pages link back to filtered map query.

Gaps:

- `/map/` has no H1 and weak semantic heading structure.
- Home has only one H2 and no H3; guide pages have no H2/H3; resource pages have no H3.
- Legal/privacy/terms pages are near-duplicates: same title/description/content structure across 3 indexable URLs. Either make privacy/terms unique, canonicalize to `/legal/`, or noindex duplicates.

### Social meta

PARTIAL FAIL.

- OG/Twitter tags exist broadly.
- `og:url` is generic homepage on most pages, not page-specific.
- Biome stale pages lack `og:url`.

### Page uniqueness / thin-prototype check

- Homepage: 200, unique title, ~2024 parsed words, no placeholder flags.
- Map: 200, unique title, ~1545 parsed words, no placeholder flags, but no H1.
- Silver: 200, unique title, ~3110 parsed words, no placeholder flags.
- Copper: 200, unique title, ~2920 parsed words, no placeholder flags.
- Guides: 200, unique titles, >1100 parsed words, no placeholder flags, but weak heading depth.
- Sulfur: 200 noindex, absent from sitemap. OK as noindex support page.
- Legal / Privacy / Terms: 200 indexable but same title/description/content family; uniqueness risk.
- Biomes: invalid for sitemap; not indexable, but stale/custom-domain mismatch requires cleanup.

### SEO audit script gate

FAIL.

`package.json` defines:

```json
"verify": "node scripts/verify-site.mjs"
```

But `/root/projects/subnautica2maps/scripts/verify-site.mjs` does not exist.

`npm run verify` fails with `MODULE_NOT_FOUND`.

This violates the pipeline requirement that an SEO audit script exists and can block release on Title, Meta description, canonical, H1/H2/H3, word count, noindex, sitemap inclusion, robots, image alt, OG/Twitter meta.

## Required fixes before GSC / final acceptance

P0 blockers:

1. Remove `/biomes/shallows/` and `/biomes/graveyard/` from sitemap until real indexable biome pages exist.
2. Purge/cleanup stale custom-domain biome route artifacts so custom domain matches immutable Pages preview behavior.
3. Add self-canonical metadata for all indexable pages.
4. Add JSON-LD schema: `BreadcrumbList`, `WebApplication` for `/map/`, and `FAQPage`/`Article`/`CreativeWork` where appropriate.
5. Restore or add `scripts/verify-site.mjs`; make `npm run verify` fail on sitemap/noindex/canonical/schema/heading/social-meta violations.

P1 improvements:

1. Add H1 to `/map/`.
2. Add H2/H3 depth to guide/resource pages, especially short-answer, steps, FAQ, data/source sections.
3. Make `og:url` page-specific.
4. De-duplicate `/legal/`, `/privacy-policy/`, `/terms-of-service/`: unique titles/descriptions/body sections, or canonical/noindex secondary pages.

## Recommended downstream state

- `seo_verdict`: No-Go
- `gsc_submission`: Blocked
- `next_assignee`: mojie
- `pm_acceptance`: should wait for technical SEO cleanup before PM_GO
