Skip to content

fix(routes): close 404s, add legal pages, clean sitemap (THE-16)#7

Open
wschenk wants to merge 1 commit into
mainfrom
cto/the-16-marketing-404-cleanup
Open

fix(routes): close 404s, add legal pages, clean sitemap (THE-16)#7
wschenk wants to merge 1 commit into
mainfrom
cto/the-16-marketing-404-cleanup

Conversation

@wschenk

@wschenk wschenk commented May 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes broken marketing routes and adds the minimum legal surface needed for enterprise procurement and Buttondown TOS expectations. From the audit in THE-2, driven by THE-16.

What changed

Routes

URL Behavior Notes
/careers /jobs static redirect stub (Astro)
/products account.thefocus.ai external 302
/studio /insights was 404; nav dropdown label only
/contact renders real page mailto + newsletter signup; nav not yet rewritten
/privacy renders real page CEO-review stub: Buttondown + Plausible disclosure, deletion contact
/terms renders real page CEO-review stub
/sitemap.xml emits <sitemapindex>/sitemap-index.xml for crawlers that default to /sitemap.xml

Sitemap cleanup

  • @astrojs/sitemap now filters dev-only / scratch / redirect-stub pages out of /sitemap-0.xml: /drafts, /draft, /emails, /tags, plus all redirect stubs (/blog, /careers, /products, /studio, /ai-maturity, /learnings, /coding-agents, /recipes).
  • Removed src/pages/draft.md — a stray scratch file that was getting served as /draft/.
  • Fixed the broken #compare tag in the DeepResearch post — that's what was producing /%23compare/ in the sitemap.

Out of scope (intentional)

  • /work/case-studies (per the audit): there is uncommitted local work renaming /case-studies/work, which inverts the redirect direction. I left that alone and worked from main. Once that rename lands, add a /case-studies/work redirect in a follow-up.
  • Global nav rewrite (issue boundary): /contact is reachable by URL but the nav's "Contact" item is still the existing mailto: link.
  • Real HTTP 301s at the edge: Astro emits meta-refresh + canonical for static redirects. Upgrading to Cloudflare-level 301s is a deploy-config change, separate issue.

Test plan

  • pnpm build passes (191 pages).
  • dist/sitemap-0.xml no longer contains /drafts/, /draft/, /emails/, /tags/, /%23compare/, or any redirect stubs.
  • dist/sitemap-0.xml contains /contact/, /privacy/, /terms/.
  • dist/sitemap.xml returns a sitemapindex.
  • dist/careers/index.html, dist/products/index.html, dist/studio/index.html are redirect stubs with noindex + canonical to the target.
  • /privacy, /terms, /contact render with the standard BaseLayout and proper canonical URLs.
  • CEO review of /privacy and /terms legal copy.
  • Smoke each route on the live preview after deploy.

🤖 Generated with Claude Code (Paperclip CTO heartbeat for THE-16)

Marketing site audit (THE-2) flagged several plausible-intent URLs that
404 today plus missing legal pages required for enterprise procurement
and Buttondown TOS expectations. The sitemap also leaks dev-only pages.

Routes
- /careers   → /jobs           (301 via Astro static redirect stub)
- /products  → account.thefocus.ai (302; external)
- /studio    → /insights       (301; nav dropdown label, was 404)
- /contact   → real page with mailto + newsletter signup (no nav rewrite)
- /privacy   → minimal policy stub (Buttondown + Plausible disclosure)
- /terms     → minimal terms stub
- /sitemap.xml emits a <sitemapindex> pointing at /sitemap-index.xml so
  crawlers that default to /sitemap.xml get a valid response

Sitemap
- @astrojs/sitemap now filters dev-only / scratch / redirect-stub pages:
  /drafts, /draft, /emails, /tags, plus all known redirect stubs
  (/blog, /careers, /products, /studio, /ai-maturity, /learnings,
  /coding-agents, /recipes)
- Remove src/pages/draft.md (stray scratch file that became /draft)
- Fix the broken "#compare" tag on the DeepResearch post; that
  produced /%23compare in the sitemap

Legal copy in /privacy and /terms is a CEO-review stub, not polished
policy — per issue boundary.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant