# See https://www.robotstxt.org/robotstxt.html # Public marketing + legal pages are crawlable. Everything behind auth, the admin, the # internal worker API, per-user demo links, and Active Storage blobs are not. # # MAINTENANCE: the Disallow list below is repeated verbatim in the AI-assistant group at the # bottom, and the two MUST stay in sync. robots.txt has no inheritance - a crawler that matches # its own User-agent group ignores the "*" group entirely, so a group that lists only Allow lines # would hand that crawler /dashboard, /admin and /api. Add every new Disallow to BOTH groups. User-agent: * Allow: /$ Allow: /es$ Allow: /pt$ Allow: /fr$ Allow: /de$ Allow: /it$ Allow: /terms Allow: /es/terms Allow: /pt/terms Allow: /fr/terms Allow: /de/terms Allow: /it/terms Allow: /privacy Allow: /es/privacy Allow: /pt/privacy Allow: /fr/privacy Allow: /de/privacy Allow: /it/privacy Allow: /refund-policy Allow: /es/refund-policy Allow: /pt/refund-policy Allow: /fr/refund-policy Allow: /de/refund-policy Allow: /it/refund-policy Allow: /contact Allow: /es/contact Allow: /pt/contact Allow: /fr/contact Allow: /de/contact Allow: /it/contact Allow: /pricing Allow: /es/pricing Allow: /pt/pricing Allow: /fr/pricing Allow: /de/pricing Allow: /it/pricing Allow: /signup Allow: /login Allow: /compare/ Allow: /es/compare/ Allow: /pt/compare/ Allow: /fr/compare/ Allow: /de/compare/ Allow: /it/compare/ Allow: /youtube-to-shorts Allow: /es/youtube-to-shorts Allow: /pt/youtube-to-shorts Allow: /fr/youtube-to-shorts Allow: /de/youtube-to-shorts Allow: /it/youtube-to-shorts Allow: /youtube-to-tiktok Allow: /es/youtube-to-tiktok Allow: /pt/youtube-to-tiktok Allow: /fr/youtube-to-tiktok Allow: /de/youtube-to-tiktok Allow: /it/youtube-to-tiktok Allow: /video-to-reels Allow: /es/video-to-reels Allow: /pt/video-to-reels Allow: /fr/video-to-reels Allow: /de/video-to-reels Allow: /it/video-to-reels Allow: /posting-schedule Allow: /es/posting-schedule Allow: /pt/posting-schedule Allow: /fr/posting-schedule Allow: /de/posting-schedule Allow: /it/posting-schedule Allow: /clipping-campaigns Allow: /es/clipping-campaigns Allow: /pt/clipping-campaigns Allow: /fr/clipping-campaigns Allow: /de/clipping-campaigns Allow: /it/clipping-campaigns Allow: /podcast-to-shorts Allow: /es/podcast-to-shorts Allow: /pt/podcast-to-shorts Allow: /fr/podcast-to-shorts Allow: /de/podcast-to-shorts Allow: /it/podcast-to-shorts Allow: /webinar-to-clips Allow: /es/webinar-to-clips Allow: /pt/webinar-to-clips Allow: /fr/webinar-to-clips Allow: /de/webinar-to-clips Allow: /it/webinar-to-clips Allow: /zoom-recording-to-clips Allow: /es/zoom-recording-to-clips Allow: /pt/zoom-recording-to-clips Allow: /fr/zoom-recording-to-clips Allow: /de/zoom-recording-to-clips Allow: /it/zoom-recording-to-clips Allow: /clipping-side-hustle Allow: /es/clipping-side-hustle Allow: /pt/clipping-side-hustle Allow: /fr/clipping-side-hustle Allow: /de/clipping-side-hustle Allow: /it/clipping-side-hustle Allow: /go-viral-overnight Allow: /es/go-viral-overnight Allow: /pt/go-viral-overnight Allow: /fr/go-viral-overnight Allow: /de/go-viral-overnight Allow: /it/go-viral-overnight Allow: /what-makes-a-video-viral Allow: /es/what-makes-a-video-viral Allow: /pt/what-makes-a-video-viral Allow: /fr/what-makes-a-video-viral Allow: /de/what-makes-a-video-viral Allow: /it/what-makes-a-video-viral Allow: /how-to-join-a-trend Allow: /es/how-to-join-a-trend Allow: /pt/how-to-join-a-trend Allow: /fr/how-to-join-a-trend Allow: /de/how-to-join-a-trend Allow: /it/how-to-join-a-trend Allow: /clip-rejected-after-views Allow: /es/clip-rejected-after-views Allow: /pt/clip-rejected-after-views Allow: /fr/clip-rejected-after-views Allow: /de/clip-rejected-after-views Allow: /it/clip-rejected-after-views Allow: /flagged-for-botting Allow: /es/flagged-for-botting Allow: /pt/flagged-for-botting Allow: /fr/flagged-for-botting Allow: /de/flagged-for-botting Allow: /it/flagged-for-botting Allow: /campaign-budget-ran-out Allow: /es/campaign-budget-ran-out Allow: /pt/campaign-budget-ran-out Allow: /fr/campaign-budget-ran-out Allow: /de/campaign-budget-ran-out Allow: /it/campaign-budget-ran-out Allow: /when-clippers-get-paid Allow: /es/when-clippers-get-paid Allow: /pt/when-clippers-get-paid Allow: /fr/when-clippers-get-paid Allow: /de/when-clippers-get-paid Allow: /it/when-clippers-get-paid Allow: /whop-clipping-tool Allow: /es/whop-clipping-tool Allow: /pt/whop-clipping-tool Allow: /fr/whop-clipping-tool Allow: /de/whop-clipping-tool Allow: /it/whop-clipping-tool Allow: /developers/api # The API's OpenAPI document is public on purpose (n8n, Make, assistants read it); the rest of /api/ is not. Allow: /api/v1/openapi.json Allow: /mcp-server Allow: /es/mcp-server Allow: /pt/mcp-server Allow: /fr/mcp-server Allow: /de/mcp-server Allow: /it/mcp-server Allow: /clipping-api Allow: /es/clipping-api Allow: /pt/clipping-api Allow: /fr/clipping-api Allow: /de/clipping-api Allow: /it/clipping-api Allow: /zapier-n8n-make-video-clipping Allow: /es/zapier-n8n-make-video-clipping Allow: /pt/zapier-n8n-make-video-clipping Allow: /fr/zapier-n8n-make-video-clipping Allow: /de/zapier-n8n-make-video-clipping Allow: /it/zapier-n8n-make-video-clipping Allow: /discord-clip-notifications Allow: /es/discord-clip-notifications Allow: /pt/discord-clip-notifications Allow: /fr/discord-clip-notifications Allow: /de/discord-clip-notifications Allow: /it/discord-clip-notifications Allow: /developers Allow: /es/developers Allow: /pt/developers Allow: /fr/developers Allow: /de/developers Allow: /it/developers Allow: /vyro-clipping-tool Allow: /es/vyro-clipping-tool Allow: /pt/vyro-clipping-tool Allow: /fr/vyro-clipping-tool Allow: /de/vyro-clipping-tool Allow: /it/vyro-clipping-tool Allow: /clipping-platforms Allow: /es/clipping-platforms Allow: /pt/clipping-platforms Allow: /fr/clipping-platforms Allow: /de/clipping-platforms Allow: /it/clipping-platforms Allow: /paid-per-sale-clipping Allow: /es/paid-per-sale-clipping Allow: /pt/paid-per-sale-clipping Allow: /fr/paid-per-sale-clipping Allow: /de/paid-per-sale-clipping Allow: /it/paid-per-sale-clipping Allow: /music-in-clips Allow: /es/music-in-clips Allow: /pt/music-in-clips Allow: /fr/music-in-clips Allow: /de/music-in-clips Allow: /it/music-in-clips Allow: /movie-edit-with-song Allow: /es/movie-edit-with-song Allow: /pt/movie-edit-with-song Allow: /fr/movie-edit-with-song Allow: /de/movie-edit-with-song Allow: /it/movie-edit-with-song Allow: /watermarks-and-reach Allow: /es/watermarks-and-reach Allow: /pt/watermarks-and-reach Allow: /fr/watermarks-and-reach Allow: /de/watermarks-and-reach Allow: /it/watermarks-and-reach Allow: /reposting-a-clip Allow: /es/reposting-a-clip Allow: /pt/reposting-a-clip Allow: /fr/reposting-a-clip Allow: /de/reposting-a-clip Allow: /it/reposting-a-clip Allow: /video-to-telegram Allow: /es/video-to-telegram Allow: /pt/video-to-telegram Allow: /fr/video-to-telegram Allow: /de/video-to-telegram Allow: /it/video-to-telegram Allow: /video-to-linkedin Allow: /es/video-to-linkedin Allow: /pt/video-to-linkedin Allow: /fr/video-to-linkedin Allow: /de/video-to-linkedin Allow: /it/video-to-linkedin Allow: /video-to-pinterest Allow: /es/video-to-pinterest Allow: /pt/video-to-pinterest Allow: /fr/video-to-pinterest Allow: /de/video-to-pinterest Allow: /it/video-to-pinterest Allow: /video-to-x Allow: /es/video-to-x Allow: /pt/video-to-x Allow: /fr/video-to-x Allow: /de/video-to-x Allow: /it/video-to-x Allow: /video-to-facebook Allow: /es/video-to-facebook Allow: /pt/video-to-facebook Allow: /fr/video-to-facebook Allow: /de/video-to-facebook Allow: /it/video-to-facebook Allow: /video-clipping-automation Allow: /es/video-clipping-automation Allow: /pt/video-clipping-automation Allow: /fr/video-clipping-automation Allow: /de/video-clipping-automation Allow: /it/video-clipping-automation Allow: /clip-blurry-after-upload Allow: /es/clip-blurry-after-upload Allow: /pt/clip-blurry-after-upload Allow: /fr/clip-blurry-after-upload Allow: /de/clip-blurry-after-upload Allow: /it/clip-blurry-after-upload Allow: /ai-clipper-cuts-mid-sentence Allow: /es/ai-clipper-cuts-mid-sentence Allow: /pt/ai-clipper-cuts-mid-sentence Allow: /fr/ai-clipper-cuts-mid-sentence Allow: /de/ai-clipper-cuts-mid-sentence Allow: /it/ai-clipper-cuts-mid-sentence Allow: /clip-part-of-a-long-video Allow: /es/clip-part-of-a-long-video Allow: /pt/clip-part-of-a-long-video Allow: /fr/clip-part-of-a-long-video Allow: /de/clip-part-of-a-long-video Allow: /it/clip-part-of-a-long-video Allow: /is-my-clip-account-shadowbanned Allow: /es/is-my-clip-account-shadowbanned Allow: /pt/is-my-clip-account-shadowbanned Allow: /fr/is-my-clip-account-shadowbanned Allow: /de/is-my-clip-account-shadowbanned Allow: /it/is-my-clip-account-shadowbanned Allow: /clip-audio-too-quiet Allow: /es/clip-audio-too-quiet Allow: /pt/clip-audio-too-quiet Allow: /fr/clip-audio-too-quiet Allow: /de/clip-audio-too-quiet Allow: /it/clip-audio-too-quiet Allow: /clipping-payouts-by-country Allow: /es/clipping-payouts-by-country Allow: /pt/clipping-payouts-by-country Allow: /fr/clipping-payouts-by-country Allow: /de/clipping-payouts-by-country Allow: /it/clipping-payouts-by-country Allow: /affiliate Allow: /es/affiliate Allow: /pt/affiliate Allow: /fr/affiliate Allow: /de/affiliate Allow: /it/affiliate Allow: /short-form-monetization Allow: /es/short-form-monetization Allow: /pt/short-form-monetization Allow: /fr/short-form-monetization Allow: /de/short-form-monetization Allow: /it/short-form-monetization Allow: /twitch-to-tiktok Allow: /es/twitch-to-tiktok Allow: /pt/twitch-to-tiktok Allow: /fr/twitch-to-tiktok Allow: /de/twitch-to-tiktok Allow: /it/twitch-to-tiktok Allow: /video-hooks Allow: /es/video-hooks Allow: /pt/video-hooks Allow: /fr/video-hooks Allow: /de/video-hooks Allow: /it/video-hooks Allow: /vertical-crop Allow: /es/vertical-crop Allow: /pt/vertical-crop Allow: /fr/vertical-crop Allow: /de/vertical-crop Allow: /it/vertical-crop # The one page with translations. The five prefixed URLs are real pages, not parameters, # so each one is named here - a crawler that cannot fetch /de/... cannot honour the # hreflang that points at it. Allow: /testing-auto-crop Allow: /es/testing-auto-crop Allow: /pt/testing-auto-crop Allow: /fr/testing-auto-crop Allow: /de/testing-auto-crop Allow: /it/testing-auto-crop Allow: /how-to-become-a-clipper Allow: /es/how-to-become-a-clipper Allow: /pt/how-to-become-a-clipper Allow: /fr/how-to-become-a-clipper Allow: /de/how-to-become-a-clipper Allow: /it/how-to-become-a-clipper Allow: /what-videos-get-views Allow: /es/what-videos-get-views Allow: /pt/what-videos-get-views Allow: /fr/what-videos-get-views Allow: /de/what-videos-get-views Allow: /it/what-videos-get-views Allow: /top-clipping-campaigns Allow: /facecam-on-top-of-gameplay Allow: /es/facecam-on-top-of-gameplay Allow: /pt/facecam-on-top-of-gameplay Allow: /fr/facecam-on-top-of-gameplay Allow: /de/facecam-on-top-of-gameplay Allow: /it/facecam-on-top-of-gameplay Allow: /tiktok-unoriginal-content Allow: /es/tiktok-unoriginal-content Allow: /pt/tiktok-unoriginal-content Allow: /fr/tiktok-unoriginal-content Allow: /de/tiktok-unoriginal-content Allow: /it/tiktok-unoriginal-content Allow: /youtube-reused-content Allow: /es/youtube-reused-content Allow: /pt/youtube-reused-content Allow: /fr/youtube-reused-content Allow: /de/youtube-reused-content Allow: /it/youtube-reused-content Allow: /clip-kick-streams Allow: /es/clip-kick-streams Allow: /pt/clip-kick-streams Allow: /fr/clip-kick-streams Allow: /de/clip-kick-streams Allow: /it/clip-kick-streams Allow: /how-many-clips-a-day Allow: /es/how-many-clips-a-day Allow: /pt/how-many-clips-a-day Allow: /fr/how-many-clips-a-day Allow: /de/how-many-clips-a-day Allow: /it/how-many-clips-a-day # Hub pages (SeoHub, 2026-10-05). /compare is anchored with $ so it only matches the hub itself; # the head-to-heads under /compare/ are allowed above. Allow: /use-cases Allow: /es/use-cases Allow: /pt/use-cases Allow: /fr/use-cases Allow: /de/use-cases Allow: /it/use-cases Allow: /for-clippers Allow: /es/for-clippers Allow: /pt/for-clippers Allow: /fr/for-clippers Allow: /de/for-clippers Allow: /it/for-clippers Allow: /free-tools Allow: /es/free-tools Allow: /pt/free-tools Allow: /fr/free-tools Allow: /de/free-tools Allow: /it/free-tools Allow: /clipping-guides Allow: /es/clipping-guides Allow: /pt/clipping-guides Allow: /fr/clipping-guides Allow: /de/clipping-guides Allow: /it/clipping-guides Allow: /compare$ Allow: /es/compare$ Allow: /pt/compare$ Allow: /fr/compare$ Allow: /de/compare$ Allow: /it/compare$ Allow: /is-clipping-allowed Allow: /es/is-clipping-allowed Allow: /pt/is-clipping-allowed Allow: /fr/is-clipping-allowed Allow: /de/is-clipping-allowed Allow: /it/is-clipping-allowed Allow: /clip-youtube-livestream Allow: /es/clip-youtube-livestream Allow: /pt/clip-youtube-livestream Allow: /fr/clip-youtube-livestream Allow: /de/clip-youtube-livestream Allow: /it/clip-youtube-livestream Allow: /how-to-clip-a-twitch-stream Allow: /es/how-to-clip-a-twitch-stream Allow: /pt/how-to-clip-a-twitch-stream Allow: /fr/how-to-clip-a-twitch-stream Allow: /de/how-to-clip-a-twitch-stream Allow: /it/how-to-clip-a-twitch-stream Allow: /es/top-clipping-campaigns Allow: /pt/top-clipping-campaigns Allow: /fr/top-clipping-campaigns Allow: /de/top-clipping-campaigns Allow: /it/top-clipping-campaigns Allow: /punch-in-zoom Allow: /es/punch-in-zoom Allow: /pt/punch-in-zoom Allow: /fr/punch-in-zoom Allow: /de/punch-in-zoom Allow: /it/punch-in-zoom Allow: /censor-swearing Allow: /es/censor-swearing Allow: /pt/censor-swearing Allow: /fr/censor-swearing Allow: /de/censor-swearing Allow: /it/censor-swearing Allow: /caption-styles Allow: /es/caption-styles Allow: /pt/caption-styles Allow: /fr/caption-styles Allow: /de/caption-styles Allow: /it/caption-styles Allow: /clips-from-one-video Allow: /es/clips-from-one-video Allow: /pt/clips-from-one-video Allow: /fr/clips-from-one-video Allow: /de/clips-from-one-video Allow: /it/clips-from-one-video Allow: /clipping-cost-calculator Allow: /es/clipping-cost-calculator Allow: /pt/clipping-cost-calculator Allow: /fr/clipping-cost-calculator Allow: /de/clipping-cost-calculator Allow: /it/clipping-cost-calculator Allow: /ai-video-generator Allow: /es/ai-video-generator Allow: /pt/ai-video-generator Allow: /fr/ai-video-generator Allow: /de/ai-video-generator Allow: /it/ai-video-generator Allow: /opusclip-alternatives Allow: /es/opusclip-alternatives Allow: /pt/opusclip-alternatives Allow: /fr/opusclip-alternatives Allow: /de/opusclip-alternatives Allow: /it/opusclip-alternatives Allow: /klap-alternatives Allow: /es/klap-alternatives Allow: /pt/klap-alternatives Allow: /fr/klap-alternatives Allow: /de/klap-alternatives Allow: /it/klap-alternatives Allow: /submagic-alternatives Allow: /es/submagic-alternatives Allow: /pt/submagic-alternatives Allow: /fr/submagic-alternatives Allow: /de/submagic-alternatives Allow: /it/submagic-alternatives Allow: /autoclip-alternatives Allow: /es/autoclip-alternatives Allow: /pt/autoclip-alternatives Allow: /fr/autoclip-alternatives Allow: /de/autoclip-alternatives Allow: /it/autoclip-alternatives Allow: /vizard-alternatives Allow: /es/vizard-alternatives Allow: /pt/vizard-alternatives Allow: /fr/vizard-alternatives Allow: /de/vizard-alternatives Allow: /it/vizard-alternatives Allow: /choppity-alternatives Allow: /es/choppity-alternatives Allow: /pt/choppity-alternatives Allow: /fr/choppity-alternatives Allow: /de/choppity-alternatives Allow: /it/choppity-alternatives Allow: /munch-alternatives Allow: /es/munch-alternatives Allow: /pt/munch-alternatives Allow: /fr/munch-alternatives Allow: /de/munch-alternatives Allow: /it/munch-alternatives Allow: /eklipse-alternatives Allow: /es/eklipse-alternatives Allow: /pt/eklipse-alternatives Allow: /fr/eklipse-alternatives Allow: /de/eklipse-alternatives Allow: /it/eklipse-alternatives Allow: /ai-b-roll Allow: /es/ai-b-roll Allow: /pt/ai-b-roll Allow: /fr/ai-b-roll Allow: /de/ai-b-roll Allow: /it/ai-b-roll Allow: /why-clips-get-claimed Allow: /es/why-clips-get-claimed Allow: /pt/why-clips-get-claimed Allow: /fr/why-clips-get-claimed Allow: /de/why-clips-get-claimed Allow: /it/why-clips-get-claimed Allow: /why-shorts-get-no-views Allow: /es/why-shorts-get-no-views Allow: /pt/why-shorts-get-no-views Allow: /fr/why-shorts-get-no-views Allow: /de/why-shorts-get-no-views Allow: /it/why-shorts-get-no-views Allow: /views-without-subscribers Allow: /es/views-without-subscribers Allow: /pt/views-without-subscribers Allow: /fr/views-without-subscribers Allow: /de/views-without-subscribers Allow: /it/views-without-subscribers Allow: /short-video-length Allow: /es/short-video-length Allow: /pt/short-video-length Allow: /fr/short-video-length Allow: /de/short-video-length Allow: /it/short-video-length Allow: /same-clip-everywhere Allow: /es/same-clip-everywhere Allow: /pt/same-clip-everywhere Allow: /fr/same-clip-everywhere Allow: /de/same-clip-everywhere Allow: /it/same-clip-everywhere Allow: /video-file-checker Allow: /es/video-file-checker Allow: /pt/video-file-checker Allow: /fr/video-file-checker Allow: /de/video-file-checker Allow: /it/video-file-checker Allow: /subtitle-converter Allow: /es/subtitle-converter Allow: /pt/subtitle-converter Allow: /fr/subtitle-converter Allow: /de/subtitle-converter Allow: /it/subtitle-converter Allow: /extract-subtitles Allow: /es/extract-subtitles Allow: /pt/extract-subtitles Allow: /fr/extract-subtitles Allow: /de/extract-subtitles Allow: /it/extract-subtitles Allow: /extract-audio Allow: /es/extract-audio Allow: /pt/extract-audio Allow: /fr/extract-audio Allow: /de/extract-audio Allow: /it/extract-audio Allow: /video-to-transcript Allow: /es/video-to-transcript Allow: /pt/video-to-transcript Allow: /fr/video-to-transcript Allow: /de/video-to-transcript Allow: /it/video-to-transcript Allow: /clipper-pay-calculator Allow: /es/clipper-pay-calculator Allow: /pt/clipper-pay-calculator Allow: /fr/clipper-pay-calculator Allow: /de/clipper-pay-calculator Allow: /it/clipper-pay-calculator Allow: /cpm-rpm-calculator Allow: /es/cpm-rpm-calculator Allow: /pt/cpm-rpm-calculator Allow: /fr/cpm-rpm-calculator Allow: /de/cpm-rpm-calculator Allow: /it/cpm-rpm-calculator Allow: /posts-to-a-million-views Allow: /es/posts-to-a-million-views Allow: /pt/posts-to-a-million-views Allow: /fr/posts-to-a-million-views Allow: /de/posts-to-a-million-views Allow: /it/posts-to-a-million-views Allow: /cover-frame-picker Allow: /es/cover-frame-picker Allow: /pt/cover-frame-picker Allow: /fr/cover-frame-picker Allow: /de/cover-frame-picker Allow: /it/cover-frame-picker Disallow: /dashboard Disallow: /billing Disallow: /projects Disallow: /videos Disallow: /clips Disallow: /profile Disallow: /admin Disallow: /demos/ Disallow: /api/ Disallow: /rails/ Disallow: /webhooks/ Disallow: /checkout Disallow: /invoices Disallow: /team Disallow: /templates Disallow: /channels Disallow: /connect/ Disallow: /confirm-email/ Disallow: /chat-widget # NOT listed as Disallow, deliberately: /password/... and the two data-deletion status pages carry # a noindex meta tag, and a crawler blocked here could never read it. Blocking them is what put # them in Search Console as URL-only entries in the first place. # ── AI assistants and answer engines ───────────────────────────────────────── # Explicitly welcome, because we WANT SnapDub quoted when someone asks an assistant how clipping # campaigns work - that is the same audience the SEO cluster targets, arriving through a different # door. These crawlers already fall under "*" above (there is no blanket Disallow: /), so this # group changes nothing about what they may fetch; it states the permission plainly and keeps a # future edit to "*" from silently locking them out. # # What each one is: GPTBot trains OpenAI models, OAI-SearchBot indexes for ChatGPT Search, and # ChatGPT-User fetches a page live when someone asks ChatGPT to look at it - the three are # separate and blocking one does not block the others. Same split for Anthropic (ClaudeBot / # Claude-User / Claude-SearchBot) and Perplexity (PerplexityBot / Perplexity-User). CCBot is # Common Crawl, which feeds many models indirectly. Google-Extended and Applebot-Extended are # opt-outs for Gemini and Apple Intelligence ONLY - neither affects Google Search or Siri # ranking, so allowing them costs nothing in search terms. User-agent: GPTBot User-agent: OAI-SearchBot User-agent: ChatGPT-User User-agent: ClaudeBot User-agent: Claude-User User-agent: Claude-SearchBot User-agent: anthropic-ai User-agent: PerplexityBot User-agent: Perplexity-User User-agent: Google-Extended User-agent: Applebot-Extended User-agent: Bingbot User-agent: CCBot User-agent: meta-externalagent User-agent: Amazonbot User-agent: Bytespider User-agent: cohere-ai Allow: / Disallow: /dashboard Disallow: /billing Disallow: /projects Disallow: /videos Disallow: /clips Disallow: /profile Disallow: /admin Disallow: /demos/ Allow: /api/v1/openapi.json Disallow: /api/ Disallow: /rails/ Disallow: /webhooks/ Disallow: /checkout Disallow: /invoices Disallow: /team Disallow: /templates Disallow: /channels Disallow: /connect/ Disallow: /confirm-email/ Disallow: /chat-widget # NOT listed as Disallow, deliberately: /password/... and the two data-deletion status pages carry # a noindex meta tag, and a crawler blocked here could never read it. Blocking them is what put # them in Search Console as URL-only entries in the first place. # ── Meta's fetchers ────────────────────────────────────────────────────────── # Posting a Facebook Reel or video hands Meta a URL to pull the file from, and that URL is our # Active Storage PROXY (SocialPublishing#proxy_video_url) - under /rails/, which "*" disallows. # Meta's fetcher obeys robots.txt, so every Facebook post failed with "Unable to fetch media from # URL, got status code: 403 Restricted by robots.txt" (found 2026-10-06, clip 10225). This group # lets ONLY the stored files through to Meta: the rest of /rails/ stays shut, and the proxy URLs # are signed and expire, so nothing here is discoverable. meta-externalagent is NOT here - that # one is Meta's AI crawler and stays in the group above. # Same rule as the header: a matched group ignores "*", so the Disallow list is repeated in full. User-agent: facebookexternalhit User-agent: meta-externalfetcher Allow: /rails/active_storage/ Disallow: /rails/ Disallow: /dashboard Disallow: /billing Disallow: /projects Disallow: /videos Disallow: /clips Disallow: /profile Disallow: /admin Disallow: /demos/ Allow: /api/v1/openapi.json Disallow: /api/ Disallow: /webhooks/ Disallow: /checkout Disallow: /invoices Disallow: /team Disallow: /templates Disallow: /channels Disallow: /connect/ Disallow: /confirm-email/ Disallow: /chat-widget # A map of the site written for assistants and answer engines, in the llms.txt convention: one # line per page saying what it is actually about, plus what we will and will not claim. Named here # because robots.txt is the one file every crawler already fetches. # https://snapdub.ai/llms.txt Sitemap: https://snapdub.ai/sitemap.xml # Generated, not hand-kept: the monthly campaign pages appear on their own (TopCampaignsController). Sitemap: https://snapdub.ai/sitemaps/top-clipping-campaigns.xml