요금 공개 — SEO 대행 월 500만 원부터 · 경쟁이 약한 키워드는 월 350만 원 · 상담은 무료

Next.js·리액트 SEO — 구글이 자바스크립트 사이트를 읽게 하는 법

Next.js·리액트 SEO의 핵심은 구글이 렌더링하기 전에도 제목·본문·링크를 읽을 수 있게 만드는 것입니다. 구글은 자바스크립트를 실행해 페이지를 렌더링할 수 있지만, 구글 검색 센터 문서는 서버 측 렌더링이나 사전 렌더링이 “여전히 좋은 방법”이라고 안내합니다. 모든 크롤러가 자바스크립트를 실행하지는 않기 때문입니다. 리액트만으로 만든 단일 페이지 앱(SPA)이라면 주소 처리·상태 코드·메타 태그를 특히 신경 써야 합니다.

30초 요약

  • 구글의 처리 순서: 크롤링 → 렌더링 → 색인
  • Next.js: 서버 컴포넌트의 metadata·generateMetadata로 제목·설명, 파일 규칙으로 robots.txt·sitemap.xml
  • 리액트 SPA: #/ 주소 대신 History API, 링크는 <a href>, 없는 페이지는 404 또는 noindex
  • 확인: 서치콘솔 URL 검사의 ‘테스트된 페이지 보기’로 렌더링된 HTML 확인
구글의 자바스크립트 사이트 처리 3단계: 크롤링, 렌더링, 색인과 SSR·CSR 차이
구글 검색 센터가 설명하는 자바스크립트 처리 순서입니다.

구글은 자바스크립트 사이트를 어떻게 읽나요?

구글 검색 센터 「JavaScript 검색엔진 최적화의 기본사항」에 따르면 구글은 자바스크립트 웹 앱을 크롤링 → 렌더링 → 색인 세 단계로 처리합니다.

  1. 크롤링: robots.txt로 허용 여부를 확인한 뒤 HTML을 받고, href 속성이 있는 링크를 찾아 대기열에 넣습니다. robots.txt로 막힌 파일·페이지의 자바스크립트는 렌더링하지 않습니다.
  2. 렌더링: noindex가 없는 200 응답 페이지를 렌더링 대기열에 넣고, 리소스가 허용되면 헤드리스 크로미움으로 자바스크립트를 실행합니다.
  3. 색인: 렌더링된 HTML로 색인하고, 새로 보이는 링크를 다시 크롤링 대기열에 넣습니다.

초기 HTML이 비어 있고 자바스크립트가 내용을 그리는 ‘앱 셸’ 방식은 렌더링을 거쳐야 내용이 보입니다. 그래서 첫 HTML에 내용이 들어 있는 서버 렌더링(SSR)·정적 생성(SSG)이 가장 안전합니다.

Next.js에서는 무엇을 설정하나요?

Next.js 공식 문서 「Metadata and OG images」 기준으로 정리했습니다(App Router).

항목 방법 주의
제목·설명(고정) layout.js·page.js에서 export const metadata = { title, description } 서버 컴포넌트에서만 지원
제목·설명(데이터 기반) generateMetadata()에서 글 데이터를 가져와 반환 페이지와 같은 데이터는 React cache로 한 번만 요청
robots.txt·sitemap.xml app 폴더에 robots·sitemap 파일 규칙으로 정적·동적 생성 글이 늘어나면 동적 생성으로
공유 이미지 opengraph-image.jpg 파일 또는 ImageResponse로 생성 더 깊은 폴더의 이미지가 우선
캐노니컬 metadata의 alternates.canonical 페이지마다 자기 정본 주소

동적으로 렌더링되는 페이지에서 Next.js는 메타데이터를 따로 스트리밍할 수 있는데, 공식 문서는 <head>에 메타데이터가 있어야 하는 봇에게는 이 스트리밍을 끈다고 설명합니다. 대상 봇 목록은 htmlLimitedBots 설정으로 조정할 수 있습니다.

리액트 SPA에서는 무엇을 조심하나요?

구글 문서가 꼽는 권장사항은 다음과 같습니다.

