Next.js metadata가 적용되지 않을 때 확인할 7가지

2026.05.13·수정 2026.09.12·약 4분·작성: 해비·블로그 소개

학습 목표·선수 지식: metadata가 사라진 위치를 일곱 단계로 좁힙니다. 선수 지식: layout·page·HTML head.

1. 실제 경로의 서버 파일인가요?

app/layout.tsx 또는 해당 page.tsx의 export인지 확인합니다. use client 파일에서 metadata를 내보내면 빌드 오류입니다. 인터랙션 컴포넌트를 별도 파일로 옮깁니다.

2. 두 export가 충돌하나요?

같은 segment에 metadata와 generateMetadata를 함께 내보내지 않습니다. 고정 제목은 객체, 데이터 의존 제목은 함수 하나를 선택합니다.

3. params와 데이터가 올바른가요?

generateMetadata에서 먼저 await params로 slug를 풉니다. 다른 slug 두 개를 직접 열어 서로 다른 제목이 나오는지 확인합니다. 없는 데이터는 notFound로 처리하고 200 본문에 임의 제목을 만들지 않습니다.

4. URL 기준이 맞나요?

metadataBase와 canonical·OG 이미지의 최종 절대 URL을 확인합니다. Preview 도메인이 production canonical에 섞이지 않도록 공개 도메인을 지정합니다.

5. 특수 파일이 덮어쓰나요?

같은 경로와 상위 폴더의 opengraph-image·twitter-image·favicon 파일을 찾습니다. 파일 기반 metadata가 코드 설정보다 우선할 수 있습니다. 이미지 주소 자체와 이미지 HTTP 응답을 따로 봅니다.

6. 병합과 제목 템플릿이 의도한 결과인가요?

중첩 openGraph 객체는 깊은 병합이 아니므로 자식이 선언한 객체에서 필요한 값을 명시합니다. title.template은 하위 segment에 적용되며 같은 segment의 page에는 적용되지 않습니다. 정확한 제목이 필요하면 title.absolute로 상위 템플릿을 우회합니다.

7. 어떤 응답과 캐시를 검사했나요?

사전 렌더링 페이지와 동적 스트리밍 페이지를 나눕니다. 동적 metadata는 초기 UI 뒤 응답 body에 올 수 있으므로 head만 추출한 검사는 거짓 누락을 만들 수 있습니다. 전체 document 응답, hydration 후 DOM, HTML 제한 봇용 응답을 구분해 기록합니다. HTML 수정 반영, 소셜 재스크랩, 실제 검색 결과 갱신은 서로 다른 단계입니다.

터미널 · 진단 명령

curl -sS -D headers.txt -o full-response.html https://example.com/posts/sample
curl -sS -A "Twitterbot" -o bot-response.html https://example.com/posts/sample

위 명령의 도메인은 자신의 공개 테스트 URL로 바꾸세요. 봇 User-Agent를 흉내 낸 HTTP 확인은 검색 엔진의 실제 렌더·색인 결과를 증명하지 않습니다.

Next.js metadata 적용 오류 진단: layout page metadata API와 head 출력 확인 흐름
Next.js metadata SEO 해결 체크리스트: generateMetadata와 head 확인 재크롤링 요청 기준

관련 학습 자료

공식 기준과 확인 범위

확인일: 2026-09-12. API 설명은 Next.js 16 App Router 기준이며 과거 릴리스 글은 본문의 태그 범위를 유지합니다. 부분 API 코드는 기존 프로젝트에 통합하는 예시입니다.

공식 자료 재확인: 2026-09-12. 이 글의 실행하지 않은 브라우저/배포 점검은 독자 확인 과제로 구분합니다.

이 글이 도움이 되었나요?

조회 중

Next.js 학습 순서

필수 13개 · 전체 27개

읽음 기록 관리

전체 과정 목차 (27개)
  1. 필수 길잡이 · Next.js App Router 학습 순서: 설치부터 배포까지
  2. 필수 학습 · Next.js package.json: scripts dependencies 이해
  3. 필수 학습 · Next.js App Router로 만드는 첫 프로젝트 완성 실습 가이드
  4. 필수 학습 · Next.js에서 .next 폴더는 어떤 역할을 할까?
  5. 필수 학습 · Next.js 동적 라우트 완전 정리: [slug], params, catch-all
  6. 선택 참고 · Next.js params should be awaited 해결: App Router 기준
  7. 선택 참고 · Next.js window is not defined 오류 해결: 브라우저 API를 안전하게 쓰기
  8. 선택 참고 · Next.js hydration failed 오류 해결: 원인과 해결 방법
  9. 필수 학습 · Axios 사용법: React Next.js에서 API 요청 구조 잡는 법
  10. 선택 참고 · Next.js Route Handler 405 오류 해결: GET/POST 파일 위치와 메서드 설정 확인
  11. 필수 학습 · Next.js Server Actions + React Hook Form 검증 기준
  12. 선택 참고 · Next.js useSearchParams Suspense 오류 해결: 빌드 실패 기준
  13. 선택 참고 · Next.js fetch 캐시 문제 해결: 데이터가 바뀌었는데 화면이 그대로일 때
  14. 선택 참고 · Next.js Dynamic server usage 오류 해결: cookies headers 기준
  15. 선택 참고 · Next.js 환경변수 적용 오류 해결: .env.local을 바꿨는데 값이 안 바뀔 때
  16. 필수 학습 · Next.js Metadata API 완전 정리: 정적 metadata와 generateMetadata
  17. 선택 참고 · Next.js metadata가 적용되지 않을 때 확인할 7가지 현재 글
  18. 선택 참고 · Next.js Image remotePatterns 오류 해결: 외부 이미지 도메인 허용하기
  19. 필수 학습 · Next.js redirects 설정: next.config.js에서 URL 이동 처리
  20. 필수 학습 · Next.js SEO 체크리스트: metadata·초기 HTML·OG 이미지 점검
  21. 선택 참고 · Next.js SEO 완전 가이드: App Router metadata부터 배포 확인까지
  22. 필수 학습 · Next.js 16 성능 최적화 체크리스트: 번들·이미지·캐시·배포
  23. 필수 학습 · Next.js 렌더링 성능 최적화: React 화면이 느릴 때 기준
  24. 필수 학습 · Next.js 16 Proxy 마이그레이션: Node.js Runtime·matcher 검증
  25. 선택 참고 · Next.js 보안 패치 기준: v16.2.5 영향 범위 점검
  26. 선택 참고 · Next.js SEO SSR 적용법: 검색 노출과 렌더링 구조 잡기
  27. 시점·기록 · Next.js 16.3.0-canary.106의 useCache deprecation 경고와 hybrid not-found 수정 이해하기

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기