Apps Manager Admin
SEO review: apps/manager and apps/admin
Date: 2026-07-01
Scope and indexing expectation#
apps/manager and apps/admin are authenticated SaaS/admin dashboards, not public acquisition content. They should be kept out of public search indexes. The desired posture is defense in depth: HTML robots meta, HTTP X-Robots-Tag, and deployment-level robots handling where each app is exposed.
Findings by severity#
High#
apps/adminis missing any explicit noindex control. Its Vite entrypoint sets charset, color-scheme, viewport, and title only; there is no<meta name="robots" content="noindex, nofollow">inapps/admin/index.html:17-19. There is also noapps/admin/public/_headersorapps/admin/public/robots.txtin the app tree, so a deployed static host would not emit anX-Robots-Tagequivalent. Because the app is private/admin-only (apps/admin/package.json:2-10) and routes redirect unauthenticated users to login while guarding app routes withrequireAuth(apps/admin/src/router.tsx:14-18), indexing should be blocked explicitly even if crawlers only see the login shell.
Medium#
apps/adminhas minimal document metadata and no icon/manifest assets. The entrypoint has a generic<title>SaaS Admin</title>atapps/admin/index.html:19, but no meta description, favicon link, theme-color, or web manifest (apps/admin/index.html:17-19; no favicon/manifest files found underapps/admin). This is not a public-ranking issue if the app is noindexed, but it affects browser tabs, install surfaces, bookmarks, and accidental search snippets if noindex is missed.apps/managernoindex is good, but deployment parity should be verified outside Cloudflare Pages-style hosting. The app has HTML-levelnoindex, nofollow(apps/manager/index.html:31) and a static-host_headersrule addingX-Robots-Tag: noindex, nofollowfor all paths (apps/manager/public/_headers:1-6). If served by the included Nginx config, however,apps/manager/nginx.conf:1-7only defines SPA fallback behavior and does not add equivalentX-Robots-Tagheaders. Any non-Pages deployment should add the same indexing block at the web-server layer.
Low#
apps/managerhas appropriate base metadata for a private dashboard. It links a favicon (apps/manager/index.html:26), sets color-scheme/theme-color/viewport (apps/manager/index.html:27-29), and defines title/description placeholders (apps/manager/index.html:30-32) that are replaced during Vite HTML transform with branded values (apps/manager/vite.config.ts:11-20). No route-level Helmet/head management was found; for a noindexed dashboard, static app-level metadata is sufficient.- Neither app appears to use runtime Helmet/head management. The audited dependencies do not include
react-helmet/Helmet (apps/manager/package.json:17-44,apps/admin/package.json:12-30), and searches found noHelmetordocument.titleusage in either app. This is acceptable for private dashboards, but any future public landing pages should use route-specific metadata in the public app instead of these admin shells.
Recommended fixes#
- Add
noindex, nofollowtoapps/admin/index.htmland mirror it with deployment headers (X-Robots-Tag: noindex, nofollow) for every admin route. - Add an
apps/admin/public/_headersfile if the admin app is deployed to a static host that honors it, or configure equivalent headers in the app's actual edge/proxy/server deployment. - Add basic
apps/adminbrowser metadata: a favicon,theme-color, and a more specific title such asAdmin | Assistance. - If
apps/manageris served through Nginx, addX-Robots-Tag: noindex, nofollowto that server/location config so the HTTP-header posture matchesapps/manager/public/_headers. - Keep both dashboard/admin apps private in search. Do not add canonical/open-graph/social metadata intended for public indexing unless the app's product decision changes.