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.
<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, …)
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>