# Allow all search engines and AI crawlers User-agent: * Allow: / Allow: /routes/* Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* # AI crawlers. # # Each named block below repeats the Disallow list on purpose. robots.txt has # no inheritance: a crawler obeys the ONE group that matches it best, so a bare # "User-agent: GPTBot / Allow: /" block does not pick up the rules from the "*" # group. Before this, every named AI bot was free to crawl /admin/* and /api/* # while ordinary crawlers were kept out. # # /embed/* stays disallowed here too. Those URLs are one bare widget per public # route, thousands of near-identical thin pages. The white-label story is told # by /p, which is prerendered and carries Service + FAQPage markup. pointing AI # crawlers at the widgets instead would trade one good citation target for a # few thousand bad ones. User-agent: GPTBot Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: ChatGPT-User Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: Claude-Web Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: PerplexityBot Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: Anthropic-AI Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: ClaudeBot Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* User-agent: Google-Extended Allow: / Disallow: /api/* Disallow: /dashboard/* Disallow: /admin/* Disallow: /embed/* # Sitemap location Sitemap: https://cityheart.run/sitemap.xml