← 포트폴리오 목록

지역 서비스 SEO 웹사이트 빌더

지역별 동적 랜딩페이지, 서버 사이드 렌더링 기반 테크니컬 SEO 구조, 템플릿 에디터, 문의·예약 접수 폼을 포함한 지역 서비스 웹사이트를 Next.js와 PostgreSQL 기반으로 설계·구현하는 프로젝트입니다.

프로젝트 납품 요약

아래 프로젝트 개요와 핵심 기능에서 구현 화면을 확인할 수 있습니다.

서비스 타입Web
업종플랫폼
기술 스택
Next.jsTypeScriptTailwind CSSNode.jsNext.js API RoutesPostgreSQLPrismaZod
주요 기능
  • 지역 페이지 템플릿 에디터
  • 지역별 동적 랜딩페이지
  • 테크니컬 SEO 메타 및 구조화 데이터
  • 문의·예약 접수 폼

프로젝트 개요

범위: 개발, 디자인, 기획

지역별 동적 랜딩페이지, 서버 사이드 렌더링 기반 테크니컬 SEO 구조, 템플릿 에디터, 문의·예약 접수 폼을 포함한 지역 서비스 웹사이트를 Next.js와 PostgreSQL 기반으로 설계·구현하는 프로젝트입니다.

작업 범위

  • 지역 페이지 템플릿 에디터: 좌측 블록 트리, 중앙 미리보기 캔버스, 우측 속성 패널로 지역 페이지의 문구와 블록 구성을 편집하는 화면입니다
  • 지역별 동적 랜딩페이지: 강남, 해운대 등 지역 슬러그로 접속하면 해당 지역 정보가 담긴 반응형 랜딩페이지가 서버에서 렌더링되는 방문자용 화면입니다
  • 테크니컬 SEO 메타 및 구조화 데이터: 페이지별 Title·Description·H1·canonical 값과 JSON-LD 구조화 데이터, 사이트맵·robots.txt 생성 결과를 한 화면에서 확인하는 점검 화면입니다
  • 문의·예약 접수 폼: 방문자가 이름·연락처·희망 일정을 입력해 문의와 예약을 접수하는 폼과 접수 완료 안내 화면입니다

주요 업무

  • 지역 페이지 템플릿 에디터 화면: 하나의 템플릿에 지역명·대표 서비스·문구 변수를 주입해 지역 페이지를 생성하고, 편집 내용이 캔버스에 즉시 반영되는 구조로 구현합니다
  • 지역별 동적 랜딩페이지 화면: Next.js 동적 라우트와 정적 경로 사전 생성(generateStaticParams)으로 지역 URL을 자동 생성합니다
  • 테크니컬 SEO 메타 및 구조화 데이터 화면: 지역 페이지마다 메타태그와 Schema Markup을 서버에서 동적으로 삽입하고 사이트맵을 자동 생성하는 구조로 구현합니다
  • 문의·예약 접수 폼 화면: 입력값 검증 후 PostgreSQL에 저장하고 지역 페이지 출처를 함께 기록합니다
지역 서비스 SEO 웹사이트 빌더
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

지역 페이지가 늘어날 때 본문이 유사해져 중복 콘텐츠로 분류될 수 있어

지역별 고유 블록과 중복 검출 규칙을 설계합니다

서버 렌더링 결과와 클라이언트 에디터 미리보기의 불일치가 생길 수 있어

동일한 렌더 함수를 양쪽에서 공유하는 구조로 대응합니다

동적 라우팅 경로가 많아질수록 사이트맵 갱신 범위가 커지므로

변경된 지역만 재생성하는 on-demand 재검증 구조를 적용합니다

구조화 데이터 필수 속성이 지역 정보 누락으로 비어 있을 수 있어

입력 단계에서 필수 항목을 강제하는 스키마 검증으로 대응합니다

구현 내용

핵심 기능 상세

핵심 기능 1

지역 페이지 템플릿 에디터

좌측 블록 트리, 중앙 미리보기 캔버스, 우측 속성 패널로 지역 페이지의 문구와 블록 구성을 편집하는 화면입니다.

  • 블록 트리 상태를 Zustand로 관리하고 Immer로 불변 업데이트를 적용
  • 템플릿 변수({지역명} 등)를 서버에서 치환하는 렌더 함수로 지역별 페이지를 일괄 생성
  • dnd-kit 기반 블록 순서 변경과 속성 인스펙터 폼을 React Hook Form + Zod로 검증

하나의 템플릿에서 지역별 페이지를 생성하는 변수 치환 구조와 실시간 캔버스 미리보기를 구현합니다.

지역 페이지 템플릿 에디터
지역 페이지 템플릿 에디터 실제 화면
핵심 기능 2

