마케팅 요소와 SEO를 고려한 개발 가이드라인.
모든 public 페이지에 반드시 포함:
export const metadata: Metadata = {
title: '페이지 제목 - 브랜드명',
description: '150자 이내, 핵심 키워드 포함',
openGraph: {
title: '공유 시 노출될 제목',
description: '공유 시 노출될 설명',
url: canonicalUrl,
siteName: '브랜드명',
type: 'website', // 또는 'article'
images: [{ url: ogImageUrl, width: 1200, height: 630 }],
},
twitter: {
card: 'summary_large_image',
title: '트위터 공유 제목',
description: '트위터 공유 설명',
},
alternates: {
canonical: canonicalUrl,
languages: { /* 지원 로케일별 URL */ },
},
};
사용자 전용 페이지(마이페이지, 폼 등)는 인덱싱 방지:
export const metadata: Metadata = {
robots: { index: false, follow: false },
};
sitemap.xml: 동적 페이지 포함하여 자동 생성 (Next.js app/sitemap.ts 활용)robots.txt: 크롤링 허용/차단 경로 명시 (Next.js app/robots.ts 활용)검색 결과 노출 강화를 위해 주요 페이지에 JSON-LD 추가:
// 리스트 페이지: WebSite, ItemList
// 상세 페이지: SoftwareApplication, Product, Article 등 적합한 스키마
// 조직 정보: Organization
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
| 이벤트 | 설명 |
|---|---|
sign_up | 회원가입 완료 |
submit_content | 콘텐츠(프로젝트 등) 등록 |
vote | 투표/좋아요 |
share | 공유 (채널별 구분) |
click_cta | 주요 CTA 클릭 |
start_checkout | 결제 시작 |
complete_purchase | 결제 완료 |
// shared/lib/analytics/track-event.ts
export function trackEvent(name: string, params?: Record<string, string | number>) {
if (typeof window !== 'undefined' && window.gtag) {
window.gtag('event', name, params);
}
}
shared/lib/analytics/에 중앙화gtag 호출 금지, 반드시 래퍼 함수 사용Primary: 배경색 채움 (bg-primary text-white)
Secondary: 아웃라인 (border text-muted)
Tertiary: 텍스트만 (text-primary underline)
새 랜딩 페이지 또는 홈페이지 수정 시 확인:
next/image로 최적화, WebP/AVIF 포맷 우선next/font로 로드하여 CLS 방지아직 피드백이 없어요. 첫 번째로 의견을 남겨보세요!