llms.txt: AI 검색이 사이트를 읽을 수 있게 만드는 100줄의 Next.js 라우트
요약
AI 답변 엔진이 웹사이트 정보를 정확히 파악할 수 있도록 돕는 llms.txt 규약을 Next.js App Router를 통해 자동화하여 구현하는 방법을 소개합니다. CMS와 연동하여 사이트 정보와 llms.txt 파일의 동기화를 유지하는 효율적인 개발 가이드를 제공합니다.
핵심 포인트
- llms.txt는 AI 크롤러를 위한 큐레이션된 마크다운 지도 역할을 함
- 단순한 사이트맵 나열이 아닌 고신호(high-signal) 페이지의 큐레이션이 핵심
- Next.js의 ISR을 활용해 CMS 데이터와 llms.txt를 실시간 동기화 가능
- 정적 생성(force-static)과 재검증(revalidate)을 통한 효율적인 캐싱 전략
AI 답변 엔진(answer engines) — ChatGPT, Perplexity, Gemini, Claude — 이 실질적인 추천 채널(referral channel)이 되고 있습니다. 누군가 "두바이에서 AI 음성 에이전트를 만들어 줄 수 있는 곳이 어디인가요?"라고 물었을 때, 그 질문에 답하는 모델은 자신이 크롤링(crawl)한 정보 중에서 당신의 사이트가 무엇인지 결정해야 합니다.
llms.txt는 이를 쉽게 만들기 위해 등장하고 있는 규약(convention)입니다. 도메인의 루트(root)에 위치한 단일 마크다운(markdown) 파일로서, 언어 모델(language models)에게 당신의 사이트에 대한 깔끔하고 큐레이션된 지도 — 당신이 무엇을 하는지, 가장 중요한 페이지는 무엇인지, 그리고 왜 그 페이지들이 인용할 가치가 있는지 — 를 제공합니다. 크롤러(crawlers) 대신 독자를 위해 작성된 사이트맵(sitemap)이라고 생각하면 됩니다.
우리는 이번 주에 우리 스튜디오 사이트를 위한 것을 출시했습니다. 작동 예시와 전체 구현 방법은 다음과 같습니다.
라이브 예시: techpotions.com/llms.txt
좋은 llms.txt의 형태
스펙(spec)은 의도적으로 단순합니다: # H1 제목과 당신의 이름, > 인용구(blockquote) 요약, 그리고 한 줄 설명이 포함된 링크들의 마크다운(markdown) 섹션으로 구성됩니다. 우리의 파일은 네 가지 섹션으로 나뉩니다:
- Services (서비스) — 상업적 핵심 요소들, 각 한 줄로 작성
- Selected work (선정된 작업물) — 실제 고객 사례 연구 (AI 엔진이 인용할 수 있는 증거)
- Comparisons (비교) — 우리의 "X vs Y" 에버그린(evergreen) 페이지들로, 답변 엔진이 추출하기 딱 좋은 종류의 콘텐츠입니다.
- Company (회사) — 소개(about), 연락처(contact), 프로젝트 시작 방법
피해야 할 실수: 사이트맵 전체를 여기에 쏟아붓는 것입니다. 가치는 _큐레이션(curation)_에 있습니다. 4,000개의 URL이 아니라, 정직한 설명이 담긴 신호가 높은(high-signal) 페이지들이 중요합니다.
Next.js 구현
우리는 정적 파일 대신 App Router 라우트 핸들러(route handler)에서 이를 생성합니다. 그 이유는 단 하나입니다: 사이트와 내용이 결코 어긋나서는 안 되기 때문입니다. 이는 페이지 자체와 동일한 데이터 소스에서 구축됩니다. 서비스와 비교를 위한 정적 설정(static config), 그리고 게시된 포스트와 사례 연구를 위한 CMS (Payload)를 사용합니다. 새로운 사례 연구를 게시하면, 한 시간 이내에 자동으로 llms.txt에 나타납니다.
app/llms.txt/route.ts:
export const dynamic = 'force-static'
export const revalidate = 3600 // 크롤러 전용 라우트: 시간 단위의 ISR(Incremental Static Regeneration)이면 충분합니다
...
벤치마킹할 만한 몇 가지 결정 사항들:
force-static+ 시간 단위revalidate. 어떤 모델도 사이트에 대한 실시간 뷰를 필요로 하지 않으며, 이 방식은 CMS를 핫 패스(hot path)에서 완전히 제외합니다. 우리의sitemap.ts와 동일한 캐싱 전략입니다.- 사이트와 동일한 소스에서 생성. 수동으로 관리되는
llms.txt는 한 달 이내에 구식이 됩니다. 우리의 방식은 그럴 수 없습니다. 페이지를 렌더링하는 정확한 설정 객체(config objects)와 CMS 쿼리를 그대로 읽어오기 때문입니다. - Fail open (오류 시에도 작동 유지). 빌드 중에 데이터베이스에 접속할 수 없는 경우에도,
catch블록이 정적 섹션들을 여전히 방출합니다. 성능이 저하된llms.txt가 500 에러를 내는 것보다 훨씬 낫습니다. - 한 줄 요약, 잘라내기(truncated). 모델은 메타 설명(meta description) 전체를 필요로 하지 않습니다. 링크당 약 160자의 깔끔한 문자를 유지하면 파일 전체를 처음부터 끝까지 훑어보기(scannable) 좋습니다.
효과가 있을까요?
솔직한 답변을 드리자면, 아직 초기 단계이며 답변 엔진(answer-engine) 기업 외부의 누구도 현재 llms.txt의 인용 가중치(citation weight)를 말할 수 없습니다. 우리가 말할 수 있는 것은, 이 파일이 약 100줄의 코드로 구성되며, 모델이 당신을 어떻게 요약할지에 대한 추측을 없애주고, 이 컨벤션(convention)이 실제적인 추진력을 얻고 있다는 점입니다. 마케팅 사이트라면 이는 충분히 가치 있는 교환입니다.
저희는 소프트웨어 및 AI 스튜디오인 TechPotions입니다. 저희는 프로덕션 수준의 Next.js 앱과 AI 에이전트를 구축합니다 (저희의 작업물을 확인하세요). 구축을 고민 중이시라면, 저희의 비교 가이드가 좋은 시작점이 될 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기