전통적인 웹사이트는 주로 사람 읽기 쉬운 마크업으로 설계되어 있으며, 봇이 수집할 과도한 정보를 포함하고 있습니다. 한편, 웹사이트 제공자는 AI 에이전트에 의한 과도한 스크래핑으로 인해 서버 부하 문제를 겪고 있습니다. LLM 최적화된 콘텐츠를 제공하기 위해, 안서.AI의 공동 창립자인 제레미 하워드는 llms.txt
라는 파일을 제안했습니다.
참고: 2025년 3월 현재, llms.txt는 표준화된 사양이 아닙니다. 이 기사에 포함된 정보는 향후 변경으로 인해 오래될 수 있습니다.
llms.txt란?

ChatGPT, Grok, Claude, Gemini와 같은 대형 언어 모델은 웹사이트 정보에 점점 더 의존하고 있습니다. 특히, Deep Research와 같은 최근 개발은 에이전트 기반 모델이 웹사이트를 탐색하고 자동으로 다단계 연구를 수행할 수 있도록 설계되었습니다. Deep Research가 효과적으로 작동하기 위해서는 AI 에이전트가 웹사이트에서 정보를 효율적으로 검색하는 것이 중요합니다.
그러나 전통적인 웹사이트는 주로 사람 중심의 마크업을 사용하여 AI 봇이 정보를 수집하는 데 많은 장벽을 생성합니다. 장식용 CSS, 광고 및 복잡한 JavaScript와 같은 요소는 필수 정보를 추출하기 어렵게 만듭니다. 더욱이, 웹사이트 운영자는 AI 에이전트에 의한 과도한 스크래핑으로 인해 증가된 서버 부하라는 새로운 문제에 직면하고 있습니다.
이러한 문제를 해결하고 LLM 최적화된 콘텐츠를 제공하기 위해, 제레미 하워드는 llms.txt라는 새로운 표준 파일을 제안했습니다.
/llms.txt 파일 – llms-txt는 LLM이 추론 시간에 웹사이트를 사용할 수 있도록 정보를 제공하기 위해 /llms.txt 파일을 사용하는 것을 표준화하기 위한 제안입니다.
llms.txt의 형식
llms.txt는 간단하고 구조화된 마크다운 형식 파일입니다. 이 형식은 인간과 LLM 모두 쉽게 이해할 수 있도록 설계되었으며 자동화된 처리를 위한 적합함도 가지고 있습니다. 사양은 이를 웹사이트의 루트 경로에 배치해야 합니다 (/llms.txt).
이 파일은 웹사이트에 대한 기본 정보와 지침을 포함하고 있으며, 자세한 마크다운 파일에 대한 링크도 포함합니다. 또한, LLM에 유용한 정보가 포함된 페이지의 마크다운 버전을 원래 페이지 URL에 .md를 추가하여 제공할 것을 제안합니다.
예를 들어, https://apidog.com/blog/top-postman-alternative-open-source/에서 블로그 포스트가 있다면
마크다운 버전은 https://apidog.com/blog/top-postman-alternative-open-source.md에서 이용할 수 있습니다.
제안된 내용에는 두 가지 다른 파일이 포함됩니다:
- llms.txt: 웹사이트 요약, 자세한 페이지를 마크다운 파일 링크를 통해 제공.
- llms-full.txt: 웹사이트의 모든 페이지에 대한 모든 정보를 하나의 파일로 컴파일.
llms-full.txt의 예로 Cloudflare의 문서는 모든 콘텐츠를 하나의 파일로 컴파일하여 매우 큰 텍스트 볼륨을 생성합니다:
https://developers.cloudflare.com/llms-full.txt

