# 검색에 좋은 페이지 주소(URL)는 어떻게 지어야 하나요

구글 공식 권장사항을 바탕으로 읽기 쉬운 단어와 하이픈 쓰는 법, 한글 주소와 퍼센트 인코딩, 매개변수 정리, 주소가 끝없이 늘어나는 함정을 막는 방법을 정리했어요.

- 분류: 사이트 구조
- 작성: 2026-10-24 · 수정: 2026-10-29
- 원본: [Google 검색의 URL 구조 권장사항](https://developers.google.com/search/docs/crawling-indexing/url-structure?hl=ko)

## 핵심 정리

- 숫자 ID보다 페이지 내용을 알 수 있는 단어로 주소를 지어야 손님과 구글 모두 이해하기 쉬워요.
- 단어 구분은 하이픈(-)으로 하고, 밑줄(_)이나 단어 붙여 쓰기는 피하는 게 구글의 권장이에요.
- 구글은 대문자와 소문자가 다르면 다른 주소로 보기 때문에, 서버가 같은 페이지를 보여 준다면 한 가지 표기로 통일해 두는 게 좋아요.
- 필터 조합, 세션 ID, 끝없는 달력처럼 비슷한 주소가 계속 생기는 구조는 크롤링을 낭비시키니 robots.txt나 nofollow로 관리하세요.
- #(프래그먼트) 뒤의 값으로 내용을 바꾸는 방식은 구글이 대체로 따라가지 못하니, 화면 전환에는 History API를 쓰는 게 맞아요.

검색에 좋은 주소는 두 가지 조건을 갖춰요. 손님이 주소창만 보고도 어떤 페이지인지 짐작할 수 있어야 하고, 구글 로봇이 같은 내용을 여러 주소로 나눠 읽느라 헤매지 않아야 해요. 이 글에서는 이 두 조건을 채우는 구체적인 규칙을 구글 공식 권장사항에 따라 하나씩 살펴봐요.

## 주소 짓는 방식이 왜 중요한가요

주소 구조가 엉키면 구글이 사이트를 효율적으로 크롤링하기 어려워져요. 크롤링은 구글의 로봇 프로그램이 페이지를 찾아 읽어 가는 일이에요. [Google 검색의 URL 구조 권장사항](https://developers.google.com/search/docs/crawling-indexing/url-structure?hl=ko)을 보면, 기준에 맞지 않는 주소를 쓸 경우 크롤링이 지나치게 많아지거나 거꾸로 아예 안 될 가능성이 높다고 해요.

반대로 간단하고 논리적인 주소는 구글과 손님이 사이트를 이해하는 데 도움이 돼요. 다만 주소만 바꾼다고 순위가 오른다는 뜻은 아니에요. 구글이 페이지를 찾아 저장하는 흐름은 [구글이 홈페이지를 찾고 저장하고 보여 주는 과정](https://daolla.com/guide/how-google-search-works/)에서 먼저 보면 이해가 쉬워요.

## 읽을 수 있는 단어로 짓고 하이픈으로 나누세요

가장 기본은 긴 숫자 ID 대신 내용을 드러내는 단어를 쓰는 거예요. 필라테스 학원이라면 수업 소개 페이지를 `/class/reformer-beginner`처럼 지으면 주소만 봐도 무슨 페이지인지 알 수 있어요. 콘텐츠를 먼저 묶음별로 정리해 두면 주소도 자연스럽게 논리적인 모양이 돼요(묶음 위치를 검색 결과에 보여 주는 법은 [탐색경로 표시와 BreadcrumbList 넣는 법](https://daolla.com/guide/breadcrumb/) 참고).

| 권장 | 권장하지 않음 | 이유 |
|---|---|---|
| `/class/reformer-beginner` | `/index.php?topic=42&area=3a5ebc...` | 긴 ID는 사람이 읽을 수 없어요 |
| `/summer-bouquet` | `/summer_bouquet` | 밑줄보다 하이픈이 단어 구분에 좋아요 |
| `/summer-bouquet` | `/summerbouquet` | 붙여 쓰면 단어 경계가 안 보여요 |

밑줄을 피하라는 데는 이유가 있어요. 프로그래밍에서는 `format_date`처럼 밑줄로 여러 단어를 하나로 묶어 표시하는 습관이 널리 퍼져 있어요. 그래서 하이픈을 써야 사용자와 검색엔진이 주소 속 개념을 따로따로 알아보기 쉬워요.

## 한글로 주소를 지어도 되나요

네, 써도 돼요. 구글은 잠재고객이 검색할 때 쓰는 언어로 주소를 지으라고 권해요. 한국 손님이 한국어로 검색한다면 `/꽃다발`처럼 한글 단어를 써도 되고, 소리 나는 대로 로마자로 옮긴 단어를 써도 돼요.

다만 링크 코드(href 속성)에 한글 같은 비영어 문자를 넣을 때는 퍼센트 인코딩을 해야 해요. 퍼센트 인코딩은 문자를 `%`와 숫자·영문 조합으로 바꿔 적는 방식이에요. 예를 들어 '꽃'은 `%EA%BD%83`으로 바뀌어요. 영문 알파벳이나 숫자처럼 특별한 용도로 예약되지 않은 문자는 그대로 둬도 괜찮아요.

## 대소문자와 매개변수는 깔끔하게

구글은 대문자와 소문자를 구분해요. `/Menu`와 `/menu`를 서로 다른 주소로 보기 때문에, 서버가 둘을 같은 페이지로 보여 준다면 한 가지 표기로 통일하는 게 좋아요. 그래야 구글이 같은 페이지인지 판단하기 쉬워요.

매개변수는 주소의 `?` 뒤에 붙는 꼬리표예요. 붙일 때는 표준 형식을 지키세요.

```
https://example.com/flowers?type=bouquet&color=pink,white&sort=low-to-high
```

- 이름과 값은 등호(=)로 이어요.
- 매개변수끼리는 앰퍼샌드(&)로 이어요.
- 같은 항목에 값이 여러 개면 쉼표(,)로 나열해요.
- 화면 내용을 바꾸지 않는 매개변수는 지워서 주소를 짧게 만들어요.

같은 페이지가 여러 주소로 열리고 있다면 [대표 주소(표준 URL) 정하는 법](https://daolla.com/guide/canonical-url/)도 함께 확인해 보세요.

## 주소가 끝없이 늘어나는 함정을 막으세요

내용은 거의 같은데 주소만 다른 페이지가 쌓이면, 구글 로봇은 같은 내용을 되풀이해 읽느라 힘을 빼고 정작 사이트의 일부 페이지는 색인되지 못한 채 남을 수 있어요. 이런 주소가 생기는 흔한 원인은 네 가지예요.

1. **필터 조합**: 꽃집 쇼핑몰에서 색상, 가격대, 용도 필터를 겹쳐 고를 때마다 새 주소가 생기면 비슷한 목록 페이지가 폭발적으로 늘어나요.
2. **관련 없는 매개변수**: 어디서 왔는지 기록하는 추천 값, 정렬 값, 세션 ID가 대표적이에요. 세션 ID는 주소에 넣기보다 쿠키로 처리하는 게 좋아요.
3. **끝없는 달력**: 사진 스튜디오 예약 달력에서 '다음 달' 링크가 끝없이 이어지면 미래 페이지가 무한히 생겨요. 이런 링크에는 [nofollow 속성](https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links?hl=ko)을 붙여요.
4. **깨진 상대 링크**: `../../category`처럼 위 폴더로 거슬러 올라가는 링크는 엉뚱한 주소를 만들 수 있어요. `/category/`처럼 맨 앞의 `/`부터 시작하는 루트 상대 주소를 쓰세요. 링크 작성 기준은 [구글이 읽는 링크 쓰는 법](https://daolla.com/guide/link-best-practices/)에 정리해 두었어요.

이런 주소가 이미 크롤링되고 있다면 사이트 내 검색 결과, 정렬·필터 주소, 달력 주소를 robots.txt로 막는 방법이 권장돼요. 자세한 작성법과 주의점은 [robots.txt로 막을 수 있는 것과 없는 것](https://daolla.com/guide/robots-txt/)에서 확인하세요. 필터 메뉴가 많은 사이트라면 [속성 탐색 URL의 크롤링 관리 방법](https://developers.google.com/search/docs/crawling-indexing/crawling-managing-faceted-navigation?hl=ko)도 참고해 보세요.

## #(프래그먼트)로 내용을 바꾸지 마세요

`example.com/#/menu`처럼 `#` 뒤의 값에 따라 화면 내용이 바뀌는 구조는 피하세요. 구글은 일반적으로 이 부분(URL 프래그먼트)을 지원하지 않아요. 그래서 `#` 뒤에만 다른 내용이 있으면 별도 페이지로 인식되지 않을 수 있어요. 자바스크립트로 화면을 바꾸는 사이트라면 [자바스크립트 SEO 기본 안내](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics?hl=ko)에서 설명하는 History API 방식을 쓰는 게 맞아요.

## 정리

1. 홈페이지 메뉴를 차례로 눌러 주소창을 확인하고, 주소만 봐서는 무슨 페이지인지 모르겠는 곳을 표시해 두세요.
2. 위에서 본 규칙을 우리 사이트만의 주소 작성 원칙으로 한 줄 메모해 두고, 앞으로 만드는 페이지에는 모두 그 원칙을 따르세요.
3. 예약, 상품 목록, 사이트 내 검색을 직접 써 보면서 클릭할 때마다 주소 뒤에 꼬리표가 새로 붙는지 살펴보고, 붙는다면 차단할 대상인지 판단하세요.
4. 기존 주소를 바꿀 계획이라면 옛 주소와 새 주소가 동시에 열리지 않는지 확인하고, 앞에서 소개한 대표 주소 지정 방법으로 정리하세요.

## 자주 묻는 질문

### 해외 손님을 위한 페이지는 주소를 어떻게 나누는 게 좋나요?

여러 나라 손님을 받는 사이트라면 지역별로 나누기 쉬운 주소 구조가 좋아요. 구글은 example.de처럼 국가별 도메인을 쓰거나, example.com/de/처럼 국가별 하위 폴더를 두는 방식을 예로 들어요.

### 주소에 이모지나 특수문자를 넣어도 되나요?

넣을 수는 있지만 링크 코드에서는 퍼센트 인코딩을 해야 해요. 구글 문서에서도 이모지가 그대로 들어간 주소는 권장하지 않는 예로, %F0%9F... 같은 인코딩 형태는 권장하는 예로 보여 줘요. 표준에서 특별한 용도로 예약해 둔 문자도 인코딩해야 해요.

### 매개변수를 콜론(:)이나 대괄호([ ])로 구분하면 안 되나요?

권장하지 않아요. 구글 문서는 [category:dresses]처럼 콜론과 대괄호로 묶는 형식을 권장하지 않는 예로 보여 줘요. 쉼표 한 개와 두 개를 섞어 구분하는 독자 형식도 마찬가지예요. 이미 이런 형식을 쓰고 있다면 일반적인 표준 형식으로 맞춰 두는 편이 좋아요.

### 필터로 만든 목록 페이지가 왜 '중복'으로 취급되나요?

필터를 하나 더할 때마다 새 주소가 생기지만, 그 목록들이 보여 주는 상품은 대부분 겹치기 때문이에요. 예를 들어 공방 쇼핑몰의 '원목' 목록과 '원목 + 3만 원 이하' 목록은 같은 상품을 상당 부분 함께 보여 줘요. 구글 로봇은 상품 페이지로 가는 길이 몇 개만 있어도 되니, 나머지 목록은 같은 길을 되풀이하는 셈이 돼요.

## 출처

- [Google 검색의 URL 구조 권장사항](https://developers.google.com/search/docs/crawling-indexing/url-structure?hl=ko) — Google 검색 센터 (CC BY 4.0)
