# robots.txt for VeloWorkout # # The rules below are prefix matches, not path segments: "Disallow: /perform/" # only blocks URLs that BEGIN with /perform/, which is why /workouts//perform # was crawled several hundred times before anyone noticed. Anything that can # appear deeper in a path needs a leading wildcard. See src/test/robots.test.ts, # which asserts these patterns against the URLs Search Console actually flagged. User-agent: * Allow: / # Whole sections that are private or non-content. Disallow: /api/ Disallow: /admin/ Disallow: /analytics/ Disallow: /auth/ Disallow: /coach/ Disallow: /history/ Disallow: /planned-workouts/ Disallow: /profile/ Disallow: /redirect/ Disallow: /save-workout/ Disallow: /settings/ Disallow: /subscription/ Disallow: /test/ Disallow: /debug-* # App surfaces that hang off a content URL. The workout player and editor exist # once per workout, so leaving them open put roughly 900 crawlable URLs in front # of Googlebot that it was never going to index. Disallow: /perform/ Disallow: /*/perform Disallow: /*/edit # The route builder is one page. Every workout page links to it with its own # ?workoutId=, which turned one app screen into hundreds of near-identical URLs. # The page itself stays crawlable; only the parameterised copies are blocked. Disallow: /routes? # Deliberately still crawlable: /*/opengraph-image. Blocking those would save # crawl budget but Facebook and LinkedIn read robots.txt too, and a blocked card # is a broken link preview. # Sitemap Sitemap: https://veloworkout.com/sitemap.xml Sitemap: https://blog.veloworkout.com/sitemap.xml