Skip to content

feat: 포스트 slug 영문화 및 레거시 slug 301 리다이렉트 적용#98

Merged
ShipFriend0516 merged 4 commits into
masterfrom
feature/add-slug-field
May 22, 2026
Merged

feat: 포스트 slug 영문화 및 레거시 slug 301 리다이렉트 적용#98
ShipFriend0516 merged 4 commits into
masterfrom
feature/add-slug-field

Conversation

@ShipFriend0516
Copy link
Copy Markdown
Owner

📝 변경 사항 요약

검색엔진에 색인된 포스트 URL(한글 slug)을 영문 slug로 마이그레이션하면서 기존 URL의 SEO를 보호합니다.
Post 모델에 legacySlug 배열 필드를 추가해 구 slug를 보관하고, 구 URL로 접근 시 새 URL로 영구 리다이렉트(308)합니다.
또한 글 작성 시 사용자가 직접 영문 slug를 입력하도록 slug 입력 UI 및 유효성 검사를 추가했습니다.

🔄 변경 내용

SEO 마이그레이션

  • app/models/Post.ts — legacySlug 배열 필드 추가 (indexed, 이전 slug 누적 보관)
  • app/posts/[slug]/page.tsx — permanentRedirect() 적용: 구 slug 접근 시 legacySlug 조회 후 새 URL로 308 리다이렉트
  • app/migrate/migrateToEnglishSlug.ts — 45개 포스트 한글 slug to 영문 slug 마이그레이션 스크립트 (실행 완료)
  • app/types/Post.d.ts — legacySlug 타입 추가

slug 입력 UI

  • app/entities/post/write/PostMetadataForm.tsx — slug 입력 필드 추가, 한글 입력 차단, 수정 모드 비활성화
  • app/hooks/post/usePost.ts — formData에 slug 필드 추가, PostBody에 slug 포함
  • app/api/posts/route.ts — slug 수신, 패턴 검사(영문+숫자+하이픈), 중복 검사(409)
  • app/lib/utils/validate/validate.ts — slug 필수 및 패턴 유효성 검사 추가

에디터 리렌더링 최적화

  • app/entities/post/write/BlogForm.tsx — useMemo/useCallback으로 previewOptions, 핸들러 메모이제이션
  • app/entities/post/write/PostMetadataForm.tsx — memo() 래핑
  • app/hooks/post/usePost.ts, useCloudDraft.ts — 콜백 메모이제이션

🔍 리다이렉트 동작 흐름

구 URL: /posts/블로그-cls-성능-최적화하기
  -> DB에서 slug 조회 -> 없음
  -> DB에서 legacySlug 조회 -> 발견
  -> permanentRedirect (308)
새 URL: /posts/optimizing-blog-cls-performance

향후 slug를 다시 변경하더라도 legacySlug 배열에 누적되므로 히스토리가 보존됩니다.

✅ 체크리스트

  • 마이그레이션 스크립트 실행 완료 (45/45 성공)
  • legacySlug DB 인덱스 적용
  • 구 slug 접근 시 308 리다이렉트 동작 확인
  • 신규 포스트 작성 시 slug 유효성 검사 동작 확인
  • 수정 모드에서 slug 필드 비활성화 확인

ShipFriend0516 and others added 3 commits May 20, 2026 23:19
- Post 모델에 legacySlug 배열 필드 추가 (구 slug 보관 및 인덱스)
- 포스트 상세 페이지에서 legacySlug 조회 후 permanentRedirect 처리
- 45개 포스트 slug 영문화 마이그레이션 스크립트 추가
- Post 타입에 legacySlug?: string[] 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blog Ready Ready Preview, Comment May 22, 2026 2:10pm

lean<{ slug: string }>() 으로 반환 타입을 지정해 TS2339 오류 해결

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@ShipFriend0516 ShipFriend0516 changed the title feat(seo): 포스트 slug 영문화 및 레거시 slug 301 리다이렉트 적용 feat: 포스트 slug 영문화 및 레거시 slug 301 리다이렉트 적용 May 22, 2026
@ShipFriend0516 ShipFriend0516 merged commit c2708c6 into master May 22, 2026
3 checks passed
@ShipFriend0516 ShipFriend0516 deleted the feature/add-slug-field branch May 22, 2026 14:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant