본문으로 건너뛰기
읽기 시간: 12분

최종 업데이트: 2026년 6월 6일

데이터베이스와 동적 페이지 SEO — 쇼핑몰·게시판이 검색되게 하는 법

동적 페이지 SEO란 데이터베이스에서 자동 생성되는 URL을 검색엔진이 제대로 색인하도록 만드는 작업입니다. 파라미터 URL 중복, canonical 실수, 페이지네이션, 크롤링 예산, 정적 생성(SSG)·캐싱까지 쇼핑몰·예약·게시판 운영자가 알아야 할 핵심을 정리했습니다.

쇼핑몰을 운영하는 사장님 한 분이 이런 말을 했습니다. "상품이 3,000개나 등록돼 있는데, 구글에서 검색되는 건 메인 페이지 하나뿐이에요."

상품 페이지가 3,000개라면 그건 검색 유입 통로가 3,000개라는 뜻입니다. 그런데 색인된 건 1개. 나머지 2,999개는 만들어 놓고도 검색엔진 눈에 보이지 않는 상태입니다. 이게 바로 동적 페이지 SEO를 모르고 사이트를 키웠을 때 생기는 일입니다.

"동적 페이지 SEO란 데이터베이스에서 자동으로 만들어지는 페이지(상품·게시글·예약 슬롯 등)를 검색엔진이 제대로 찾고, 중복 없이 색인하도록 정리하는 작업이다." — 야무진SEO

상품, 게시글, 예약 시간표. 이런 페이지들은 사장님이 한 장 한 장 손으로 HTML을 쓴 게 아닙니다. 데이터베이스에 저장된 정보를 화면에 자동으로 찍어내는 것이죠. 편하지만, 검색엔진 입장에서는 골치 아픈 구조입니다. 왜 그런지부터 풀어보겠습니다.

정적 페이지 vs 동적 페이지 — 검색엔진은 둘을 다르게 본다

먼저 용어 정리부터 하겠습니다. 어려운 개발 용어 없이 갑니다.

정적 페이지는 회사 소개나 서비스 안내처럼 내용이 고정된 페이지입니다. 누가 봐도 똑같은 화면이 나옵니다. 검색엔진이 다루기 가장 쉬운 형태입니다.

동적 페이지는 데이터베이스에서 그때그때 정보를 꺼내 만드는 페이지입니다. 쇼핑몰 상품 페이지, 게시판 글, 예약 사이트의 날짜별 화면이 전부 여기에 해당합니다. 주소(URL)도 shop.com/product?id=1024처럼 물음표가 붙거나, 페이지 번호가 들어가는 경우가 많습니다.

경쟁사 자료를 살펴보면 NeonDB, Prisma, Sequelize 같은 데이터베이스 도구 설명은 자세합니다. "ORM이 어떻고 스키마가 어떻고"라는 개발자용 내용이죠. 하지만 정작 사장님이 궁금한 것 — "이 자동 생성 페이지가 왜 구글에 안 잡히는가" — 는 어디에도 없었습니다. 도구를 설명하는 글은 많은데, 검색엔진 관점에서 풀어주는 글은 비어 있더군요.

검색엔진(구글봇)은 사람이 아닙니다. 사이트 링크를 따라다니며 페이지를 하나씩 긁어가는 프로그램입니다. 정적 페이지는 주소 하나에 내용 하나라 깔끔하지만, 동적 페이지는 주소가 무한히 늘어날 수 있어서 봇이 길을 잃기 쉽습니다.

문제 1: 파라미터 URL이 같은 페이지를 수십 개로 복제한다

동적 사이트에서 가장 흔한 사고가 이겁니다. 하나의 상품 페이지가 검색엔진 눈에는 여러 개로 보이는 현상.

쇼핑몰에서 필터를 누르면 주소가 이렇게 바뀝니다.

  • shop.com/shoes (운동화 카테고리)
  • shop.com/shoes?color=black (검정 필터)
  • shop.com/shoes?color=black&sort=price (가격순 정렬)
  • shop.com/shoes?sort=price&color=black (순서만 바뀜)

사람 눈에는 같은 운동화 목록입니다. 그런데 구글봇 눈에는 주소가 다르니 서로 다른 4개의 페이지입니다. 내용은 거의 같은데 주소만 다른 페이지가 수십, 수백 개로 불어납니다. 이게 중복 콘텐츠 문제입니다.

