sitemap.xml이란? 검색엔진에 공개 페이지 목록을 알려주는 파일

sitemap.xml은 검색엔진에 검색 대상으로 삼고 싶은 대표 공개 URL 목록을 알려주는 파일이에요. 관리자·로그인·결제 결과·중복 URL은 빼고 실제 수정 날짜를 유지하며, 배포된 파일을 확인해 Search Console에 그 주소를 제출해야 합니다.

핵심 요약

AI에게 SEO를 적용해달라고 했더니 프로젝트에 sitemap.ts 파일이 생겼습니다. 배포된 사이트에서는 아래 주소도 열려요.

https://내도메인.com/sitemap.xml

주소를 열어보면 평소 보던 웹페이지 대신 낯선 XML 코드와 여러 URL이 나옵니다.

<url>
  <loc>https://내도메인.com/blog</loc>
  <lastmod>2026-08-04</lastmod>
</url>

이 파일은 방문자에게 보여줄 메뉴일까요? 여기에 주소를 넣으면 Google 검색에 바로 등록되는 걸까요?

sitemap.xml은 검색엔진에 내 사이트의 중요한 공개 URL 목록을 알려주는 파일입니다. 검색엔진이 새 페이지와 수정된 페이지를 발견하도록 돕지만, 수집·색인이나 검색 순위를 보장하지는 않아요.

사이트맵은 검색엔진에게 건네는 URL 목록이에요

웹사이트에는 검색에 보여주고 싶은 공개 페이지가 있습니다.

홈페이지
서비스 소개
상품 상세
블로그 글
문의 페이지

검색엔진은 다른 페이지의 링크를 따라가며 이런 URL을 발견합니다. 하지만 막 만든 사이트는 외부 링크가 거의 없고, 글이나 상품이 많으면 모든 주소를 빠르게 찾기 어려울 수 있어요.

사이트맵은 운영자가 중요하다고 생각하는 URL을 한곳에 모아 알려줍니다.

이 사이트에는 이런 공개 페이지가 있습니다.
검색할 가치가 있는 주소를 확인해 주세요.
이 글은 마지막으로 이 날짜에 수정됐습니다.

Google은 사이트맵을 페이지, 동영상과 여러 파일에 관한 정보를 제공하는 파일로 설명합니다. 사이트가 크거나 새로 만들어졌고 외부 링크가 적을 때, 이미지·동영상·뉴스 콘텐츠가 많을 때 특히 도움이 될 수 있어요. Google의 사이트맵 소개 (새 탭에서 열림)

sitemap.xml의 XML은 무슨 뜻인가요?

sitemap.xml.xml은 파일 형식을 나타냅니다. XML은 정보를 태그로 구분해 표현하는 형식이에요.

기본적인 사이트맵은 다음처럼 생겼습니다.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2026-08-01</lastmod>
  </url>
  <url>
    <loc>https://example.com/blog/what-is-sitemap-xml</loc>
    <lastmod>2026-08-04</lastmod>
  </url>
</urlset>

처음 보는 태그가 많지만 역할은 단순합니다.

사이트맵 프로토콜에서는 <urlset>, <url><loc>이 기본 구조이며 <lastmod>는 선택 항목입니다. URL 안의 특수 문자는 XML 규칙에 맞게 처리하고 파일은 UTF-8로 만들어야 해요. Sitemaps.org의 XML 프로토콜 (새 탭에서 열림)

브라우저에서 예쁘게 보이지 않아도 괜찮습니다. 방문자용 화면이 아니라 검색엔진이 읽을 데이터이기 때문이에요.

화면에 보이는 사이트 메뉴와는 달라요

사이트맵이라는 이름 때문에 화면 아래에 있는 메뉴나 전체 페이지 안내 화면을 떠올릴 수 있습니다.

둘 다 사이트의 구조를 보여주지만 대상과 목적이 달라요.

