Skip to content

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 in public/)

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.txt in public/. Add one with User-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.svg may apply). Check public/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.

In priority order:

  1. Add <meta name="robots" content="noindex, nofollow"> to index.html head. Five characters of work.
  2. Add public/robots.txt with User-agent: *\nDisallow: /. Two lines.
  3. (Optional) Add a proper favicon to public/favicon.ico.
  4. (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.

<Helmet><title>Accounts · Someli Admin</title></Helmet>

Not strictly necessary; nice-to-have for keyboard tab switching.