개발자로서 저는 브라우저 주소창에 별로 신경 쓰지 않았습니다. 그저 제가 만든 실제 제품인 페이지를 둘러싼 크롬(chrome)일 뿐이었습니다.
지난 1년 반 동안 SEO 분야에서 일하면서 생각이 바뀌었습니다. 제가 구축하고 최적화하는 사이트들의 분석 데이터를 살펴보면서, 코드만으로는 설명할 수 없는 패턴을 발견했습니다. 기술적으로는 완벽했지만 발견하기 어려운 페이지들이 있는가 하면, 구조가 더 깔끔한 단순한 페이지들은 계속해서 발견되고 인용되며 추천받고 있었습니다. 심지어 인간이 '방문'하는 것처럼 보이지도 않는 도구들에 의해서 말입니다.
문제는 페이지 자체가 아니었습니다. 그보다 먼저 발생하는 모든 것이 문제였습니다. 즉, 사람이 페이지를 보기 전에 일어나는 모든 것이었습니다.
Chrome 상단에 있는 비어있는 바는 수동적인 것처럼 보입니다. 하지만 그렇지 않습니다. 플레이스홀더 텍스트가 디자인을 드러냅니다: 'Google 검색' 또는 'URL 입력'.
다시 말해, 누군가가 이 바에 타이핑할 때마다 브라우저는 그 입력을 분류하고 결정을 내려야 합니다.
- 이것은 탐색(navigation) 요청인가? — 사용자가 목적지를 알고 있는가?
- 아니면 검색(search) 요청인가? — 사용자는 문제가 있지만 아직 목적지가 없는가?
function decideOmniboxInput(input) {
const value = input.trim();
if (/^https?: ype/).test(value)) return navigate(value);
...
이것은 Chromium이 실제로 하는 일의 단순화 버전입니다. 실제 구현에서는 브라우징 기록, 북마크, 검색 제안, 인트라넷 규칙 등을 추가로 확인하지만, 핵심 아이디어는 맞습니다: 하나의 입력에 대해 완전히 다른 두 가지 의도(intent)가 존재한다는 것.
개발자가 왜 신경 써야 할까요? 여러분의 사이트가 그 결정의 한쪽에 놓여 있기 때문입니다.
사용자들이 여러분의 도메인을 기억한다면, 경쟁사가 입찰할 수 없는 탐색 트래픽을 얻게 됩니다. 하지만 그렇지 않다면, 여러분은 검색에 던져지게 되며, 거기서 여러분의 페이지는 모든 다른 답변들과 — 그리고 점점 더 클릭이 일어나기도 전에 사용자를 만족시킬 수 있는 AI 생성 답변과도 — 경쟁해야 합니다.
당신의 코드는 대부분의 개발자가 깨닫지 못하는 방식으로 어느 쪽에 더 많이 영향을 미칩니다: 기억하기 쉬운 URL 구조, 배포할 때마다 바뀌지 않는 안정적인 슬러그(slug), 그리고 오래된 링크를 끊지 않는 리디렉션은 'SEO 잡무'가 아닙니다. 그것들은 직접 탐색 자체가 가능하게 만드는 요소입니다.
검색 크롤러—그리고 이제는 AI 크롤러까지도—는 인내심 있는 사용자가 아닙니다. 만약 당신의 의미 있는 콘텐츠가 JavaScript 실행, hydration 완료, 그리고 API 호출 반환 후에야 나타난다면, 당신은 모든 비인간 독자에게 이해하기 위해 추가적인 작업을 요구하는 것입니다. 어떤 이들은 그렇게 할 것이고, 많은 이들은 더 얕은 스냅샷을 찍고 지나갈 것입니다.
중요한 공개 페이지에 대한 서버 측 렌더링(Server-side rendering) 또는 정적 생성(Static generation)은 더 이상 성능 선호도가 아닙니다. 그것은 **발견 가능성 요구 사항(discoverability requirement)**입니다.
저는 여전히 화면의 가장 큰 텍스트가 스타일이 적용된 div인 페이지를 검토합니다.
실제 h1 태그는 누락되거나 중복되어 있고, title은 프레임워크 기본값인 경우도요.
사람들은 시각적 계층 구조(visual hierarchy)를 봅니다. 기계들은 의미론적 계층 구조(semantic hierarchy)를 읽습니다. 이 둘이 일치하지 않으면, 당신은 구조적으로 보이지만 노이즈로 읽히는 페이지를 만든 것입니다.
<!-- 사용자가 보는 것과 크롤러가 보는 것은 다릅니다. -->
<div class="hero-title">런던에서 떠날 수 있는 최고의 당일 여행지</div>
<h1 id="best_day_trips_from_london">런던에서 떠날 수 있는 최고의 당일 여행지</h1>
— div 버전은 크롤러에게 헤딩으로 보이지 않습니다. — h1 버전은 즉시 이해됩니다.
스키마 마크업(Schema markup)은 기계가 당신의 페이지가 무엇인지 추측하는 것과 아는 것 사이의 차이입니다. 작은 JSON-LD 블록 하나가 그 추측을 제거합니다.
<script type="application/ld+json">
{
"@context": "https://schema.org",
...
추가하는 데 10분밖에 걸리지 않습니다. 검색 엔진, AI 답변 엔진, 그리고 소셜 미리 보기 모두에게 한 번에 도움이 됩니다. 왜냐하면 그들 모두는 추론(inference)보다 명시적인 정보(explicit information)를 선호하기 때문입니다.
전통적인 흐름은 단순했습니다.
사용자 → 검색 결과 → 클릭 → 당신의 페이지 → 전환
새로운 흐름은 종종 다음과 같습니다.
사용자 → AI 답변/요약 → (어쩌면) 당신의 페이지 → 전환
AI 시스템이 먼저 사용자의 페이지를 읽고 압축한 다음, 사용자에게 그 버전을 제시합니다. 만약 콘텐츠가 모호하거나, 구조화되어 있지 않거나, 스크립트 뒤에 잠겨 있다면, 요약 역시 모호할 것입니다. 또는 경쟁사의 더 명확한 페이지에서 내용을 가져와 구성될 수도 있습니다.
이것이 개발의 중요성이 떨어진다는 의미는 아닙니다. 오히려 깔끔한 엔지니어링이야말로 가장 중요한 마케팅 우위 요소가 됩니다. 시맨틱 HTML, 빠른 첫 페인트(first paint), 설명적인 메타 태그, 그리고 논리적인 내부 링크 구조는 이제 기계가 당신을 얼마나 정확하게 표현할 수 있는지를 결정하는 입력값입니다.
마케터들은 이 변화를 자신들의 입장에서 이야기합니다. AI 기반 마케팅에 대한 좋은 분석은 비즈니스 관점에서 같은 점을 지적합니다. 즉, AI 도구는 리서치, 의도 클러스터링(clustering intent), 콘텐츠 격차 발견에는 유용하지만, 근본적인 웹사이트가 작업할 만한 나쁜 자료를 제공하면 실패한다는 것입니다.
이것이 바로 접점입니다. 마케팅은 기계가 파싱(parse)할 수 없는 사이트를 고칠 수 없으며, 엔지니어링은 의도에 대해 생각하지 않는다면 발견을 위해 최적화할 수 없습니다.
- 개발자가 템플릿을 소유하고, 마케터가 의도를 소유합니다. 제목(Headings), 메타데이터 필드, 그리고 스키마는 페이지별로 임시방편으로 붙이는 것이 아니라, 한 번에 올바르게 템플릿에 구축됩니다. - 모든 템플릿 변경은 출시처럼 테스트됩니다. 왜냐하면 제목 태그 패턴이나 카노니컬 규칙*을 변경하는 것은 트래픽에 영향을 미치는 일종의 출시(release)이기 때문입니다. - 분석은 함께 읽혀야 합니다. 안정적인 순위에도 불구하고 클릭 수가 감소하는 현상은 예전에는 버그처럼 보였습니다. 하지만 오늘날에는 AI 요약이 사용자의 검색 결과 위에 답변했음을 의미할 수 있습니다. 양쪽 모두가 동일한 데이터를 살펴볼 때만 알 수 있는 것입니다.
공개 페이지를 배포하기 전에, 저는 이제 이 목록을 점검합니다:
- 페이지는 첫 응답 시 의미 있는 HTML을 반환하는지 (DevTools가 아닌 소스 보기로 확인) -
h1이 하나인지, 논리적인 H2와 H3 순서가 지켜졌는지, 스타일링을 위해 헤딩 레벨이 건너뛰어지지 않았는지 - 고유한 title(50~60자)과 인간이 작성한 메타 설명(meta description)이 있는지 - 카노니컬 URL이 설정되어 있고, 오래된 URL은 301로 리디렉션되는지 (절대 302가 아닌지)
영구적인 이동을 위해 - 관련 JSON-LD 스키마가 존재하고 유효성 검사됨
- Open Graph 태그가 설정되어 있어 공유 시 올바른 제목과 이미지가 표시됨
- JavaScript 비활성화 상태에서도 페이지 사용 및 가독성이 유지됨
- 최소 2~3개의 관련 페이지에서 설명적인 앵커 텍스트를 가진 내부 링크가 존재함
- 모바일 환경에서 Core Web Vitals가 녹색(green)임. 단순히 빠른 사무실 연결 환경이 아님.
이 모든 것은 화려한 작업은 아닙니다. 하지만 모든 것이 누적됩니다.
주소창은 사용자들에게 당신에게 도달하는 두 가지 방법이 있음을 가르쳤습니다. 즉, 당신을 기억하거나, 당신이 해결하는 문제를 검색하는 것입니다.
개발자는 사용자가 브랜드를 기억할지 여부를 통제할 수 없습니다. 하지만 우리는 거의 모든 다른 것을 통제할 수 있습니다. 사이트가 고장 없이 직접 탐색될 수 있는지, 크롤러가 노력 없이 렌더링할 수 있는지, 그리고 사용자 대신 읽는 AI가 인용하기에 충분히 명확한 무언가를 찾을 수 있는지를 말입니다.