구분 sitemap.xml 화면의 메뉴·전체 페이지 안내
주된 대상 검색엔진 방문자
형태 XML 또는 코드로 생성한 URL 목록 클릭할 수 있는 HTML 화면
목적 중요한 URL의 발견 지원 사람이 페이지를 탐색하도록 도움
검색엔진이 발견하는 방식 사이트맵 파일을 읽음 실제 링크를 따라감

사이트맵이 있다고 화면의 링크를 없애면 안 됩니다. Google은 중요한 페이지가 홈페이지에서 메뉴나 본문 링크를 따라 도달할 수 있을 때 대부분의 페이지를 발견할 수 있다고 설명합니다.

사이트맵과 내부 링크는 서로 대체하는 기능이 아닙니다. 사이트맵은 URL 목록을 알려주고, 내부 링크는 방문자와 검색엔진이 실제 사이트 구조를 따라 이동하게 해요.

작은 사이트에도 사이트맵이 필요한가요?

Google은 약 500페이지 이하인 작은 사이트에서 모든 중요 페이지가 내부 링크로 잘 연결돼 있다면 사이트맵이 꼭 필요하지 않을 수 있다고 설명합니다.

하지만 페이지가 적다고 사이트맵을 만들면 안 된다는 뜻은 아니에요. 대부분의 웹 프레임워크와 CMS는 사이트맵을 자동으로 만들 수 있고, 검색엔진에 공개 URL 목록을 명확하게 전달하는 데 도움이 됩니다.

다음 상황이라면 사이트맵의 가치가 더 커집니다.

반대로 한 페이지짜리 사이트라도 검색 노출의 기본 조건은 같습니다. 한 페이지 사이트에서 SEO를 점검하는 방법도 함께 참고할 수 있어요.

사이트맵에 넣었다고 검색 등록이 보장되지는 않아요

사이트맵은 검색엔진에 보내는 제안에 가깝습니다.

사이트맵에 URL 추가
→ 검색엔진이 URL을 발견할 수 있음
→ 페이지 수집 여부 판단
→ 색인 여부 판단
→ 검색어에 맞을 때 검색 결과 후보가 됨

따라서 사이트맵을 만들거나 제출해도 다음 결과는 보장되지 않습니다.

Google도 사이트맵이 URL 발견을 도울 수 있지만 모든 항목의 수집과 색인을 보장하지 않는다고 안내합니다.

배포와 검색 노출이 다른 이유를 먼저 이해하면 발견 → 수집 → 색인 → 검색 결과 과정에서 사이트맵이 맡는 위치가 더 분명해집니다.

검색에 보여주고 싶은 대표 URL만 넣으세요

사이트맵의 목적은 사이트에 존재하는 모든 주소를 나열하는 것이 아닙니다. 검색 결과에 포함하고 싶은 대표 공개 URL을 넣어야 해요.

보통 다음 조건을 만족하는 페이지를 포함합니다.

다음 주소는 보통 제외합니다.

Google은 사이트맵에 상대 경로가 아닌 전체 URL을 사용하고, 검색 결과에 표시하려는 canonical URL을 포함하라고 안내합니다. Google의 사이트맵 생성 가이드 (새 탭에서 열림)

권장
https://example.com/blog

잘못된 예
/blog
http://localhost:3000/blog
https://old-example.vercel.app/blog

사이트맵, canonical과 내부 링크가 서로 다른 주소를 가리키면 검색엔진에 모순된 신호를 줄 수 있어요. 대표 도메인과 URL 형식을 한 가지로 맞추는 것이 중요합니다.

lastmod는 실제 내용이 바뀐 날짜만 적으세요

<lastmod>는 last modified, 즉 마지막 수정 시점을 뜻합니다.

<lastmod>2026-08-04</lastmod>

글의 본문이나 상품 정보처럼 페이지의 실제 콘텐츠가 바뀌었을 때 수정 날짜도 갱신합니다.

다음처럼 사이트맵을 생성한 시각을 모든 페이지에 넣으면 정확하지 않아요.

