Implementation guide
How to publish an RSL (Really Simple Licensing) declaration
Write an RSL 1.0 licence file, associate it through robots.txt, an HTTP Link header or HTML, and check it — with the official vocabulary and examples.
RSL (Really Simple Licensing) is an XML format for declaring how a website’s content may be used — for example, that AI training is not permitted, or only under a licence. RSL 1.0 was published on 10 December 2025 (rslstandard.org/rsl); this guide follows that version and its errata. An RSL file is a declaration, not technical enforcement.
What do I need to publish?
Two things: an RSL licence document (an XML file), and an association that tells clients where
to find it. RSL 1.0 does not define a fixed file location such as /.well-known/rsl.xml; a client
finds your licence through robots.txt, an HTTP Link header, or HTML.
Step 1: Write the licence document
Every RSL 1.0 document has an <rsl> root in the RSL namespace, one or more <content> elements
saying which URLs the terms cover, and at least one <license> inside each. This is the official
template for prohibiting AI training and AI-generated answers while saying nothing about other
uses:
<rsl xmlns="https://rslstandard.org/rsl">
<content url="/">
<license>
<prohibits type="usage">ai-train ai-input</prohibits>
</license>
</content>
</rsl>
The parts that are easy to get wrong:
- The namespace is required. Clients identify RSL documents by
xmlns="https://rslstandard.org/rsl"; without it the file is not RSL 1.0. permitsandprohibitsneed atype.type="usage"takes values fromall,ai-all,ai-train,ai-input,ai-indexandsearch;type="user"takescommercial,non-commercial,education,governmentandpersonal;type="geo"takes ISO 3166-1 codes such asUSorEU. Values are space-separated. A word outside these lists (for exampletrain) is not part of the vocabulary.permitsis an allow-list. If you write<permits type="usage">search</permits>, every other usage is not permitted. Useprohibitswhen you only want to rule something out.- Prohibitions win. If one licence both permits and prohibits the same use, RSL gives the prohibition precedence.
- No payment element means free. To require terms, add a
<payment>element, for example:
<rsl xmlns="https://rslstandard.org/rsl">
<content url="/">
<license>
<permits type="usage">ai-train</permits>
<payment type="subscription">
<custom>https://example.com/contact-form.html</custom>
</payment>
</license>
</content>
</rsl>
Payment type values are purchase, subscription, training, crawl, use, contribution,
attribution and free. A server attribute on <content> points to an RSL licence server that
clients must obtain a licence from first; only add it if you actually operate or use one.
Step 2: Publish the file
Serve the XML at a stable URL on your site, for example https://example.com/license.xml (the
RSL getting-started guide uses license.xml in the site root). RSL 1.0 says documents should be
served as application/rsl+xml, though clients must not reject a valid document only because of
its media type. Where the file physically lives depends on your hosting — a public/ assets
directory on static hosts, or the web root on a traditional server.
Step 3: Associate the licence
Use at least one of these RSL 1.0 association mechanisms:
robots.txt — add a License line with the absolute URL:
License: https://example.com/license.xml
User-agent: *
Allow: /
A License line before any User-agent group applies to all crawlers. A License line inside a
group applies to that group’s crawlers and, for them, overrides the global line. Each subdomain
needs its own robots.txt line.
HTTP Link header — useful for non-HTML responses as well:
Link: <https://example.com/license.xml>; rel="license"; type="application/rsl+xml"
HTML — in the page <head>:
<link rel="license" type="application/rsl+xml" href="https://example.com/license.xml" />
RSL 1.0 also defines inline <script type="application/rsl+xml"> blocks, RSS and embedded-file
metadata.
Step 4: Check it
Run CrawlPact’s RSL validator. It looks for a License line in your
robots.txt, a Link header and HTML associations on your homepage, retrieves the licence that
applies to crawlers in general, and checks it against RSL 1.0: namespace, structure, the usage,
user and geo vocabularies, payment and reporting terms. It shows what each licence declares for
search, AI indexing, AI input and AI training. If you have not added an association, it also checks
the legacy /.well-known/rsl.xml location and says so.
Keep it consistent with your other declarations
If you also publish Content Signals in robots.txt, make them agree — see
RSL vs. Content Signals vs. robots.txt. CrawlPact
flags a licence that does not permit AI training next to a Content-Signal that says
ai-train=yes, and the reverse.
What this doesn’t do
RSL is a machine-readable declaration, not technical enforcement — see /limitations. No crawler is required to read it, and CrawlPact does not obtain licences, process payments or contact licence servers.
Related guides
- How to block only AI training crawlers, without blocking AI searchA 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 fileA step-by-step implementation guide for adding a valid llms.txt (and llms-full.txt) file to your site.
- How to set Content Signals: the robots.txt directive and the Content-Signal headerA step-by-step guide to publishing Content Signals: the documented robots.txt Content-Signal directive, the optional use field, and the HTTP header variant.
See how this applies to your own site
Run a free audit to check your declared AI crawler policy against your own domain.