# robots.txt — lifescenario.ai
# Policy: open to search and AI assistants. See https://contentsignals.org/ for
# the Content-Signal syntax.
#
# NOTE (RFC 9309 §2.2.1): a crawler obeys only its most specific matching
# group. Named per-crawler "Allow: /" groups would therefore EXEMPT those
# crawlers from every Disallow below — so there is deliberately ONE group.
# Absence of a named group means allowed by default; AI crawlers (GPTBot,
# ClaudeBot, PerplexityBot, Google-Extended, Bingbot, …) are welcome and
# governed by the same product-route Disallows as everyone else.
User-agent: *
Allow: /
Content-Signal: search=yes, ai-input=yes, ai-train=yes
# --- Product routes: app shells with no indexable content ---
# /sign-up, /sign-in, /profile-select, /play, /demo and /portal (an old
# address that forwards to /sign-in) are deliberately NOT listed: they carry
# , which crawlers can only see
# if they are allowed to fetch the page.
Disallow: /train$
Disallow: /train/
Disallow: /train-router
Disallow: /child/
Disallow: /child-progress/
Disallow: /children/
Disallow: /parent/
Disallow: /dashboard
Disallow: /profile$
Disallow: /my-progress
Disallow: /my-collection
Disallow: /session-results
Disallow: /avatar-select
Disallow: /avatar-demo
Disallow: /unlock
Disallow: /educator/
Disallow: /org/
Disallow: /games/
Disallow: /group-sessions/
Disallow: /admin/
Disallow: /auth$
Disallow: /auth/
Disallow: /complete-signup
Disallow: /force-logout
Disallow: /onboarding$
# --- API ---
# /api/mcp is the public, read-only MCP endpoint that /llms.txt, /auth.md,
# /.well-known/api-catalog and the MCP server card advertise, so it is allowed
# (the longer rule wins; it is also listed first for parsers that stop at the
# first match). It answers POST only: a GET is a 405, so there is nothing to
# index. Every other API route stays closed.
Allow: /api/mcp
Disallow: /api/
# --- Parameterised entry points ---
# Content pages link to /play?scenario=&ref=, /sign-up?scenario=…,
# /sign-up?plan=… and /demo?ref=…: one URL per article and scenario page, all
# of them the same app shell. Only the query-string variants are blocked ("?"
# is literal here), so the bare pages stay fetchable and show their noindex.
Disallow: /play?
Disallow: /demo?
Disallow: /sign-up?
Disallow: /sign-in?
Disallow: /profile-select?
# --- Test/debug pages that should not exist in prod (slated for deletion) ---
Disallow: /design-demo
Disallow: /uxsystem-demo
Disallow: /simple-avatar-test
Disallow: /debug-auth
Disallow: /test-email
Disallow: /test-parent-guidance
Disallow: /test-safety
Disallow: /test-timeout
Disallow: /FunFact
Sitemap: https://lifescenario.ai/sitemap.xml