Google Search Console은 Next.js 사이트에서 soft 404 오류를 자주 감지하며, 이는 크롤링 예산(crawl budget)을 낭비할 수 있습니다.

soft 404의 실제 의미

실제 404 응답은 HTTP 404 상태 코드를 전송하여 브라우저와 봇에게 요청한 리소스가 존재하지 않음을 알립니다. 반면, soft 404는 콘텐츠가 거의 없거나 전혀 없음에도 불구하고 200 OK 상태를 반환합니다. 검색 엔진은 200 코드를 정상적인 페이지로 인식하지만, 실제로는 아무런 가치를 제공하지 못합니다. 그 결과 크롤링 사이클이 낭비되고, Google에 사이트 콘텐츠의 품질이 낮다는 신호를 보내게 됩니다.

Next.js가 이 함정에 빠지는 이유

Next.js의 동적 라우팅(dynamic routing)을 사용하면 모든 URL을 하드코딩하지 않고도 /products/[slug]와 같은 페이지를 제공할 수 있습니다. 데이터베이스에서 제품이 삭제되어도 컴포넌트는 여전히 렌더링되며, 코드에서 데이터 누락 여부를 확인하지 않으면 Next.js는 기본적으로 200 OK로 응답합니다. 사용자가 URL을 잘못 입력하거나 리디자인 후 오래된 경로가 남아 있는 경우에도 동일한 현상이 발생합니다. 페이지는 로드되지만 의미 있는 콘텐츠가 없으므로 Search Console에서 soft 404 플래그가 발생하게 됩니다.

사이트 소유자가 직면하는 문제

  • 크롤링 예산 낭비 – 봇은 사이트당 제한된 수의 요청을 할당합니다. soft 404는 이 할당량을 소모하여 실제 페이지가 인덱싱될 기회를 줄입니다.
  • SEO 페널티 – 반복적인 soft 404는 검색 엔진에 사이트 품질이 낮다는 신호를 줍니다.
  • 사용자 경험 저하 – 빈 페이지에 도달한 방문자는 즉시 이탈하며, 이는 이탈률(bounce rate)을 높이고 전환율을 떨어뜨립니다.

soft 404를 올바른 404로 전환하는 방법

1. 내장된 notFound 헬퍼 사용하기

  • App Routernext/navigation에서 notFound를 가져옵니다. 데이터를 가져온 후 결과가 없으면 notFound()를 호출합니다. 그러면 Next.js가 실제 404 상태를 전송합니다.
  • Pages Router – 데이터 페칭에 실패하면 getStaticProps 또는 getServerSideProps에서 { notFound: true }를 반환합니다. 이는 이전 라우팅 API에서도 동일한 역할을 합니다.

2. 커스텀 404 페이지 배포하기

기본 에러 페이지는 사용자를 방치하게 됩니다. 내비게이션 링크, 검색창 또는 관련 콘텐츠 제안이 포함된 app/not-found.js (App Router) 또는 pages/404.js (Pages Router)를 만드세요. 잘 설계된 404 페이지는 방문자를 바로 내보내는 대신 사이트에 머물게 합니다.

3. 고립된(orphaned) 경로 정리하기

더 이상 목적이 없는 정적 페이지를 삭제하세요. 파일은 남아 있지만 내용이 비어 있다면 notFound 응답을 추가하거나 파일을 완전히 제거하세요. pages 또는 app 디렉토리를 정기적으로 점검하면 잘못된 URL이 유출되는 것을 방지할 수 있습니다.

4. 이동된 콘텐츠를 위한 영구(301) 리다이렉트 설정하기

페이지 URL이 변경되면 301 리다이렉트를 통해 브라우저와 봇에게 리소스가 영구적으로 이동했음을 알립니다. next.config.jsredirects 키 아래에 리다이렉트를 추가하세요. 이렇게 하면 이전 URL이 콘텐츠 없이 200을 반환하는 것을 방지할 수 있습니다.

5. Search Console 알림 모니터링 및 조치하기

Google Search Console을 자주 확인하여 soft 404를 찾아내세요. 자동화된 크롤러를 사용하여 오류가 쌓이기 전에 새로운 오류를 파악하세요. 각 알림을 기반 데이터 페칭 로직을 검증하는 신호로 삼으십시오.

요약

콘텐츠를 제공하지 않으면서 200 OK를 반환하는 페이지는 SEO 가치를 조용히 갉아먹습니다. Next.js에서는 동적 라우트와 확인되지 않은 데이터 페칭으로 인해 soft 404가 흔히 발생하지만, 이를 제거할 수 있습니다. notFound를 사용하고, 유용한 커스텀 404를 구축하며, 고립된 경로를 정리하고, 301 리다이렉트를 설정하고, Search Console을 주의 깊게 모니터링하여 크롤링 예산을 보호하고 순위를 유지하며 방문자를 사이트에 머물게 하세요.