# robots.txt for https://orbitalradar.com # Optimised for JS-heavy, real-time web apps (Google-safe) # Content signals (contentsignals.org): search + attributed AI answers welcome, # AI training NOT licensed. Legal reservation: https://orbitalradar.com/legal # (TDM rights reserved under Art. 4(3) Directive (EU) 2019/790 — see also /.well-known/tdmrep.json) Content-Signal: search=yes, ai-input=yes, ai-train=no User-agent: * Content-Signal: search=yes, ai-input=yes, ai-train=no # Block truly private or non-indexable areas only Disallow: /admin/ Disallow: /admin.html Disallow: /private/ Disallow: /tmp/ # ✅ Block the authenticated / app-shell routes (keep landing indexable) Disallow: /academy/app Disallow: /academy/app/ # ✅ Block API endpoints — these return JSON/403 and waste crawl budget Disallow: /api/ # ✅ Block Satellite-Eye proxy endpoints (/t/, /g/) — ephemeral, randomised # tile (GIBS/Maxar/Landsat/S2) + geocoding proxies that rotate per session, so crawlers # only ever hit stale tokens → 404. Not content. The map's own browser fetches are # unaffected (robots governs crawlers only). GSC 2026-07-31: surfaced as "Not found (404)". Disallow: /t/ Disallow: /g/ # ✅ Block query-parameter variants that create canonical duplicates # These are the SPA globe loaded with client-side state — not indexable content Disallow: /*?sat= Disallow: /*?filter= Disallow: /*?sat_group= Disallow: /*?highlight= # ✅ Block ?group= and ?focus= globe state parameters (client-side operator/event views) # GSC: "Alternate page with proper canonical tag" — /?group=hulianwang, /?focus=shakti etc. Disallow: /*?group= Disallow: /*?focus= # ✅ Block embed parameter variants (used for iframed widgets on third-party sites) # These serve the same content as the canonical page and waste crawl budget # GSC: "Alternate page with proper canonical tag" — 713 pages (primary cause) Disallow: /*?embed= Disallow: /*?embed # ✅ Block blog category filter pages (client-side filter, not distinct content) # GSC: contributes to "Alternate page with proper canonical tag" count Disallow: /blog?category= Disallow: /blog?category # ✅ Blog TAG pages are intentionally CRAWLABLE — do NOT re-block. # They serve , so letting Googlebot crawl # them is the ONLY way the noindex is honored: the page is dropped from the index but its # links are still followed. Re-blocking hides the noindex and strands them as # "Indexed, though blocked by robots.txt" (GSC 2026-08-17: 88 such tag URLs). The tag set # is finite (curated), so crawl-budget cost is negligible. Category pages stay blocked below # (they emit index,follow — blocking them prevents thin filtered-view duplicates indexing). # ✅ Block blog search results (dynamic, noindex — not distinct indexable content) Disallow: /blog?q= Disallow: /blog?q # ✅ Block satellite directory search parameter (client-side search, not distinct content) Disallow: /satellite-directory?q= Disallow: /satellite-directory?q # ✅ Block library search parameter (prevents crawling of SearchAction template URL) # GSC: /library?q={search_term_string} being crawled from structured data template Disallow: /library?q= Disallow: /library?q # ✅ Block locale prefixes that have NO published translations. # ⚠️ MAINTENANCE: when a language goes live, REMOVE its line here. A live locale # left in this list is submitted in sitemap.xml (with hreflang) and then blocked # from crawling — the pages can never be indexed and the hreflang cluster breaks. # /ja/ and /es/ were removed 2026-07-29 (pilot went live 2026-07-28). # /de/ removed 2026-08-17 — DE pilot is live. # /pt/ and /fr/ removed 2026-08-17 — full i18n rollout went live (de/it/fr/pt/pl/cs/ro/hu, # 11 pages each). it/cs/ro/hu were never listed here, so they were already crawlable. # Only genuinely-untranslated locale prefixes remain blocked below. Disallow: /zh/ Disallow: /ko/ Disallow: /ar/ # IMPORTANT: allow JS, workers, styles, and app assets so Google can render pages Allow: / Allow: /scripts/ Allow: /cache/ Allow: /images/ Allow: /public/ # Explicitly allow key app files (belt & braces) Allow: /main.js Allow: /satellite.min.js Allow: /tleWorker.cjs Allow: /satelliteWorker.js Allow: /satdbWorker.js Allow: /filters.js Allow: /filterNav.js # Bulk AI-training crawlers with no search/citation value: not welcome. # (Search-time agents — OAI-SearchBot, ChatGPT-User, Claude-User, PerplexityBot, # Googlebot etc. — remain ALLOWED: AI citations are wanted. Do not block them.) User-agent: Bytespider Disallow: / # Sitemaps Sitemap: https://orbitalradar.com/sitemap-index.xml Sitemap: https://orbitalradar.com/sitemap.xml Sitemap: https://orbitalradar.com/sitemap-satellites.xml Sitemap: https://orbitalradar.com/sitemap-satellites-archive.xml Sitemap: https://orbitalradar.com/sitemap-register.xml Sitemap: https://orbitalradar.com/sitemap-launches.xml Sitemap: https://orbitalradar.com/sitemap-asteroids.xml Sitemap: https://orbitalradar.com/news-sitemap.xml