← 전체 글로 돌아가기

Next.js

sitemap.xml이 크롤러에게 제대로 읽히는지 확인하기

sitemap.xml 문제는 대부분 URL 구조 오류나 메타데이터 누락에서 비롯된다. 빌드 후 직접 내용을 확인해야 한다.

SEO 점수가 떨어졌다고 난리가 난다. 원인을 찾으면 크롤러가 sitemap.xml을 제대로 읽지 못했기 때문이다. 문제는 복잡해 보이지만 보통 몇 가지만 확인하면 된다.

먼저 sitemap.xml이 존재하는지 확인한다

가장 기본이지만 자주 까먹는다.

curl -i https://example.com/sitemap.xml

status code가 200이면 좋은 신호다. 404면 파일이 생성되지 않은 것. 500이면 생성 중에 에러가 생겼을 가능성 있다. Next.js라면 next.config.js에서 sitemap 생성 로직을 확인해야 한다.

파일 내용을 한 번 본다

curl -s https://example.com/sitemap.xml | head -50

XML 형식이 맞는지 확인한다. 일반적인 문제:

  • 태그가 닫혀 있지 않음 (<loc> 없이 </loc>)
  • URL이 인코딩되지 않은 특수문자 포함
  • lastmod 날짜 형식이 ISO 8601이 아님
  • 크롤러가 차단되는 URL 포함

robots.txt에서 sitemap이 참조되는지 확인한다

curl -s https://example.com/robots.txt | grep -i sitemap

Sitemap이 명시적으로 선언되어 있으면 크롤러가 더 빨리 찾을 수 있다.

User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml

빌드 로그에서 sitemap 생성 여부를 확인한다

npm run build

빌드 로그에서 sitemap이나 RSS 생성 관련 메시지를 찾는다. 에러 없이 끝났다면 파일이 생성됐을 가능성이 높다.

만약 동적으로 생성된다면 (serverless 환경에서), 실제로 요청이 들어올 때 생성되는지 확인해야 한다. 첫 요청은 느릴 수 있다.

Google Search Console에서 사이트맵을 인식하는지 본다

아무리 로컬에서 파일이 완벽해도 Google이 읽지 못하면 의미가 없다.

Search Console에 접속해서:

  • Sitemaps 섹션에서 제출한 sitemap 확인
  • 인식한 URL 개수
  • 인덱싱되지 않은 URL (그 이유도)

이 정보만으로도 문제의 절반이 풀린다. 크롤러가 특정 URL을 거부한다면 그 이유를 알려준다.

메타데이터를 함께 확인한다

canonical 태그, og:image, description 같은 메타데이터가 제대로 렌더링되는지 확인한다.

curl -s https://example.com/blog/post-1 | grep -Ei 'title|description|canonical|og:|twitter:'

이들이 없거나 비어 있으면 크롤러가 페이지를 제대로 인덱싱하기 어렵다. 특히 Next.js에서 동적 라우팅을 사용할 때 메타데이터가 누락되기 쉽다.