llms.page is a free service that automatically generates a well-structured llms.txt file for your domain.
Instead of writing and hosting it yourself, you can simply use our public CDN endpoint:
https://get.llms.page/{example.com}/llms.txt
This ensures your llms.txt is always up-to-date and available to AI/LLM crawlers.
Set up a redirect from /llms.txt on your domain to the generated endpoint:
/llms.txt → https://get.llms.page/{your-domain.com}/llms.txt
Fetch the generated file from llms.page and serve it directly as /llms.txt from your server.
location = /llms.txt {
return 302 https://get.llms.page/example.com/llms.txt;
}
Redirect 302 /llms.txt https://get.llms.page/example.com/llms.txt
import express from "express";
import fetch from "node-fetch";
const app = express();
app.get("/llms.txt", async (req, res) => {
const response = await fetch("https://get.llms.page/example.com/llms.txt");
const text = await response.text();
res.type("text/plain").send(text);
});
app.listen(3000);
// app/llms.txt/route.js
export async function GET() {
const res = await fetch("https://get.llms.page/example.com/llms.txt");
const text = await res.text();
return new Response(text, {
headers: { "Content-Type": "text/plain" },
});
}
// vercel.json
{
"redirects": [
{
"source": "/llms.txt",
"destination": "https://get.llms.page/example.com/llms.txt",
"permanent": true
}
]
}
/llms.txt https://get.llms.page/example.com/llms.txt 200
export default {
async fetch(request, env) {
if (new URL(request.url).pathname === "/llms.txt") {
return fetch("https://get.llms.page/example.com/llms.txt");
}
return new Response("Not Found", { status: 404 });
},
};
Just like robots.txt guides search engines on which parts of a site to crawl, llms.txt is a convention for Large Language Model (LLM) crawlers.
It tells AI providers where your content is located and how it can be accessed, helping them interact with your data responsibly.
For more information, visit https://llmstxt.org/.