"검색엔진은 주소가 다르면 다른 페이지로 본다. 사람에게 같아 보여도 소용없다. 물음표 뒤 파라미터 하나가 색인을 망가뜨린다." — 야무진SEO

저희가 진단했던 한 의류 쇼핑몰의 사례를 공개합니다. 실제 상품은 약 800개였는데, 구글 서치콘솔에서 색인 상태를 보니 색인된 URL이 1만 2천 개를 넘었습니다. 필터와 정렬 조합이 만들어낸 중복 주소가 진짜 상품의 15배였던 거죠. (출처: 야무진SEO 클라이언트 진단 데이터, 의류 쇼핑몰 1건)

이러면 무슨 일이 벌어질까요. 구글은 "이 사이트는 비슷한 페이지가 너무 많네"라고 판단합니다. 그리고 진짜 중요한 상품 페이지의 평가까지 흐려집니다. 힘이 분산되는 겁니다.

문제 2: canonical 한 줄을 잘못 써서 상품 전체가 사라진다

해결책의 핵심은 canonical(캐노니컬) 태그입니다. "이 주소들 중에서 진짜 대표는 이거야"라고 구글에게 알려주는 표시입니다.

예를 들어 shop.com/shoes?color=black의 코드 안에 "원본은 shop.com/shoes다"라고 적어두면, 구글은 필터 주소들을 무시하고 원본 하나만 평가합니다. 중복 문제가 정리되는 거죠.

여기서 사장님들이 자주 듣지 못하는 함정을 하나 짚겠습니다. 경쟁사 글 어디에도 없던 내용입니다.

쇼핑몰 카테고리 페이지의 canonical을 통째로 메인 페이지로 걸어버리는 실수. 개발자나 제작 업체가 "중복을 막아야 한다"는 말만 듣고, 모든 페이지의 canonical을 첫 화면 주소로 일괄 설정하는 경우가 있습니다. 그러면 구글은 상품 페이지, 카테고리 페이지를 전부 "메인의 복사본"으로 처리하고 색인에서 빼버립니다. 중복을 막으려다 사이트 전체를 검색에서 지우는 사고입니다.

올바른 원칙은 이렇습니다.

  • 필터·정렬 파라미터 주소 → 원본 카테고리 주소를 canonical로
  • 카테고리 페이지 → 자기 자신을 canonical로 (메인이 아님)
  • 상품 페이지 → 자기 자신을 canonical로
  • 페이지네이션 2페이지, 3페이지 → 각자 자기 자신을 canonical로

핵심은 "canonical은 진짜 같은 내용일 때만 다른 주소를 가리킨다"는 점입니다. 내용이 다른 페이지를 억지로 한곳으로 모으면 안 됩니다. 기술 SEO 기초에서 다룬 것처럼, 검색엔진에 신호를 줄 때는 정확해야 합니다. 어설픈 신호는 안 주느니만 못합니다.

문제 3: 페이지네이션 — 게시판 2페이지부터 안 잡히는 이유

게시판이나 상품 목록은 보통 여러 페이지로 나뉩니다. 1페이지, 2페이지, 3페이지. 이걸 페이지네이션이라고 합니다.

흔한 오해가 있습니다. "2페이지부터는 중복이니까 canonical을 1페이지로 걸자." 절대 안 됩니다. 2페이지에 있는 글과 1페이지에 있는 글은 서로 다른 내용입니다. canonical을 1페이지로 걸면 2페이지 이후의 모든 게시글이 색인에서 사라집니다.

게시판을 운영하는 분이라면 이게 치명적입니다. 검색 유입의 상당수는 오래된 글, 즉 뒷페이지에 묻힌 글에서 나오기 때문입니다. 뒷페이지를 통째로 날리면 긴 꼬리(롱테일) 검색 트래픽을 통째로 포기하는 셈입니다.

올바른 처리는 단순합니다.

  1. 각 페이지는 자기 자신을 canonical로 한다 (2페이지는 2페이지가 원본)
  2. 개별 게시글·상품 상세 페이지로 가는 링크가 끊기지 않게 한다
  3. 자바스크립트 "더 보기" 버튼만 쓰면 봇이 못 따라가니, 실제 주소가 있는 페이지 링크를 함께 둔다

