CrawlPact

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.

By CrawlPactPublished Updated

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.
  • permits and prohibits need a type. type="usage" takes values from all, ai-all, ai-train, ai-input, ai-index and search; type="user" takes commercial, non-commercial, education, government and personal; type="geo" takes ISO 3166-1 codes such as US or EU. Values are space-separated. A word outside these lists (for example train) is not part of the vocabulary.
  • permits is an allow-list. If you write <permits type="usage">search</permits>, every other usage is not permitted. Use prohibits when 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

See how this applies to your own site

Run a free audit to check your declared AI crawler policy against your own domain.

Analytics preferences

CrawlPact uses optional Google Analytics and Microsoft Clarity on public pages to learn which content is useful. Clarity records clicks and scrolling (session replay), with anything you type masked. Neither runs in the app or admin areas, and CrawlPact works the same whether you accept or decline. See the privacy policy.