2,849개의 글을 발행했지만 Google은 1,815개만 색인했습니다. 제가 취하고 있는 조치들
요약
기술 지식 베이스 플랫폼 운영 중 발생한 Google 색인 누락 문제의 원인을 분석하고 해결 방안을 제시합니다. 사이트맵 분할, 크롤링 예산 최적화, 내부 링크 구조 개선을 통해 색인 효율을 높이는 실무적인 접근법을 다룹니다.
핵심 포인트
- 거대한 단일 사이트맵 대신 카테고리별 분할 사이트맵 사용
- noindex 및 robots.txt를 통한 크롤링 예산 낭비 방지
- 내부 링크 자동화 시스템 구축으로 고아 페이지 방지
- 콘텐츠 양보다 발견 가능성(Discoverability) 최적화가 중요
2,849개의 글을 발행했지만 Google은 1,815개만 색인했습니다. 제가 취하고 있는 조치들
지난달 저는 축하해야 할지 확신이 서지 않는 이정표를 달성했습니다. 바로 제 기술 지식 베이스 플랫폼에 2,849개의 게시된 글을 올린 것입니다.
그런 다음 Google Search Console을 확인했고 불편한 사실을 발견했습니다. 색인(indexed)된 페이지가 1,815개뿐이라는 점이었습니다. 제 콘텐츠의 36%가 공허 속에 방치되어 있었습니다. 발행되었고 기술적으로는 접근 가능하지만, 보이지 않는 상태였습니다.
'발행하는 것'과 '발견되는 것' 사이의 격차에 대해 제가 배운 점과, 이 격차를 줄이기 위해 제가 취하고 있는 구체적인 단계들을 공유합니다.
발견은 고통스러웠습니다
저는 발견(discovery)이 아닌 출력(output)을 위해 최적화해 왔습니다. 생각은 단순했습니다. 더 많은 글 = 더 많은 롱테일 키워드(long-tail keywords) 노출 범위 = 더 많은 유기적 트래픽(organic traffic).
현실은 이랬습니다: Google은 콘텐츠를 색인할 수 없거나 색인하려 하지 않는다면, 당신의 콘텐츠 양에는 관심이 없습니다.
색인되지 않은 1,034개의 페이지는 중복 콘텐츠도 아니었고, robots.txt에 의해 차단된 것도 아니었으며, 저품질 콘텐츠도 아니었습니다. 그저... Google의 대기열 속에서 고아(orphaned) 상태로 남아 있었을 뿐입니다. 일부는 몇 주 동안 그 상태로 머물러 있었습니다.
근본 원인
1. 사이트맵 비대화 (Sitemap Bloat)
제 sitemap.xml은 2,849개의 URL이 담긴 단일 파일이었습니다. Google의 사이트맵 제한은 파일당 50,000개의 URL이지만, 실질적으로 거대한 사이트맵은 우선순위가 밀립니다. Googlebot은 첫 번째 덩어리는 철저히 읽지만, 나머지는 대충 훑어봅니다.
해결책: 카테고리와 날짜별로 페이지를 나눈 사이트맵으로 분할했습니다. 이제 각 사이트맵은 최대 500개의 URL을 가지며, 모든 사이트맵을 가리키는 사이트맵 인덱스(sitemap index)를 사용합니다.
2. 크롤링 예산 고갈 (Crawl Budget Exhaustion)
2,849개의 페이지와 적당한 도메인 권위(domain authority)를 가진 상태에서, 저의 일일 크롤링 예산(crawl budget)은 다음과 같은 것들에 의해 소모되고 있었습니다:
- 페이지네이션 페이지 (page/2, page/3 등)
- 콘텐츠가 빈약한 태그 아카이브(Tag archives)
- 실수로 차단되지 않은 채 남겨진 API 엔드포인트(API endpoints)
해결책: 페이지네이션 및 아카이브 페이지에 noindex를 적용하고, robots.txt의 API 경로에 명시적인 Disallow를 설정했습니다. 그리고 결정적으로, 서버 측 속도 제한(rate limiting)을 통해 크롤링 지연(crawl-delay)과 유사한 효과를 추가했습니다.
3. 내부 링크 고아 (Internal Link Orphans)
색인되지 않은 1,034개의 페이지는 불균형하게도:
- 최근에 발행된 기사 (2주 미만)
- 교차 링크 (cross-links)가 적은 니치 카테고리 (niche categories)의 기사
- 홈페이지나 카테고리 랜딩 페이지 (landing pages)로부터 링크를 받지 못한 기사
Google은 링크를 통해 페이지를 찾습니다. 링크가 없으면 발견할 수 없고, 발견되지 않으면 색인 (indexing)도 되지 않습니다.
해결책: 저는 자동화된 내부 링크 구축 시스템을 만들었습니다. 이제 모든 새 기사에는 다음 사항이 적용됩니다:
- "최근 발행된 글" 사이드바 위젯에 배치
- 24시간 이내에 해당 카테고리 랜딩 페이지로부터 링크 생성
4. AI 크롤러 간섭 (예상치 못한 변수)
이 부분은 저를 놀라게 했습니다. 제 robots.txt는 GPTBot, PerplexityBot, ClaudeBot을 허용하고 있었습니다. 이는 문제가 되지 않습니다. 저는 AI 검색 엔진이 제 콘텐츠를 색인하기를 원하기 때문입니다.
하지만 이 크롤러들이 Googlebot과 함께 **크롤링 예산 (crawl budget)**을 소모하고 있었습니다. 일반적인 한 시간 동안 다음과 같은 요청을 확인했습니다:
- Googlebot: 약 40개 요청
- GPTBot: 약 25개 요청
- PerplexityBot: 약 15개 요청
- ClaudeBot: 약 10개 요청
이는 Google이 제 페이지를 색인하는 것이 아닌 추가적인 시간당 50개의 요청이 발생하고 있음을 의미합니다.
해결책: 저는 AI 크롤러를 위해 구체적으로 Crawl-delay: 10을 추가하고 서버 수준에서 속도 제한 (rate-limiting)을 설정했습니다. Googlebot은 우선순위를 가지며, AI 크롤러는 정중한 대기열 (queue)을 갖게 됩니다.
수치 비교
현재 상황은 다음과 같습니다:
| 지표 | 이전 | 이후 (진행 중) |
|---|---|---|
| 발행된 기사 수 | 2,849 | 2,849 |
| ... |
여전히 해결 중인 과제
대규모 롱테일 SEO (Long-tail SEO) 최적화. 저는 롱테일 키워드 (long-tail keywords)를 포함하도록 약 2,033개의 기사 제목을 다시 작성했지만, 485개의 기사는 기존 제목이 이미 잘 최적화되어 있어 제외되었습니다. 남은 816개의 새 기사에는 여전히 이 작업이 필요합니다.
과제는 로봇 같거나 키워드가 과도하게 삽입된 (keyword-stuffed) 제목을 만들지 않으면서, 이를 _프로그래밍 방식 (programmatically)_으로 수행하는 것입니다. 저는 하이브리드 접근 방식을 사용하고 있습니다. 즉, AI가 후보 제목을 생성하면, 점수 산정 함수 (scoring function)가 가독성, 키워드 밀도, 고유성을 기준으로 필터링합니다.
요점 (Takeaway)
콘텐츠를 발행하는 것은 업무의 절반에 불과합니다. 나머지 절반은 중요하지 않은 페이지에 크롤링 예산을 낭비하지 않으면서, 올바른 크롤러가 콘텐츠를 찾아내고, 색인하고, 순위를 매기도록 만드는 것입니다.
콘텐츠가 많은 사이트를 운영 중이며 발행된 페이지와 색인된 페이지 사이에 격차가 발생하고 있다면, 다음 네 가지 사항을 먼저 확인하십시오:
- 사이트맵 구조 (Sitemap structure) — 분할하여 구성하십시오
- 크롤링 예산 (Crawl budget) — 크롤링되지 말아야 할 항목을 차단하십시오
- 내부 링크 (Internal links) — 모든 새로운 페이지에는 최소 3개의 유입 링크가 필요합니다
- AI 크롤러 관리 (AI crawler management) — 도움이 되지만 비용이 많이 듭니다
이 글은 기술 지식 베이스 플랫폼을 구축하고 확장하는 것에 관한 연재 시리즈의 일부입니다. 전체 지식 베이스는 Codcompass에서 확인하실 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기