3번이 의외로 많이 놓치는 부분입니다. 무한 스크롤이나 "더 보기" 버튼은 사람에게는 편하지만, 구글봇은 스크롤도 클릭도 하지 않습니다. 봇이 따라갈 수 있는 진짜 링크가 없으면, 그 안쪽 페이지들은 존재하지 않는 것과 같습니다.

문제 4: 크롤링 예산 — 봇은 무한정 긁지 않는다

여기서 한 단계 더 들어가겠습니다. 페이지가 수천, 수만 개인 대형 동적 사이트에만 해당하는 이야기입니다.

구글봇은 한 사이트를 방문할 때 "오늘은 여기까지만 보자"는 한도가 있습니다. 이걸 크롤링 예산이라고 부릅니다. 사이트가 작으면 신경 쓸 필요 없습니다. 하지만 페이지가 1만 개를 넘어가면 이야기가 달라집니다.

문제 1에서 본 중복 주소가 왜 더 위험한지 여기서 드러납니다. 봇이 정해진 한도 안에서 의미 없는 필터·정렬 주소만 잔뜩 긁다가, 정작 새로 올린 신상품 페이지에는 도달하지 못하고 돌아갑니다. 예산을 쓰레기 주소에 낭비하는 거죠.

"대량 동적 페이지는 만드는 것보다 정리하는 게 어렵다. 봇이 헤매지 않게 길을 좁혀줘야 진짜 중요한 페이지가 검색된다." — 야무진SEO

크롤링 예산을 아끼는 실전 방법은 이렇습니다.

  • robots.txt로 필터·정렬·검색 결과 주소를 크롤링에서 제외한다
  • 사이트맵(sitemap.xml)에는 색인되길 원하는 진짜 주소만 넣는다
  • 404나 리다이렉트가 무한히 도는 주소를 정리한다
  • 내부 링크 구조를 정돈해 중요한 페이지가 클릭 2~3번 안에 닿게 한다

저희 경험상, 대형 쇼핑몰 SEO에서 새 상품을 더 잘 노출시키는 작업의 절반은 "불필요한 주소를 봇 동선에서 치우는 일"이었습니다. 더하는 게 아니라 빼는 작업이 성과를 냈습니다.

정적 생성(SSG)과 캐싱 — 동적 페이지를 정적처럼 빠르게

마지막 무기는 속도입니다. 동적 페이지는 매번 데이터베이스에서 정보를 꺼내 조립하느라 정적 페이지보다 느립니다. 그리고 기술 SEO 기초에서 강조했듯, 로딩 속도는 순위에 직접 영향을 줍니다.

해법이 정적 생성(SSG)과 캐싱입니다. 개념만 쉽게 풀면 이렇습니다.

정적 생성(SSG)은 동적 페이지를 미리 한 번 만들어 정적 파일로 저장해두는 방식입니다. 상품 정보가 자주 바뀌지 않는다면, 매번 데이터베이스를 부르지 않고 저장된 화면을 바로 보여줍니다. 빠르고, 봇도 긁기 쉽습니다.

캐싱은 한 번 만든 결과를 잠깐 저장해두고 재사용하는 것입니다. 1초 전에 누가 본 페이지를 다시 만들지 않고 그대로 내보냅니다. 서버 부담도 줄고 속도도 빨라집니다.

이 둘을 적용하면 동적 페이지의 단점(느림)을 거의 정적 페이지 수준으로 끌어올릴 수 있습니다. 페이지 수가 많아도 검색엔진이 빠르게 긁어가니, 크롤링 예산도 덜 씁니다. 대량 페이지를 다루는 프로그래매틱 SEO에서도 이 정적 생성이 핵심 토대가 됩니다.

다만 주의할 점. 매일 가격이 바뀌는 상품이나 실시간 예약 현황처럼 정보가 자주 변하는 페이지는 캐싱 시간을 짧게 잡아야 합니다. 오래된 정보가 검색에 박제되면 오히려 신뢰를 잃습니다. 무엇을 정적으로 만들고 무엇을 실시간으로 둘지 — 이 판단이 동적 사이트 SEO의 진짜 실력입니다.

사장님을 위한 실전 점검표

