상세문의 아이콘 상세문의
간편문의 아이콘 × 간편문의

사람에겐 가벼운 메뉴가,
AI에겐 본문을 가리는 잡음입니다.

신호 대 잡음(Signal-to-Noise)
GNB 메뉴가 본문을 가릴 때, 우리 사이트를 직접 진단·개선한 자체 실험

홍은표 · 넥스트티 대표 · SEO/GEO 컨설턴트 | 작성 2026-05-24

실험 노트 · 진행 중

이 글은 결론이 난 글이 아니라, 진행 중인 실험 기록입니다. 시작은 단순했습니다 — 한 AI에게 우리 포트폴리오 URL을 줬더니 가져오긴 했는데 메뉴가 너무 무거워 뒤의 포트폴리오 내용이 잘 안 잡혔습니다. "한 번에 가져오는데 왜 안 보이지?"에서 출발해 HTML을 실측·개선했습니다. 그 효과(AI 인용 변화)는 아직 단정하지 않고, 관측되는 대로 이 글에 단계적으로 갱신합니다. 지금 공개하는 건 누구나 소스 보기로 재현할 수 있는 HTML 구조 수치뿐입니다.

결론부터

우리 포트폴리오 페이지를 열어 보니, 메뉴(GNB)가 HTML의 76%, 본문은 4%였습니다. 사람은 메뉴를 hover로만 보지만, AI는 HTML을 한 번에 받아도 — 텍스트로 추출·요약하는 단계에서 앞·무거운 메뉴가 토큰(AI가 한 번에 읽는 분량)을 차지해 뒤의 본문을 잘라내거나 묻습니다.

  • 개선 전: 신호 대 잡음이 본문 4% : 메뉴 76% — 본문보다 앞에 메뉴 223KB가 놓여, 추출·요약 처리 한도에서 본문이 밀림.
  • 개선 후: 무거운 메뉴를 lazy-load로 분리 → 본문 비중 4%→10%, 페이지 293KB→133KB.
  • 모든 수치는 페이지 소스 보기로 누구나 재현 가능. AI 인용 변화는 단정 않고 관측 중.

SAME HTML, READ DIFFERENTLY

사람과 AI는 같은 HTML을 받지만,
전혀 다르게 처리합니다.

사람에게 GNB는 마우스를 올려야 펼쳐지는 가벼운 UI입니다. AI 크롤러는 HTML을 한 번에 받지만, 받은 코드를 텍스트로 추출·요약하는 단계가 따로 있습니다. 정교한 크롤러는 메뉴(boilerplate — 전 페이지에 반복되는 머리·꼬리 영역)를 어느 정도 걸러낼 수 있지만 완벽하지 않고, 실시간 답변용 fetch나 단순 추출 환경에서는 메뉴 텍스트가 본문과 함께 들어갈 수 있습니다. 그래서 메뉴가 본문보다 많고 앞서면, 추출·요약 처리 한도에서 본문 신호가 묻히거나 잘립니다.

THE PROBLEM

hover는 사람만의 사치다

메뉴를 접어 두는 건 사람의 눈에만 통합니다. AI엔 접힘/펼침이 없어, 추출된 텍스트엔 메뉴가 본문과 함께(보통 앞에) 담깁니다. 그 결과는 세 가지입니다.

  • 신호 희석 — 본문 신호가 메뉴 텍스트에 묻혀 비중이 떨어집니다.
  • 본문 잘림 — 컨텍스트 한도 안에서 메뉴가 앞을 차지하면 본문이 뒤로 밀려 잘릴 수 있습니다.
  • 페이지 구별 약화 — 메뉴가 전 페이지 거의 동일하면, AI 눈엔 "이 사이트의 모든 페이지가 비슷"하게 보입니다.

DIAGNOSIS (BEFORE)

실측 — 본문 4%, 메뉴 76%

우리 포트폴리오 페이지의 HTML(약 294KB)을 영역별로 쟀습니다. 추측이 아니라 바이트 단위 실측입니다.

개선 전 — HTML 구성

메뉴(GNB) 76%본문기타

신호 대 잡음 비율이 본문 4% : 메뉴 76% — 본문보다 앞에 메뉴 223KB가 놓여, 추출·요약 처리 한도에서 본문이 밀리기 쉬운 구조였습니다. 가장 강력한 트랙레코드 페이지가, 정작 AI에겐 가장 안 보이는 셈이었습니다.

