# 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