Skip to main content
All Guides

RSL License (Really Simple Licensing)

Informational in 3.x — runs and reports but does not affect your AX score yet (it will gain weight in v4.0). RSL 1.0 is the machine-readable content-licensing standard endorsed by 1,500+ publishers (Reddit, Yahoo, Medium, O'Reilly) with infrastructure support from Cloudflare and Fastly. It lets you declare licensing terms — free, attribution, pay-per-crawl, pay-per-inference — that AI crawlers can read and act on.

No RSL license discovery found

ax-audit checked the three discovery mechanisms defined by RSL 1.0 and found none: the robots.txt License: directive, an HTTP Link header with rel="license", and an HTML <link rel="license" type="application/rsl+xml"> element.

The simplest path is the robots.txt directive plus a license document at your site root:

# robots.txt
License: https://your-site.com/license.xml

User-agent: *
Allow: /
<?xml version="1.0" encoding="UTF-8"?>
<rsl xmlns="https://rslstandard.org/rsl">
  <content url="/">
    <license>
      <permits type="usage">search ai-input</permits>
      <prohibits type="usage">ai-train</prohibits>
      <payment type="attribution">
        <standard>https://your-site.com/license-terms</standard>
      </payment>
    </license>
  </content>
</rsl>

This example allows search indexing and RAG/grounding, prohibits training, and requires attribution. Adjust to your policy — <payment type="free"/> for fully open content, or crawl/use types with an <amount> for paid licensing.

Note
A plain <link rel="license"> pointing to a Creative Commons page is not RSL discovery — the link must carry type="application/rsl+xml" and point to an RSL XML document.

License directive not an absolute URI

RSL 1.0 §4.4.1 requires the robots.txt directive value to be an absolute URI. License: /license.xml is invalid; use License: https://your-site.com/license.xml.


License document could not be fetched

Your discovery reference points to a URL that returns an error. Verify the document is published and reachable — including for non-browser user agents. Cloudflare-protected sites sometimes serve bot challenges on XML paths; add a WAF exception for your license document so crawlers can actually read your terms.

curl -sI https://your-site.com/license.xml
# Expected: HTTP/2 200, Content-Type: application/rsl+xml

Wrong Content-Type

RSL documents must be served as application/rsl+xml (RSL 1.0 §2.2). Generic application/xml or text/xml works for lenient parsers but violates the spec.

# Nginx
location = /license.xml {
  types { }
  default_type application/rsl+xml;
}

# Vercel (vercel.json)
{
  "headers": [{
    "source": "/license.xml",
    "headers": [{ "key": "Content-Type", "value": "application/rsl+xml" }]
  }]
}

Missing <rsl> root element

The document at your license URL is not an RSL document — common causes are an HTML error page served with status 200, or a different XML format. The root element must be <rsl>.


Wrong or missing namespace

The root element must declare the default namespace exactly: <rsl xmlns="https://rslstandard.org/rsl">. Typos (http vs https, trailing slash) make conforming parsers reject the document.


No <content> elements

An RSL document without <content> elements licenses nothing. Each <content> identifies an asset (or path pattern, with * and $ wildcards per RFC 9309) and wraps its <license> terms. Use url="/" to cover the whole site.


Missing url attribute on <content>

The url attribute is required on every <content> element — it is the canonical license identifier. An empty value (url="") is only legal for documents associated to a page via <link rel="license">.


No <license> elements

Each <content> must contain at least one <license> element holding the actual terms (<permits>, <prohibits>, <payment>, <legal>).


Invalid permits/prohibits

The type attribute must be one of usage, user, or geo, and the element content must use the RSL 1.0 vocabulary:

  • usage: all, ai-all, ai-train, ai-input, ai-index, search
  • user: commercial, non-commercial, education, government, personal
  • geo: ISO 3166-1 alpha-2 codes (US, EU, …)
Migrating from the 2025 draft
Pre-1.0 draft tokens — train-ai, train-genai, ai-use, ai-summarize — were replaced in RSL 1.0 by ai-train, ai-input, and ai-index. Several large publishers still serve draft-era documents; conforming 1.0 parsers ignore those tokens, so update them.

When both <permits> and <prohibits> declare the same type, prohibitions take precedence.


Invalid payment type

Valid <payment> types: purchase, subscription, training, crawl, use, contribution, attribution, free. Omitting the type entirely means free.

<!-- Pay-per-crawl with explicit pricing -->
<payment type="crawl">
  <amount currency="USD">0.015</amount>
  <standard>https://your-site.com/licenses/pay-per-crawl</standard>
</payment>