WHAT WE DID

무엇을 바꿨나

UI는 그대로 두고, AI가 읽는 순서·비중만 바꿨습니다.

1. 신호 분리

시맨틱 태그

본문을 <main>으로 감싸고, 메뉴는 <nav>로 표시 — "여기는 본문, 저기는 메뉴"를 명시. (data-nosnippet은 검색 스니펫 제외용 보조 신호.)

2. 노이즈 제거

메가메뉴 lazy-load

화면에 보이기 전엔 초기 HTML에서 빼고, 첫 상호작용(hover/탭)이나 브라우저 유휴 시점에 한 번 불러옵니다. 메뉴 동작은 동일.

3. 반복 제거

CSS 외부화

전 페이지에 반복되던 메뉴 CSS를 외부 캐시 파일로 분리 — 매 페이지 HTML이 가벼워집니다.

발견성은 그대로, 클로킹도 아닙니다. 상위 메뉴 링크는 HTML에 남기고, 하위 링크는 푸터·sitemap.xml·llms.txt(AI용 사이트 안내 파일)·사이트맵 페이지에 모두 있어 크롤러가 전 페이지를 발견합니다. 같은 메뉴를 모두에게 제공하되 무거운 부분만 나중에 부르는 것이라, 사용자와 크롤러에게 다른 내용을 보이는 클로킹과는 다릅니다.

FOR DEVELOPERS — 구현 예시

핵심만 코드로

실제 적용 방식의 최소 골격입니다(모바일 아코디언·캐시 헤더 등 세부는 생략).

① 메가메뉴 lazy-load — 무거운 패널을 첫 hover 또는 유휴 시점에 한 번만

<!-- 초기 HTML: 무거운 패널은 비워 둔다(껍데기만) -->
<nav class="mega" data-gnb-lazy></nav>
// 첫 hover(또는 유휴) 때 한 번만 메뉴 조각을 불러온다
const mega = document.querySelector('.mega');
let loaded = false;
function loadMega() {
  if (loaded) return; loaded = true;
  fetch('/gnb-mega.php')                 // 메뉴 HTML 조각
    .then(r => r.text())
    .then(html => { mega.innerHTML = html; });
}
mega.addEventListener('mouseover', loadMega, { once: true });
// 모바일: 첫 탭 또는 메뉴 버튼 클릭 시 loadMega() 호출
window.requestIdleCallback?.(loadMega);  // 초기 HTML 이후, 브라우저 유휴 시점에 지연 로딩

② 시맨틱 분리 — "여기는 메뉴, 저기가 본문"

<nav data-nosnippet>…메뉴…</nav>   <!-- 검색 스니펫 제외(보조 신호) -->
<main id="content">…본문…</main>   <!-- 여기가 진짜 신호 -->

data-nosnippet은 메뉴를 검색 스니펫에서 빼 달라는 보조 신호일 뿐이고, 본문 비중 자체는 ①의 lazy-load와 CSS 외부화가 만듭니다. 프로덕션 적용 시 Cache-Control 헤더와 fetch 실패 시 fallback을 함께 설계하세요.

RESULT — HTML 구조 (재현 가능)

전후 실측

아래 수치는 모두 페이지 소스 보기(View Source)로 누구나 재현할 수 있는 공개 사실입니다.

항목개선 전개선 후
페이지 HTML 총량293.7 KB132.7 KB (−55%)
메뉴(GNB)가 차지하는 비중76%29%
본문 비중4%10%
본문보다 앞에 놓인 메뉴(잡음)223 KB39 KB
초기 HTML 링크 수317개136개
시맨틱 <main>없음있음

본문의 절대 분량은 그대로지만, 페이지가 절반으로 줄고 본문 비중이 올라 추출·요약 처리 한도에서 본문이 살아남을 가능성이 커집니다.

WHAT WE DON'T CLAIM

아직 단정하지 않는 것

이 글은 결론이 난 글이 아니라 진행 중인 실험 기록입니다. "이 개선으로 AI 인용이 N배 늘었다"고 말하지 않습니다 — 지금 공개할 수 있는 건 HTML 구조라는 재현 가능한 사실뿐이고, 인용 변화는 관측 중으로 두고 관측되는 대로 이 글에 단계적으로 갱신합니다.