배포할 때마다 모든 URL의 lastmod = 현재 시각
서버가 요청받을 때마다 모든 URL의 lastmod = new Date()

페이지를 수정하지 않았는데 날짜만 계속 바뀌면 검색엔진이 어느 변경을 믿어야 할지 알기 어렵습니다. Google은 <lastmod> 값이 계속 정확하고 페이지의 실제 수정 시점과 검증 가능하게 일치할 때 사용한다고 설명합니다.

반면 <priority><changefreq>는 XML 사이트맵 규격에 있지만 Google은 이 값을 사용하지 않습니다. 홈페이지에 무조건 높은 우선순위를 주거나 모든 글을 daily로 지정해도 Google 수집 순서를 조종할 수 없어요.

<!-- Google 검색을 위해 억지로 넣을 필요가 없는 값 -->
<changefreq>daily</changefreq>
<priority>1.0</priority>

많은 값을 채우는 것보다 정확한 URL과 실제 수정 날짜를 유지하는 편이 중요합니다.

JSON-LD와 sitemap.xml도 역할이 달라요

SEO 작업을 맡기면 두 파일이 함께 등장할 수 있습니다.

sitemap.xml
어떤 공개 페이지가 있는지 URL 목록을 알려줘요.

JSON-LD
그 페이지가 글인지 상품인지, 날짜와 가격이 무엇을 뜻하는지 설명해요.

사이트맵이 페이지의 위치를 알려준다면 JSON-LD는 페이지 정보의 의미를 설명한다고 볼 수 있어요.

둘 중 하나가 다른 하나를 대신하지 않습니다. JSON-LD가 낯설다면 검색엔진에 페이지 내용을 설명하는 JSON-LD에서 구조화 데이터와 Schema.org의 역할을 확인해보세요.

Next.js에서는 sitemap.ts로 자동 생성할 수 있어요

페이지가 몇 개 없는 고정 사이트라면 sitemap.xml 파일을 직접 만들 수도 있습니다. 하지만 블로그 글이나 상품이 계속 추가된다면 코드로 자동 생성하는 편이 안전해요.

Next.js App Router에서는 app/sitemap.ts 파일이 사이트맵을 만드는 특별한 파일로 동작합니다.

import type { MetadataRoute } from "next";

const BASE_URL = "https://example.com";

export default function sitemap(): MetadataRoute.Sitemap {
  const posts = getPublishedPosts();

  return [
    { url: BASE_URL },
    { url: `${BASE_URL}/blog` },
    ...posts.map((post) => ({
      url: `${BASE_URL}/blog/${post.slug}`,
      lastModified: post.updatedAt ?? post.publishedAt,
    })),
  ];
}

이 코드는 공개된 글 목록을 가져와 URL을 자동으로 추가합니다. 새 글을 발행할 때 사이트맵 파일을 손으로 고치지 않아도 돼요.

중요한 점은 getPublishedPosts()가 실제 공개 글만 가져오고, BASE_URL이 운영 도메인을 사용하며, 수정 날짜가 콘텐츠 데이터에서 나와야 한다는 것입니다.

Next.js 공식 문서는 정적 sitemap.xml 파일과 sitemap.ts를 사용한 동적 생성을 모두 지원합니다. 사이트맵 생성 코드는 기본적으로 캐시되는 특별한 Route Handler로 동작합니다. Next.js의 sitemap.xml 안내 (새 탭에서 열림)

Next.js의 역할부터 이해하고 싶다면 바이브코딩에서 자주 만나는 Next.js를 먼저 읽어봐도 좋아요.

페이지가 아주 많다면 사이트맵을 나누세요

Google이 지원하는 사이트맵 한 파일의 한도는 압축하지 않은 상태에서 50MB 또는 URL 50,000개입니다. 둘 중 하나를 넘으면 여러 사이트맵으로 나눠야 해요.

sitemap-pages.xml
sitemap-products-1.xml
sitemap-products-2.xml
sitemap-posts.xml

나눈 파일은 사이트맵 색인 파일 하나로 묶어 제출할 수 있습니다.

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products-1.xml</loc>
  </sitemap>
</sitemapindex>

일반적인 소규모 사이트는 처음부터 여러 파일로 나눌 필요가 없습니다. URL이 실제 한도에 가까워지거나 Search Console에서 콘텐츠 종류별 상태를 따로 보고 싶을 때 검토하면 충분해요.

만든 뒤에는 실제 배포 주소를 확인하세요

로컬 코드에 sitemap.ts가 있다는 사실만으로 작업이 끝난 것은 아닙니다. 배포 뒤 실제 URL을 열어 확인해야 해요.

https://내도메인.com/sitemap.xml

다음 항목을 점검하세요.

robots.txt에 사이트맵 위치를 적어 검색엔진이 발견하게 할 수도 있습니다.

Sitemap: https://내도메인.com/sitemap.xml

사이트맵뿐 아니라 robots, canonical과 응답 상태까지 함께 확인하려면 AI에게 확인시킬 SEO 기술 점검표를 사용해보세요.

Search Console에는 파일이 아니라 주소를 제출해요

사이트맵을 Google Search Console에 제출할 때 XML 파일을 직접 업로드하는 것은 아닙니다. 이미 내 사이트에 공개된 사이트맵의 URL을 알려주는 거예요.

https://내도메인.com/sitemap.xml

한 번 제출한 뒤 새 글이 사이트맵에 자동으로 추가된다면 글을 발행할 때마다 같은 주소를 다시 제출할 필요는 없습니다. 검색엔진이 사이트맵을 다시 가져갈 수 있어요.

Search Console과 네이버 서치어드바이저에서 소유권을 확인하고 사이트맵을 제출하는 실제 순서는 홈페이지를 Google과 네이버 검색에 등록하는 방법에서 따라 할 수 있습니다.

AI에게 sitemap.xml 점검을 요청하는 방법

수정부터 맡기기 전에 현재 파일과 실제 배포 결과를 함께 확인하게 하세요.

아직 코드를 수정하지 마.
이 프로젝트의 sitemap.xml을 점검해줘.

로컬 구현과 실제 배포 주소를 모두 확인하고
다음 항목을 표로 정리해줘.

- sitemap.xml이 로그인 없이 정상 응답하는지
- 모든 URL이 절대 주소와 운영 도메인을 사용하는지
- 공개 페이지 중 누락된 URL이 있는지
- 관리자·로그인·결제 결과·noindex 페이지가 포함됐는지
- 리디렉션·404·중복 URL이 있는지
- canonical과 사이트맵 주소가 일치하는지
- lastmod가 실제 콘텐츠 수정 시점을 사용하는지
- 새 글과 상품이 자동으로 추가되는지
- robots.txt가 올바른 사이트맵 주소를 안내하는지

각 항목을 통과 / 주의 / 실패 / 확인 불가로 표시하고,
확인한 파일과 실제 URL을 근거로 적어줘.

문제가 확인되면 필요한 부분만 수정하게 합니다.

점검에서 확인된 실패 항목을 수정해줘.

검색 결과에 보여줄 대표 공개 URL만 포함하고,
화면에 표시되는 실제 콘텐츠 수정 날짜로 lastmod를 만들어줘.
changefreq와 priority는 추가하지 마.

수정 후 sitemap.xml의 모든 URL을 검사하고
프로덕션 빌드와 기존 테스트 결과를 보고해줘.

정리

사이트맵은 검색 순위를 올리는 비밀 파일이 아닙니다. 검색엔진이 내 사이트의 중요한 공개 페이지를 놓치지 않도록 건네는 정확한 URL 목록이에요.

주소를 많이 넣는 것보다 검색에 보여줄 대표 주소만 정확하게 유지하는 것이 중요합니다.

#SEO#sitemap.xml#사이트맵#검색엔진#Next.js#바이브코딩

인스타그램 @ddukddak.build · 페이스북 뚝딱