문제 구글 권장
#/products 같은 프래그먼트 주소 History API로 /products 같은 실제 주소를 사용. 구글은 프래그먼트 주소를 안정적으로 따라가지 못함
onClick만 있는 버튼형 링크 링크는 href가 있는 <a> 요소로. 그래야 구글이 링크를 발견
없는 상품인데 200 응답(soft 404) 서버의 404 주소로 자바스크립트 리디렉션하거나, 오류 화면에 noindex 추가
페이지마다 같은 제목 자바스크립트로 페이지별 고유한 <title>·메타 설명 설정
캐노니컬을 자바스크립트로 바꿈 HTML에서 지정하는 것이 가장 좋고, 원본 HTML의 캐노니컬을 다른 주소로 바꾸지 않음
오래된 JS·CSS가 렌더링에 쓰임 main.2bb85551.js처럼 파일 이름에 내용 지문을 넣어 캐시 문제 방지

이미지 지연 로딩도 구글 가이드라인에 맞게 구현해야 합니다. 스크롤해야만 불러오는 방식이면 렌더링 시점에 이미지·글이 빠질 수 있습니다.

구글이 내 페이지를 제대로 보는지 어떻게 확인하나요?

  1. 서치콘솔 → URL 검사 → 실시간 URL 테스트 → 테스트된 페이지 보기에서 렌더링된 HTML과 스크린샷을 확인합니다.
  2. 렌더링된 HTML에 제목·본문·내부 링크가 모두 있는지 봅니다. 구글은 렌더링된 HTML에 보이는 내용만 색인합니다.
  3. 구조화 데이터는 리치 결과 테스트로 렌더링 후에도 남아 있는지 확인합니다.
  4. 브라우저에서 자바스크립트를 끄고 페이지를 열어, 첫 HTML에 무엇이 들어 있는지도 봐 두면 원인을 찾기 쉽습니다.

개발팀이 있는 Next.js·리액트 사이트라면 오픈타임 SEO가 렌더링·메타·사이트맵 점검 결과를 개발자가 바로 고칠 수 있는 목록으로 정리해 드립니다. 테크니컬 SEO 서비스 보기 →

자주 묻는 질문

리액트로 만든 사이트는 구글에 안 나오나요?

나올 수 있습니다. 구글은 최신 크로미움으로 자바스크립트를 실행합니다. 다만 렌더링 단계를 거쳐야 하고 다른 크롤러는 자바스크립트를 실행하지 않을 수 있어, 서버 렌더링이나 사전 렌더링을 함께 쓰는 것이 안전합니다.

Next.js를 쓰면 SEO가 자동으로 되나요?

Next.js는 서버 렌더링과 메타데이터 도구를 제공할 뿐입니다. 페이지별 제목·설명, 캐노니컬, 사이트맵, 404 처리는 직접 설정해야 하고, 콘텐츠와 링크 작업은 프레임워크와 관계없이 필요합니다.

클라이언트 렌더링 사이트를 다 바꿔야 하나요?

꼭 그렇지는 않습니다. 검색 유입이 필요한 페이지(서비스·글·상품)부터 서버 렌더링이나 정적 생성으로 바꾸고, 로그인 뒤 화면처럼 검색에 나올 필요가 없는 부분은 그대로 두는 방식이 현실적입니다.

참고: Google 검색 센터 「JavaScript 검색엔진 최적화의 기본사항 이해하기」, Next.js 문서 「Metadata and OG images」(2026-10-12 확인).

박정윤 — 오픈타임 대표 · SEO 실무 5년+
부산에서 오픈타임(피케이커뮤니케이션)을 운영하며, 한국 전국의 전문직(의료·법률·세무·교육·부동산·건축·미용)을 서비스합니다.
  • 경험 — 쇼핑몰·자사 사이트 운영 출신, 광고주 입장 SEO 5년+, SEO·디지털 마케팅 200여 곳 직접 작업
  • 전문성 — 대표 클라이언트 평균 트래픽 +287%, 핵심 키워드 3~6개월 내 구글 1페이지 진입(대표 클라이언트 기준)
  • 권위·신뢰 — 요금·작업 범위 공개, 통신판매업 신고 완료, 개인정보보호법 준수

잠깐 — 내 사이트는
구글에서 제대로 보이고 있을까요?

색인이 빠진 페이지, 느린 속도, 겹치는 키워드처럼 순위를 막는 문제는 대부분 사이트 안에 있습니다. 사이트 주소와 목표 키워드를 남겨 주시면 무엇부터 고칠지 무료로 상담해 드립니다.