AI 검색
"X가 무엇인가요", "X 가격" 또는 "Y를 위한 최고의 도구"에 답변하는 어시스턴트는 소수의 페이지를 가져와서 문장과 테이블 행을 발췌하고 인용합니다. 사실이 일반 텍스트로 페이지에 없으면 어시스턴트는 추측하거나, 해당 사실을 기록한 사람의 말을 인용합니다. 목표: 단 한 번의 가져오기(fetch)로 제품을 올바르게 설명할 수 있도록 만드는 것입니다.
모든 단계를 관통하는 한 가지 원칙: 각 사실을 한 번 작성하고 모든 곳에 렌더링합니다. 정의, 상태(베타, 가입 가능, 일반 출시), 가격, 지원 플랫폼 및 주요 URL은 하나의 소스 파일에 저장되며, 페이지, llms.txt 및 구조화된 데이터는 이 파일을 읽습니다. 수동으로 복사된 사실은 시간이 지나면서 서로 달라집니다.
워크플로우
1. 사실 시트(Fact Sheet) 작성
content/facts.ts(또는 JSON/YAML)를 생성하여 다음을 포함합니다: 이름과 대체 이름, 한 문장 정의, 대상 사용자, 상태, 요금제 및 가격, 플랫폼 또는 통합, 주요 페이지 URL, 공식 프로필(GitHub, X, LinkedIn, Product Hunt). 작성하기 전에 각 항목을 실제 제품과 대조 확인합니다.
2. /llms.txt 게시
llmstxt.org의 형식을 따릅니다: H1(이름), blockquote 요약, 몇 가지 일반 사실, 그 다음 H2 섹션의 링크를 - [제목](url): 설명 형식으로 작성합니다. Optional이라는 제목의 섹션은 어시스턴트가 건너뛸 수 있는 링크를 나타냅니다.
# Acme AI
> Acme AI는 소규모 재무 팀을 위해 Stripe 지급을 은행 입금과 조정하는 송장 매칭 도구입니다. 브라우저에서 실행되며 Stripe 및 Plaid에 연결됩니다.
- 대상 사용자: 수동으로 지급을 조정하는 1~50명 규모 회사의 재무 책임자.
- 상태: 가입 가능 (2026-11 이후).
- 가격 (https://acme.example/pricing): Free, $0, 월 최대 50개 송장; Pro, $29/월, 무제한 송장; Team, $79/월, 최대 10석. 가격은 USD입니다.
- 혼동 주의: Acme Anvil(관련 없는 하드웨어 회사)과 혼동하지 마십시오.
## 주요 페이지
- [가격](https://acme.example/pricing): 요금제, 제한 사항 및 포함 내용.
- [Acme AI vs Rival](https://acme.example/vs/rival): 기능 및 가격 비교, 2026-11-06 확인.
## FAQ
- Acme AI는 무료인가요? 네, 월 최대 50개 송장까지 무료입니다. Pro 및 Team은 유료입니다.
## 선택 사항
- [블로그](https://acme.example/blog): 제품 업데이트 및 가이드.
사실 시트와 페이지 메타데이터(라우트 핸들러 또는 빌드 스크립트)에서 생성하여 수동 편집 없이 새 페이지가 나타나도록 합니다. 상태 코드 200, text/plain 또는 text/markdown; charset=utf-8로 제공하며, 로그인, 리디렉션 또는 JavaScript가 필요 없어야 합니다. 확인:
curl -sI https://acme.example/llms.txt | head -5 # 200 및 텍스트 콘텐츠 유형
curl -s https://acme.example/llms.txt | head -30
3. 선택적으로 /llms-full.txt 추가
가장 많이 인용되길 원하는 페이지(제품, 가격, 비교, 문서)의 전체 Markdown 텍스트를 각각 자체 # 제목과 Source: <url> 줄 아래에 추가합니다. 빌드 시 생성합니다. 블로그 아카이브와 오래된 내용은 제외합니다.
4. 연결
바닥글에 일반 llms.txt 링크를 배치하고, 선택적으로 <head>에 <link rel="alternate" type="text/markdown" href="/llms.txt">를 추가합니다. 아무것도 링크하지 않는 파일은 경로를 추측하는 크롤러만 찾을 수 있습니다.
5. AI 크롤러 허용 (robots.txt 및 CDN)
| 사용자 에이전트 | 소유자 | 용도 |
|---|---|---|
| OAI-SearchBot | OpenAI | ChatGPT 검색 인덱스 |
| ChatGPT-User | OpenAI | 사용자가 문의한 페이지 가져오기 |
| GPTBot | OpenAI | 모델 훈련 |
| Claude-SearchBot / Claude-User / ClaudeBot | Anthropic | 검색 인덱스 / 사용자 가져오기 / 훈련 |
| PerplexityBot / Perplexity-User | Perplexity | 검색 인덱스 / 사용자 가져오기 |
| Google-Extended | Gemini 훈련 및 근거용 토큰; Google 검색 또는 AI Overviews에 영향을 주지 않음 | |
| Bingbot | Microsoft | Copilot이 답변을 가져오는 Bing 인덱스 |
검색 및 사용자 가져오기 에이전트는 인용 여부를 결정합니다. 훈련 에이전트는 비즈니스 선택 사항입니다. 추천을 받고자 하는 제품은 일반적으로 훈련 에이전트도 허용합니다.
User-agent: *
Allow: /
Disallow: /api/
Disallow: /app/
User-agent: OAI-SearchBot
User-agent: ChatGPT-User
User-agent: GPTBot
User-agent: Claude-SearchBot
User-agent: Claude-User
User-agent: ClaudeBot
User-agent: PerplexityBot
User-agent: Perplexity-User
User-agent: Google-Extended
Allow: /
Disallow: /api/
Disallow: /app/
Sitemap: https://acme.example/sitemap.xml
크롤러는 자신을 명명한 그룹만 따르므로, 명명된 그룹은 모든 Disallow를 반복해야 하며, 그렇지 않으면 개인 경로가 열립니다. robots.txt는 CDN을 재정의할 수 없습니다. 일부 CDN은 "AI 봇 차단" 스위치를 제공하여 robots.txt와 관계없이 403을 반환합니다. 실제 크롤러 히트를 CDN의 봇 보고서 또는 서버 로그에서 확인합니다(봇 IP를 확인하는 CDN은 스푸핑된 User-Agent를 다르게 처리할 수 있음):
curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot)' https://acme.example/pricing
6. 각 주요 페이지 상단에 한 문장 정의 배치
서버 렌더링 HTML의 H1 바로 아래에: "은(는) <대상>을 위해 <수행 작업>을 하는 <카테고리>입니다." 두 번째 문장으로 차별점을 설명합니다. 홈페이지, llms.txt, Organization.description, 디렉토리 목록 및 소셜 바이오에서 동일한 문장을 재사용합니다. 슬로건("금융, 재창조")은 어시스턴트가 인용할 내용을 제공하지 않습니다. 많은 AI 가져오기 도구가 JavaScript를 실행하지 않으므로 원시 HTML을 확인합니다:
curl -s https://acme.example/ | grep -c "is an invoice-matching tool" # 1 이상이어야 함
7. 비교 테이블 및 FAQ
- 테이블: 실제 HTML
<table>, 제품당 한 행, 구매자가 묻는 열(가격, 플랫폼, 오픈 소스, 주요 제한)을 포함합니다. 날짜를 기재합니다("2026-11-06 확인"). 각 사실은 공급업체 자체 사이트, 문서, 가격 페이지 또는 GitHub API에서 가져옵니다. 공급업체가 게시하지 않은 내용에는 "게시되지 않음"이라고 작성합니다. 절대 추정하지 마십시오. - FAQ: 질문을 검색자의 표현으로 제목으로 사용하고, 2~4문장으로 구성된 독립적인 답변을 제공하며, 첫 문장이 질문에 답해야 합니다. 어시스턴트가 틀리게 대답하는 질문(가격, "무료인가요", "X와 함께 작동하나요", "<동명사>와 동일한가요")을 다룹니다. FAQPage 마크업은 선택 사항이며, 인용되는 것은 보이는 Q&A입니다.
8. 가격 공개
/pricing 페이지에 요금제 이름, 가격, 통화, 청구 기간 및 제한 사항을 이미지나 계산기가 아닌 텍스트로 표시합니다. llms.txt 및 SoftwareApplication.offers에도 반영합니다. 답변 및 디렉토리 목록에는 가격 또는 가격 모델(무료, 프리미엄, 유료)이 필요합니다. 없으면 추측하거나 건너뜁니다. 유료 요금제가 아직 활성화되지 않은 경우 그렇게 명시합니다("Pro: 출시 예정; 그때까지는 모든 것이 무료입니다").
{ "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "Acme AI",
"applicationCategory": "BusinessApplication", "operatingSystem": "Web",
"offers": [ { "@type": "Offer", "name": "Free", "price": "0", "priceCurrency": "USD" },
{ "@type": "Offer", "name": "Pro", "price": "29", "priceCurrency": "USD" } ] }
9. 이름 충돌 시 Organization 및 WebSite 데이터
순수 브랜드 이름을 검색했을 때 다른 제품이 먼저 나타나면, 고유한 형태("Acme AI")를 선택하여 모든 곳에서 사용하고, 변형을 하나의 개체로 연결하는 구조화된 데이터를 추가합니다:
{ "@context": "https://schema.org", "@type": "Organization",
"name": "Acme AI", "alternateName": ["Acme", "acme.example"],
"url": "https://acme.example/", "logo": "https://acme.example/logo.png",
"description": "Acme AI는 소규모 재무 팀을 위해 Stripe 지급을 은행 입금과 조정하는 송장 매칭 도구입니다.",
"sameAs": ["https://github.com/acme-ai", "https://x.com/acmeai", "https://www.linkedin.com/company/acme-ai"] }
동일한 name 및 alternateName을 가진 WebSite 개체를 추가합니다. Google은 이를 검색 결과의 사이트 이름으로 사용합니다. sameAs에는 사이트로 다시 링크되는 본인이 제어하는 프로필만 나열합니다.
10. 브랜드 접미사 일관성 유지
모든 곳에서 동일한 접미사 사용: 제목에 | Acme AI, og:site_name에 동일한 문자열, llms.txt H1, 소셜 바이오 및 GitHub 조직. 제목을 60자 이내(중국어, 일본어, 한국어의 경우 약 30자)로 유지하고, 키워드를 먼저 배치하며, 접미사는 공간이 될 때만 추가합니다.
11. 어시스턴트의 실제 발언 확인
월 1회 및 큰 변경 후에 ChatGPT(검색 켜짐), Perplexity, Claude, Gemini, Copilot에서 5~10개의 프롬프트를 수동으로 테스트합니다: "Acme AI가 무엇인가요?", "Acme AI 가격", "<대상>을 위한 최고의 <카테고리>", "<경쟁사> 대안", "Acme AI vs <경쟁사>". 일반 인터페이스에서 한 번에 하나씩 프롬프트를 실행합니다. 채팅 UI를 스크립팅하지 마십시오. docs/seo/ai-answers.md에 날짜, 어시스턴트, 프롬프트, 언급 여부, 인용된 URL 및 잘못된 사실을 기록합니다. 각 잘못된 사실 뒤에 있는 소스 페이지를 수정한 후 다시 확인합니다. 트래픽의 경우, 리퍼러별로 분석을 분류합니다: chatgpt.com, perplexity.ai, claude.ai, gemini.google.com, copilot.microsoft.com.
체크리스트
- 사실 시트가 존재함; 페이지, llms.txt 및 JSON-LD가 이 시트를 읽음
- /llms.txt가 텍스트로 200을 반환하고, 생성되며, 바닥글에서 링크됨
- robots.txt가 AI 에이전트를 허용하고 disallow를 반복함; CDN이 차단하지 않음
- 각 주요 페이지가 원시 HTML에서 한 문장 정의로 시작함
- 비교 테이블에 날짜와 출처가 표시됨; 알 수 없는 항목은 "게시되지 않음"으로 표시
- FAQ 답변이 독립적이며 가격, "무료인가요", 이름 혼동을 다룸
- /pricing이 공개됨; llms.txt 및
offers가 일치함 - Organization 및 WebSite에 name, alternateName, description 및 sameAs가 포함됨
- 모든 곳에서 하나의 브랜드 접미사 사용; 제목이 60자 이내
- 어시스턴트 답변이 기록됨; 잘못된 사실이 페이지로 추적되어 수정됨
발생한 함정
- 공개 가격 없음. /pricing이 404를 반환하여 llms.txt와
SoftwareApplication에 offers가 없었고, 자체 비교 테이블에서도 "게시되지 않음"이라고 써야 했습니다. 세 가지 요금제를 텍스트로 포함하고 llms.txt 및offers에 반영한 /pricing 페이지로 해결되었습니다. 유료 티어는 "출시 예정"으로 표시했습니다. - 상태 정보 불일치. 가입이 시작된 후에도 9개 언어로 된 약 300개 파일(llms.txt 포함)에 여전히 "얼리 액세스"라고 표시되어 있었습니다. 이제 상태는 하나의 상수에서 가져옵니다.
- 아무도 링크하지 않는 파일. 감사 결과 llms.txt에 링크하는 페이지가 없었고, llms-full.txt도 없었으며, 사이트맵에
lastmod도 없었습니다. - robots.txt 그룹 재정의. AI 크롤러에게 자체 그룹을 주면서 disallow를 반복하지 않으면 API 및 로그인 경로가 노출되었을 것입니다.
- 브랜드 충돌. 순수 브랜드 이름을 검색했을 때 동명의 승무원 스케줄링 앱이 먼저 나타났습니다. 제목, alternateName 및 sameAs에서 " AI"로 전환했습니다.
- 잘린 일관성 없는 제목. 49개의 영어 제목이 57~88자에 다양한 접미사가 있었습니다. 60자 이하로 줄이고, 키워드를 먼저 배치하고, 접미사는 공간이 될 때만 추가했습니다.
- 경쟁사 페이지의 신뢰할 수 없는 가져오기. 리서치 하위 에이전트가 경쟁사 가격 페이지를 가져온 결과 변조된 것으로 보였습니다. 게시 전 실제 브라우저에서 확인했습니다. 다른 공급업체의 가격 페이지는 가져오기에 403을 반환하여 문서에서 가격을 가져와 출처를 명시했습니다.
- 너무 일찍 "무료"라고 작성. 가격이 게시될 때까지 "게시되지 않음"이라고 작성했어야 했는데 "무료"라고 썼습니다. 어시스턴트는 페이지에 쓰여진 내용을 그대로 반복합니다.
관련 스킬
- seo-page: 정의, 테이블 및 FAQ가 있는 페이지 템플릿.
- competitor-pages: 어시스턴트가 많이 인용하는 비교 및 대안 페이지.
- programmatic-pages: llms.txt 섹션 및 구조화된 데이터를 대규모로 생성.
- multilingual-seo: 언어별 지역화된 정의, 제목 및 접미사 길이.
- keyword-research, trend-keywords: 답변해야 할 질문과 테스트할 프롬프트.
- index-push: 페이지가 크롤링되도록 함; Bing 인덱스가 Copilot에 피드 제공.
- seo-daily-report: AI 추천 방문을 보고서의 별도 라인으로 표시.