llms.txt는 기존 웹 표준과 공존할 수 있도록 설계되었습니다. 표준화된 파일 경로 접근 방식은 /robots.txt 및 /sitemap.xml에서 따라옵니다. robots.txt와 sitemap.xml이 봇에게 웹사이트 정보를 제공하는 목적을 공유하는 반면, 각각은 다른 특성을 가지고 있습니다:
- sitemap.xml은 검색 엔진을 위해 모든 페이지의 목록을 제공하는 반면, llms.txt는 AI 에이전트를 위한 선별된 페이지 목록을 제공합니다.
- robots.txt는 크롤러에게 방문할 수 있는 페이지를 알려주지만 페이지 컨텍스트 정보를 포함하지 않습니다. llms.txt는 이를 컨텍스트와 함께 보완할 수 있습니다.
- robots.txt는 정기적으로 방문하는 크롤러에 대한 접근을 제어하지만, llms.txt는 사용자가 특정 주제에 대한 정보를 요청할 때 수요에 따라 사용됩니다 (llms.txt가 보편화됨에 따라 정기적인 훈련에도 사용될 수 있습니다).
- robots.txt와 sitemap.xml은 검색 엔진을 위해 설계된 반면, llms.txt는 LLM을 위해 설계되었습니다.
llms.txt의 형식, 설명
llms.txt 파일은 현재 언어 모델이 가장 쉽게 이해할 수 있는 형식인 마크다운 형식으로 작성됩니다. 또한, llms.txt 마크다운은 특정 구조를 따르므로 프로그래밍 언어에서 처리할 수 있습니다.
이 마크다운은 다음 섹션을 포함합니다:
- 웹사이트 이름이 있는 h1 (#) 요소. 이는 필수 섹션입니다.
- 웹사이트에 대한 간략한 요약을 포함하는 인용 (>) 블록.
- 제목을 제외한 어떤 유형의 마크다운 섹션이 0개 이상.
- 자세한 정보가 포함된 마크다운 파일에 대한 링크 목록을 제공하는 h2 (##) 요소로 구분된 0개 이상 섹션.
- 링크 목록은 다음 형식으로 작성됩니다: - name: 설명
- 생략 가능한 보조 정보를 제공하는 ## Optional로 시작하는 특별 섹션.
다음은 llms.txt 파일의 예입니다:
# 나의 웹사이트
> 이것은 다양한 주제에 대한 정보를 제공하는 웹사이트입니다.
## 문서
- [포스트 1](<https://example.com/post1.md>): 이것은 첫 번째 포스트입니다.
- [포스트 2](<https://example.com/post2.md>): 이것은 두 번째 포스트입니다.
## 선택적
- [포럼](<https://example.com/forum>): 주제를 토론하는 장소입니다.
웹사이트를 위한 llms.txt 생성
llms.txt 파일을 생성하기 위해서는 웹사이트를 요약하고 자세한 정보에 대한 링크를 가진 llms.txt 파일과 각 페이지에 대한 상세 정보가 포함된 마크다운 파일을 준비해야 합니다. 이러한 페이지 생성을 자동화하는 여러 도구가 있습니다:
- Mintlify — 원하는 문서를 손쉽게
- dotenvx/llmstxt: sitemap.xml을 llms.txt로 변환
- llms.txt 생성
내 경우에는 도구를 사용할 유익함이 크게 느껴지지 않아, 내 사이트를 정적으로 빌드할 때 기사 목록을 가져와 생성했습니다. 다음은 간단한 구현 예시입니다:
배경으로는, 이 블로그는 SvelteKit로 구축되었으며 Contentful에서 기사를 가져와 정적으로 페이지를 생성합니다.
SvelteKit에서 API 경로는 +server.ts 파일에 정의됩니다. export const prerender = true를 선언하면 API 경로를 정적으로 생성할 수 있습니다. src/routes/llms.tsx/+server.ts 파일을 생성하고 다음과 같이 작성합니다 (간소화된 코드 예시를 보여줍니다):
// src/routes/llms.tsx/+server.ts
import type { RequestHandler } from "@sveltejs/kit";
import RepositoryFactory, { POST } from "../../repositories/RepositoryFactory";
// PostRepository는 Contentful에서 기사를 가져오는 클래스입니다.
const PostRepository = RepositoryFactory[POST];
export const prerender = true;
const siteUrl = "...";
type Item = {
title: string;
slug: string;
about: string;
};
// llms.txt 콘텐츠를 생성하는 함수
const renderLlmsTxt = (items: Item[]) => `# azukiazusa의 기술 블로그 2
> 이것은 [azukiazusa](<https://github.com/azukiazusa1>)에 의해 운영되는 기술 블로그입니다. 나는 주로 웹 프론트엔드 기술에 대해 씁니다.
## 블로그 포스트
${items
.map(
(item) =>
`- [${item.title}](${siteUrl}/blog/${item.slug}.md): ${item.about}`,
)
.join("\\\\n")}
`;
// HTTP 요청 동사에 해당하는 변수 이름을 내보내면 API 경로로 인식됩니다.
export const GET: RequestHandler = async () => {
const posts = await PostRepository.findAll();
const feed = renderLlmsTxt(posts);
const headers = {
"Content-Type": "text/markdown; charset=utf-8",
};
return new Response(feed, {
headers,
});
};
이 접근 방식은 rss.xml이나 sitemap.xml과 같은 파일을 생성하는 것과 유사합니다.
각 블로그 포스트의 마크다운 파일에 대해서도 API 경로를 생성하여 정적으로 생성했습니다. src/routes/blog/[slug].md/+server.ts 파일을 생성하고 다음과 같이 작성했습니다:
// src/routes/blog/[slug].md/+server.ts
import type { RequestHandler } from "@sveltejs/kit";
import RepositoryFactory, {
POST,
} from "../../../repositories/RepositoryFactory";
const PostRepository = RepositoryFactory[POST];
export const prerender = true;
export const GET: RequestHandler = async ({ params }) => {
const { slug } = params;
const post = await PostRepository.find(slug);
if (!post) {
return new Response("찾을 수 없음", { status: 404 });
}
const blogPost = post.blogPostCollection.items[0];
const body = `# ${blogPost.title}
${blogPost.article}
`;
return new Response(body, {
headers: {
"Content-Type": "text/markdown; charset=utf-8",
},
});
};
생성된 파일 콘텐츠는 http://azukiazusa.dev/llms.txt에 접속하여 확인할 수 있습니다.
llms.txt 채택 사례
llms.txt 또는 llms-full.txt를 제공하는 웹사이트는 다음 링크에서 확인할 수 있습니다:
- llmstxt.site
- /llms.txt 디렉토리
AI 에이전트와 함께 llms.txt 사용하기
2025년 기준으로, LLM은 크롤러처럼 llms.txt를 자동으로 감지하여 인덱스를 생성하지 않습니다. AI 에이전트의 사용자들은 정보를 수동으로 제공해야 합니다.
예를 들어, AI 코드 편집기인 Cursor에서 @docs 기호 기능을 사용하여 보다 정확한 답변을 위해 지정된 URL을 참조할 수 있습니다. 이 경우, llms-full.txt 파일의 URL을 지정할 수 있습니다. 이는 AI 에이전트가 정보를 효율적으로 검색하는 데 도움이 될 것으로 예상됩니다.
llms.txt 요약
- llms.txt 파일은 LLM이 웹사이트 정보를 검색하기 위해 제안되었습니다.
- 두 가지 다른 파일이 있습니다: llms.txt와 llms-full.txt
- llms.txt는 마크다운 형식으로 작성되며, 웹사이트 개요와 각 페이지에 대한 자세한 정보를 제공합니다.
- llms-full.txt는 웹사이트의 모든 페이지에 대한 모든 정보를 하나의 파일로 컴파일합니다.
- llms.txt는 웹사이트의 루트 경로에 배치됩니다.
- llms.txt의 마크다운은 다음 섹션을 포함합니다:
- 웹사이트 이름이 있는 h1 (#) 요소
- 웹사이트에 대한 간략한 요약을 포함하는 인용 (>) 블록
- 제목을 제외한 어떤 유형의 마크다운 섹션이 0개 이상
- 링크 목록을 제공하는 h2 (##)로 구분된 0개 이상의 섹션
- ## Optional로 시작하는 특별 섹션