# https://www.viraldrop.ai/robots.txt
#
# Served as-is only on www.viraldrop.ai and viraldrop.ai; serve-static.mjs answers
# every other host with Disallow: /.
#
# The AI crawlers are named so the permission is explicit. They share this one group
# because a crawler with a group of its own ignores `*`, and would then need every
# Disallow below repeated for it.
User-agent: *
User-agent: GPTBot
User-agent: OAI-SearchBot
User-agent: ClaudeBot
User-agent: PerplexityBot
User-agent: Google-Extended
User-agent: CCBot
Allow: /
# `/tracker` is the public Competitor Watch page and is open for search; only the app below it
# is closed. `$` ends the match, so neither line reaches `/tracker-landing` or `/tracker/…`.
Allow: /tracker$
Allow: /*/tracker$
# Signed-in-only routes: no crawlable content. `/research` and `/tracker` are public pages, so only
# the paths below them (per-user reports, legacy aliases) are listed. Listed twice because a robots.txt
# Disallow is a path-prefix match,
# so `/profile` does not cover the locale-prefixed `/es/profile`.
Disallow: /profile
Disallow: /history
Disallow: /chat
Disallow: /studio
Disallow: /home
Disallow: /checkout
Disallow: /starter-deal
Disallow: /giveaway
Disallow: /welcome
Disallow: /redeem
# `/school` also covers `/schools/{code}`, a school's personal invite.
Disallow: /school
Disallow: /tracker/
Disallow: /research/
# `/creative` was registered `appOnly` when it shipped but never listed here, so the
# constructor was crawlable. The prefix now also covers `/creative/{id}`, one URL per
# generated creative — an owner's unreleased work, addressed by an id that must not
# reach an index.
Disallow: /creative
Disallow: /create
Disallow: /unsubscribe
Disallow: /oauth
Disallow: /admin
Disallow: /*/profile
Disallow: /*/history
Disallow: /*/chat
Disallow: /*/studio
Disallow: /*/home
Disallow: /*/checkout
Disallow: /*/starter-deal
Disallow: /*/giveaway
Disallow: /*/welcome
Disallow: /*/redeem
Disallow: /*/school
Disallow: /*/tracker/
Disallow: /*/research/
Disallow: /*/creative
Disallow: /*/create
Disallow: /*/unsubscribe
Disallow: /*/oauth
Disallow: /*/admin
# The landing pages ported from the studio repo (2026-08-21) are CRAWLABLE from
# 2026-08-24, when `/lp/trend` became a Google Ads destination: AdsBot obeys
# robots.txt, and a blocked destination gets the campaign disapproved as
# "Destination not crawlable" — the same reason the ad landings below are not
# disallowed either. They still make the same pitch as `/` and `/trends`, so they
# are kept out of the organic index the other way: a stamped
# (landerNoindex in
# src/seo/routes.json, written by scripts/gen-head.mjs), which AdsBot ignores for
# ad-quality checks. Only the UNPREFIXED paths carry that shell, so the
# locale-prefixed forms stay disallowed rather than serving the default head.
Disallow: /*/lp
# Analytics reverse proxies, not pages.
Disallow: /ingest/
Disallow: /api/
# The ad landing pages (/promo, /deal, /ads, /social, /trends, /trend) are
# deliberately NOT disallowed here. AdsBot obeys robots.txt, and a blocked
# destination gets the Google Ads campaigns disapproved as "Destination not
# crawlable". They are clones of the homepage, so they are kept out of the
# organic index the other way instead: a static
# stamped into their prerendered
# shells by scripts/gen-head.mjs, which AdsBot ignores for ad-quality checks.
Sitemap: https://www.viraldrop.ai/sitemap.xml