본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 21. 16:52

AI 어시스턴트가 추천할 수 있도록 SaaS 제품 페이지를 구조화하는 방법

요약

AI 어시스턴트가 SaaS 제품을 효과적으로 추천할 수 있도록 제품 페이지를 구조화하는 기술적 방법을 제시합니다. 기존의 SEO 방식에서 벗어나 AI의 추출(Extract) 단계에 최적화된 JSON-LD와 schema.org 어노테이션을 활용하여 사실 관계를 명확히 전달하는 것이 핵심입니다.

핵심 포인트

  • AI 어시스턴트는 검색, 추출, 합성의 파이프라인을 통해 제품을 추천함
  • 모호한 마케팅 문구 대신 구체적인 사실(가격, 대상 고객, 기능, 통합 도구 등)을 제공해야 함
  • schema.org의 SoftwareApplication, Offer, FAQPage 등의 타입을 활용한 JSON-LD 적용이 필수적임
  • 구조화된 데이터는 AI 모델이 정보를 정확하게 파싱할 수 있는 명시적인 훅(hook) 역할을 함

2026년의 대부분의 SaaS 제품 페이지는 인간의 눈과 Google의 오래된 키워드 크롤러(keyword crawler)에 맞춰 구조화되어 있습니다. 브라우저에서 잘 렌더링되고, Lighthouse 점수도 높으며, /blog, /pricing, /about 페이지를 갖추고 있습니다. 하지만 사용자가 "X를 위한 최고의 도구는 무엇인가요?"라고 물었을 때, ChatGPT, Claude, Perplexity, Gemini에게는 거의 보이지 않습니다. 이 포스트는 그 격차를 줄이기 위한 기술적 플레이북(technical playbook)입니다. https://peerpush.net 에 있는 인디 SaaS 디렉토리인 PeerPush는 아래에서 다룰 것과 동일한 기본 요소(primitives)를 바탕으로 모든 제품 목록을 구축합니다. 이 조언은 제품이 PeerPush에 등록되든 아니든 상관없이 적용됩니다. 중요한 것은 구조입니다. 요약하자면(TL;DR): "Y를 위한 최고의 X"라는 답변을 합성하는 AI 어시스턴트는 페이지를 가져오고(fetch), 거기서 사실 관계를 파싱(parse)하며, 추출 가능한 구조화된 데이터(structured data)의 양과 품질에 따라 후보를 순위 매깁니다. 사실 관계를 추출 가능하게 만들고, 안정적인 URL에 배치하며, 적절한 schema.org 어노테이션(annotations)을 적용하면 어시스턴트가 당신을 추천하는 데 필요한 정보를 갖게 됩니다.

AI 엔진에 구조화된 데이터가 필요한 이유
제품 추천 질문에 응답하는 프런티어(frontier) AI 어시스턴트는 대략 다음과 같은 파이프라인을 실행합니다:

  1. 검색(Retrieve): 사용자의 쿼리와 관련된 페이지를 가져옵니다.
  2. 추출(Extract): 개별적인 사실(이름, 가격, 기능, 통합(integrations), 대상 고객, 장단점)을 뽑아냅니다.
  3. 합성(Synthesize): 순위가 매겨진 최종 후보 명단과 근거 문단을 작성합니다.

추출 단계는 대부분의 제품 페이지가 실패하는 지점입니다. "우리는 직관적인 플랫폼을 통해 귀하의 팀이 운영을 확장하도록 돕습니다"라고 말하는 페이지는 보이지 않습니다. 반면 "Acme Tasks는 3~30명 규모의 엔지니어링 팀을 위한 프로젝트 관리 도구입니다. 5명까지 무료 플랜을 제공합니다. 유료 플랜은 사용자당 월 $12부터 시작합니다. GitHub, Linear, Slack과 통합됩니다"라고 말하는 페이지는 어시스턴트가 인용하는 페이지가 됩니다. 구조화된 데이터 형식은 모델의 추출 단계에 명시적인 훅(hooks)을 제공합니다. SaaS에 가장 중요한 형식은 schema.org의 SoftwareApplication, Offer, FAQPage, BreadcrumbList 타입을 사용하는 JSON-LD입니다.

모든 SaaS 제품 페이지에 필요한 Schema.org 기본 요소(Primitives): SoftwareApplication과 Offer

2026년 기준 SaaS 제품 페이지를 위한 최소 기능 제품(Minimum Viable Product) 수준의 JSON-LD:

{ "@context" : "https://schema.org" , "@type" : "SoftwareApplication" , "name" : "Acme Tasks" , "applicationCategory" : "BusinessApplication" , "operatingSystem" : "Web, iOS, Android" , "description" : "3~30명 규모의 엔지니어링 팀을 위한 프로젝트 관리 도구. 비동기 우선(Async-first), GitHub 통합, 사이클 타임(Cycle time) 중심 설계." , "url" : "https://acmetasks.example/" , "offers" : [ { "@type" : "Offer" , "name" : "Free" , "price" : "0" , "priceCurrency" : "USD" , "description" : "최대 5명 사용자, 무제한 작업, SSO 미지원" }, { "@type" : "Offer" , "name" : "Pro" , "price" : "12" , "priceCurrency" : "USD" , "description" : "사용자당 월간 비용, 무제한 사용자, SSO, 감사 로그(Audit log) 제공" } ] }

여기서 대부분의 제품 페이지가 실수하는 두 가지 중요한 사항이 있습니다:

  1. Offer는 가격 범위를 나타내는 "priceRange": "$12-$48" 형식이 아니라, price와 priceCurrency를 기본값(Primitive values)으로 포함해야 합니다. AI 추출기(Extractors)와 Google의 리치 결과 파서(Rich result parsers) 모두 Offer에서 priceRange를 거부합니다(이는 LocalBusiness에서만 유효합니다). 여러 가격 지점이 있다면, 배열 내에 여러 개의 Offer 항목을 작성해야 합니다.

  2. description(설명)은 이중 역할을 수행합니다. 이는 어시스턴트가 귀하의 제품을 요약할 때 가져오는 정보입니다. 마케팅 문구가 아니라, 제품이 누구를 위한 것인지 명시하는 단일 명사구 문장으로 작성하세요.

흔히 하는 실수: @type을 SoftwareApplication 대신 Product로 설정하는 것입니다. Product는 물리적 상품을 위한 것입니다. SaaS는 소프트웨어입니다. Google과 주요 AI 추출기들은 SoftwareApplication에 올바른 가중치를 부여하지만, Product를 사용하면 분류에 혼선을 줍니다.

카테고리 컨텍스트를 위한 BreadcrumbList (BreadcrumbList)

만약 귀하의 제품 페이지가 /categories/project-management와 같은 카테고리 트리 아래의 /products/acme-tasks에 위치한다면, 어시스턴트에게 다음과 같은 경로를 제공하십시오:

{ "@context" : "https://schema.org" , "@type" : "BreadcrumbList" , "itemListElement" : [ { "@type" : "ListItem" , "position" : 1 , "item" : { "@id" : "https://acmetasks.example/categories/project-management" , "name" : "Project Management" } }, { "@type" : "ListItem" , "position" : 2 , "item" : { "@id" : "https://acmetasks.example/products/acme-tasks" , "name" : "Acme Tasks" } } ] }

참고: item은 단순한 URL 문자열이 아니라, @idname을 포함한 완전한 Thing 객체여야 합니다. Google의 문서에는 두 가지 형태가 모두 나타나지만, 일부 AI 추출기(extractors)는 강타입(strong-typed) 형태만 수용합니다. 따라서 강타입 형태를 사용하십시오.

"자주 묻는 질문" 추출을 위한 FAQPage (FAQPage)

사용자가 "Acme Tasks가 SSO를 지원하나요?"라고 물을 때, 어시스턴트는 그대로 가져올 수 있는 Q&A 쌍을 원합니다. FAQPage 스키마는 이를 제공합니다:

{ "@context" : "https://schema.org" , "@type" : "FAQPage" , "mainEntity" : [ { "@type" : "Question" , "name" : "Does Acme Tasks support SSO?" , "acceptedAnswer" : { "@type" : "Answer" , "text" : "Yes. SAML SSO and SCIM provisioning are available on the Pro plan and above. Free plan users authenticate with email + password or Google OAuth." } }, { "@type" : "Question" , "name" : "What is Acme Tasks priced at?" , "acceptedAnswer" : { "@type" : "Answer" , "text" : "Free for up to 5 users. Pro is $12 per user per month, billed annually. Enterprise is custom." } } ] }