두 가지 더 정직하게 — ① lazy-load로 뒤로 뺀 하위 링크가 GNB에 있을 때와 동일하게 평가된다고 단정하지 않습니다(링크 가중치는 다를 수 있어, 실제 발견 여부는 수집 로그로 확인). ② 푸터의 반복 링크는 본문 뒤라 덜 치명적이지만 여전히 관찰 대상입니다. 모두 관측과 추정의 경계 원칙의 자기적용입니다.

CHECK YOUR OWN SITE

당신 사이트도 30초면 점검됩니다

  1. 핵심 페이지에서 페이지 소스 보기(Ctrl/Cmd+U).
  2. 전체 길이 대비 실제 본문 텍스트가 어디서 시작하는지 보세요. 메뉴가 한참 이어진 뒤 본문이 나오면 신호입니다.
  3. <main> 태그가 있는지, 메뉴가 본문보다 양이 많지 않은지 확인하세요.

참고 — 거친 신호등(절대 기준 아님): 우리 사이트 진단 기준으로 본문 비중 10% 이상이면 안전권, 5% 미만이면 점검 필요로 봅니다. 사이트 유형에 따라 다를 수 있어 절대 기준은 아닙니다. 우리 페이지는 본문 4%→10%로 올렸고, 숫자 자체보다 "본문이 메뉴보다 뒤·적게 놓였는가"가 핵심입니다.

메뉴를 없애라는 게 아닙니다 — 본문이 메뉴에 묻히지 않게 순서·비중을 조정하라는 것입니다.

FAQ

자주 묻는 질문

메뉴가 많으면 AI 인식에 정말 나쁜가요?

메뉴 자체가 나쁜 게 아니라, 본문보다 양이 많으면 문제입니다. AI 크롤러는 HTML을 한 번에 받지만, 텍스트로 추출·요약하는 단계에서 메뉴(boilerplate)를 완벽히 걸러내지는 못합니다. 메뉴가 본문보다 많고 앞서면 본문 신호가 희석되고, 토큰(컨텍스트) 한도 안에서 본문이 뒤로 밀려 잘릴 수 있습니다.

메뉴를 빼면 SEO 내부 링크가 손해 아닌가요?

초기 HTML에서 무거운 메가패널을 빼도 발견성은 손실되지 않습니다. 상위 내비 링크는 그대로 두고, 하위 링크는 푸터·sitemap.xml·llms.txt·사이트맵 페이지에 모두 있어 크롤러가 전 페이지를 발견합니다.

이건 클로킹(cloaking) 아닌가요?

아닙니다. 사용자와 크롤러에게 다른 콘텐츠를 보여주는 게 클로킹입니다. 여기서는 같은 메뉴를 모두에게 제공하되 무거운 패널을 첫 상호작용 때 불러오는 lazy-load일 뿐, 본문 콘텐츠는 동일합니다.

개선 후 AI 인용이 늘었나요?

단정하지 않습니다. 공개 가능한 사실은 HTML 구조 수치(본문 4%→10%, 페이지 293KB→133KB)이며 누구나 소스 보기로 재현할 수 있습니다. 인용 변화는 관측 중이며, 관측되면 추정과 분리해 보고합니다.

맺으며

솔직히 말씀드리면, 이 글도 우리 사이트도 100% 완벽하지 않습니다. 여기 적은 크롤러 메커니즘 설명조차 더 엄밀히 다듬을 여지가 있고(엔진마다 동작이 다릅니다), 사람이 하는 일이라 실수는 늘 존재합니다.

우리는 "완벽하다"고 말하려는 게 아닙니다 — 완벽을 향해 지금도 고치는 중이고, 멈추지 않고 계속 진화하기를 바랄 뿐입니다. 그래서 더 정확한 지적이 있다면 환영합니다. 그 지적 또한 이 글을 다음 단계로 여는 하나의 관측이 되니까요.

UI는 그대로, AI가 읽는 비중만 바꿉니다

우리 사이트도 점검받기

본문이 메뉴에 묻혀 AI가 못 읽고 있지 않은지 — 페이지 구조부터 진단해 드립니다.