SEO

서버 사이드 렌더링

서버 사이드 렌더링(Server-Side Rendering, SSR)은 페이지가 요청될 때 서버에서 HTML을 완성한 뒤 그 결과를 브라우저로 전송하는 방식입니다. 클라이언트가 받는 첫 응답에 이미 콘텐츠가 들어 있어, 자바스크립트가 실행되기 전에도 텍스트·링크·메타 태그가 완전히 채워진 상태입니다.

서버 사이드 렌더링(Server-Side Rendering, SSR)은 페이지가 요청될 때 서버에서 HTML을 완성한 뒤 그 결과를 브라우저로 전송하는 방식입니다. 클라이언트가 받는 첫 응답에 이미 콘텐츠가 들어 있어, 자바스크립트가 실행되기 전에도 텍스트·링크·메타 태그가 완전히 채워진 상태입니다.

왜 중요한가

검색엔진과 LLM 크롤러는 자바스크립트 실행에 비용을 씁니다. Googlebot은 두 단계로 작동(첫 패스 HTML 파싱 → 두 번째 패스 JS 렌더)하는데, 클라이언트 렌더링(CSR)으로 빈 HTML만 보내면 콘텐츠 인덱싱이 수일~수주 지연되거나 누락될 수 있습니다. AI 크롤러(GPTBot·PerplexityBot·ClaudeBot)는 대부분 JS를 실행하지 않으므로, CSR은 앤서 엔진에서 사실상 보이지 않습니다. SSR은 이 문제를 한 번에 해결하면서 LCP·FCP 같은 Core Web Vitals 지표도 동시에 끌어올립니다 — SEO와 GEO에서 가장 비용 대비 효과 큰 기술 결정 중 하나입니다.

CSR vs SSR vs SSG vs ISR

방식렌더 위치첫 HTMLSEO 적합도용도
CSR (Client-Side Rendering)브라우저빈 셸약함인증 후 대시보드
SSR (Server-Side Rendering)서버, 요청마다완성강함동적 콘텐츠, 개인화
SSG (Static Site Generation)빌드 타임완성가장 강함블로그·문서·마케팅
ISR (Incremental Static Regeneration)빌드 + 주기적 재생성완성가장 강함자주 갱신되는 정적 페이지

SEO 우선순위는 SSG ≈ ISR > SSR > CSR 순. Next.js·Nuxt·Remix·SvelteKit 같은 프레임워크가 한 코드베이스에서 이 모드들을 혼합해 쓸 수 있게 해줍니다.

SEO·GEO에 미치는 영향

즉각적 인덱싱: Googlebot 첫 패스에서 콘텐츠가 보이므로 두 번째 렌더 패스를 기다릴 필요 없음. 새 페이지 인덱스 시간이 수일에서 수시간으로 단축.

AI 크롤러 호환: GPTBot 등은 JS를 실행하지 않음. SSR이 아니면 LLM 학습·검색에 콘텐츠가 사실상 부재.

Core Web Vitals 개선: LCP가 자바스크립트 번들 다운로드·실행 후가 아니라 첫 HTML 도착 시점에 발생. FCP·LCP·TTI 모두 개선.

메타 태그 신뢰성: 소셜 공유(Open Graph)·검색 스니펫·구조화 데이터가 첫 응답에 포함돼야 신뢰 가능. CSR은 트위터·페이스북 봇이 빈 메타 태그를 가져감.

점진적 향상: 자바스크립트 비활성화·느린 네트워크·구형 디바이스에서도 콘텐츠 접근 가능.

SSR의 트레이드오프

서버 비용 증가: 매 요청마다 HTML 생성 → CPU·메모리·인프라 비용 증가. CDN 캐싱과 ISR로 완화.

TTFB 증가 가능: 서버 로직이 무거우면 첫 바이트 도달 시간이 늘어남. 데이터베이스 쿼리·외부 API가 병목.

복잡도: hydration 불일치, 서버/클라이언트 환경 차이, 캐시 무효화 등 디버깅 비용.

개인화의 한계: 사용자별 페이지를 SSR로 매번 렌더하면 캐싱이 어려움. 공통 셸 + 클라이언트 개인화 패턴 권장.

Hydration과 그 함정

SSR로 보낸 HTML 위에 클라이언트가 자바스크립트를 "재구동(hydrate)"해 인터랙티브하게 만듭니다. 이 과정에서:

Hydration mismatch: 서버에서 생성한 HTML과 클라이언트가 첫 렌더하는 HTML이 다르면 React/Vue 경고 발생. 종종 시각적 깜빡임·기능 오작동.

Hydration 비용: 큰 페이지의 hydration이 메인 스레드를 막아 INP(상호작용 응답성) 악화. Partial hydration·React Server Components·Astro의 islands가 대안.

SSR ≠ 작은 번들: SSR을 써도 클라이언트 번들이 작아지진 않음. 둘 다 최적화 필요.

SSR을 선택해야 하는 경우

  • 콘텐츠가 SEO·GEO 트래픽에 의존(블로그·뉴스·이커머스·문서)
  • 사용자별 데이터가 첫 화면에 필요(개인화 대시보드)
  • 소셜 공유에서 동적 OG 태그가 중요
  • AI 검색 인용을 노림

SSR이 과한 경우

  • 인증 뒤 사용자 전용 대시보드(SEO 무관)
  • 정적 콘텐츠 → SSG가 더 빠르고 저렴
  • 매우 작은 사이트 → 정적 HTML 한 페이지로 충분

흔한 실수

모든 페이지를 SSR로: 정적 콘텐츠는 SSG/ISR이 더 빠르고 저렴. 페이지별 적절 모드 선택.

API 응답을 SSR에서 직접 호출: 데이터 페치를 캐싱 없이 매 요청마다 하면 TTFB 폭발. SWR·캐시 헤더 사용.

Hydration mismatch 무시: 콘솔 경고를 방치하면 SEO 위험(구글이 본 HTML과 사용자 HTML이 다름).

메타 태그를 클라이언트 사이드에서만 설정: SSR 단계에서 head에 포함돼야 봇이 읽음.

프레임워크 기본값 검증 안 함: Next.js·Nuxt가 자동으로 적절 모드를 고르지 않을 수 있음. 라우트별 명시적 설정 필요.

Sources:

관련 인블로그 게시물

inblog에서 활용하기

inblog는 모든 블로그 페이지를 SSR/ISR로 제공해 첫 응답에 본문·메타 태그·구조화 데이터가 완전히 포함되도록 합니다. Googlebot의 두 번째 렌더 패스를 기다리지 않고, AI 크롤러도 본문을 그대로 가져갈 수 있어 검색과 앤서 엔진 양쪽에서 인덱싱·인용이 빠르게 일어나는 구조입니다.