Services

Overview


SEO review synthesis

Date: 2026-07-01

This summary synthesizes the per-app SEO reviews in this directory. It does not replace the app-specific reports; use those files for evidence, file paths, and implementation details.

Cross-app themes#

  1. Canonical URL and base-path drift is the dominant issue. Several apps run under subpaths (/blog, /docs, /academy, /design-system, /ui) but build metadata, internal URLs, Open Graph URLs, robots files, or sitemap references from different sources. This affects apps/www, apps/blog, apps/docs, apps/academy, apps/design-system, and apps/ui-library.
  2. Sitemap and robots coverage is inconsistent. Public content apps often have missing, stale, postbuild-only, or wrong-host sitemap references. This is high impact for apps/www, apps/design-system, and apps/ui-library, and medium impact for apps/docs and apps/academy.
  3. Admin surfaces need explicit noindex controls. apps/studio and apps/admin should be blocked from public indexing. apps/manager is mostly correct, but deployment parity should be verified for non-Pages/Nginx hosting.
  4. Social and structured-data assets are frequently incomplete. Missing OG/logo assets or absent JSON-LD appear in apps/www, apps/blog, apps/design-system, and apps/ui-library.
  5. Content publication semantics need enforcement. ContentLayer apps define published fields but route generation/rendering does not consistently filter drafts in apps/academy, apps/design-system, and apps/ui-library.
  6. Document semantics are generally good. Most reviewed apps render meaningful page headings.

Highest-priority fixes#

P0 — Prevent unwanted indexing of private/admin apps#

  • Add global noindex, nofollow, noarchive for apps/studio through an X-Robots-Tag header or global robots meta.
  • Add noindex, nofollow to apps/admin/index.html and mirror it with deployment headers.
  • Add X-Robots-Tag: noindex, nofollow to the apps/manager Nginx deployment path if that surface is used.

P1 — Repair public crawl discovery and canonical signals#

  • apps/www: publish the advertised /sitemap.xml and fix the missing organization logo asset or constant.
  • apps/design-system and apps/ui-library: add app/robots.ts, app/sitemap.ts, and canonical alternates for the landing and docs routes.
  • apps/docs: move sitemap generation into the app/deploy contract and include generated reference/API routes.
  • apps/academy: make robots disallow paths include the /academy base path and expand the sitemap or noindex omitted lesson/content routes.

P2 — Centralize URL helpers per app#

For each public app, define one canonical origin/base-path helper and use it for metadata, canonicals, OG/Twitter URLs, JSON-LD, robots, sitemap, RSS/feeds, and generated indexes. This should replace hard-coded mixed origins such as apex vs www, missing base paths, and optional env concatenation that can produce undefined/... URLs.

P3 — Improve public content semantics and rich-result signals#

  • apps/blog: fix the missing default OG image and repair blog-local cross-app CTA/service URLs.
  • apps/design-system and apps/ui-library: add minimal TechArticle and BreadcrumbList JSON-LD for docs pages.
  • apps/academy: add lesson/learning structured data and enforce published: false in dynamic content routes.

App-by-app status#

AppCurrent SEO postureTop issuesPriority
apps/wwwStrong marketing SEO foundation with JSON-LD and shared metadata helpers.Advertised sitemap is missing; organization logo asset is missing; some metadata uses apex origin instead of www; some pages lack explicit canonicals.High
apps/blogSolid blog SEO baseline with scoped routes, robots/sitemap/RSS, article metadata, and JSON-LD.Missing default OG image; cross-app CTA/service URLs can resolve blog-local under /blog; invalid taxonomy list markup.High
apps/docsGood guide metadata and structured data.Production indexability depends on a Vercel-specific env var; sitemap is postbuild-only and omits reference/API routes; reference canonicals are incomplete.High
apps/academyGood root/course metadata pattern and social assets.Learning paths inherit homepage canonical; robots disallows miss /academy; sitemap omits many content routes; unpublished content can render.High
apps/design-systemContent docs have titles/descriptions and good MDX semantics.Missing robots/sitemap; missing/inconsistent OG assets; no canonicals; env-dependent absolute URLs; no structured data; drafts not filtered.High
apps/ui-libraryGood baseline metadata, docs rendering, assets, and llms.txt.Missing robots/sitemap; no canonicals; URL helper can produce invalid metadata; drafts not filtered; no structured data.High
apps/studioShould be private/noindexed.No app-wide noindex control for a large admin surface.P0
apps/managerMostly appropriate private-dashboard posture.Verify/add Nginx X-Robots-Tag parity if served outside static-host _headers.Medium
apps/adminShould be private/noindexed.Missing explicit noindex and deployment headers; minimal browser metadata.P0

Phase 1 — Indexing safety first#

  1. Block apps/studio from indexing globally.
  2. Add HTML and HTTP noindex controls to apps/admin.
  3. Confirm apps/manager deployment path and add Nginx X-Robots-Tag if needed.

Phase 2 — Public URL/crawl contract#

  1. Create or normalize per-app canonical URL helpers for www, blog, docs, academy, design-system, and ui-library.
  2. Fix sitemap/robots mismatches for www, design-system, and ui-library first.
  3. Extend docs and academy sitemap coverage and align robots/base-path behavior.
  4. Add canonical alternates to public landing, docs, taxonomy, and generated reference/content routes.

Phase 3 — Asset and structured-data completion#

  1. Restore missing OG/logo assets for www, blog, and design-system or update metadata to existing assets.
  2. Add minimal docs/article/breadcrumb JSON-LD for design-system, ui-library, and academy lessons/learnings.

Phase 4 — Content governance#

  1. Enforce published: false filtering in academy, design-system, and ui-library route generation, lookups, navigation/search indexes, llms.txt, and future sitemaps.
  2. Decide whether omitted lesson/detail routes are intended search landing pages; if not, add explicit noindex rather than leaving them crawlable but unsitemapped.
  3. Add narrow SEO regression tests where patterns are stable: asset existence checks, sitemap/robots route tests, noindex checks for admin apps, and canonical URL snapshots for representative pages.