AI 엔진에 사이트를 노출시키기 위한 4가지 작은 CLI 도구
요약
본 기사는 SEO 및 GEO 관련 문제를 해결하기 위해 개발된 네 가지 독립적인 Node 기반 CLI 도구를 소개합니다. 이 도구들은 기존 시장의 복잡하고 교육 중심적인 접근 방식을 탈피하여, 각각 하나의 명확한 기능에 집중함으로써 사용자가 사이트 최적화와 AI 크롤러 대응 전략을 효율적으로 구축할 수 있도록 돕습니다. 주요 기능으로는 AI 크롤링 경로 분석, 구조화된 스키마 마크업 생성, LLM 친화적인 인덱스 파일(llms.txt) 생성, 그리고 유효한 sitemap.xml 빌드 등이 포함됩니다.
핵심 포인트
- 네 가지 CLI 도구는 각각 독립적이며 런타임 종속성이 없어 사용 편의성이 높습니다.
- AI 크롤러 대응을 위해 에지(Edge) 차단과 오리진(Origin) 차단을 구분하여 상세한 진단 정보를 제공합니다.
- 스키마 마크업은 AI 어시스턴트에게 페이지의 구조적 신호를 명확하게 전달하여 '추측'에 의한 오류를 줄여줍니다.
- sitemap.xml 대신 LLM 친화적인 텍스트 인덱스(llms.txt) 생성을 제안하며, 이는 모델이 읽기 쉬운 형태로 콘텐츠를 요약합니다.
- 도구들은 헤드리스 브라우저나 외부 API 키 없이 결정론적이고 효율적으로 작동하도록 설계되었습니다.
현재 시장의 대부분 GEO/SEO 도구들은 문제를 해결하기 위해서가 아니라 강좌를 판매하는 것처럼 작성된 느낌을 줍니다. 그래서 저는 대신 네 가지 도구를 만들었습니다. Node 기반 CLI 4개이며, 런타임 종속성은 없고, MIT 라이선스입니다. 각각은 하나의 기능만 수행합니다. 이 모든 도구들은 npm의 @geosuite 스코프 아래에 존재하며, 소스 코드는 github.com/TryGeoSuite에 있습니다. 각 도구가 무엇을 하는지, 그리고 그 뒤에 숨겨진 설계 의도를 설명하겠습니다.
-
@geosuite/ai-crawler-bots
기능: GPTBot, ClaudeBot, PerplexityBot 및 약 20개의 다른 AI 크롤러가 실제로 사이트에 접근할 수 있는지 여부와, 접근이 불가능할 때 차단이 어디서 발생하는지 알려줍니다.
npx @geosuite/ai-crawler-bots robots https://your-site.com
숨겨진 포인트: 요청이 403으로 돌아올 때, 이 도구는 에지(edge) 차단(Cloudflare / CloudFront / Vercel / Akamai / Fastly / Netlify 응답의 지문 포함)과 오리진(origin) 차단(그러한 지문 없음 — 사용자의 애플리케이션 또는 웹 서버)을 구분합니다. 각 경우에 대한 해결책이 다르기 때문입니다: 에지 차단은 CDN 대시보드에서 토글을 바꾸는 것을 의미하고, 오리진 차단은 설정을 업데이트하는 것을 의미합니다. 또한 이 도구는 라인별 출처(line-level provenance)를 가지고 robots.txt를 구문 분석하므로, 봇이 금지될 경우 어느 그룹의 몇 번째 줄에서 금지되었는지 알려줍니다. 그리고 'Block AI Bots'가 활성화되었을 때 Cloudflare가 삽입하는# BEGIN Cloudflare Managed content … # END Cloudflare Managed Content마커도 감지합니다 — 만약 사용자의 자체 규칙으로는 봇이 허용되지만 관리형 블록에 의해 차단되는 경우, 보고서에 이를 명시합니다. UA 문자열은 제3자 SEO 블로그가 서로 복사하는 것이 아니라 운영자 문서(operator docs)에서 가져옵니다. 저희는 -
@geosuite/schema-templates What it does: ships 23 copy-paste-ready schema.org JSON-LD templates plus an offline structural validator. npx @geosuite/schema-templates list npx @geosuite/schema-templates show Product JSON-LD is the cheapest, least ambiguous signal you can give an AI assistant about what your page is. It will not on its own make ChatGPT cite you — authority and freshness still matter — but it removes a class of avoidable failures. The AI no longer has to guess your prices, your author, or whether a number on the page is a benchmark or a typo. I deliberately excluded fields that aren't truly recommended for each type. Padding templates with every optional schema.org property dilutes the signal. If you need a field that's not there, schema.org is the source of truth — add it yourself. There's also geosuite-schema fill <Type> --url <url> --ai if you want the LLM to populate placeholders from a real page, but the deterministic side (templates + validator) does not need a network or an API key. 3. @geosuite/llms-txt-generator What it does: turns a sitemap.xml into an llms.txt file per the proposed standard at llmstxt.org . npx @geosuite/llms-txt-generator https://your-site.com/sitemap.xml \ --name = "Your Site" --enrich --out = public/llms.txt llms.txt is intended to be the LLM-shaped equivalent of a sitemap: a curated, sectioned, markdown index of your most important pages. The format is small enough to be parsed by classical
도구링(regex)을 사용하고 모델이 읽기 쉬워야 합니다. 그것이 요점입니다. 생성기는 결정론적입니다. --enrich를 사용하면 각 URL을 한 번 가져와 regex를 통해 <title> + <meta name="description">을 추출합니다. 헤드리스 브라우저가 필요 없고, 기본 경로에서 LLM 의존성이 없습니다. (--ai는 LLM이 설명을 다시 작성하기를 원할 때 선택적입니다. 우리는 페이지 본문이 아닌 URL + title + meta만 전송합니다.) Sitemap-index 파일은 자동으로 평탄화됩니다. 이를 일반 sitemap처럼 전달하세요. 4. @geosuite/sitemap-builder: 이 도구는 사이트를 크롤링하고 유효한 sitemap.xml을 생성합니다. 자체 빌드 시 sitemap이 없는 경우(생각보다 흔합니다). npx @geosuite/sitemap-builder https://your-site.com --output sitemap.xml BFS, 동일 출처 전용이며 세 가지 제한 사항 스택(페이지 수, 깊이, 벽시계 예산)을 가집니다. 먼저 작동하는 것이 승리합니다. 명백한 비-HTML 확장자 및 단편 링크는 제외됩니다. 출력은 sitemaps.org 표준을 준수하며, <loc>와 선택적 <lastmod>만 포함하고, <changefreq>나 <priority>(사용 중단됨, 모든 주요 엔진에서 무시됨)는 없습니다. 전체 도구는 순수 Node로 약 250줄입니다. puppeteer, cheerio, axios가 필요 없습니다. 단지 node:http, node:https와 몇 가지 regex만 사용합니다. 디자인 선택은 모두 한 곳에 있습니다. 런타임 의존성이 없습니다. 네 개의 패키지를 결합해도 프로젝트에 ~0의 설치 공간을 추가합니다. 유일한 예외는 llms-txt-generator로, sitemap-index 경로를 위해 fast-xml-parser에 의존하는데, 이는 자체 XML 파서를 작성하는 것이 위험하기 때문입니다. AI 모드는 선택적입니다. 모든 CLI에는 --ai 플래그가 있습니다. 이것이 없으면 동작은 완전히
결정론적입니다(deterministic). 이 경우 페이로드(payloads)는 최소화되고 구조화되어 있습니다 (판결, 제목, 깊이 등) — 절대 원시 HTML이나 페이지 본문은 아닙니다. 하나의 도구, 하나의 역할입니다. stdout/JSON을 통해 조합 가능합니다. 만약 sitemap-builder를 llms-txt-generator에 연결하고 싶다면, 그것은 단일 파이프라인(single pipe)입니다. 지루한 코드입니다. 영리한 메타 프로그래밍(metaprogramming)이 없습니다. 전체 스택은 오후 안에 읽을 수 있도록 설계되었습니다. 그렇지 않다면, 그것은 기능(feature)이 아니라 버그(bug)입니다. 왜 빌딩 블록을 오픈 소스하는가 GeoSuite와 제가 구축하고 있는 호스팅 제품(history, alerts, dashboards, 콘텐츠 파이프라인 통합 등) 모두 동일한 검사 기능을 사용합니다. 하지만 빌딩 블록은 공개되어야 합니다. 어떤 개발자라도 확인할 수 있는 것을 블랙박스로 판매하는 것은 부정직하다고 생각합니다. 봇 UA가 누락되었거나 — 더 나쁜 경우 잘못된 경우 — 그를 보낼 곳은 ai-crawler-bots의 bots.json 파일이며, 운영자 문서 링크가 포함되어 있습니다. UA 문자열은 운영자당 연간 몇 번씩 변동하며, 이 파일은 스위트 내 다른 어떤 것보다도 빠르게 노후화됩니다. PR과 이슈는 환영합니다. 특히 제가 틀렸음을 증명하는 것은 더욱 좋습니다. → github.com/TryGeoSuite
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기