How to publish an RSL (Really Simple Licensing) declaration
Published 7/24/2026
RSL (Really Simple Licensing) is an emerging, XML-based specification for declaring what a website’s content may and may not be used for — including AI training — in a machine-readable form. It is a declaration, not technical enforcement.
Step 1: Create the file at the well-known RSL location
Place an XML file at /.well-known/rsl.xml — for example
https://example.com/.well-known/rsl.xml. As with any file under /.well-known/, where it
physically lives depends on your hosting:
- Static-site hosts (Cloudflare Pages/Workers Assets, Netlify, Vercel, or any static-site
generator) — create a
.well-known/rsl.xmlpath inside the project’s static-assets directory (often namedpublic/); it’s copied to the site root unchanged at build time. - WordPress — a real file placed directly at
.well-known/rsl.xmlin the site’s web root (via SFTP or your host’s file manager) is served as-is, since Apache/Nginx serve a matching file from disk before invoking WordPress’s own routing. If direct file access isn’t available, a plugin or afunctions.phpsnippet hooked to WordPress’sinitaction can match the request path and output the XML with anapplication/xmlcontent-type instead.
Step 2: Declare a license element
<license>
<permits>search</permits>
<prohibits>train</prohibits>
</license>
CrawlPact’s RSL reader recognises the <license>, <permits>, <prohibits>, <payment>, and
<copyright> elements. Anything else encountered is preserved and reported as an “unsupported
element” rather than silently discarded, since RSL is still an evolving specification.
Step 3 (optional): Declare payment terms
<license>
<permits>search</permits>
<prohibits>train</prohibits>
<payment>subscription</payment>
</license>
Step 4: Verify
Run CrawlPact’s RSL validator. It reports whether a <license> element
was discovered, and lists the declared permits, prohibits, and payment terms.
Keep it consistent with your other declarations
If you also publish a Content-Signal header or specific robots.txt rules, make sure they say
the same thing — see
RSL vs. Content Signals vs. robots.txt for why
nothing reconciles a disagreement between them automatically.
What this doesn’t do
RSL is a machine-readable declaration, not technical enforcement — see /limitations. There is no guarantee that any specific crawler operator checks this file, since RSL adoption varies.
Related guides
How to block only AI training crawlers, without blocking AI search
A step-by-step implementation guide for writing robots.txt groups that restrict training-purpose crawlers while leaving search-purpose crawlers untouched.
How to publish an llms.txt file
A step-by-step implementation guide for adding a valid llms.txt (and llms-full.txt) file to your site.
How to set the Content-Signal HTTP header
A step-by-step implementation guide for publishing a Content-Signal response header, and where to configure it depending on your hosting setup.
See how this applies to your own site
Run a free audit to check your declared AI crawler policy against your own domain.
Audit a domain