지역별 동적 랜딩페이지

강남, 해운대 등 지역 슬러그로 접속하면 해당 지역 정보가 담긴 반응형 랜딩페이지가 서버에서 렌더링되는 방문자용 화면입니다.

  • App Router 동적 세그먼트([region])와 generateStaticParams로 지역 경로를 빌드 시점에 생성
  • 지역 데이터 변경 시 on-demand revalidate로 해당 경로만 재생성
  • Tailwind CSS 반응형 그리드와 모바일 우선 레이아웃 적용

지역 슬러그 하나로 URL·콘텐츠·메타 정보가 함께 생성되는 동적 라우팅 구조를 구현합니다.

지역별 동적 랜딩페이지
지역별 동적 랜딩페이지 실제 화면
핵심 기능 3

테크니컬 SEO 메타 및 구조화 데이터

페이지별 Title·Description·H1·canonical 값과 JSON-LD 구조화 데이터, 사이트맵·robots.txt 생성 결과를 한 화면에서 확인하는 점검 화면입니다.

  • generateMetadata로 지역별 Title·Description·canonical·Open Graph를 서버에서 생성
  • LocalBusiness·FAQPage JSON-LD를 지역 데이터에서 직렬화해 script 태그로 삽입
  • sitemap.ts와 robots.ts 라우트로 지역 추가 시 사이트맵 항목 자동 갱신

지역 데이터에서 메타태그·JSON-LD·사이트맵 항목이 함께 생성되는 서버 렌더링 SEO 구조를 설계합니다.

테크니컬 SEO 메타 및 구조화 데이터
테크니컬 SEO 메타 및 구조화 데이터 실제 화면
핵심 기능 4

문의·예약 접수 폼

방문자가 이름·연락처·희망 일정을 입력해 문의와 예약을 접수하는 폼과 접수 완료 안내 화면입니다. 입력값 검증 후 PostgreSQL에 저장하고 지역 페이지 출처를 함께 기록합니다.

  • React Hook Form + Zod 스키마를 클라이언트와 API Route에서 공유해 이중 검증
  • Prisma로 문의·예약 테이블에 저장하고 유입 지역 페이지를 외래키로 기록
  • 중복 제출 방지를 위한 요청 멱등 키와 간단한 제출 간격 제한 적용

접수 데이터에 유입 지역 페이지를 함께 기록해 관리자가 지역별로 문의를 구분할 수 있는 구조를 구현합니다.

문의·예약 접수 폼
문의·예약 접수 폼 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

지역 데이터 모델과 URL 구조 설계 · 2026.10

지역·템플릿·문의 테이블 ERD 설계, 지역 슬러그 규칙과 동적 라우트 구조 정의

STEP 2

서버 렌더링 지역 페이지 구현 · 2026.10

Next.js 동적 라우트, generateStaticParams, 반응형 랜딩 템플릿 구현

STEP 3

SEO 메타·JSON-LD·사이트맵 구성 · 2026.10

generateMetadata, 구조화 데이터 직렬화, 사이트맵·robots 라우트 구현

STEP 4

템플릿 에디터와 접수 폼 개발 · 2026.10

블록 트리 에디터, 실시간 미리보기, 문의·예약 폼과 검증 API 구현

개발 결과

지역 슬러그 기반 동적 라우팅 구조 설계Next.js 동적 세그먼트와 generateStaticParams로 지역별 URL을 자동 생성하고 on-demand 재생성 구조를 설계합니다
서버 렌더링 메타태그 생성 모듈 구현generateMetadata로 지역별 Title·Description·canonical을 생성하고 중복 값 검출 규칙을 적용합니다
JSON-LD 구조화 데이터 직렬화기 구축LocalBusiness·FAQPage 스키마를 지역 데이터에서 직렬화하고 필수 속성 누락을 점검하는 검증 로직을 구현합니다
템플릿 변수 치환 렌더 엔진 구현지역명·서비스명 변수를 블록 단위로 치환하는 렌더 함수와 미리보기 동기화 구조를 설계합니다

기술적 주안점

  • 하나의 템플릿에서 지역별 페이지를 생성하는 변수 치환 구조와 실시간 캔버스 미리보기를 구현합니다
  • 지역 슬러그 하나로 URL·콘텐츠·메타 정보가 함께 생성되는 동적 라우팅 구조를 구현합니다
  • 지역 데이터에서 메타태그·JSON-LD·사이트맵 항목이 함께 생성되는 서버 렌더링 SEO 구조를 설계합니다

유사한 프로젝트를 기획하고 계신가요?

필요한 기능과 일정을 알려주시면 개발 범위를 함께 정리하겠습니다.

프로젝트 문의