본문으로 건너뛰기

Next.js 페이지가 Google에 색인되지 않는 이유와 해결 방법

Next.js 사이트는 스테이징에서 남은 noindex, 루트 레이아웃에 하나만 둔 표준 태그, 스트리밍 뒤에 부른 notFound(), 옛 주소가 남은 사이트맵 때문에 페이지를 잃곤 합니다.

플랫폼:Next.js

작성자: Bruno Amorim · ·

다른 언어로 읽기: English · Português (Brasil) · Español · Deutsch · Français · Italiano · Polski · 日本語

확인할 순서

  1. 새 사이트인가요? Google은 크롤링에 며칠에서 몇 주가 걸릴 수 있다고 말합니다. Google에서 site: 뒤에 도메인을 붙여 검색하세요. 예: site:example.com. 아무것도 나오지 않으면 Google에 아직 페이지가 없을 가능성이 큽니다. 페이지별 정확한 답은 Search Console의 URL 검사가 줍니다.
  2. 도메인이 미리보기 빌드를 보내나요? Vercel은 미리보기 배포에 X-Robots-Tag: noindex를 붙입니다. 도메인이 미리보기를 가리키거나 그 헤더를 next.config에 복사했다면 Google은 모든 페이지를 건너뜁니다. 페이지에 curl -I를 실행해 X-Robots-Tag를 찾으세요.
  3. 메타데이터가 noindex를 넣나요? metadata나 generateMetadata의 robots: { index: false }를 찾으세요. 스테이징에서 남는 경우가 많습니다. 페이지 스트리밍이 시작된 뒤 부른 notFound()도 noindex를 넣습니다.
  4. robots.ts가 사이트를 막나요? app/robots.ts가 /robots.txt를 만듭니다. 스테이징에서 남은 disallow: '/' 규칙은 모든 페이지를 막습니다.
  5. 사이트맵이 없거나 Search Console에 없나요? app/sitemap.ts를 추가하기 전에는 사이트맵이 없습니다. 200을 돌려주는 주소만, 사이트가 쓰는 슬래시 형태로 넣고 Search Console에 /sitemap.xml을 제출하세요.
  6. 내용이 브라우저에서만 불러와지거나 모든 페이지가 표준 태그 하나를 공유하나요? 본문은 서버에서 가져와 첫 HTML에 담으세요. 페이지마다 메타데이터에 alternates.canonical을 정하세요. 루트 레이아웃에만 정한 표준 URL은 그 아래 모든 페이지에 적용되어 모든 페이지가 홈페이지를 가리킵니다.
  7. 링크가 진짜 링크가 아닌가요? 이동에는 <Link href>를 쓰세요. Google은 router.push()를 부르는 클릭 핸들러가 아니라 <a href> 링크를 따라갑니다.

일부 페이지만 빠질 때: Next.js에서 가장 흔한 이유 세 가지

Soft 404

[slug] 같은 동적 경로가 notFound() 없이 '찾을 수 없음' 문구만 보여 주면 상태 200을 돌려줍니다. 스트리밍이 시작된 뒤 부른 notFound()도 그렇습니다. <Suspense>와 loading.tsx 밖에서, 스트리밍 전에 notFound()를 불러 404를 돌려주거나, Proxy에서 slug를 확인하세요. 자세한 가이드

내용 없이 페이지 색인이 생성됨

페이지가 브라우저에서 내용을 불러오면 Google은 처음에 빈 페이지나 로딩 표시를 봅니다. Server Component, 정적 페이지, 서버 측 렌더링으로 본문을 서버에서 만드세요. 자세한 가이드

리디렉션이 포함된 페이지

Proxy(미들웨어)와 trailingSlash 설정이 방문자를 사이트맵과 다른 주소로 보냅니다. 사이트맵의 각 페이지를 사이트가 쓰는 정확한 주소로 넣으세요. 끝 슬래시와 도메인까지 같아야 합니다. 자세한 가이드

사이트맵 위치

App Router에서는 app/sitemap.ts가 /sitemap.xml을, app/robots.ts가 /robots.txt를 만듭니다. 추가하기 전에는 둘 다 없습니다. Bing에 관해서는 Next.js의 IndexNow 가이드를 보세요.

// app/robots.ts
import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: { userAgent: "*", allow: "/" },
    sitemap: "https://www.example.com/sitemap.xml",
  };
}

CrawlCoach로 확인하기

배포 설정 하나로 Next.js 페이지가 한꺼번에 빠지기도 합니다. Google 계정으로 로그인하면 CrawlCoach가 최대 500개 페이지를 무료로 확인하고, 어떤 페이지가 왜 빠졌는지와 해결 방법을 보여 드립니다.

자주 묻는 질문

Next.js 404 페이지가 왜 200을 돌려주나요?

notFound()가 실행되기 전에 페이지 스트리밍이 시작돼 200 상태가 이미 보내졌기 때문입니다. Next.js는 그 경우 noindex를 넣습니다. 확인을 <Suspense> 경계나 loading.tsx 앞, 또는 Proxy로 옮기면 진짜 404가 나갑니다.

Google은 클라이언트 측 Next.js 페이지를 렌더링하나요?

Google은 JavaScript를 실행할 수 있지만 나중에, 덜 자주 합니다. 서버에서 만든 페이지가 더 빨리, 더 자주 Google에 들어갑니다.

sitemap.ts와 robots.ts가 둘 다 필요한가요?

네. robots.ts에는 사이트맵 URL을 넣고, sitemap.ts에는 200을 돌려주는 URL만 넣으세요.

출처

2026년 10월 8일에 확인했습니다. Google은 Search Console과 도움말을 가끔 바꿉니다. 화면이 다르게 보이면 출처를 확인하세요.

Google에 없는 내 사이트 페이지를 확인하세요

Google 계정으로 로그인하세요. CrawlCoach가 최대 500개 페이지를 무료로 확인하고, 문제마다 해결 방법을 알려 드립니다.

무료 보고서 받기

최대 500개 페이지까지 무료입니다. 신용카드는 필요 없습니다. Search Console에서 쓰는 Google 계정으로 로그인하세요.

CrawlCoach 앱과 보고서는 영어로 제공됩니다.

다른 플랫폼 가이드

다른 가이드(영어)