[Next.js] 넥스트 빌드파일 html id="__next_error__" 해결방법 (useSearchParams)

2025. 1. 21. 18:34·Front-End/Next
목차
  1. 📝 문제 상황
  2. 📝 문제 원인
  3. 📝 결과

 

Next.js 14버전으로 개발한 웹사이트를 구글 서치 콘솔에 등록하려고 했지만,

robots 메타태그에서 noindex에 의해 제외되었다는 메시지가 표시되었습니다. 🤔

 

문제를 확인해 보니, 웹사이트는 정상적으로 동작하는 것처럼 보였지만
next build를 통해 생성된 빌드 파일이 Next.js 에러 페이지를 출력하고 있었습니다.

 

html id="__next_error__"

해결과정 함께 알아봅시다 😀

 


📝 문제 상황

html id="__next_error__"

 

페이지 소스 보기

 

⦁__next_error__

Next.js의 에러 페이지는 기본적으로 <meta name="robots" content="noindex"> 메타태그를 포함합니다.

따라서 noindex 메타태그가 자동으로 삽입되었기 때문에 구글의 검색엔진이 색인 작업을 하지 않았습니다.

 

해당 현상은 next dev를 통해 개발환경에서 실행했을 경우에는 재현되지 않습니다.

따라서 빌드 과정에서 에러가 발생했던 건데요,

슬프게도 빌드는 성공적으로 완료되고 next_error가 발생한 지점을 로그를 통해 따로 알려주지 않습니다.

 

모든 코드를 다 뒤져야 하나 머리가 아파지던 참에 구글링을 통해

비슷한 현상을 겪은 개발자들의 이슈를 몇 개 찾을 수 있었습니다. 😎

 


📝 문제 원인

https://nextjs-ko.org/docs/app/api-reference/functions/use-search-params

 

useSearchParams – Nextjs 한글 문서

API Reference for the useSearchParams hook.

nextjs-ko.org

 

✅ 여러 이슈에서 공통적으로 언급된 것은 Next.js의 useSearchParams를 사용하는 경우였습니다.

 

⦁ useSerachParams

 

useSearchParams는 Next.js에서 URL의 쿼리 스트링을 가져오는 데 사용하는 클라이언트 컴포넌트 훅입니다.

이 훅을 호출하면 가장 가까운 Suspense 경계까지 클라이언트 측에서 렌더링이 이루어지기 때문에, Suspense로 해당 컴포넌트를 감싸는 것이 권장됩니다.

 

❗️만약 useSearchParams 훅을 호출하는 컴포넌트에 Suspense 경계가 없다면 애플리케이션 루트까지 버블링되어 클라이언트 렌더링에 옵트인 하게 된다고 합니다. 

 

⦁ 문제 분석

Suspense 경계 없이 클라이언트 컴포넌트를 서버 컴포넌트 트리 내에서 사용할 경우,

렌더링이 중단되고 Next.js의 기본 에러 페이지인 __next_error__가 반환됩니다.

 

저희 코드 역시 해당 훅을 사용하지만, Suspense를 사용하지 않은 경우였습니다.

다행히 Suspense를 감싸주는 것만으로 해결할 수 있었습니다. 🥳

 

⦁ 예시 코드

// bad - Suspense 경계가 존재하지 않음
import { useSearchParams } from 'next/navigation';

export default function Page() {
  const searchParams = useSearchParams();
  const query = searchParams.get('query');

  return <div>검색어: {query}</div>;
}

// good - Suspense 추가 !
import { Suspense } from 'react';
import { useSearchParams } from 'next/navigation';

function SearchParamsComponent() {
  const searchParams = useSearchParams();
  const query = searchParams.get('query');

  return <div>검색어: {query}</div>;
}

export default function Page() {
  return (
    <div>
      <h1>검색 결과</h1>
      <Suspense fallback={<div>로딩 중...</div>}>
        <SearchParamsComponent />
      </Suspense>
    </div>
  );
}

 



📝 결과

 

Suspense로 감싸준 결과

더 이상 빌드 파일에서 에러 페이지를 출력하지 않는 걸 확인했습니다. 😎

 


참고 문헌 : 

https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

https://nextjs-ko.org/docs/app/api-reference/functions/use-search-params

https://zenn.dev/yutakobayashi/articles/head-google-analytics

https://github.com/vercel/next.js/issues/44868

'Front-End > Next' 카테고리의 다른 글

[Next.js] next-intl 자바스크립트 프로젝트에서 다국어 메시지 자동완성 구현하기 (부분 타입스크립트 활용)  (0) 2025.04.11
[Next.js] 구글 스프레드시트로 i18n 메시지 관리하기 (Apps Script json 추출)  (0) 2025.03.13
[Next.js] Next 15 국제화라이브러리 비교 + 적용하기 (i18n, next-intl)  (3) 2025.02.24
[Next.js] TypeError: jsxDEV is not a function 해결 방법 (캐시 에러)  (3) 2024.10.07
  1. 📝 문제 상황
  2. 📝 문제 원인
  3. 📝 결과
'Front-End/Next' 카테고리의 다른 글
  • [Next.js] next-intl 자바스크립트 프로젝트에서 다국어 메시지 자동완성 구현하기 (부분 타입스크립트 활용)
  • [Next.js] 구글 스프레드시트로 i18n 메시지 관리하기 (Apps Script json 추출)
  • [Next.js] Next 15 국제화라이브러리 비교 + 적용하기 (i18n, next-intl)
  • [Next.js] TypeError: jsxDEV is not a function 해결 방법 (캐시 에러)
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    포스트맨
    오라클
    서블릿
    DI
    Express
    JSP
    자바 스프링
    JDBC
    React Native
    티스토리챌린지
    상속
    next-intl
    오블완
    파이썬
    스택
    REST API
    그리디
    자바
    자바스크립트
    Spring
    IS-A
    Python
    react
    쓰레드
    node.js
    리액트 네이티브
    Java
    react-native-chart-kit
    React Native Chart
    큐
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Next.js] 넥스트 빌드파일 html id="__next_error__" 해결방법 (useSearchParams)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.