AI가 왜 특정 페이지를 인용하고 내 페이지는 인용하지 않을까? 스크립트로 차이점 분석하기
요약
AI가 특정 페이지를 인용하는 구조적 차이점을 스크립트로 분석하는 방법을 제시합니다. 이 방법은 단순 크롤링과 데이터프레임 비교를 통해, AI 검색 시스템에 중요한 '깨끗하고 완결된 답변 구절'의 존재 여부와 같은 특징들을 포착하여 경쟁사와의 격차를 객관적으로 파악할 수 있게 합니다.
핵심 포인트
- AI 인용 페이지의 구조적 차이점을 스크립트로 분석 가능
- JavaScript 렌더링 없이 원시 HTML을 가져오는 것이 중요
- 측정해야 할 특징은 '완결된 답변 구절'과 '기계가 읽을 수 있는 사실 형태'
- pandas를 이용해 여러 구조적 지표(단어 수, 표 유무 등) 비교 가능
여러분이 '발화 점유율(share of voice)'을 측정하여, 경쟁사만 지속적으로 추천 및 인용되는 프롬프트 클러스터를 발견했지만, 여러분의 페이지는 그렇지 못했다고 가정해 봅시다. 이때 가장 당연한 다음 질문은 **'그들의 페이지에는 무엇이 다를까?'**입니다.
대부분의 사람들은 이 질문에 답하기 위해 브라우저 탭 두 개를 육안으로 비교합니다. 하지만 본 포스트에서는 스크립트를 이용해 이를 수행합니다. 즉, AI 엔진이 특정 프롬프트에 대해 인용한 URL들을 가져와서(비-JavaScript 크롤러가 하는 방식대로), 추출 및 인용에 중요하게 작용하는 특징들(features)을 뽑아내고, 여러분의 페이지와 비교하여 차이점(diff)을 출력하는 것입니다.
물론 이 방법이 모든 것을 설명해주지는 못합니다. 브랜드 평판이나 제3자 언급도 중요하며, 이는 페이지 HTML에는 나타나지 않습니다. 하지만 이 스크립트는 수정하기 가장 빠르고 간단한 구조적 격차(structural gaps)를 신뢰성 있게 포착해냅니다.
1단계: 인용된 URL 가져오기
여러분이 뒤처지는 프롬프트에 대해 저장된 인용 기록(이전 게시물에서 파싱하는 방법을 참조하세요)부터 시작합니다:
import sqlite3, json
from collections import Counter
...
가장 많이 인용된 상위 3~5개 URL을 선택하십시오. 여러 번의 실행과 다양한 엔진에서 인용되는 페이지가 바로 신호(signal)입니다. 한 번만 인용된 URL은 노이즈일 가능성이 높습니다.
2단계: 단순 크롤러처럼 가져오기
JavaScript 렌더링 없이 원시 HTML을 가져옵니다. 만약 어떤 페이지의 콘텐츠가 나타나기 위해 JS가 필요하다면, 그것 자체가 하나의 발견점(finding)이 됩니다:
import requests
UA = "Mozilla/5.0 (compatible; page-diff/0.1; +https://example.com/bot)"
...
정직한 사용자 에이전트(user agent)를 사용하고 요청 볼륨은 아주 작게 유지하십시오. 여러분은 사이트를 크롤링하는 것이 아니라, 몇 개의 공개된 페이지를 읽고 있는 것입니다.
3단계: AI 추출에 중요한 특징들 뽑아내기
검색 시스템(Retrieval systems)은 페이지를 여러 구절(passages)로 분할하고, 이를 임베딩하여 가장 적합한 청크(chunks)들을 모델의 컨텍스트에 끌어옵니다. 따라서 측정할 가치가 있는 특징들은 **'깨끗하고 자체적으로 완결된 답변 구절이 존재하는지 여부'**와 **'사실들이 기계가 읽을 수 있는 형태인지 여부'**에 영향을 미치는 것들입니다.
import re, json
from bs4 import BeautifulSoup
...
각 특징은 대리 지표(proxy)이며, 일부는 거칠 수 있습니다('numbers'는 특정 레이아웃의 목록 마커 개수를 셀 것입니다). 하지만 여기서는 괜찮습니다. 우리는 페이지들을 서로 비교하는 것이지, 절대적인 기준으로 점수 매기는 것이 아니기 때문입니다.
4단계: 차이점 분석 (Diff)
pandas 라이브러리를 사용하여 데이터프레임을 생성합니다.
ours = "https://acmeanalytics.com/pricing"
...
words h2_h3 question_headings median_first_para_words tables lists numbers jsonld_types has_author has_date
OURS 410 4 0 62 0 2 11 [Organization] False False
C1 1840 14 9 28 2 6 74 [FAQPage, Organization, Product] True True
...
(예시 출력.) 이처럼 차이점을 분석하면 문제가 명확해지는 경향이 있습니다:
- 깊이 (Depth): 인용된 페이지는 3
5배 더 길며, 이는 단순히 채우기 위한 내용이 아닙니다. 해당 페이지들은 1117개의 섹션을 가지고 있습니다. - 질문 제목 (Question headings): 경쟁사들은 사람들이 질문하는 방식으로 타이틀 섹션을 구성합니다. 반면 다른 페이지는 이러한 구조가 없습니다.
- 답변의 시작: 경쟁사들은 각 섹션을 짧은(
2530 단어) 직접적인 답변으로 시작합니다. 다른 페이지는 약 60단어 분량의 서론으로 시작합니다. - 구체성 (Specifics): 훨씬 더 많은 구체적인 숫자와 비교 테이블이 포함되어 있습니다.
- 기계 판독 가능 사실 (Machine-readable facts):
Product/FAQPage스키마, 작성자(author) 및 날짜(date) 정보가 존재합니다.
5단계: 존재하는 내용뿐만 아니라 인용된 내용을 확인하기
특징(Features)은 페이지가 무엇을 가지고 있는지를 알려줍니다. 반면, 인용된 구절(cited passages)은 검색 엔진이 어떤 부분을 사용했는지를 알려줍니다. 만약 인용 정보와 함께 cited_text를 저장했다면 (여기서는 정상화기(normaliser)가 인용 후 생성하는 run_id, url, cited_text 행을 가진 citation 테이블에), 이 내용을 경쟁사 페이지와 비교해 보세요:
for url in competitor_urls[:3]:
print("\n", url)
for (s,) in conn.execute(
...
보통 검색 엔진이 인용하는 것은 동일한 두세 개의 구절일 것입니다: 구체적인 숫자가 포함된 가격 책정 문장, 한 줄 정의, 비교 테이블의 한 행 등입니다. 이들이 바로 여러분 자신의 사실과 맞춰서 일치시키거나 능가해야 할 핵심 구절들입니다.
차이점 분석으로 알 수 없는 것들
범위 밖에 있는 것이 무엇인지 솔직하게 인정해야 합니다:
- 오프사이트 평판 (Off-site reputation). 경쟁사가 언급된 리뷰, 포럼 스레드, 출판물 및 목록. 모델 지식에 의존하는 엔진(model-knowledge-heavy engines)에서는 이러한 요소들이 온페이지 특징보다 더 중요할 때가 많습니다.
- JavaScript 렌더링 콘텐츠 (JavaScript-rendered content). 페이지가 클라이언트 측에서 렌더링되는 경우, 원시 페치(raw fetch)는 브라우저가 보여주는 것보다 적게 나타납니다. 이는 정보가 되지만(많은 AI 페처들이 JS를 렌더링하지 않기 때문에), 결론을 내리기 전에 렌더링된 버전과 비교해 보세요.
- 엔진이 공개하지 않는 신선도 및 권위 신호 (Freshness and authority signals)
따라서 이 결과를 가설 목록으로 취급하세요. 개선 사항을 적용한 다음, 해당 프롬프트 클러스터의 인용률(citation rate)이 이후 몇 주 동안 어떻게 변하는지 확인해 보세요.

루프 자동화하기
이 과정을 수동으로 진행하는 것은 하나의 프롬프트 클러스터에는 유용합니다. 하지만 수십 개의 클러스터와 여러 경쟁사에 걸쳐서, 지속적으로 실행되기를 원합니다.
Vista AI의 경쟁사 분석 (Competitor Analysis)은 추적 측면을 처리합니다: 어떤 경쟁사 페이지가 가장 많이 인용되는지, 어느 엔진에서 경쟁사가 당신보다 우위에 있는지, 그리고 콘텐츠 격차와 빠른 승리 기회(quick wins)를 제시합니다. 페이지 수준의 측면에서는 Vista의 페이지 감사 (Page Audit)가 AI 가시성, 이해도 및 인용 잠재력 측면에서 당신의 페이지와 경쟁사 페이지를 나란히 점수화하며, 이는 위에서 언급한 기능 차이점(feature diff)보다 더 완전한 버전입니다.
어떤 것을 사용하든, 루프는 동일합니다: 당신이 놓치는 프롬프트를 찾고 → 대신 인용되는 내용을 읽은 다음 → 특정 격차를 메우고 → 재측정하는 것.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기