ReviewOS

stacks/bench-review

seo: per-page titles & meta descriptions — every static page ships the identical global <title>

#59
Closed glennmichael123 opened this 9 days ago ·
9 days ago

Problem

Every pre-rendered page carries the same <title> ("Bench Review — The Chamber of Secrets") and the one meta description from stx.config.ts:24-28. Judge-name searches are this site's acquisition channel, and crawlers currently see one title sitewide.

Findings

  • ~30 views author @section('title', ...), but resources/layouts/default.stx is a body-only fragment with no @yield, so the sections are silently dropped; titles apply only via client JS after hydration, which the first indexing wave never executes.
  • Root cause is an stx SSG gap: buildApp() has no per-page head mechanism, and stripDocumentWrapper() actively strips page-authored <title>/<meta> — tracked upstream in https://github.com/stacksjs/stx/issues/1756.

Acceptance criteria

  • Per-view title + meta description render into the static <head> at build time (via the stx fix or an interim post-build injection step)
  • Every public page has a unique, keyword-bearing title (e.g. "Judge {name} reviews — {court} | Bench Review")
  • "The Chamber of Secrets" dropped from the production default title/description

Split out from the SEO bundle of the 2026-06-10 production-readiness audit. Upstream: stacksjs/stx#1756.

9 days ago

Fixed and verified against the built artifact. 27 distinct <title> values across 28 static pages — the one pair that matches is / and /coming-soon, which are the same page (see #62). Entity pages carry their own: dist/judges/1.html is "Ann L. Aiken of District Court, D. Oregon — Judge Profile | Bench Review". Gate check "all 14508 entity pages have their own head" enforces it, and no page ships the framework's default "stx App" title any more (the last one was /jtest, deleted in e4390fc).

Two regressions of this were caught and fixed along the way: 6b2eb19 (canonical judge pages had lost their titles) and b6a5f93 (ProfileHeader's useSeoMeta was overwriting the per-judge head at hydration).

Sign in to comment on this issue.