160 lines
6.7 KiB
TypeScript
160 lines
6.7 KiB
TypeScript
import type { ParsedRouteParams } from './dataHelper'
|
|
import { getShortRegionName } from './dataHelper'
|
|
|
|
export function generateSeoMeta(parsed: ParsedRouteParams, siteName = '공부짝꿍', siteDomain = 'https://soohyun.cloud') {
|
|
const { sido, sigungu, dong, shortRegionName, grade, subjectName, targetTerm, fullKeyword } = parsed
|
|
|
|
const regionTitle = shortRegionName || getShortRegionName(sido, dong)
|
|
|
|
// 학부모 검색 최적화: [지역] [과목]과외 전문 매칭 | [학년] 1:1 방문 맞춤 수업 (공백 포함 30~35자 내외 말줄임 방지)
|
|
const pageTitle = `${regionTitle} ${subjectName}과외 전문 매칭 | ${grade} 1:1 방문 맞춤 수업`
|
|
|
|
// 고의도 검색 및 전환 최적화 메타 디스크립션 (과외 비용 시세 + 학교 기출 분석 + 100% 신원 검증 + 무료 시범수업)
|
|
const pageDescription = `${regionTitle} ${grade} ${subjectName}과외 전문 매칭. 과외 비용 및 시세 비교부터 무료 시범수업 신청까지. ${dong} 인근 학교별 기출 족보 완벽 분석, 서술형 감점 방지, 검증된 1:1 전문 선생님 100% 매칭.`
|
|
|
|
// 표준 Canonical URL
|
|
const canonicalUrl = `${siteDomain}/${encodeURIComponent(dong)}/${encodeURIComponent(grade)}/${encodeURIComponent(subjectName)}`
|
|
|
|
const jsonLd = {
|
|
'@context': 'https://schema.org',
|
|
'@graph': [
|
|
{
|
|
'@type': 'EducationalOrganization',
|
|
'name': siteName,
|
|
'url': siteDomain,
|
|
'description': pageDescription,
|
|
'areaServed': {
|
|
'@type': 'AdministrativeArea',
|
|
'name': `${sido} ${sigungu} ${dong}`
|
|
}
|
|
},
|
|
{
|
|
'@type': 'Course',
|
|
'name': `${dong} ${grade} ${subjectName} 1:1 맞춤 과외`,
|
|
'description': `${dong} 인근 학교 내신 출제 경향 분석 및 ${subjectName} 1등급 도약 커리큘럼`,
|
|
'provider': {
|
|
'@type': 'Organization',
|
|
'name': siteName
|
|
}
|
|
},
|
|
{
|
|
'@type': 'LocalBusiness',
|
|
'name': `${regionTitle} 1:1 방문 과외`,
|
|
'image': `${siteDomain}/img/og-preview.png`,
|
|
'url': canonicalUrl,
|
|
'telephone': '+82-10-5961-5807',
|
|
'priceRange': '₩₩',
|
|
'address': {
|
|
'@type': 'PostalAddress',
|
|
'addressLocality': sido,
|
|
'addressRegion': sigungu,
|
|
'streetAddress': dong,
|
|
'addressCountry': 'KR'
|
|
},
|
|
'areaServed': `${sido} ${sigungu} ${dong}`
|
|
},
|
|
{
|
|
'@type': 'FAQPage',
|
|
'mainEntity': [
|
|
{
|
|
'@type': 'Question',
|
|
'name': `${dong} ${grade} ${subjectName} 방문 과외와 온라인 화상 과외 중 어떤 것이 가능한가요?`,
|
|
'acceptedAnswer': {
|
|
'@type': 'Answer',
|
|
'text': `학생과 학부모님의 선호에 따라 100% 자택 방문 대면 과외 또는 실시간 쌍방향 비대면 화상 과외 중 자유롭게 선택하실 수 있습니다. ${dong} 전 지역 방문 수업이 가능합니다.`
|
|
}
|
|
},
|
|
{
|
|
'@type': 'Question',
|
|
'name': `${grade} ${subjectName} 전문 선생님이 학생과 잘 맞지 않으면 교체 가능한가요?`,
|
|
'acceptedAnswer': {
|
|
'@type': 'Answer',
|
|
'text': '네, 1회 무료 모의수업을 통해 사전에 호흡을 맞추며, 정규 수업 시작 후에도 학생의 성향이나 요청에 따라 추가 비용 없이 100% 무료 교체 및 환불 규정을 보장합니다.'
|
|
}
|
|
},
|
|
{
|
|
'@type': 'Question',
|
|
'name': `${grade} ${subjectName} 과외 수업 비용은 어떻게 되나요?`,
|
|
'acceptedAnswer': {
|
|
'@type': 'Answer',
|
|
'text': `${grade} 내신 단계, 주당 수업 횟수, 수업 시간(1회 60분/90분/120분)에 따라 표준 교육청 가이드라인에 맞춘 투명한 정찰제로 운영됩니다. 무료 상담 시 상세 견적표를 안내해 드립니다.`
|
|
}
|
|
},
|
|
{
|
|
'@type': 'Question',
|
|
'name': `${dong} 학교 중간·기말고사 직전 단기 ${subjectName} 족보 클리닉도 가능한가요?`,
|
|
'acceptedAnswer': {
|
|
'@type': 'Answer',
|
|
'text': `네, 시험 3~4주 전 학교별 기출 족보 풀이 및 서술형 배점 방어를 위한 ${grade} ${subjectName} 단기 속성 킬러 클리닉 프로그램도 상시 운영 중입니다.`
|
|
}
|
|
},
|
|
{
|
|
'@type': 'Question',
|
|
'name': `${subjectName} 외에 다른 과목도 함께 상담받을 수 있나요?`,
|
|
'acceptedAnswer': {
|
|
'@type': 'Answer',
|
|
'text': `${subjectName} 집중 신청은 물론, 국영수 또는 수탐 복합 패키지로 맞춤 구성하여 전 과목 플래너 관리와 함께 시간표를 편성하실 수 있습니다.`
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
'@type': 'BreadcrumbList',
|
|
'itemListElement': [
|
|
{
|
|
'@type': 'ListItem',
|
|
'position': 1,
|
|
'name': '홈',
|
|
'item': siteDomain
|
|
},
|
|
{
|
|
'@type': 'ListItem',
|
|
'position': 2,
|
|
'name': sido,
|
|
'item': `${siteDomain}/${encodeURIComponent(sido)}`
|
|
},
|
|
{
|
|
'@type': 'ListItem',
|
|
'position': 3,
|
|
'name': sigungu,
|
|
'item': `${siteDomain}/${encodeURIComponent(sigungu)}`
|
|
},
|
|
{
|
|
'@type': 'ListItem',
|
|
'position': 4,
|
|
'name': `${dong} ${subjectName}`,
|
|
'item': canonicalUrl
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
|
|
return {
|
|
title: pageTitle,
|
|
meta: [
|
|
{ name: 'naver-site-verification', content: 'ec58dcc43a4785d3358d9e2b603fea6bea4d89a3' },
|
|
{ name: 'description', content: pageDescription },
|
|
{ name: 'keywords', content: `${dong}과외, ${dong}${subjectName}과외, ${dong}${grade}과외, ${sigungu}과외, ${dong}학원, ${dong}내신대비, ${subjectName}1:1과외` },
|
|
{ property: 'og:type', content: 'website' },
|
|
{ property: 'og:title', content: pageTitle },
|
|
{ property: 'og:description', content: pageDescription },
|
|
{ property: 'og:url', content: canonicalUrl },
|
|
{ property: 'og:site_name', content: siteName },
|
|
{ property: 'og:image', content: `${siteDomain}/img/og-preview.png` },
|
|
{ name: 'twitter:card', content: 'summary_large_image' },
|
|
{ name: 'twitter:title', content: pageTitle },
|
|
{ name: 'twitter:description', content: pageDescription }
|
|
],
|
|
link: [
|
|
{ rel: 'canonical', href: canonicalUrl }
|
|
],
|
|
script: [
|
|
{
|
|
type: 'application/ld+json',
|
|
children: JSON.stringify(jsonLd)
|
|
}
|
|
]
|
|
}
|
|
}
|