feat: Phase 2 — SEO 인프라 + GA 이벤트 + 콘텐츠 엔진 구축
[SEO 인프라] - app/sitemap.ts: Next.js App Router 사이트맵 자동 생성 (/sitemap.xml) - app/robots.ts: 크롤러 허용/차단 규칙 + 사이트맵 경로 등록 - app/layout.tsx: JSON-LD 구조화 데이터 추가 (Person + LocalBusiness + OfferCatalog 스키마) - GA4 config 업데이트 (send_page_view, custom_map) [서비스 페이지 SEO 메타태그 강화] - automation: 'AI 업무 자동화 외주' 키워드 12종 최적화 - prompt: 'ChatGPT 프롬프트 잘 쓰는 법', '이미지 생성 프롬프트' 등 구매형 키워드 추가 - website: '소상공인 홈페이지 제작 외주', '홈페이지 제작 비용' 등 롱테일 키워드 추가 [GA 이벤트 트래킹] - ContactModal: contact_attempt / generate_lead / contact_error 이벤트 추가 (전환 추적 핵심 — 어떤 서비스에서 문의가 오는지 GA에서 확인 가능) [홈페이지 콘텐츠 위젯] - 'AI 자동화 실전 팁' 블로그 포스트 3종 카드 섹션 추가 (블로그 연동 준비) [콘텐츠 자산 (CONTENT/ 폴더)] - brand-story.md: 풀/숏/초단문/유튜브 채널 소개용 4종 브랜드 스토리 원고 - youtube-scripts.md: 유튜브 숏츠 스크립트 10편 (훅→문제→시연→CTA 구조) - sns-calendar.md: 30일 SNS 포스팅 캘린더 (블로그·스레드·카카오·블라인드 채널별) - blog-drafts.md: 네이버 블로그 SEO 초안 10편 (키워드·소제목·본문 완성) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,45 @@ export const metadata: Metadata = {
|
||||
},
|
||||
};
|
||||
|
||||
const jsonLd = {
|
||||
'@context': 'https://schema.org',
|
||||
'@graph': [
|
||||
{
|
||||
'@type': 'Person',
|
||||
'@id': 'https://jaengseung-made.com/#person',
|
||||
name: '박재오',
|
||||
url: 'https://jaengseung-made.com',
|
||||
jobTitle: '백엔드 개발자 · AI 자동화 전문가',
|
||||
worksFor: { '@type': 'Organization', name: '대기업 재직 중' },
|
||||
email: 'bgg8988@gmail.com',
|
||||
telephone: '010-3907-1392',
|
||||
knowsAbout: ['Python', 'Java', 'Spring Boot', 'Next.js', 'RPA', 'AI 자동화', '업무 자동화'],
|
||||
description: '현직 대기업 백엔드 개발자. 계약서 먼저, 납기 보장, 소스코드 100% 인도 원칙으로 외주 개발·AI 자동화·프롬프트 엔지니어링 서비스를 제공합니다.',
|
||||
},
|
||||
{
|
||||
'@type': 'LocalBusiness',
|
||||
'@id': 'https://jaengseung-made.com/#business',
|
||||
name: '쟁승메이드',
|
||||
url: 'https://jaengseung-made.com',
|
||||
description: '현직 대기업 개발자가 운영하는 AI 자동화·외주 개발 서비스. 계약서 포함, 납기 패널티, 소스코드 인도.',
|
||||
email: 'bgg8988@gmail.com',
|
||||
telephone: '010-3907-1392',
|
||||
priceRange: '₩₩',
|
||||
areaServed: '대한민국',
|
||||
hasOfferCatalog: {
|
||||
'@type': 'OfferCatalog',
|
||||
name: '쟁승메이드 서비스 목록',
|
||||
itemListElement: [
|
||||
{ '@type': 'Offer', itemOffered: { '@type': 'Service', name: '업무 자동화 개발', url: 'https://jaengseung-made.com/services/automation' } },
|
||||
{ '@type': 'Offer', itemOffered: { '@type': 'Service', name: '외주 개발', url: 'https://jaengseung-made.com/freelance' } },
|
||||
{ '@type': 'Offer', itemOffered: { '@type': 'Service', name: '프롬프트 엔지니어링', url: 'https://jaengseung-made.com/services/prompt' } },
|
||||
{ '@type': 'Offer', itemOffered: { '@type': 'Service', name: '홈페이지 제작', url: 'https://jaengseung-made.com/services/website' } },
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
@@ -61,6 +100,10 @@ export default function RootLayout({
|
||||
return (
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||
/>
|
||||
<Script
|
||||
src="https://www.googletagmanager.com/gtag/js?id=G-WG77RNHXRK"
|
||||
strategy="afterInteractive"
|
||||
@@ -70,7 +113,10 @@ export default function RootLayout({
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-WG77RNHXRK');
|
||||
gtag('config', 'G-WG77RNHXRK', {
|
||||
send_page_view: true,
|
||||
custom_map: { dimension1: 'service_type' }
|
||||
});
|
||||
`}
|
||||
</Script>
|
||||
</head>
|
||||
|
||||
Reference in New Issue
Block a user