제품 페이지당 5개에서 10개 사이의 Q&A 쌍이 가장 적절합니다. 가격, 통합(integrations), 가장 흔한 "X를 지원하나요?"와 같은 질문들, 그리고 최소한 하나 이상의 반박 질문("[경쟁사]와 비교하면 어떤가요?")을 다루십시오.

llms.txt 파일 패턴

llms.txt는 AI 시대의 robots.txt에 해당합니다. 이는 귀하의 도메인 루트( https://yourdomain.example/llms.txt )에 위치한 일반 Markdown 파일로, AI 크롤러(crawlers)와 어시스턴트에게 가장 중요한 공개 URL들의 선별된 인덱스를 제공합니다.

SaaS 제품을 위한 최소한의 유용한 llms.txt 예시:

Acme Tasks

3~30명 규모의 엔지니어링 팀을 위한 프로젝트 관리 (Project management). 비동기 우선 (Async-first), GitHub 통합, 사이클 타임 (cycle time)에 대한 확고한 철학 보유.

핵심 페이지 (Core pages)

비교 (Comparisons)

AI 어시스턴트가 유용하게 활용할 수 있는 포스트 (Posts)

이 파일은 아직 표준이 아닙니다 (제안서는 llmstxt.org 에 있습니다). 하지만 AI 크롤러(crawlers)와 근거 기반 검색 시스템(grounded retrieval systems)이 Markdown 인덱스를 발견했을 때 이를 소비하려는 기회주의적 성향이 점점 강해지고 있기 때문에 실무적으로 효과가 있습니다.

배포 비용: 최초 1회 30분 소요, 이후 최신 상태 유지.
이점: AI 인프라에 어떤 URL이 가장 중요한지 알려주는 작고 구조화된 자극 (nudge).
URL 안정성: 리다이렉트 (redirects), 캐노니컬 (canonicals), 사이트맵 (sitemap) 규율.

AI 학습 코퍼스 (training corpora)에 포함되는 복리 효과는 URL 안정성에 달려 있습니다. 삭제된 모든 URL은 삭제된 인용 (citation)과 같습니다.

수개월에 걸쳐 보상을 가져다줄 세 가지 규칙:

  1. 페이지를 그냥 삭제하지 마세요.
  2. 구조를 재편성할 때는 301 리다이렉트 (301 redirects)를 사용하세요.
  3. 기능이 종료(sunset)되는 경우, "이 기능은 더 이상 지원되지 않으며, 여기 현재의 대안이 있습니다"라는 안내와 함께 대체 링크를 남겨두고 페이지를 유지하세요.

AI 엔진이 기억하는 것은 URL이며, 그 아래의 콘텐츠는 변경될 수 있습니다.
모든 제품 페이지에는 인덱싱되기를 원하는 버전을 가리키는 캐노니컬 태그 (Canonical tags)를 적용하세요.

특히 dev.to, Hashnode, 또는 Medium과 같은 플랫폼에 콘텐츠를 신디케이트(Syndicate)하는 경우 매우 중요합니다 (참고로 이 포스트가 바로 그 작업을 수행하고 있습니다. 이 글의 캐노니컬(Canonical) 주소는 https://peerpush.net/blog/2026-indie-saas-launch-playbook 이며, dev.to가 읽는 canonical_url 프론트매터(frontmatter)에 선언되어 있습니다). sitemap.xml 관리 규율을 지키세요. Google Search Console을 통해 제출하고, 정기적으로 업데이트하세요. AI 학습 파이프라인(Training pipelines)은 사이트 구조를 발견하기 위한 시드(Seed)로서 sitemap.xml을 자주 활용합니다. URL당 <lastmod>가 포함된 최신 상태의 사이트맵은 어떤 페이지가 최신인지 알려주는 신호가 됩니다.

변경 사항이 효과가 있는지 테스트하는 방법
AI 어시스턴트가 귀하의 변경 사항을 반영하고 있는지 테스트하기 위한 실질적인 루프(Loop)는 다음과 같습니다: 귀하의 카테고리에서 실제 사용자가 물어볼 법한 질문 510개를 선정하세요. 프로젝트 관리 도구의 예시: "엔지니어링 팀을 위한 최고의 프로젝트 관리 도구는 무엇인가요?", "Linear의 대안은 무엇인가요?", "Jira에 무료 플랜이 있나요?". 각 질문을 ChatGPT (유료), Claude (무료), Perplexity (무료), 그리고 Gemini (무료)에 입력해 보세요. 귀하의 제품이 언급되었는지, 답변의 어느 위치에 있는지, 그리고 어떤 경쟁사가 함께 언급되었는지를 기록하세요. 동일한 프롬프트(Prompt)를 매주 반복하세요. 단일 주간의 차이는 노이즈(Noise)일 뿐입니다. 612주 동안의 추세가 구조화된 데이터(Structured data) 작업이 실제로 성과를 내고 있는지를 알려줍니다. PeerPush는 내부적으로 AI 인용률(Citation rate)을 측정하기 위해 이 루프를 매일 실행합니다. 동일한 루프는 추천되는 것에 관심이 있는 모든 제품 팀에 적용될 수 있습니다.

AI 추출을 방해하는 흔한 실수들
"영업팀에 문의(Contact sales)" 뒤로 가격을 숨기는 것. 가격 페이지는 어시스턴트가 비용에 대해 질문받았을 때 가장 먼저 가져오는 페이지입니다. 숫자가 없으면 비용에 민감한 답변에서 추천될 수 없습니다. 마케팅 문구처럼 작성된 설명(Description). 제품이 어떻게 느껴지는지를 설명하는 형용사 구문이 아니라, 제품이 누구를 위한 것이며 무엇을 하는지를 명시하는 명사 구문을 사용하세요. 유효하지 않은 거대한 단일 JSON-LD 블롭(Blob). Google의 리치 결과 테스트(Rich Results Test, search.google.com/test/rich-results)를 통해 스키마(Schema) 오류를 잡아내세요.

만약 거기서 통과하지 못한다면, 유사한 파서 (Parser)를 기반으로 구축된 AI 추출기 (AI extractors)들도 통과하지 못할 것입니다. 실질적인 트레이드오프 (Tradeoff)가 없는 일반적인 "대안 (alternatives)" 페이지는 도움이 되지 않습니다. "우리는 모든 면에서 [경쟁사]보다 낫다"라고 말하는 페이지는 어시스턴트가 인용하는 페이지가 아닙니다. 반면, "X가 필요하다면 [경쟁사]가 더 나은 선택이지만, 이런 경우에는 저희가 더 낫습니다"라고 말하는 페이지는 인용됩니다.

충분한 고민 없이 AI 크롤러를 차단하는 robots.txt. 일부 SaaS 사이트들은 "AI 학습으로부터 콘텐츠를 보호하기 위해" robots.txt에서 GPTBot, ClaudeBot 등을 차단합니다. 이러한 선택은 단기적인 콘텐츠 보호를 위해 AI 추천에서의 장기적인 가시성 (Invisibility)을 맞바꾸는 것입니다. 기본적으로 차단하기보다는 명시적으로 고민해 볼 가치가 있습니다.

이번 주에 실행할 작업: 우선순위별 실무 체크리스트:

  1. 제품의 /pricing 페이지를 감사 (Audit) 하세요. 실제 숫자, 실제 플랜 이름, 실제 체험 조건이 포함되어 있습니까? 그렇지 않다면 그것부터 수정하세요.
  2. 홈페이지와 가격 페이지에 SoftwareApplication + Offer를 포함한 JSON-LD를 추가하세요.
  3. 이 포스트 앞부분에서 언급한 비교 테이블 (Comparison-table) 패턴을 사용하여 /alternatives-to-<competitor> 페이지를 하나 만드세요.
  4. 홈페이지나 전용 FAQ 페이지에 5~10개의 질문이 포함된 FAQPage JSON-LD 블록을 추가하세요.
  5. 위에서 보여준 형식으로 도메인 루트에 llms.txt를 배포하세요.
  6. 카테고리에 맞는 디렉토리 3곳에 제품을 등록하세요. https://peerpush.net/submit 의 PeerPush는 여러 옵션 중 하나이며, 그 외에도 BetaList, AlternativeTo, SaaSHub 등이 있습니다.
  7. 위에서 설명한 테스트 루프를 설정하고 매주 확인하세요.

이 작업의 대부분은 단 한 번의 오후 만에 구현 가능합니다. 그 어떤 것도 바이럴 출시일 (Viral launch day)에 의존하지 않습니다. 이 모든 것은 향후 24개월 이상 동안 AI 학습 코퍼스 (Training corpora)에 복리로 쌓이게 됩니다. 새로운 진열대는 영구적입니다. 구조화된 데이터 (Structured data)는 그 문을 여는 열쇠입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0