# Only the landing is public. Every other path is a personal, token-scoped page # (/{token}, /{token}/api, /{token}/mcp) that must never be crawled or indexed — # the token in the URL is the user's private key. Longest-match rules: the # specific Allows below beat the blanket Disallow. User-agent: * Allow: /$ # ?lng= URLs are deprecated and now 308 to // (see vercel.json). This Allow deliberately # STAYS until the duplicates leave the index: Google indexed /?lng=es, /?lng=fr and /?lng=ru and # picked the parameter URL as its own canonical over the "/" we declared, so /?lng=ru was ranking # at position 1.0 while /ru/ sat at 8.8. A robots block cannot fix that — a disallowed URL is never # recrawled, so the redirect would never be seen and the entry would linger as a URL-only result. # Remove this line only once URL Inspection reports all three as redirects rather than indexed. Allow: /?lng= Allow: /pt/ Allow: /ru/ Allow: /es/ Allow: /fr/ Allow: /guides/ Allow: /privacy/ # Support (the contact form): fetchable so a crawler sees its noindex and follows its links; not in # the sitemap (see renderSupport in guides/template.mjs). Allow: /support/ # Terms: same as support, noindex and not in the sitemap (see renderTerms). Allow: /terms/ Allow: /index.html Allow: /assets/ Allow: /icon.svg Allow: /icon-maskable.svg Allow: /apple-touch-icon.png Allow: /pwa-192.png Allow: /pwa-512.png Allow: /pwa-512-maskable.png Allow: /og-cover.png # Guide covers, hero images and the promo film: the pages reference them, so crawlers must be able # to fetch them for rendering, image search and link previews. Allow: /og/ Allow: /guide-hero/ Allow: /promo/ # The exercise frames (/exercises/-N.webp). The exercise libraries (/fr/exercices// and # /es/ejercicios//, under the Allow: /fr/ and /es/ above) show them as their two images, so # crawlers must be able to fetch them # for rendering and image search. Only static images live here: the app's exercise screens are # /{token}/exercises/..., which this does not open. Allow: /exercises/ # The planilha guide's downloadable spreadsheet and PDF (/guides/pt/planilha-de-treino-excel-gratis/). # The files are the page's answer to its query, so a crawler must be able to fetch them. Allow: /downloads/ # The demo, and the connection films and step screenshots the connect guides embed. Every guide # links to /demo/ since the signup-form rollout, and the connect guides reference the media, so a # crawler that cannot fetch them sees a page it cannot render and a link it cannot follow. /demo/ # must stay fetchable but must not be indexed: it serves the landing shell with a canonical to "/", # and Google ignored that canonical four days after this Allow went live (URL Inspection on # 2026-09-26: indexed, Google-selected canonical /demo/). The noindex lives in vercel.json as an # X-Robots-Tag header on "/demo/(.*)", not here - a URL blocked in robots.txt is never fetched, so a # noindex on it would never be seen. # Note the trailing slashes: the app's own /connect page stays disallowed, only its media opens. Allow: /demo/ Allow: /connect/ Allow: /instructions/ Allow: /manifest.webmanifest Allow: /llms.txt Allow: /sitemap.xml # Domain-ownership proof for the Glama connector listing. Must stay fetchable for as long as # we want the listing to stay claimed - Glama re-checks it. Allow: /.well-known/glama.json # Bing Webmaster Tools site-ownership proof. Must stay fetchable while the property is # verified; Bing re-checks it. Allow: /BingSiteAuth.xml # IndexNow key (web/scripts/indexnow.mjs). Bing and Yandex fetch it to check that a URL # submission really comes from this site. Public by design. Allow: /61732ef11730fee8318939243178b374.txt Disallow: / Sitemap: https://aim-journal.com/sitemap.xml