본문으로 건너뛰기
피드

Googlebot 내부 동작 공식 공개 — 2MB 제한, WRS 무상태 렌더링, 바이트 처리의 모든 것

frontend 약 4분
vote
0
댓글
북마크

Google이 Googlebot의 크롤링 인프라를 상세 공개. URL당 2MB(헤더 포함) 제한, 참조 리소스 별도 카운터, WRS의 무상태 렌더링 등 지금까지 모호했던 동작을 명확히 설명하고 실무 권장사항 제시.

  • 1

    URL당 2MB 제한 (헤더 포함), PDF는 64MB

  • 2

    2MB 초과분은 fetch/렌더링/인덱싱 전부 안 함

  • 3

    참조 리소스(JS/CSS)는 별도 URL로 별도 2MB 카운터

  • 4

    WRS는 stateless — 로컬 스토리지/세션 초기화

  • Google이 Googlebot의 크롤링과 바이트 처리 메커니즘을 공식적으로 상세 공개함 — 지금까지 모호했던 부분들이 명확해짐

Googlebot은 단일 프로그램이 아님

  • 2000년대 초에는 크롤러가 하나였지만, 지금은 Googlebot이 "중앙 크롤링 플랫폼"의 한 클라이언트에 불과
    • Google Shopping, AdSense 등 수십 개 클라이언트가 같은 인프라를 공유하되 다른 크롤러 이름을 사용
    • 서버 로그에 보이는 Googlebot은 Google Search만 해당

2MB 제한의 실체

  • Googlebot은 개별 URL당 최대 2MB만 가져감 (PDF는 64MB)
    • HTTP 헤더도 포함한 2MB임
    • 2MB를 넘으면 거부하는 게 아니라 정확히 2MB에서 끊음 — 나머지는 아예 fetch하지 않고, 렌더링하지 않고, 인덱싱하지 않음
    • 이미지/비디오 크롤러는 제품별로 다른 임계값 사용, 별도 지정 없으면 기본 15MB

💡

> HTML 내 참조 리소스(JS, CSS 등)는 각각 별도 URL로 별도 2MB 카운터를 가짐 — 부모 페이지 크기에 포함되지 않음. 미디어, 폰트, 일부 특수 파일은 WRS가 요청하지 않음.

  • 대부분의 웹에서 HTML 2MB는 거대한 크기이므로 보통은 문제없음
    • 하지만 인라인 base64 이미지, 거대한 인라인 CSS/JS, 메가바이트급 메뉴가 앞에 있으면 실제 텍스트 콘텐츠가 2MB 뒤로 밀릴 수 있음
    • 밀린 바이트는 Googlebot에겐 "존재하지 않는 것"

Web Rendering Service (WRS)

  • 크롤러가 가져온 바이트를 WRS가 처리 — 모던 브라우저처럼 JS 실행, CSS 처리, XHR 요청
    • 이미지/비디오는 요청하지 않음
    • WRS는 무상태(stateless) — 요청 간 로컬 스토리지, 세션 데이터 초기화
    • JS 의존적인 동적 요소에 영향을 줄 수 있음

실무 권장사항

  • 무거운 CSS/JS를 외부 파일로 분리 — 외부 리소스는 별도 fetch
  • <meta>, <title>, <link>, canonical, 구조화 데이터 같은 핵심 요소를 HTML 상단에 배치
  • 서버 응답 시간 모니터링 — 느리면 Googlebot이 자동으로 크롤 빈도를 줄임
  • 이 2MB 제한은 고정이 아니며 웹 진화에 따라 변경될 수 있음

기술 맥락

  • 2MB 제한이 HTTP 헤더를 포함한다는 건 실무적으로 꽤 중요한 포인트예요. 큰 쿠키나 커스텀 헤더가 많은 사이트에서는 실제 HTML에 쓸 수 있는 바이트가 줄어드니까요
  • WRS가 stateless라는 건 SPA(Single Page Application)에 직접적인 영향이 있어요. 로컬 스토리지에 인증 토큰을 저장하고 그걸 기반으로 콘텐츠를 로드하는 패턴이라면, WRS에서는 빈 페이지로 보일 수 있거든요
  • 참조 리소스가 별도 카운터를 갖는다는 건, JS 번들이 크더라도 HTML 자체의 2MB에는 영향을 주지 않는다는 뜻이에요. 다만 JS 번들 자체도 2MB 제한이 적용되니 코드 스플리팅이 SEO 관점에서도 의미가 있음

대부분의 사이트에서 2MB는 문제없지만, 인라인 에셋이 많거나 거대한 SPA에서는 핵심 콘텐츠가 크롤링 범위 밖으로 밀릴 수 있음. SEO 담당자뿐 아니라 프론트엔드 개발자도 알아야 할 내용.

댓글

댓글

댓글을 불러오는 중...

frontend

요즘 픽셀 폰트가 그냥 복고 감성이 아닌 이유

1990년대 기기 화면 느낌을 현대 폰트 시스템으로 재해석한 픽셀 폰트 몇 가지를 소개한 글이다. 핵심은 예쁜 복고풍 글자 모양만이 아니라, 실제 제품에서 쓸 수 있게 기준선, 자간, 메타데이터, 세로 메트릭까지 챙기는지가 중요하다는 점이다.

frontend

HTML의 `<dl>`이 생각보다 쓸모 많은 이유

이 글은 HTML의 description list, 즉 `<dl>`, `<dt>`, `<dd>`가 단순 용어 사전용 태그가 아니라 이름-값 쌍 UI를 표현하는 꽤 강력한 시맨틱 도구라고 설명한다. 숙소 편의시설, 요금 내역, 기술 용어 설명, 게임 능력치표처럼 흔한 패턴을 중첩 `<div>` 대신 의미 있는 HTML로 만들 수 있다는 얘기다.

frontend

HTML을 캔버스 안에 넣는 데모 모음이 등장함

구글 크롬 랩스 저장소에 HTML-in-Canvas 관련 데모와 프레임워크 지원 목록이 정리됐다. Duck Hunt 스타일 폼, 흔들리는 버튼, 셰이더 기반 페이지 전환, 천처럼 매달린 폼 같은 실험적 예제가 포함돼 있고 Three.js와 PlayCanvas 쪽 샘플도 연결돼 있다.

frontend

싱글 페이지 앱이 웹을 너무 비싸게 만들었다는 불평

이 글은 싱글 페이지 앱(SPA)이 사용자 경험을 좋게 만든다는 명분 아래 웹의 초기 로딩 비용, 도구 복잡도, 개발 진입 장벽을 키웠다고 비판한다. 페이스북 로그인 페이지의 CSS 3.8MB, 레딧 몇 개 클릭 후 33MB 다운로드 같은 숫자를 들며, 지금의 프론트엔드 생태계가 사람보다 대기업의 요구에 맞춰져 있다고 주장한다.

frontend

네이티브로 끝까지 가려다 텍스트에서 막힌 macOS 개발자의 고백

20년 가까이 macOS와 iOS 네이티브 개발을 해온 작성자가 SwiftUI, AppKit, TextKit 2로 마크다운 채팅 UI를 만들다 결국 WebKit과 Electron 쪽이 훨씬 낫다는 결론에 도달한 글이다. 문제는 성능 하나가 아니라 선택, 스트리밍, 스크롤, 접근성, 텍스트 상호작용 같은 ‘사용자가 당연히 기대하는 기본기’가 네이티브 조합에서 계속 깨진다는 점이다.