복잡해 보이지만, 사장님이 직접 확인할 수 있는 것부터 정리하겠습니다. 온페이지 SEO 체크리스트와 함께 보면 좋습니다.

  • [ ] 구글에서 site:내도메인.com을 검색해 색인된 페이지 수를 본다
  • [ ] 색인 수가 실제 상품·글 수보다 비정상적으로 많으면 → 파라미터 중복 의심
  • [ ] 색인 수가 실제보다 훨씬 적으면 → canonical 오설정이나 크롤링 차단 의심
  • [ ] 상품 상세 페이지 주소를 직접 구글에 검색해 잡히는지 확인한다
  • [ ] "더 보기" 버튼만으로 뒷페이지가 열린다면 → 봇이 못 따라갈 위험
  • [ ] 페이지 로딩이 3초 넘게 걸리면 → 캐싱·정적 생성 검토

이 중 하나라도 걸리면, 만들어 놓은 페이지가 검색이라는 무대에 못 올라가고 있을 가능성이 높습니다.

자주 묻는 질문 (FAQ)

파라미터가 붙은 주소를 전부 막으면 되나요?

무작정 막으면 안 됩니다. 필터·정렬·검색 결과처럼 색인이 불필요한 주소만 막아야 합니다. 페이지 번호처럼 실제 다른 내용을 담은 파라미터까지 막으면 진짜 페이지가 사라집니다. 주소마다 성격을 구분해 처리하는 게 핵심입니다.

canonical과 robots.txt 중 무엇으로 중복을 막아야 하나요?

역할이 다릅니다. canonical은 "이 주소들 중 대표는 이거"라고 알려주는 추천이고, robots.txt는 "여기는 아예 긁지 마"라는 차단입니다. 내용이 같은 중복은 canonical로 대표를 지정하고, 크롤링 예산을 아끼고 싶은 무의미한 주소는 robots.txt로 막는 게 일반적입니다.

쇼핑몰 솔루션(카페24·아임웹 등)을 쓰는데도 이걸 신경 써야 하나요?

네. 솔루션이 기본 구조는 잡아주지만, 필터·정렬 중복이나 canonical 설정은 솔루션마다 다르고 완벽하지 않습니다. 실제로 솔루션 기본값 그대로 두어서 중복이 수천 개씩 쌓인 사이트를 자주 봅니다. 한 번은 점검이 필요합니다.

게시판 글이 많은데 오래된 글도 검색에 노출시킬 수 있나요?

가능합니다. 오히려 오래된 글이 검색 유입의 큰 비중을 차지하는 경우가 많습니다. 페이지네이션을 올바르게(각 페이지 자기 자신 canonical) 처리하고, 개별 글로 가는 링크가 끊기지 않게 하면 됩니다. 뒷페이지를 1페이지로 canonical 거는 실수만 피해도 절반은 해결됩니다.

페이지가 수만 개인데 색인이 너무 느립니다. 방법이 있나요?

사이트맵 정리, 크롤링 예산 최적화, 정적 생성·캐싱을 함께 적용해야 합니다. 봇이 무의미한 주소에 예산을 쓰지 않도록 동선을 좁히고, 페이지를 빠르게 내보내는 게 핵심입니다. 페이지 수가 클수록 "빼는 작업"의 효과가 큽니다.


동적 페이지는 사이트의 약점이 아니라 무기입니다. 상품 3,000개, 게시글 5,000개는 곧 검색 유입 통로 8,000개라는 뜻이니까요. 다만 그 통로가 막혀 있으면 아무 소용이 없습니다. 막힌 곳을 뚫는 일이 동적 페이지 SEO입니다.

오늘 당장 site:내도메인.com을 구글에 검색해 색인된 페이지 수부터 확인해보세요. 그 숫자가 실제 페이지 수와 크게 다르다면, 어딘가 신호가 잘못 가고 있다는 뜻입니다. 어디가 막혔는지 직접 찾기 어렵다면, 무료 SEO 진단을 신청해주세요. 동적 페이지가 색인을 막고 있는지, 어디부터 손대야 효과가 큰지 구체적으로 짚어 드립니다.

쇼핑몰·게시판이 검색에 안 잡히시나요?

무료 SEO 진단으로 동적 페이지가 색인을 막고 있는지, 어디부터 고쳐야 하는지 확인해 드립니다.