$air-score --explain method
무엇을 근거로 판정하는가_
결과를 믿을지 말지는 이 문서를 읽고 정하시면 됩니다. 판정 규칙, 점수 산식, 수집 경계, 그리고 이 도구가 하지 않는 일까지 전부 적어 두었습니다.
$air-score --explain layers
판정 출처를 세 층으로 나눕니다
[1] HTML 사실
alt 속성의 유무와 값 · 감싸는 링크/버튼 · width/height · figure 구조
→ 다시 실행해도 같은 값. AI가 이 층을 뒤집지 못합니다.
[2] 문자열 · 문맥 규칙
파일명형 ALT · 일반형 ALT · 키워드 반복 · 주변 본문과의 중복 · 페이지 내 중복
→ 코드로 표현된 규칙이라, 왜 걸렸는지 그대로 설명할 수 있습니다.
[3] 의미 판정 (서버 AI 설정 시 기본 사용 · 사용자가 해제 가능)
이미지가 실제로 무엇인지 · 이미지 안 문구 · 현재 ALT와의 일치 여부
→ 이 층만 확률적입니다. 그래서 신뢰도 임계값과 사람 검수 관문을 둡니다.결과 화면에서도 각 항목이 어느 층에서 나왔는지 함께 표시합니다.
$air-score --explain pipeline
수집 · 판정 파이프라인
$ 1 verify HTTP(S) · 기본 포트 · 공개 도메인만 통과
거부: 내부·로컬 주소, IP 직접 입력, 아이디·비밀번호가 붙은 URL
$ 2 robots 페이지보다 robots.txt를 먼저 읽습니다
금지된 경로면 페이지를 요청하지 않고 진단을 중단합니다
(가져온 뒤 거부하면 이미 요청한 것이라 의미가 없습니다)
AirScoreBot 전용 그룹이 있으면 그 규칙만 적용합니다
Allow는 더 길게 일치한 쪽이 이기는 표준 규칙을 따릅니다
$ 3 fetch 서버가 내려준 정적 HTML만 수집
리다이렉트는 홉마다 다시 검증 · 도착지 기준으로 robots 재확인
15초 / 2MB 상한
$ 4 filter 본문 상세 이미지만 남김
제외: 로고 · 아이콘 · SNS · 앱 배지 · 결제 배지 · 트래킹 픽셀
$ 5 rules HTML 사실과 문자열 규칙으로 판정
(AI를 켰다면 여기서 의미 판정을 병합)
$ 6 report selector · 현재 HTML · 수정 HTML · 수정 단계를 함께 출력$air-score --list-codes
오류 코드
| 코드 | 심각도 | 무엇을 잡는가 | 어떻게 고치는가 |
|---|---|---|---|
| ALT_MISSING | 오류 | alt 속성 자체가 없음 | 의미를 담아 쓰거나, 장식이면 alt=""를 명시 |
| ALT_EMPTY_INFORMATIVE | 검토 | 장식으로 확정하기 어려운 이미지에 빈 ALT | 이미지를 열어 정보가 있는지 확인 후 결정 |
| ALT_GENERIC | 주의 | '이미지', '상품이미지'처럼 형식만 채운 값 | 다른 이미지와 구분되는 한 가지를 쓰기 |
| ALT_FILENAME | 오류 | 파일명·자동 생성 식별자를 ALT로 사용 | 업로드 도구의 파일명 자동 삽입을 끄기 |
| ALT_DUPLICATE | 검토 | 출처가 다른 이미지에 완전히 같은 ALT | 각 이미지가 더하는 정보의 차이를 반영 |
| ALT_REDUNDANT_WITH_CONTEXT | 검토 | ALT가 주변 본문에 그대로 들어 있음 | 이미지만 담은 정보를 쓰거나 alt="" |
| ALT_KEYWORD_STUFFED | 주의 | 같은 단어 반복·키워드 나열 | 자연어 한 문장으로 다시 쓰기 |
| FUNCTIONAL_ALT_MISSING | 오류 | 링크·버튼 역할 이미지에 이름이 없음 | 외형이 아니라 동작·목적지를 쓰기 |
| TEXT_IN_IMAGE_UNCOVERED | 주의 | 이미지 안 핵심 문구가 HTML 어디에도 없음 | 본문 텍스트로 옮기고, 어려우면 ALT에 반영 |
| IMAGE_DIMENSIONS_MISSING | 참고 | 큰 이미지에 width/height 속성 없음 | 원본 픽셀 크기를 지정 (감점 없음) |
$air-score --explain metrics
AIR Score 산식 — 네 개 하위 지표
AIR Score — AI Readability Score
로봇과 AI가 이 페이지에서 확보 가능한 정보량을 100점으로 환산한 값입니다.
점수 기준: 상품 설명 상세 영역
URL 하나를 열었을 때 사람이 "상세페이지"라고 부르는 그 구역만 잽니다.
리뷰 목록 · 추천 상품 · 배송/교환 안내는 어느 상품 페이지에나 똑같이
붙는 부속이라 제외합니다. 그것까지 세면 상품 설명이 비어 있는 페이지가
괜찮아 보이고, 반대 경우도 생깁니다.
영역은 다음 순서로 찾습니다.
1) 상세 설명 컨테이너로 흔히 쓰이는 id·class
(#prdDetail · .detail-area · .goods-description · .se-main-container 등)
2) 구조화 데이터가 설명으로 표시한 요소 (itemprop="description")
3) main / article 같은 의미 태그
못 찾으면 억지로 좁히지 않고 본문 전체로 물러난 뒤,
"영역을 특정하지 못했다"고 결과에 적습니다.
네 개 하위 지표를 가중 합산합니다.
IMG-R Image Readability 가중치 40
이미지가 전달하는 정보 중 로봇이 수집 가능한 비율
본문 이미지를 R0~R5로 등급화한 뒤 등급 점수의 평균
R0 판독 불가 0 / R1 20 / R2 40 / R3 60 / R4 80 / R5 최적 100
TXT-D Text Density 가중치 25
상세 정보 중 텍스트로 존재하는 비율
본문 텍스트 ÷ (본문 텍스트 + 본문 이미지 수 × 500자)
※ 이미지 한 장이 텍스트 500자 분량을 담고 있다는 가정입니다.
이미지 안 글자를 실제로 읽어 센 값이 아닙니다.
STR-S Structured Signal 가중치 25
구조화 신호 다섯 항목의 충족률
콘텐츠 유형 · 공식 명칭 · 핵심 설명 · 가격 · 평점/리뷰
JSON-LD → 마이크로데이터 → meta 순으로 찾습니다.
CRW-A Crawl Access 가중치 10
수집 로봇의 접근 가능 범위
robots.txt · AI 수집기 허용 · meta robots · X-Robots-Tag
· 정식 URL(canonical)
AI 수집기는 GPTBot · ClaudeBot · PerplexityBot · Google-Extended 등
13종을 확인합니다. 검색 로봇과 AI 수집기 접근은 별도로 설정할 수
있으며, 막힌 수집기는 이 페이지를 인용 후보로 수집할 수 없습니다.
llms.txt 존재 여부도 확인하지만 아직 제안 단계인 관행이므로
점수에는 반영하지 않고 참고로만 표시합니다.
페이지 점수 = (지표값 × 가중치의 합) ÷ 가중치 합 (반올림)
· 재지 못한 지표는 0점으로 채우지 않고 분모에서 뺍니다.
"정보가 없다"와 "우리가 확인하지 못했다"는 다른 진단이기 때문입니다.
같은 이유로 robots.txt 도 404(없음)와 연결 실패(확인 불가)를 구분합니다.
앞은 "제한이 없다"는 확답이라 점수에 넣고, 뒤는 분모에서 뺍니다.
· 구조화 신호는 페이지의 주 개체(상품·업체 등)에서 읽습니다.
빵부스러기·사이트 정보에 이름이 있다고 해서 상품명이 있는 것은
아니므로, 그런 값은 충족으로 세지 않습니다.
· TXT-D 의 본문 텍스트에는 내비게이션·푸터처럼 모든 페이지에 똑같이
붙는 문구를 넣지 않습니다. 그것까지 세면 상품 설명이 한 줄뿐인
페이지도 텍스트가 풍부한 것처럼 계산됩니다.
AI 인용 준비도 (페이지 신호 기반 · 실제 인용률 아님)
C = IMG-R·TXT-D·STR-S의 가중 평균
A = CRW-A ÷ 100
H = robots/noindex 등 확인된 전체 차단이면 0, 그 외 1
준비도 = round(C × A × H)
AIR Score가 페이지에서 확보 가능한 정보량을 보는 합산 점수라면,
AI 인용 준비도는 접근성을 관문으로 봅니다. 콘텐츠가 좋아도 수집이
막히면 높은 점수가 나오지 않습니다. 측정하지 못한 콘텐츠 지표는 C의
분모에서 빼며, 필요한 재료가 없으면 0점이 아니라 측정 불가로 표시합니다.
이 값은 ChatGPT·Perplexity·AI 검색 결과를 질의해 관측한 인용률이나
인용 확률이 아닙니다. 실제 인용률은 별도의 질의 세트, 플랫폼, 지역,
시각, 응답 근거 URL과 유효 표본 수를 기록해야 측정할 수 있습니다.
이미지 판독 점수 (심각도 기준 · AIR Score 와 별도 산식)
이미지 점수 = 그 이미지에서 가장 심각한 항목 하나의 점수
오류 28 / 주의 58 / 검토 76 / 문제 없음 100
· '참고' 항목은 감점하지 않습니다.
· 제외 자산과 숨김 이미지는 분모에 들어가지 않습니다.
· IMG-R 은 이 값이 아니라 R0~R5 등급 점수의 평균입니다.
같은 이미지를 다른 눈금으로 본 값이므로 서로 바꿔 쓰지 않습니다.
정보 블록 등급 (텍스트 보완 대상과 순서)
T0 텍스트 없음 · T1 텍스트 빈약 · T2 텍스트 충분 · T3 구조화 완료
제목(h1~h6) 단위로 나눈 구간을 기준으로 판정합니다.
내비게이션·푸터 같은 사이트 골격은 정보 블록으로 세지 않습니다.
상세 설명 영역을 특정했다면 그 안의 구간만 셉니다. 점수가 보는 범위와
고칠 목록의 범위가 달라지면, 목록을 다 고쳐도 점수가 움직이지 않습니다.
등급 A 90+ · B 75+ · C 60+ · D 40+ · F이슈 개수를 그대로 빼지 않습니다. 같은 이미지에서 파생된 항목을 두 번 깎으면, 이미지 한 장짜리 페이지가 서른 장짜리보다 나쁘게 나오는 왜곡이 생깁니다.
$air-score --explain aeo
AEO — 이걸 고치면 무엇이 달라지는가
AEO — Answer Engine Optimization (답변 엔진 최적화) 검색 결과의 순위를 올리는 일(SEO)과, AI가 답을 만들 때 이 페이지를 근거 후보로 해석할 수 있게 만드는 일(AEO)은 필요한 것이 다릅니다. AI 답변은 인용할 문장과 검증할 사실이 있어야 만들어집니다. · 인용할 문장 → 상세 설명이 이미지가 아니라 텍스트로 있어야 합니다 (TXT-D) · 이미지 속 정보 → 대체텍스트로 읽혀야 답변 재료가 됩니다 (IMG-R) · 검증할 사실 → 가격·평점·상품명이 구조화 데이터에 있어야 합니다 (STR-S) · 그리고 애초에 → AI 수집기가 들어올 수 있어야 합니다 (CRW-A) 네 지표는 이 네 조건을 페이지 내부 신호로 진단합니다. 지표를 올리는 일은 인용 준비 상태를 개선하지만, 실제 인용이나 순위를 보장하지는 않습니다. CRW-A가 막혀 있으면 나머지 개선의 효과가 0이 되므로 가장 먼저 확인합니다. 검색 로봇과 AI 수집기 접근은 별도 규칙으로 설정될 수 있습니다. 결과 화면과 내려받는 보고서에는 일반론 대신 이 페이지에서 실제로 빠진 것을 짚고, 어떤 준비 신호가 부족한지 적습니다.
$air-score --limits
하지 않는 것
// 정적 티어는 JavaScript를 실행하지 않습니다 — 설정된 렌더링 티어가 공개 화면을 보완합니다
// 로그인하지 않습니다 — 회원 전용·지역별·A/B 분기 화면은 재현하지 않습니다
// 렌더링 스크린샷은 만료 서명으로 보호하고 기본 1시간 뒤 삭제합니다
// 영구 결과 이력은 저장하지 않습니다 — 계정별 보관함·공유 링크는 아직 없습니다
// 접근성 준수 인증이 아닙니다 — 수정 우선순위를 정하는 도구입니다
// 검색 순위나 광고 성과 상승을 주장하지 않습니다
// AI 인용 준비도는 실제 인용률·인용 확률이 아닙니다 — 외부 답변 관측은 별도 조사입니다
// robots.txt가 막은 경로는 진단하지 않습니다 — 사이트 운영자의 의사를 우선합니다
이미지 안 텍스트까지 확인
서버 AI가 설정돼 있으면 기본으로 동작합니다. 미해결 항목을 우선해 공개 상세 이미지 최대 3장의 ALT 근거를 제시합니다.
$air-score ocr --alt-diff
같은 도메인 상세페이지 표본 조사
같은 호스트 · 최대 12페이지 · 링크 깊이 2 · 수정이 급한 순서로 정렬
$air-score crawl --depth 2 --limit 12
