상품 목록에서 색상과 가격순을 한 번씩 눌렀을 뿐인데 주소가 계속 늘어나는 자사몰이 있습니다. 예를 들어 /products?color=black, /products?color=black&sort=price, /products?sort=popular가 모두 200으로 열리고 비슷한 상품 목록을 보여주면, 고객에게는 편한 기능이어도 검색엔진에는 서로 다른 URL 묶음으로 보일 수 있습니다. 이때 필요한 일은 필터를 전부 없애는 것이 아니라 어떤 URL을 검색 결과에 남길지 먼저 결정하는 것입니다.
이 글의 결론은 간단합니다. 검색 의도가 분명하고 독립적인 내용을 제공하는 필터 랜딩은 하나의 페이지로 설계하고, 단순 정렬·세션·추적용 URL은 대표 페이지와 분리합니다. 그 다음 canonical은 대표 URL을 알리는 신호로, noindex는 검색 결과에서 제외하는 규칙으로, robots.txt는 크롤링 요청 자체를 줄이는 규칙으로 사용합니다. 세 가지를 같은 의미로 섞으면 문제를 진단하기가 더 어려워집니다.
- 먼저 결론: 필터 URL을 전부 막는 것이 SEO는 아니다
- 1. 먼저 URL 목록을 만들고 필터·정렬·검색을 분리하기
- 2. 필터와 정렬을 같은 규칙으로 처리하지 않기
- 3. canonical은 대표 URL을 알려주는 신호다
- 4. robots.txt와 noindex는 서로 다른 제어 장치다
- 5. 색인할 필터 랜딩을 남기는 네 가지 조건
- 6. 빈 결과와 잘못된 조합은 HTTP 상태부터 점검하기
- 7. 자사몰 운영표로 구현 전후를 비교하기
- 8. 공개 후 Google에서 확인하는 순서
- 자주 묻는 질문
- 필터 URL은 모두 noindex로 처리하면 되나요?
- robots.txt에서 막았는데 왜 검색 결과에 주소가 남을 수 있나요?
- canonical만 설정하면 중복 URL 문제가 끝나나요?
- 마지막 10분 점검표
- 공식 문서
먼저 결론: 필터 URL을 전부 막는 것이 SEO는 아니다
Google은 필터 조합이 끝없이 늘어날 수 있는 faceted navigation URL이 서버 자원과 새 페이지 발견에 부담을 줄 수 있다고 설명합니다. 반대로 특정 필터 조합이 충분한 상품과 고유한 설명을 가진 검색 랜딩이라면 사용자가 그 URL을 찾을 이유가 있는지 따져볼 수 있습니다. 따라서 기준은 ‘필터 URL인가’가 아니라 ‘이 URL이 독립적인 검색 수요와 내용을 갖는가’입니다. Google의 faceted navigation 안내를 먼저 읽고 사이트의 URL 종류를 나누세요.
| URL 유형 | 예시 | 기본 판단 | 먼저 남길 기록 |
|---|---|---|---|
| 검색 랜딩 후보 | /bags?color=black | 검토 후 색인 대상 가능 | 검색 의도, 상품 수, 고유 설명 |
| 단순 정렬 | /bags?sort=price | 대표 카테고리로 통합 검토 | 정렬 기준, 목록 내용 변화 |
| 내부 검색·세션 | /search?q=bag 또는 ?session=… | 운영·사용자용으로 분리 | 검색어, 세션·추적 파라미터 |
| 빈 결과·잘못된 조합 | /bags?color=nonexistent | 404와 안내 화면 검토 | 재현 URL, 재고·필터 결과 |
표의 기본 판단은 자동 규칙이 아니라 출발점입니다. 의류의 ‘검정 가방’처럼 검색 의도가 분명한 페이지와 ‘가격 낮은 순’처럼 같은 목록의 순서만 바꾸는 페이지는 같은 방법으로 처리하지 않는 편이 안전합니다.
1. 먼저 URL 목록을 만들고 필터·정렬·검색을 분리하기
개발자에게 canonical을 요청하기 전에 최근 로그, Search Console의 페이지 사례, 사이트 검색 결과, 실제 링크를 모아 URL 샘플을 만듭니다. URL 하나마다 아래 항목을 기록하면 ‘페이지가 많다’는 느낌을 운영 판단으로 바꿀 수 있습니다.
| 점검 항목 | 확인 질문 | 기록 예시 |
|---|---|---|
| 파라미터 이름 | color, size, sort, page, q 중 무엇인가? | color=black, sort=price |
| 콘텐츠 변화 | 제목·본문·상품 집합이 달라지는가? | 상품 집합은 달라지고 설명은 동일 |
| 사용자 의도 | 이 조합을 별도 검색어로 찾을 이유가 있는가? | 검정 가방은 있음, 가격순은 약함 |
| 내부 링크 | 메뉴·카테고리·본문에서 이 URL을 계속 연결하는가? | 카테고리 필터 버튼만 연결 |
| 상태 응답 | 결과 없음에도 200으로 빈 목록을 내는가? | 빈 결과가 200으로 노출 |
이 목록은 한 번 만들고 끝내는 문서가 아닙니다. 상품·카테고리·필터가 바뀌거나 새 플러그인을 설치할 때 파라미터가 추가될 수 있으므로 월간 점검표의 첫 줄에 넣는 편이 좋습니다. Google도 사람이 따라갈 수 있는 링크와 명확한 사이트 구조를 중요하게 설명하므로, URL 문자열만 보지 말고 해당 URL로 이어지는 a href 링크도 함께 확인해야 합니다. 자사몰 구조를 Google이 이해하도록 돕는 공식 안내에서 카테고리와 상품 링크의 관계를 확인할 수 있습니다.
URL 파라미터를 짧게 만들라는 말의 의미
파라미터를 줄인다는 것은 중요한 필터를 무조건 삭제하라는 뜻이 아닙니다. 콘텐츠를 바꾸지 않는 추적값, 같은 뜻을 중복 표기하는 값, 순서만 바꾸어 같은 결과를 만드는 값을 정리하라는 뜻에 가깝습니다. 예를 들어 color=black&size=m과 size=m&color=black이 같은 목록이라면 순서를 고정하고, 불필요한 파라미터가 내부 링크에 붙지 않도록 합니다. Google URL 구조 문서는 동적 URL과 불필요한 파라미터를 줄여 크롤링을 효율적으로 하라고 안내합니다.
2. 필터와 정렬을 같은 규칙으로 처리하지 않기
필터는 상품 집합을 바꾸고 정렬은 같은 상품 집합의 순서만 바꾸는 경우가 많습니다. 물론 사이트마다 구현이 다르므로 실제 HTML과 응답을 확인해야 하지만, 이 차이를 문서로 남기면 팀이 모든 query string을 일괄적으로 차단하는 실수를 줄일 수 있습니다.
| 분류 | 검색 결과에 남길 조건 | 운영 기본값 | 중단 신호 |
|---|---|---|---|
| 의미 있는 필터 | 독립 검색 의도, 충분한 상품, 고유한 제목·설명, 안정적인 URL | 색인 후보로 별도 설계 | 내용이 카테고리와 거의 같음 |
| 단순 정렬 | 상품 집합이 같고 순서만 바뀜 | 대표 카테고리로 통합 검토 | 정렬 URL이 사이트맵·내부 링크에 반복 등장 |
| 페이지네이션 | 다음 상품을 실제로 찾는 경로 | crawlable 링크와 일관된 페이지 구조 | 중복 페이지·없는 페이지가 200 |
| 내부 검색 | 사이트 이용에는 필요하지만 공개 검색 수요가 불분명 | 검색 결과 URL을 색인 대상에서 분리 검토 | 검색어 조합이 무한히 생성됨 |
색인 후보로 남길 필터에는 카테고리와 구분되는 제목, 짧은 소개, 상품 선택 기준, 관련 카테고리로 돌아가는 링크가 있어야 합니다. 필터를 선택했을 때 상품 몇 개만 바뀌고 문장·제목·내부 링크가 그대로라면 별도 페이지로 만들 정보 이득이 부족할 수 있습니다. 반대로 고객이 실제로 찾는 조합이라면 URL을 막기 전에 고유한 페이지로 만들 수 있는지 확인하세요.
3. canonical은 대표 URL을 알려주는 신호다
canonical은 비슷하거나 중복된 페이지 중 어떤 URL을 대표로 보고 싶은지 알리는 방법입니다. Google 공식 문서에서는 리디렉션, rel=canonical, 사이트맵이 서로 다른 강도의 신호라고 설명하며, 내부 링크도 대표 URL로 일관되게 연결하라고 안내합니다. 중복 URL 통합에 관한 Google 공식 문서를 기준으로 아래 순서를 점검하세요.
| 상황 | canonical 방향 | 함께 확인할 것 |
|---|---|---|
| 정렬만 바뀐 URL | 기본 카테고리 URL | 내부 링크와 사이트맵도 기본 URL인지 |
| 의미 있는 필터 랜딩 | 자기 자신 또는 사업자가 정한 대표 랜딩 | 제목·설명·상품 집합이 독립적인지 |
| 동일 상품의 추적 URL | 추적값이 없는 상품 URL | 광고·이메일 링크가 대표 URL을 쓰는지 |
| 폐기된 조합 | canonical만 붙이지 말고 상태·대체 경로 검토 | 실제로 없는 조합은 404인지 |
canonical은 ‘이 URL을 절대 색인하지 말라’는 규칙이 아닙니다. 대표 URL 선택을 돕는 신호이고, Google이 페이지를 어떻게 해석할지는 콘텐츠·링크·리디렉션 등 여러 신호를 함께 보고 결정합니다. 같은 페이지에 self-canonical을 넣는 경우에도 실제 canonical URL과 사이트맵·내부 링크가 서로 다른 호스트나 경로를 가리키지 않는지 확인하세요.
canonical과 noindex를 같은 문제의 답으로 쓰지 않기
정렬 URL을 카테고리와 합치고 싶다면 canonical이 적합할 수 있지만, 해당 URL을 검색 결과에 전혀 남기고 싶지 않다면 noindex의 목적이 더 직접적일 수 있습니다. 다만 noindex를 적용한 페이지를 robots.txt에서 동시에 막으면 Google이 noindex를 읽지 못할 수 있습니다. 정책을 정한 뒤에는 실제 응답 HTML 또는 헤더를 Googlebot이 접근할 수 있는 상태에서 확인해야 합니다.
4. robots.txt와 noindex는 서로 다른 제어 장치다
robots.txt는 크롤러가 특정 URL을 요청하지 않도록 안내하는 장치이고, noindex는 크롤러가 페이지를 읽은 뒤 검색 결과에 넣지 말라고 알리는 규칙입니다. Google은 noindex가 작동하려면 robots.txt로 해당 URL을 차단하지 않아야 한다고 설명합니다. noindex 공식 안내와 robots meta·X-Robots-Tag 사양을 함께 확인하세요.
| 목적 | 우선 검토 | 흔한 오해 |
|---|---|---|
| 크롤링 요청을 줄이기 | robots.txt 또는 URL 설계 조정 | robots.txt만으로 이미 알려진 URL의 검색 노출까지 보장한다고 생각함 |
| 검색 결과에서 제외하기 | 접근 가능한 페이지의 noindex | noindex 페이지를 robots.txt에서도 막아도 된다고 생각함 |
| 대표 URL을 통합하기 | rel=canonical, 리디렉션, 사이트맵, 일관된 내부 링크 | canonical이 noindex와 같은 강제 제외 규칙이라고 생각함 |
실무에서는 세 규칙의 변경 주체와 검증 방법도 나눠야 합니다. robots.txt는 서버 또는 SEO 설정 담당자가 바꾸고, noindex는 페이지 템플릿이나 CMS 설정에서 확인하며, canonical은 실제 렌더링된 head와 사이트맵을 비교합니다. 한 번의 화면 캡처보다 URL 샘플별 응답·HTML·사이트맵 상태를 남기는 것이 재현성이 높습니다.
5. 색인할 필터 랜딩을 남기는 네 가지 조건
필터 URL을 색인 후보로 남기기로 했다면 아래 네 가지를 모두 확인합니다.
- 검색자가 입력할 법한 조합인지 확인합니다. 운영자가 편해서 만든 필터와 실제 검색 의도는 다를 수 있습니다.
- 기본 카테고리와 다른 정보를 제공합니다. 제목, 소개, 상품 집합, 선택 기준 중 무엇이 달라지는지 한 문장으로 적습니다.
- URL 순서와 파라미터 표기가 안정적입니다. 같은 조합이 여러 주소로 생성되지 않도록 합니다.
- 카테고리·상품·관련 콘텐츠에서 crawlable한 a href 링크로 도달할 수 있습니다. 자바스크립트 클릭만으로 열리는 목록은 별도 확인이 필요합니다.
이 조건을 충족하지 못하면 필터 URL을 검색 랜딩으로 만들기보다 사용자 인터페이스로 남기고, 대표 카테고리와 상품 페이지가 더 잘 연결되는지 먼저 고칩니다. Google의 전자상거래 사이트 구조 안내는 검색창에 직접 입력해야만 도달하는 상품보다 메뉴·카테고리·상품 링크로 이어지는 구조를 권장합니다.
6. 빈 결과와 잘못된 조합은 HTTP 상태부터 점검하기
존재하지 않는 색상, 조합할 수 없는 옵션, 끝난 페이지네이션에 대해 일반 목록을 200으로 보여주면 사용자는 무엇이 잘못되었는지 알기 어렵고 크롤러도 의미 있는 페이지인지 판단하기 어렵습니다. Google의 faceted navigation 문서는 결과가 없는 필터 조합에는 적절한 404를 반환하고, 모든 빈 결과를 공통 오류 페이지로 리디렉션하지 말라고 설명합니다.
따라서 다음 세 가지를 각각 테스트합니다.
1. 실제 결과가 있는 필터 URL은 200이며 제목·상품 목록·canonical이 의도와 맞는가? 2. 결과가 없는 필터 URL은 404 또는 사이트가 정한 명확한 상태를 반환하며, 빈 목록을 정상 카테고리처럼 사이트맵에 넣지 않는가? 3. 정렬·추적·세션 URL은 사이트맵과 내부 링크에 불필요하게 반복되지 않는가?
여기서 404를 추가하는 것은 특정 URL을 검색에서 즉시 제거한다는 뜻이 아닙니다. 우선 존재하지 않는 조합을 존재하는 페이지처럼 응답하지 않도록 하는 품질 점검입니다. 이미 검색에 알려진 주소는 Search Console에서 크롤링·색인 상태를 별도로 확인해야 합니다.
7. 자사몰 운영표로 구현 전후를 비교하기
개발 작업을 요청할 때는 ‘중복 URL을 막아 주세요’라고만 쓰지 말고 아래 표처럼 URL 그룹별 기대 결과를 전달합니다. 이렇게 하면 CMS 플러그인이나 테마가 자동으로 넣은 canonical과 실제 정책이 충돌하는지 확인하기 쉽습니다.
| URL 그룹 | 기대 상태 | 구현 후 확인 |
|---|---|---|
| 기본 카테고리 | 200, 자기 자신 canonical, 사이트맵 포함 | head·사이트맵·내부 링크 일치 |
| 색상·용도 등 승인된 필터 랜딩 | 200, 독립 제목·설명, 자기 자신 canonical 검토 | 상품 집합·본문·URL 순서 |
| 가격순·인기순 정렬 | 대표 카테고리로 통합하거나 별도 정책 | canonical, 내부 링크, 사이트맵 제외 |
| 내부 검색·추적 URL | noindex 또는 크롤링 억제 정책 | robots 차단 여부와 noindex 접근 가능성 |
| 빈 결과·중복 필터 | 404 | 실제 상태 코드와 오류 화면 |
변경 전에는 대표 URL, 정렬 URL, 필터 URL, 빈 결과 URL을 각각 한 개 이상 저장합니다. 변경 후에는 같은 샘플에 대해 status code, canonical href, robots meta 또는 X-Robots-Tag, sitemap 포함 여부, 내부 링크 수를 다시 기록합니다. 이 비교표는 코드 리뷰와 Search Console 확인의 공통 입력이 됩니다.
8. 공개 후 Google에서 확인하는 순서
설정이 끝났다고 곧바로 상위 노출을 주장할 수는 없습니다. Google은 크롤링과 색인을 구분하고, 사이트맵도 크롤링·색인을 보장하지 않는다고 설명합니다. 사이트맵 공식 문서를 기준으로 아래 순서대로 기록을 남깁니다.
1. 브라우저와 curl로 대표·필터·정렬·빈 결과 URL의 HTTP 상태를 확인합니다. 2. HTML head의 canonical과 robots meta, 응답 헤더의 X-Robots-Tag를 확인합니다. 3. 사이트맵에는 검색에 남길 URL만 들어 있고, 내부 링크가 대표 URL로 연결되는지 확인합니다. 4. Search Console URL 검사에서 Google이 받은 HTML과 색인 가능 여부를 대표 URL과 샘플 필터 URL 각각 확인합니다. 5. 1회성 결과 대신 로그·Search Console·사이트맵에서 새 파라미터가 다시 생기는지 주기적으로 확인합니다.
이 사이트의 기존 SEO 글과 연결할 때는 아임웹 SEO 설정 글, 상품 카테고리 구조 글, 페이지 로딩 속도 글, 내부 검색 최적화 글을 함께 읽으면 구현 담당자와 콘텐츠 담당자가 같은 URL 기준을 공유하기 좋습니다.
자주 묻는 질문
필터 URL은 모두 noindex로 처리하면 되나요?
아닙니다. 실제 검색 수요가 있고 카테고리와 다른 유용한 내용을 제공하는 필터 랜딩은 색인 후보가 될 수 있습니다. 반대로 단순 정렬·세션·추적 URL은 별도 색인 가치가 낮을 수 있습니다. URL 종류별로 판단표를 만들고 한꺼번에 적용하지 마세요.
robots.txt에서 막았는데 왜 검색 결과에 주소가 남을 수 있나요?
robots.txt는 크롤링 요청을 막는 규칙이지, Google이 다른 경로로 발견한 URL의 검색 노출을 완전히 보장해 제거하는 규칙이 아닙니다. 페이지 단위로 noindex를 읽혀야 하는 상황이라면 크롤러가 해당 HTML이나 헤더에 접근할 수 있어야 합니다.
canonical만 설정하면 중복 URL 문제가 끝나나요?
canonical은 대표 URL 선택을 돕는 신호입니다. 내부 링크, 리디렉션, 사이트맵, 제목·본문의 실제 유사도와 서로 다른 URL을 가리키면 신호가 약해질 수 있습니다. 대표 URL로 링크를 통일하고, 불필요한 파라미터 생성 자체도 줄여야 합니다.
마지막 10분 점검표
- [ ] 필터·정렬·검색·세션·페이지네이션 URL을 별도 그룹으로 분류했는가?
- [ ] 색인 후보 필터마다 독립 검색 의도와 고유한 정보 이득을 적었는가?
- [ ] 정렬 URL의 canonical·noindex·robots.txt 정책을 한 문장으로 설명할 수 있는가?
- [ ] noindex를 읽어야 하는 URL을 robots.txt로 동시에 막고 있지 않은가?
- [ ] 빈 결과·중복 필터·없는 페이지가 404로 재현되는가?
- [ ] 사이트맵과 내부 링크가 대표 URL만 일관되게 가리키는가?
- [ ] Search Console URL 검사에서 대표 URL과 샘플 필터 URL을 각각 확인했는가?
필터 URL을 줄이는 목표는 URL 개수 자체가 아니라 검색자가 찾을 가치가 있는 페이지에 크롤링과 내부 링크 신호를 집중하는 것입니다. 먼저 URL 목록과 상태 코드를 확보하고, 그 다음 canonical·noindex·robots.txt의 역할을 나누면 자사몰의 검색 노출을 점검할 때 원인과 조치를 연결하기 쉬워집니다.
공식 문서
- Google faceted navigation
- Google URL structure
- Google canonical URL
- Google noindex
- Google robots meta
- Google ecommerce site structure
- Google sitemaps