# Oaty 프로젝트 Sitemap / Canonical 신호 분석

> Canonical: https://oaty.lol/posts/oaty-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-sitemap-canonical-%EC%8B%A0%ED%98%B8-%EB%B6%84%EC%84%9D
> Markdown alternate: https://oaty.lol/posts/oaty-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-sitemap-canonical-%EC%8B%A0%ED%98%B8-%EB%B6%84%EC%84%9D.md
> Published: 2026-05-06T00:27:43.631Z
> Category: Web
> Tags: SEO

Oaty 프로젝트의 sitemap과 canonical 정책은 색인 대상 URL을 sitemap에 집중시키고, archive pagination은 noindex로 제외해 게시글 중심 검색 노출을 유지합니다.

이 분석은 Google Search Central과 Astro 공식 문서를 기준으로, Oaty 프로젝트에 적용된 sitemap, canonical, noindex 정책이 검색엔진에 어떤 신호를 보내는지 객관적으로 정리한 문서입니다.

## **공식 기준**

Google은 canonical 판단에 여러 신호를 사용합니다. rel="canonical"은 강한 신호이고, sitemap 포함은 더 약한 canonical 신호입니다. 따라서 같은 URL에 대해 sitemap과 canonical이 서로 다른 대표 URL을 가리키지 않도록 일관성을 유지해야 합니다.\
출처: [Google canonical 문서](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)

Google은 sitemap을 "검색엔진이 사이트의 중요한 URL을 더 효율적으로 발견하도록 돕는 파일"로 설명합니다. 다만 sitemap에 포함된 URL이 반드시 크롤링되거나 색인된다는 보장은 없습니다.\
출처: [Google sitemap 문서](https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview)

noindex는 검색 결과에서 특정 페이지를 제외하는 지시입니다. 단, Googlebot이 해당 페이지를 크롤링해 noindex를 읽을 수 있어야 하므로 robots.txt로 차단하면 안 됩니다.\
출처: [Google noindex 문서](https://developers.google.com/search/docs/crawling-indexing/block-indexing)

## **현재 구현 상태**

프로젝트는 astro.config.ts (line 9)에서 @astrojs/sitemap을 사용해 sitemap을 생성합니다. Astro 공식 문서에 따르면 sitemap integration의 filter()는 URL별 sitemap 포함 여부를 제어할 수 있습니다.\
출처: [Astro sitemap integration 문서](https://docs.astro.build/en/guides/integrations-guide/sitemap/)

현재 sitemap filter는 다음 URL을 제외합니다.

* /admin
* /admin/\*
* /archives/{slug}/2+
* /tags/{slug}/2+

반대로 다음 URL은 sitemap에 포함됩니다.

* 홈
* 고정 페이지
* 게시글
* /archives
* /archives/{category} 첫 페이지
* /tags
* /tags/{tag} 첫 페이지

## **Canonical 정책**

BaseHead.astro (line 29)는 모든 공개 HTML 페이지에 canonical URL을 출력합니다. 전달된 canonicalURL이 있으면 그 값을 사용하고, 없으면 현재 경로와 Astro.site를 조합합니다.

카테고리/태그 archive 첫 페이지는 자기 자신을 canonical로 둡니다.

html

`<link rel="canonical" href="https://oaty.lol/archives/web">`

카테고리/태그 pagination 2페이지 이상도 자기 자신을 canonical로 둡니다.

html

`<link rel="canonical" href="https://oaty.lol/archives/web/2"> <meta name="robots" content="noindex">`

이 설계는 pagination 페이지를 1페이지의 중복 페이지로 처리하지 않습니다. 대신 "사용자 탐색용 실제 페이지지만 검색 결과에는 노출하지 않는 페이지"로 정의합니다.

## **신호 일관성 평가**

현재 정책은 공식 기준과 대체로 일관됩니다.

* 색인 대상 URL은 sitemap에 포함됩니다.
* 검색 결과에서 제외할 pagination URL은 sitemap에서 제외됩니다.
* pagination URL은 robots.txt로 차단하지 않으므로 Googlebot이 noindex를 읽을 수 있습니다.
* pagination에는 nofollow를 붙이지 않아 내부 게시글 링크 탐색 경로를 유지합니다.
* canonical은 HTML \<head>에 절대 URL로 출력됩니다.

즉, 현재 구조는 "게시글과 주요 archive 첫 페이지 중심으로 검색 노출을 집중시키고, archive pagination이 실제 게시글보다 상위 노출되는 상황을 줄이는 정책"입니다.
