SEO & Metadata¶
Mostly irrelevant for an internal tool, but worth checking the bare minimum.
Rendering model¶
SPA. Pure client-side rendering. Search engines that don't execute JavaScript (most don't) see only the empty <div id="root"></div> shell.
For an internal admin tool, this is fine — it should not be indexed.
<head> (in index.html)¶
<title>Someli Admin</title>
<meta name="description" content="Powerful Admin Dashboard for Managing Someli" />
<meta name="author" content="Someli Team" />
<meta property="og:image" content="/someli-admin-og.png" />
What's good¶
- Title is set
- Description is set
- OG image set (
/someli-admin-og.png— verify the file exists inpublic/)
What's missing¶
- No
<meta name="robots" content="noindex, nofollow">. An internal tool should declare itself uncrawlable. Without this, if the URL leaks publicly, search engines may index it (even though the app requires login). - No
robots.txtinpublic/. Add one withUser-agent: *\nDisallow: /. - No
<meta property="og:title">/<meta property="og:description">/<meta property="og:url">— minor; only relevant if links to the admin tool get shared in Slack / LinkedIn. - No canonical URL — irrelevant for an internal tool.
- No structured data (JSON-LD) — irrelevant for an internal tool.
- No favicon set explicitly (default
vite.svgmay apply). Checkpublic/favicon.ico/<link rel="icon">. - No
<meta http-equiv="X-UA-Compatible">— fine, deprecated. - No theme-color — minor (controls the URL bar color on mobile).
- No 404 handling at the HTTP level — the
<NotFound />route returns a 200 HTTP status because it's all client-side. For an internal tool, fine. If this ever needs to be a "real" 404 for monitoring, that requires server-side rendering or pre-rendering.
Recommended additions¶
In priority order:
- Add
<meta name="robots" content="noindex, nofollow">toindex.htmlhead. Five characters of work. - Add
public/robots.txtwithUser-agent: *\nDisallow: /. Two lines. - (Optional) Add a proper favicon to
public/favicon.ico. - (Optional) Add a theme-color:
<meta name="theme-color" content="#hex">.
Per-page metadata¶
There is no per-page title management — every page renders under <title>Someli Admin</title> from the static index.html. For an internal tool, fine. If desired, react-helmet-async (or any of its successors) would let pages set their own titles for browser-tab clarity.
Not strictly necessary; nice-to-have for keyboard tab switching.