> For the complete documentation index, see [llms.txt](https://suigar.gitbook.io/suigar-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://suigar.gitbook.io/suigar-docs/seo/page-checklist.md).

# Page checklist

Last reviewed: 2026-07-13

Use this file to audit new and existing public routes. Update the inventory when route indexability changes.

Before using the checklist, identify affected channels from [channels.md](/suigar-docs/seo/channels.md) and project-specific requirements from [subprojects](/suigar-docs/seo/subprojects.md).

## Per-Page Checklist

Copy this block into an issue, PR, or audit note when optimizing a route.

```md
## Page

- Route:
- Preferred canonical URL:
- Index state: indexable | excluded | redirect | noindex
- Primary audience:
- Search intent:
- Primary action:
- Affected SEO channels:
- Main source files:
- Owner:

## Required

- [ ] Unique title through `PageTitle`.
- [ ] Useful description through `PageTitle` or shared SEO helper.
- [ ] Canonical URL matches the preferred route.
- [ ] Indexed frontend SPA routes have matching static SEO metadata in `frontend/scripts/sitemap-routes.mjs`.
- [ ] Open Graph and Twitter preview render with a stable image.
- [ ] Structured data is present only when it matches visible content.
- [ ] Page content is useful to logged-out users if the route is indexable.
- [ ] Important links are crawlable links with stable `href` values.
- [ ] Internal links connect this page to relevant hubs, docs, blog posts, or product pages.
- [ ] Route is classified in `frontend/scripts/sitemap-routes.mjs`.
- [ ] Sitemap and canonical agree.
- [ ] The URL appears in exactly one child sitemap and is inside that child's canonical host/path scope.
- [ ] Sitemap `lastmod` comes from material page/content sources; it is not a build or request timestamp.
- [ ] Sitemap output contains no `priority` or `changefreq` hints.
- [ ] Private, tokenized, callback, duplicate, or thin pages emit `noindex` or are excluded.
- [ ] Retired public URLs return a server-side redirect to the preferred target instead of a soft client redirect.
- [ ] Generated static route HTML passes `pnpm --filter @suigar/ui run check:seo:static` after a mainnet build.
- [ ] Mobile layout has no horizontal overflow or overlapping text.
- [ ] Core Web Vitals risk reviewed for LCP, INP, and CLS.
- [ ] Measurement follow-up is identified if this is a high-value page.
- [ ] `pnpm --filter @suigar/ui run check:seo` passes after route changes.
- [ ] If production-state diagnosis is needed, manually run `node scripts/seo/check-live-sitemap-system.mjs --site-url https://suigar.com`.

## Notes

- Decisions:
- Validation:
- Follow-ups:
```

## Blog Post Checklist

Use this with [blog-generation.md](/suigar-docs/seo/blog-generation.md) before publishing indexable posts.

```md
## Blog Post

- Slug:
- Canonical URL:
- Search intent:
- Primary audience:
- Suigar angle:
- Funnel stage:
- Related product page:
- Related docs:
- Author/context:

## Required

- [ ] Topic brief completed.
- [ ] Outline completed before drafting.
- [ ] SEO title is unique, specific, and natural.
- [ ] Meta description accurately describes visible content.
- [ ] Slug is readable and stable.
- [ ] Excerpt gives a clear reason to read.
- [ ] Tags support grouping without replacing structure.
- [ ] Source/claim ledger completed for product, on-chain, external, and compliance-sensitive claims.
- [ ] Internal links are useful and production-safe.
- [ ] No unsupported gambling, financial, legal, reward, or guaranteed-profit claims.
- [ ] No fake freshness or generic trend-chasing.
- [ ] AI critique completed and issues resolved.
- [ ] Blog DB publish includes either the secured revalidation call or a documented wait for the 60-second ISR window.

## Notes

- Decisions:
- Validation:
- Follow-ups:
```

## Authoritative Route Inventories

Do not copy route counts or URL tables into documentation; duplicated inventories become stale. Use the executable sources of truth:

* Frontend indexed and excluded routes: `frontend/scripts/sitemap-routes.mjs`. `pnpm --filter @suigar/ui run check:seo` fails when any concrete route is unclassified, metadata is missing, or the tracked generated sitemap differs.
* Blog URLs: the published-post query used by `blog-site/src/app/sitemap.ts`; the runtime build verifier checks every generated entry.
* Docs URLs: the Docusaurus-generated `docs-site/build/sitemap.xml`; the mainnet asset writer normalizes and validates it.
* SweetHouse URLs: `sweethouse-website/lib/seo.ts`; its build and `check:seo` validate rendered HTML against the generated sitemap.
* Production discovery inventory: `https://suigar.com/sitemap_index.xml` owns the exact app/blog/docs child set, while `https://house.suigar.com/sitemap.xml` is advertised on its own host. The live sitemap-system audit requires both exact sets and rejects duplicates or scope violations.
