refactor(skills): Restructure skills to dual-platform architecture
Major refactoring of ourdigital-custom-skills with new numbering system: ## Structure Changes - Each skill now has code/ (Claude Code) and desktop/ (Claude Desktop) versions - New progressive numbering: 01-09 General, 10-19 SEO, 20-29 GTM, 30-39 OurDigital, 40-49 Jamie ## Skill Reorganization - 01-notion-organizer (from 02) - 10-18: SEO tools split into focused skills (technical, on-page, local, schema, vitals, gsc, gateway) - 20-21: GTM audit and manager - 30-32: OurDigital designer, research, presentation - 40-41: Jamie brand editor and audit ## New Files - .claude/commands/: Slash command definitions for all skills - CLAUDE.md: Updated with new skill structure documentation - REFACTORING_PLAN.md: Migration documentation - COMPATIBILITY_REPORT.md, SKILLS_COMPARISON.md: Analysis docs ## Removed - Old skill directories (02-05, 10-14, 20-21 old numbering) - Consolidated into new structure with _archive/ for reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# CLAUDE.md
|
||||
|
||||
## Overview
|
||||
|
||||
Gateway page content generator for local services. Creates SEO-optimized pages from location/service configurations.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Generate pages from config
|
||||
python scripts/generate_pages.py --config config/services.json --locations config/locations.json
|
||||
```
|
||||
|
||||
## Scripts
|
||||
|
||||
| Script | Purpose |
|
||||
|--------|---------|
|
||||
| `generate_pages.py` | Generate gateway pages from templates |
|
||||
|
||||
## Page Generator
|
||||
|
||||
```bash
|
||||
# Generate all combinations
|
||||
python scripts/generate_pages.py \
|
||||
--config config/services.json \
|
||||
--locations config/locations.json \
|
||||
--output ./pages
|
||||
|
||||
# Single service/location
|
||||
python scripts/generate_pages.py \
|
||||
--service "laser_hair_removal" \
|
||||
--location "gangnam" \
|
||||
--template templates/gateway-page-medical.md
|
||||
```
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### services.json
|
||||
```json
|
||||
{
|
||||
"services": [
|
||||
{
|
||||
"id": "laser_hair_removal",
|
||||
"korean": "레이저 제모",
|
||||
"keywords": ["laser hair removal", "permanent hair removal"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### locations.json
|
||||
```json
|
||||
{
|
||||
"locations": [
|
||||
{
|
||||
"id": "gangnam",
|
||||
"korean": "강남",
|
||||
"full_address": "서울특별시 강남구"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Templates
|
||||
|
||||
- `templates/gateway-page-medical.md` - Medical service template
|
||||
- Supports variables: `{{service}}`, `{{location}}`, `{{brand}}`
|
||||
|
||||
## Output
|
||||
|
||||
Generates markdown files with:
|
||||
- SEO-optimized title and meta
|
||||
- Structured content sections
|
||||
- Schema markup recommendations
|
||||
- Internal linking suggestions
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Get strategy from `17-seo-gateway-architect`
|
||||
2. Configure services and locations
|
||||
3. Run generator for content drafts
|
||||
4. Review and customize output
|
||||
@@ -0,0 +1,235 @@
|
||||
{
|
||||
"locations": [
|
||||
{
|
||||
"id": "gangnam",
|
||||
"name_en": "Gangnam",
|
||||
"name_kr": "강남",
|
||||
"name_cn": "江南",
|
||||
"district": "Gangnam-gu",
|
||||
"city": "Seoul",
|
||||
"full_address_kr": "서울특별시 강남구 테헤란로 123",
|
||||
"full_address_en": "123 Teheran-ro, Gangnam-gu, Seoul",
|
||||
"postal_code": "06234",
|
||||
"latitude": 37.4979,
|
||||
"longitude": 127.0276,
|
||||
"landmarks": [
|
||||
"COEX Mall",
|
||||
"Gangnam Station",
|
||||
"Samsung Station",
|
||||
"Bongeunsa Temple"
|
||||
],
|
||||
"subway_stations": [
|
||||
{
|
||||
"name": "Gangnam Station",
|
||||
"lines": ["Line 2", "Sinbundang Line"],
|
||||
"exit": "Exit 11",
|
||||
"walking_time": "3 minutes"
|
||||
},
|
||||
{
|
||||
"name": "Sinnonhyeon Station",
|
||||
"lines": ["Line 9"],
|
||||
"exit": "Exit 6",
|
||||
"walking_time": "5 minutes"
|
||||
}
|
||||
],
|
||||
"bus_routes": ["146", "341", "360", "740"],
|
||||
"demographics": "Young professionals, affluent residents, business district",
|
||||
"population": "approximately 570,000",
|
||||
"average_age": "38.5",
|
||||
"key_industries": ["IT", "Finance", "Medical", "Education"],
|
||||
"nearby_hospitals": ["Samsung Medical Center", "Gangnam Severance Hospital"],
|
||||
"parking": {
|
||||
"available": true,
|
||||
"type": "Underground",
|
||||
"capacity": 50,
|
||||
"fee": "Free for patients"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "myeongdong",
|
||||
"name_en": "Myeongdong",
|
||||
"name_kr": "명동",
|
||||
"name_cn": "明洞",
|
||||
"district": "Jung-gu",
|
||||
"city": "Seoul",
|
||||
"full_address_kr": "서울특별시 중구 명동길 456",
|
||||
"full_address_en": "456 Myeongdong-gil, Jung-gu, Seoul",
|
||||
"postal_code": "04537",
|
||||
"latitude": 37.5636,
|
||||
"longitude": 126.9869,
|
||||
"landmarks": [
|
||||
"Myeongdong Cathedral",
|
||||
"Lotte Department Store",
|
||||
"Shinsegae Department Store",
|
||||
"N Seoul Tower"
|
||||
],
|
||||
"subway_stations": [
|
||||
{
|
||||
"name": "Myeongdong Station",
|
||||
"lines": ["Line 4"],
|
||||
"exit": "Exit 8",
|
||||
"walking_time": "2 minutes"
|
||||
},
|
||||
{
|
||||
"name": "Euljiro 1-ga Station",
|
||||
"lines": ["Line 2"],
|
||||
"exit": "Exit 5",
|
||||
"walking_time": "7 minutes"
|
||||
}
|
||||
],
|
||||
"bus_routes": ["104", "421", "463", "507"],
|
||||
"demographics": "Tourists, young shoppers, office workers",
|
||||
"population": "approximately 13,000",
|
||||
"average_age": "42.3",
|
||||
"key_industries": ["Retail", "Tourism", "Banking", "Hospitality"],
|
||||
"nearby_hospitals": ["Seoul Medical Center", "Asan Medical Center"],
|
||||
"parking": {
|
||||
"available": true,
|
||||
"type": "Building parking",
|
||||
"capacity": 30,
|
||||
"fee": "2,000 KRW per hour"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "hongdae",
|
||||
"name_en": "Hongdae",
|
||||
"name_kr": "홍대",
|
||||
"name_cn": "弘大",
|
||||
"district": "Mapo-gu",
|
||||
"city": "Seoul",
|
||||
"full_address_kr": "서울특별시 마포구 와우산로 789",
|
||||
"full_address_en": "789 Wausan-ro, Mapo-gu, Seoul",
|
||||
"postal_code": "04104",
|
||||
"latitude": 37.5563,
|
||||
"longitude": 126.9220,
|
||||
"landmarks": [
|
||||
"Hongik University",
|
||||
"Hongdae Shopping Street",
|
||||
"Sangsang Madang",
|
||||
"Hongdae Free Market"
|
||||
],
|
||||
"subway_stations": [
|
||||
{
|
||||
"name": "Hongik University Station",
|
||||
"lines": ["Line 2", "Airport Railroad", "Gyeongui-Jungang Line"],
|
||||
"exit": "Exit 9",
|
||||
"walking_time": "1 minute"
|
||||
},
|
||||
{
|
||||
"name": "Sangsu Station",
|
||||
"lines": ["Line 6"],
|
||||
"exit": "Exit 1",
|
||||
"walking_time": "8 minutes"
|
||||
}
|
||||
],
|
||||
"bus_routes": ["271", "602", "603", "760"],
|
||||
"demographics": "University students, young adults, artists, indie culture",
|
||||
"population": "approximately 385,000",
|
||||
"average_age": "35.2",
|
||||
"key_industries": ["Entertainment", "Arts", "Cafes", "Fashion"],
|
||||
"nearby_hospitals": ["Severance Hospital", "Sinchon Severance Hospital"],
|
||||
"parking": {
|
||||
"available": false,
|
||||
"type": "Street parking only",
|
||||
"capacity": 0,
|
||||
"fee": "Public parking nearby"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "apgujeong",
|
||||
"name_en": "Apgujeong",
|
||||
"name_kr": "압구정",
|
||||
"name_cn": "狎鸥亭",
|
||||
"district": "Gangnam-gu",
|
||||
"city": "Seoul",
|
||||
"full_address_kr": "서울특별시 강남구 압구정로 321",
|
||||
"full_address_en": "321 Apgujeong-ro, Gangnam-gu, Seoul",
|
||||
"postal_code": "06001",
|
||||
"latitude": 37.5311,
|
||||
"longitude": 127.0403,
|
||||
"landmarks": [
|
||||
"Galleria Department Store",
|
||||
"Apgujeong Rodeo Street",
|
||||
"Dosan Park",
|
||||
"K-Star Road"
|
||||
],
|
||||
"subway_stations": [
|
||||
{
|
||||
"name": "Apgujeong Station",
|
||||
"lines": ["Line 3"],
|
||||
"exit": "Exit 2",
|
||||
"walking_time": "4 minutes"
|
||||
},
|
||||
{
|
||||
"name": "Apgujeong Rodeo Station",
|
||||
"lines": ["Suin-Bundang Line"],
|
||||
"exit": "Exit 5",
|
||||
"walking_time": "3 minutes"
|
||||
}
|
||||
],
|
||||
"bus_routes": ["145", "301", "362", "472"],
|
||||
"demographics": "High-income residents, luxury shoppers, K-beauty enthusiasts",
|
||||
"population": "approximately 24,000",
|
||||
"average_age": "41.7",
|
||||
"key_industries": ["Luxury retail", "Beauty", "Plastic surgery", "Fashion"],
|
||||
"nearby_hospitals": ["Chung-Ang University Hospital", "Seoul St. Mary's Hospital"],
|
||||
"parking": {
|
||||
"available": true,
|
||||
"type": "Valet service",
|
||||
"capacity": 40,
|
||||
"fee": "Complimentary for VIP patients"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "jamsil",
|
||||
"name_en": "Jamsil",
|
||||
"name_kr": "잠실",
|
||||
"name_cn": "蚕室",
|
||||
"district": "Songpa-gu",
|
||||
"city": "Seoul",
|
||||
"full_address_kr": "서울특별시 송파구 올림픽로 240",
|
||||
"full_address_en": "240 Olympic-ro, Songpa-gu, Seoul",
|
||||
"postal_code": "05554",
|
||||
"latitude": 37.5132,
|
||||
"longitude": 127.1001,
|
||||
"landmarks": [
|
||||
"Lotte World Tower",
|
||||
"Lotte World",
|
||||
"Seokchon Lake",
|
||||
"Olympic Park"
|
||||
],
|
||||
"subway_stations": [
|
||||
{
|
||||
"name": "Jamsil Station",
|
||||
"lines": ["Line 2", "Line 8"],
|
||||
"exit": "Exit 4",
|
||||
"walking_time": "5 minutes"
|
||||
},
|
||||
{
|
||||
"name": "Jamsilsaenae Station",
|
||||
"lines": ["Line 2"],
|
||||
"exit": "Exit 9",
|
||||
"walking_time": "10 minutes"
|
||||
}
|
||||
],
|
||||
"bus_routes": ["2415", "3217", "3313", "3414"],
|
||||
"demographics": "Families, middle-class residents, sports enthusiasts",
|
||||
"population": "approximately 660,000",
|
||||
"average_age": "40.1",
|
||||
"key_industries": ["Retail", "Entertainment", "Sports", "Tourism"],
|
||||
"nearby_hospitals": ["Asan Medical Center", "Seoul Paik Hospital"],
|
||||
"parking": {
|
||||
"available": true,
|
||||
"type": "Multi-level parking",
|
||||
"capacity": 100,
|
||||
"fee": "First 2 hours free"
|
||||
}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"last_updated": "2024-11-19",
|
||||
"total_locations": 5,
|
||||
"coverage_area": "Seoul Metropolitan Area",
|
||||
"coordinate_system": "WGS84"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,308 @@
|
||||
{
|
||||
"services": [
|
||||
{
|
||||
"id": "laser-hair-removal",
|
||||
"name_en": "Laser Hair Removal",
|
||||
"name_kr": "레이저 제모",
|
||||
"name_cn": "激光脱毛",
|
||||
"category": "Dermatology",
|
||||
"subcategory": "Aesthetic Dermatology",
|
||||
"description": "Permanent hair reduction using state-of-the-art laser technology",
|
||||
"detailed_description": "Our laser hair removal treatment uses FDA-approved diode and Alexandrite lasers to target hair follicles, providing long-lasting hair reduction with minimal discomfort. Suitable for all skin types.",
|
||||
"keywords": [
|
||||
"permanent hair removal",
|
||||
"laser hair removal",
|
||||
"IPL hair removal",
|
||||
"diode laser",
|
||||
"hair reduction",
|
||||
"unwanted hair",
|
||||
"smooth skin"
|
||||
],
|
||||
"procedure_time": "15-60 minutes",
|
||||
"sessions_required": "6-8 sessions",
|
||||
"recovery_time": "No downtime",
|
||||
"results_visible": "After 2-3 sessions",
|
||||
"price_range": "₩₩₩",
|
||||
"price_details": {
|
||||
"small_area": "50,000-100,000 KRW",
|
||||
"medium_area": "100,000-200,000 KRW",
|
||||
"large_area": "200,000-400,000 KRW"
|
||||
},
|
||||
"target_areas": [
|
||||
"Face",
|
||||
"Underarms",
|
||||
"Arms",
|
||||
"Legs",
|
||||
"Bikini line",
|
||||
"Back",
|
||||
"Chest"
|
||||
],
|
||||
"benefits": [
|
||||
"Permanent hair reduction",
|
||||
"Smoother skin",
|
||||
"No more razor burns",
|
||||
"Time-saving",
|
||||
"Cost-effective long-term"
|
||||
],
|
||||
"side_effects": [
|
||||
"Temporary redness",
|
||||
"Mild swelling",
|
||||
"Skin sensitivity"
|
||||
],
|
||||
"contraindications": [
|
||||
"Pregnancy",
|
||||
"Active skin infections",
|
||||
"Recent sun exposure",
|
||||
"Certain medications"
|
||||
],
|
||||
"seo_priority": "high",
|
||||
"search_volume": 14800,
|
||||
"competition": "medium"
|
||||
},
|
||||
{
|
||||
"id": "botox",
|
||||
"name_en": "Botox Treatment",
|
||||
"name_kr": "보톡스",
|
||||
"name_cn": "肉毒素",
|
||||
"category": "Cosmetic Dermatology",
|
||||
"subcategory": "Injectable Treatments",
|
||||
"description": "FDA-approved botulinum toxin for wrinkle reduction and facial rejuvenation",
|
||||
"detailed_description": "Botox injections temporarily relax facial muscles to reduce the appearance of fine lines and wrinkles. Our experienced practitioners use precise injection techniques for natural-looking results.",
|
||||
"keywords": [
|
||||
"botox",
|
||||
"botulinum toxin",
|
||||
"wrinkle treatment",
|
||||
"anti-aging",
|
||||
"facial rejuvenation",
|
||||
"crow's feet",
|
||||
"forehead lines",
|
||||
"frown lines"
|
||||
],
|
||||
"procedure_time": "15-30 minutes",
|
||||
"sessions_required": "1 session, repeat every 3-6 months",
|
||||
"recovery_time": "No downtime",
|
||||
"results_visible": "3-7 days",
|
||||
"price_range": "₩₩₩₩",
|
||||
"price_details": {
|
||||
"per_unit": "10,000-15,000 KRW",
|
||||
"full_face": "300,000-500,000 KRW",
|
||||
"single_area": "150,000-250,000 KRW"
|
||||
},
|
||||
"target_areas": [
|
||||
"Forehead lines",
|
||||
"Crow's feet",
|
||||
"Frown lines",
|
||||
"Bunny lines",
|
||||
"Lip lines",
|
||||
"Chin dimpling",
|
||||
"Jawline slimming"
|
||||
],
|
||||
"benefits": [
|
||||
"Reduces wrinkles",
|
||||
"Prevents new lines",
|
||||
"Non-surgical",
|
||||
"Quick procedure",
|
||||
"Natural results"
|
||||
],
|
||||
"side_effects": [
|
||||
"Temporary bruising",
|
||||
"Mild headache",
|
||||
"Drooping eyelid (rare)"
|
||||
],
|
||||
"contraindications": [
|
||||
"Pregnancy/nursing",
|
||||
"Neuromuscular disorders",
|
||||
"Allergy to ingredients",
|
||||
"Active infection at injection site"
|
||||
],
|
||||
"seo_priority": "high",
|
||||
"search_volume": 22200,
|
||||
"competition": "high"
|
||||
},
|
||||
{
|
||||
"id": "dermal-filler",
|
||||
"name_en": "Dermal Filler",
|
||||
"name_kr": "필러",
|
||||
"name_cn": "玻尿酸",
|
||||
"category": "Cosmetic Dermatology",
|
||||
"subcategory": "Injectable Treatments",
|
||||
"description": "Hyaluronic acid fillers for volume restoration and facial contouring",
|
||||
"detailed_description": "Our dermal filler treatments use premium hyaluronic acid products to restore volume, enhance facial contours, and smooth deep wrinkles. Results are immediate and can last 6-18 months.",
|
||||
"keywords": [
|
||||
"dermal filler",
|
||||
"hyaluronic acid",
|
||||
"facial volume",
|
||||
"lip filler",
|
||||
"cheek filler",
|
||||
"nasolabial folds",
|
||||
"facial contouring"
|
||||
],
|
||||
"procedure_time": "30-45 minutes",
|
||||
"sessions_required": "1 session, touch-ups as needed",
|
||||
"recovery_time": "24-48 hours",
|
||||
"results_visible": "Immediate",
|
||||
"price_range": "₩₩₩₩",
|
||||
"price_details": {
|
||||
"per_syringe": "300,000-600,000 KRW",
|
||||
"lip_augmentation": "400,000-700,000 KRW",
|
||||
"full_face": "1,500,000-3,000,000 KRW"
|
||||
},
|
||||
"target_areas": [
|
||||
"Lips",
|
||||
"Cheeks",
|
||||
"Under eyes",
|
||||
"Nasolabial folds",
|
||||
"Marionette lines",
|
||||
"Jawline",
|
||||
"Temples"
|
||||
],
|
||||
"benefits": [
|
||||
"Instant results",
|
||||
"Restores volume",
|
||||
"Smooths wrinkles",
|
||||
"Enhances contours",
|
||||
"Reversible if needed"
|
||||
],
|
||||
"side_effects": [
|
||||
"Swelling",
|
||||
"Bruising",
|
||||
"Tenderness",
|
||||
"Lumps (temporary)"
|
||||
],
|
||||
"contraindications": [
|
||||
"Pregnancy",
|
||||
"Blood clotting disorders",
|
||||
"Active cold sores",
|
||||
"Allergy to lidocaine"
|
||||
],
|
||||
"seo_priority": "high",
|
||||
"search_volume": 18100,
|
||||
"competition": "high"
|
||||
},
|
||||
{
|
||||
"id": "chemical-peel",
|
||||
"name_en": "Chemical Peel",
|
||||
"name_kr": "케미컬 필링",
|
||||
"name_cn": "化学换肤",
|
||||
"category": "Medical Aesthetics",
|
||||
"subcategory": "Skin Resurfacing",
|
||||
"description": "Professional chemical exfoliation for skin renewal and rejuvenation",
|
||||
"detailed_description": "Chemical peels use carefully selected acids to remove damaged skin layers, revealing fresher, younger-looking skin. We offer light, medium, and deep peels customized to your skin concerns.",
|
||||
"keywords": [
|
||||
"chemical peel",
|
||||
"skin resurfacing",
|
||||
"glycolic acid",
|
||||
"TCA peel",
|
||||
"skin renewal",
|
||||
"acne scars",
|
||||
"pigmentation treatment"
|
||||
],
|
||||
"procedure_time": "30-45 minutes",
|
||||
"sessions_required": "3-6 sessions",
|
||||
"recovery_time": "3-7 days",
|
||||
"results_visible": "After peeling completes",
|
||||
"price_range": "₩₩",
|
||||
"price_details": {
|
||||
"light_peel": "100,000-200,000 KRW",
|
||||
"medium_peel": "300,000-500,000 KRW",
|
||||
"deep_peel": "700,000-1,000,000 KRW"
|
||||
},
|
||||
"target_areas": [
|
||||
"Full face",
|
||||
"Neck",
|
||||
"Décolletage",
|
||||
"Hands",
|
||||
"Back"
|
||||
],
|
||||
"benefits": [
|
||||
"Improves texture",
|
||||
"Reduces pigmentation",
|
||||
"Minimizes pores",
|
||||
"Treats acne",
|
||||
"Stimulates collagen"
|
||||
],
|
||||
"side_effects": [
|
||||
"Peeling",
|
||||
"Redness",
|
||||
"Sensitivity",
|
||||
"Temporary darkening"
|
||||
],
|
||||
"contraindications": [
|
||||
"Active herpes",
|
||||
"Isotretinoin use",
|
||||
"Pregnancy",
|
||||
"Open wounds"
|
||||
],
|
||||
"seo_priority": "medium",
|
||||
"search_volume": 8100,
|
||||
"competition": "medium"
|
||||
},
|
||||
{
|
||||
"id": "acne-treatment",
|
||||
"name_en": "Acne Treatment",
|
||||
"name_kr": "여드름 치료",
|
||||
"name_cn": "痤疮治疗",
|
||||
"category": "Medical Dermatology",
|
||||
"subcategory": "Acne Management",
|
||||
"description": "Comprehensive medical treatment for acne and acne scarring",
|
||||
"detailed_description": "Our acne treatment program combines medical-grade therapies including laser treatments, chemical peels, and prescription medications to clear active acne and prevent future breakouts.",
|
||||
"keywords": [
|
||||
"acne treatment",
|
||||
"acne scars",
|
||||
"pimple treatment",
|
||||
"blackheads",
|
||||
"whiteheads",
|
||||
"cystic acne",
|
||||
"hormonal acne"
|
||||
],
|
||||
"procedure_time": "45-60 minutes",
|
||||
"sessions_required": "4-8 sessions",
|
||||
"recovery_time": "Minimal",
|
||||
"results_visible": "4-6 weeks",
|
||||
"price_range": "₩₩₩",
|
||||
"price_details": {
|
||||
"consultation": "50,000 KRW",
|
||||
"basic_treatment": "150,000-250,000 KRW",
|
||||
"laser_therapy": "300,000-500,000 KRW"
|
||||
},
|
||||
"target_areas": [
|
||||
"Face",
|
||||
"Back",
|
||||
"Chest",
|
||||
"Shoulders"
|
||||
],
|
||||
"benefits": [
|
||||
"Clears acne",
|
||||
"Prevents scarring",
|
||||
"Reduces inflammation",
|
||||
"Improves skin texture",
|
||||
"Boosts confidence"
|
||||
],
|
||||
"side_effects": [
|
||||
"Initial purging",
|
||||
"Dryness",
|
||||
"Mild irritation",
|
||||
"Sun sensitivity"
|
||||
],
|
||||
"contraindications": [
|
||||
"Pregnancy (certain medications)",
|
||||
"Photosensitivity disorders",
|
||||
"Active infections"
|
||||
],
|
||||
"seo_priority": "high",
|
||||
"search_volume": 12100,
|
||||
"competition": "medium"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"last_updated": "2024-11-19",
|
||||
"total_services": 5,
|
||||
"categories": [
|
||||
"Dermatology",
|
||||
"Cosmetic Dermatology",
|
||||
"Medical Aesthetics",
|
||||
"Medical Dermatology"
|
||||
],
|
||||
"price_currency": "KRW"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,398 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Gateway Page Content Generator
|
||||
Automates the creation of SEO-optimized gateway pages for local services
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
@dataclass
|
||||
class Location:
|
||||
"""Location data structure"""
|
||||
id: str
|
||||
name_en: str
|
||||
name_kr: str
|
||||
full_address: str
|
||||
landmarks: List[str]
|
||||
subway_stations: List[str]
|
||||
demographics: str
|
||||
latitude: float
|
||||
longitude: float
|
||||
|
||||
@dataclass
|
||||
class Service:
|
||||
"""Service data structure"""
|
||||
id: str
|
||||
name_en: str
|
||||
name_kr: str
|
||||
category: str
|
||||
description: str
|
||||
keywords: List[str]
|
||||
procedure_time: str
|
||||
recovery_time: str
|
||||
price_range: str
|
||||
|
||||
@dataclass
|
||||
class Brand:
|
||||
"""Brand/Clinic information"""
|
||||
name_en: str
|
||||
name_kr: str
|
||||
website: str
|
||||
phone: str
|
||||
email: str
|
||||
established_year: int
|
||||
certifications: List[str]
|
||||
unique_selling_points: List[str]
|
||||
|
||||
class GatewayPageGenerator:
|
||||
"""Main class for generating gateway page content"""
|
||||
|
||||
def __init__(self, brand: Brand, template_path: str = None):
|
||||
self.brand = brand
|
||||
# Use script directory as base for template path
|
||||
if template_path is None:
|
||||
script_dir = Path(__file__).parent.parent
|
||||
self.template_path = script_dir / "templates"
|
||||
else:
|
||||
self.template_path = Path(template_path)
|
||||
self.generated_pages = []
|
||||
|
||||
def load_template(self, template_name: str) -> str:
|
||||
"""Load a template file"""
|
||||
template_file = self.template_path / template_name
|
||||
if template_file.exists():
|
||||
with open(template_file, 'r', encoding='utf-8') as f:
|
||||
return f.read()
|
||||
else:
|
||||
raise FileNotFoundError(f"Template {template_name} not found")
|
||||
|
||||
def generate_meta_tags(self, service: Service, location: Location) -> Dict:
|
||||
"""Generate SEO meta tags"""
|
||||
return {
|
||||
"title": f"{service.name_en} in {location.name_en} | Expert {service.category} | {self.brand.name_en}",
|
||||
"description": f"Looking for {service.name_en.lower()} in {location.name_en}? "
|
||||
f"{self.brand.name_en} offers professional {service.category.lower()} services. "
|
||||
f"✓ Experienced team ✓ Latest technology ✓ {self.brand.unique_selling_points[0]}",
|
||||
"keywords": ", ".join([
|
||||
f"{service.name_en} {location.name_en}",
|
||||
f"{location.name_en} {service.name_en}",
|
||||
*service.keywords,
|
||||
f"{service.category} {location.name_en}"
|
||||
]),
|
||||
"canonical": f"https://{self.brand.website}/{location.id}/{service.id}/",
|
||||
"og:title": f"{service.name_en} in {location.name_en} - {self.brand.name_en}",
|
||||
"og:description": f"Professional {service.name_en} services in {location.name_en}. "
|
||||
f"Book your consultation today.",
|
||||
"og:image": f"https://{self.brand.website}/images/{service.id}-{location.id}-og.jpg"
|
||||
}
|
||||
|
||||
def generate_schema_markup(self, service: Service, location: Location) -> str:
|
||||
"""Generate JSON-LD schema markup"""
|
||||
schema = {
|
||||
"@context": "https://schema.org",
|
||||
"@type": "MedicalBusiness",
|
||||
"name": f"{self.brand.name_en} - {location.name_en}",
|
||||
"url": f"https://{self.brand.website}",
|
||||
"telephone": self.brand.phone,
|
||||
"email": self.brand.email,
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": location.full_address,
|
||||
"addressLocality": location.name_en,
|
||||
"addressCountry": "KR"
|
||||
},
|
||||
"geo": {
|
||||
"@type": "GeoCoordinates",
|
||||
"latitude": location.latitude,
|
||||
"longitude": location.longitude
|
||||
},
|
||||
"areaServed": {
|
||||
"@type": "City",
|
||||
"name": location.name_en
|
||||
},
|
||||
"availableService": {
|
||||
"@type": "MedicalProcedure",
|
||||
"name": service.name_en,
|
||||
"description": service.description
|
||||
},
|
||||
"priceRange": service.price_range
|
||||
}
|
||||
return json.dumps(schema, indent=2, ensure_ascii=False)
|
||||
|
||||
def generate_content_variations(self, service: Service, location: Location) -> Dict[str, List[str]]:
|
||||
"""Generate content variations for uniqueness"""
|
||||
return {
|
||||
"hero_headlines": [
|
||||
f"Professional {service.name_en} in {location.name_en}",
|
||||
f"{location.name_en}'s Premier {service.name_en} {service.category}",
|
||||
f"Expert {service.name_en} Services for {location.name_en} Residents",
|
||||
f"Transform Your Look with {service.name_en} in {location.name_en}"
|
||||
],
|
||||
"intro_paragraphs": [
|
||||
f"Welcome to {self.brand.name_en}, where we specialize in providing exceptional "
|
||||
f"{service.name_en} services to the {location.name_en} community. "
|
||||
f"Our state-of-the-art facility, conveniently located near {location.landmarks[0]}, "
|
||||
f"combines advanced technology with personalized care.",
|
||||
|
||||
f"Looking for trusted {service.name_en} in {location.name_en}? "
|
||||
f"At {self.brand.name_en}, we've been serving the {location.demographics} "
|
||||
f"for over {datetime.now().year - self.brand.established_year} years. "
|
||||
f"Our expert team understands the unique needs of {location.name_en} residents.",
|
||||
|
||||
f"Discover why {location.name_en} residents choose {self.brand.name_en} "
|
||||
f"for their {service.name_en} needs. Located just minutes from "
|
||||
f"{', '.join(location.subway_stations[:2])}, we offer {service.category} "
|
||||
f"services that deliver remarkable results."
|
||||
],
|
||||
"cta_buttons": [
|
||||
f"Book Your {location.name_en} Consultation",
|
||||
f"Schedule {service.name_en} Today",
|
||||
f"Get Started in {location.name_en}",
|
||||
f"Reserve Your Appointment"
|
||||
],
|
||||
"trust_signals": [
|
||||
f"Trusted by {location.name_en} residents since {self.brand.established_year}",
|
||||
f"Over 10,000 successful {service.category} treatments",
|
||||
f"5-star rated {service.name_en} clinic in {location.name_en}",
|
||||
f"Certified specialists serving {location.demographics}"
|
||||
]
|
||||
}
|
||||
|
||||
def localize_content(self, content: str, service: Service, location: Location) -> str:
|
||||
"""Add local elements to content"""
|
||||
local_elements = {
|
||||
"transportation": f"Easily accessible via {', '.join(location.subway_stations)} stations",
|
||||
"landmarks": f"Located near {' and '.join(location.landmarks[:2])}",
|
||||
"community": f"Proud to serve the {location.name_en} community",
|
||||
"convenience": f"Convenient for {location.demographics} in {location.name_en}",
|
||||
"local_stats": f"Join thousands of satisfied patients from {location.name_en}"
|
||||
}
|
||||
|
||||
# Add local elements naturally throughout content
|
||||
for key, value in local_elements.items():
|
||||
placeholder = f"[LOCAL_{key.upper()}]"
|
||||
if placeholder in content:
|
||||
content = content.replace(placeholder, value)
|
||||
|
||||
return content
|
||||
|
||||
def generate_page(self, service: Service, location: Location,
|
||||
template_name: str = "gateway-page-medical.md") -> str:
|
||||
"""Generate a complete gateway page"""
|
||||
|
||||
# Load template
|
||||
template = self.load_template(template_name)
|
||||
|
||||
# Generate components
|
||||
meta_tags = self.generate_meta_tags(service, location)
|
||||
schema = self.generate_schema_markup(service, location)
|
||||
variations = self.generate_content_variations(service, location)
|
||||
|
||||
# Replace placeholders in template
|
||||
replacements = {
|
||||
"[Medical Service]": service.name_en,
|
||||
"[Location]": location.name_en,
|
||||
"[location]": location.name_en.lower(),
|
||||
"[Clinic Name]": self.brand.name_en,
|
||||
"[service-slug]": service.id,
|
||||
"[X years]": str(datetime.now().year - self.brand.established_year),
|
||||
"[specific address near landmark]": f"{location.full_address}, near {location.landmarks[0]}",
|
||||
"[nearby subway/bus stations]": ", ".join(location.subway_stations),
|
||||
"[certification details]": ", ".join(self.brand.certifications[:2]),
|
||||
"[equipment type]": f"{service.category} equipment",
|
||||
"[duration]": service.procedure_time,
|
||||
"[Medical Specialty]": service.category,
|
||||
"[phone-number]": self.brand.phone,
|
||||
"[website-url]": f"https://{self.brand.website}",
|
||||
"[page-url]": f"https://{self.brand.website}/{location.id}/{service.id}/",
|
||||
"[latitude]": str(location.latitude),
|
||||
"[longitude]": str(location.longitude),
|
||||
}
|
||||
|
||||
# Apply replacements
|
||||
content = template
|
||||
for placeholder, value in replacements.items():
|
||||
content = content.replace(placeholder, value)
|
||||
|
||||
# Add localized content
|
||||
content = self.localize_content(content, service, location)
|
||||
|
||||
# Add schema markup at the end if not already present
|
||||
if '"@context": "https://schema.org"' not in content:
|
||||
content += f"\n\n<!-- Schema Markup -->\n<script type='application/ld+json'>\n{schema}\n</script>"
|
||||
|
||||
return content
|
||||
|
||||
def generate_batch(self, services: List[Service], locations: List[Location],
|
||||
output_dir: str = "output/") -> List[str]:
|
||||
"""Generate multiple gateway pages"""
|
||||
output_path = Path(output_dir)
|
||||
output_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
generated_files = []
|
||||
|
||||
for location in locations:
|
||||
location_dir = output_path / location.id
|
||||
location_dir.mkdir(exist_ok=True)
|
||||
|
||||
for service in services:
|
||||
# Generate content
|
||||
content = self.generate_page(service, location)
|
||||
|
||||
# Save to file
|
||||
filename = f"{service.id}-{location.id}.md"
|
||||
filepath = location_dir / filename
|
||||
|
||||
with open(filepath, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
generated_files.append(str(filepath))
|
||||
print(f"✓ Generated: {filepath}")
|
||||
|
||||
# Generate index file
|
||||
self.generate_index(services, locations, output_path)
|
||||
|
||||
return generated_files
|
||||
|
||||
def generate_index(self, services: List[Service], locations: List[Location],
|
||||
output_path: Path):
|
||||
"""Generate an index of all created pages"""
|
||||
index_content = f"# Gateway Pages Index - {self.brand.name_en}\n\n"
|
||||
index_content += f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}\n\n"
|
||||
index_content += "## Pages by Location\n\n"
|
||||
|
||||
for location in locations:
|
||||
index_content += f"### {location.name_en}\n"
|
||||
for service in services:
|
||||
url = f"/{location.id}/{service.id}/"
|
||||
index_content += f"- [{service.name_en} in {location.name_en}]({url})\n"
|
||||
index_content += "\n"
|
||||
|
||||
index_content += "## Pages by Service\n\n"
|
||||
for service in services:
|
||||
index_content += f"### {service.name_en}\n"
|
||||
for location in locations:
|
||||
url = f"/{location.id}/{service.id}/"
|
||||
index_content += f"- [{location.name_en}]({url})\n"
|
||||
index_content += "\n"
|
||||
|
||||
index_content += f"\n---\nTotal Pages Generated: {len(services) * len(locations)}\n"
|
||||
|
||||
with open(output_path / "index.md", 'w', encoding='utf-8') as f:
|
||||
f.write(index_content)
|
||||
|
||||
def create_sample_data():
|
||||
"""Create sample data for testing"""
|
||||
|
||||
# Sample brand
|
||||
brand = Brand(
|
||||
name_en="Jamie Clinic",
|
||||
name_kr="제이미 클리닉",
|
||||
website="www.jamieclinic.com",
|
||||
phone="+82-2-1234-5678",
|
||||
email="info@jamieclinic.com",
|
||||
established_year=2010,
|
||||
certifications=["ISO 9001", "KAHF Certified", "JCI Accredited"],
|
||||
unique_selling_points=[
|
||||
"Same-day appointments available",
|
||||
"15+ years of experience",
|
||||
"Latest medical technology"
|
||||
]
|
||||
)
|
||||
|
||||
# Sample locations
|
||||
locations = [
|
||||
Location(
|
||||
id="gangnam",
|
||||
name_en="Gangnam",
|
||||
name_kr="강남",
|
||||
full_address="123 Teheran-ro, Gangnam-gu, Seoul",
|
||||
landmarks=["COEX", "Gangnam Station", "Samsung Station"],
|
||||
subway_stations=["Gangnam Station (Line 2)", "Sinnonhyeon Station (Line 9)"],
|
||||
demographics="Young professionals and affluent residents",
|
||||
latitude=37.4979,
|
||||
longitude=127.0276
|
||||
),
|
||||
Location(
|
||||
id="myeongdong",
|
||||
name_en="Myeongdong",
|
||||
name_kr="명동",
|
||||
full_address="456 Myeongdong-gil, Jung-gu, Seoul",
|
||||
landmarks=["Myeongdong Cathedral", "Lotte Department Store"],
|
||||
subway_stations=["Myeongdong Station (Line 4)", "Euljiro 1-ga Station (Line 2)"],
|
||||
demographics="Tourists and young shoppers",
|
||||
latitude=37.5636,
|
||||
longitude=126.9869
|
||||
)
|
||||
]
|
||||
|
||||
# Sample services
|
||||
services = [
|
||||
Service(
|
||||
id="laser-hair-removal",
|
||||
name_en="Laser Hair Removal",
|
||||
name_kr="레이저 제모",
|
||||
category="Dermatology",
|
||||
description="Advanced laser technology for permanent hair reduction",
|
||||
keywords=["permanent hair removal", "IPL", "diode laser"],
|
||||
procedure_time="30-60 minutes",
|
||||
recovery_time="No downtime",
|
||||
price_range="₩₩₩"
|
||||
),
|
||||
Service(
|
||||
id="botox",
|
||||
name_en="Botox Treatment",
|
||||
name_kr="보톡스",
|
||||
category="Cosmetic Dermatology",
|
||||
description="FDA-approved botulinum toxin for wrinkle reduction",
|
||||
keywords=["wrinkle treatment", "anti-aging", "facial rejuvenation"],
|
||||
procedure_time="15-30 minutes",
|
||||
recovery_time="No downtime",
|
||||
price_range="₩₩₩₩"
|
||||
)
|
||||
]
|
||||
|
||||
return brand, locations, services
|
||||
|
||||
def main():
|
||||
"""Main execution function"""
|
||||
print("=" * 60)
|
||||
print("Gateway Page Content Generator")
|
||||
print("=" * 60)
|
||||
|
||||
# Get sample data
|
||||
brand, locations, services = create_sample_data()
|
||||
|
||||
# Initialize generator
|
||||
generator = GatewayPageGenerator(brand)
|
||||
|
||||
# Generate pages
|
||||
print(f"\nGenerating {len(services) * len(locations)} gateway pages...")
|
||||
print("-" * 40)
|
||||
|
||||
generated_files = generator.generate_batch(services, locations)
|
||||
|
||||
print("-" * 40)
|
||||
print(f"\n✅ Successfully generated {len(generated_files)} pages!")
|
||||
print(f"📁 Output directory: output/")
|
||||
print(f"📋 Index file created: output/index.md")
|
||||
|
||||
# Generate report
|
||||
print("\n" + "=" * 60)
|
||||
print("GENERATION REPORT")
|
||||
print("=" * 60)
|
||||
print(f"Brand: {brand.name_en}")
|
||||
print(f"Locations: {', '.join([loc.name_en for loc in locations])}")
|
||||
print(f"Services: {', '.join([svc.name_en for svc in services])}")
|
||||
print(f"Total Pages: {len(generated_files)}")
|
||||
print(f"Timestamp: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||
print("=" * 60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,5 @@
|
||||
# 18-seo-gateway-builder dependencies
|
||||
jinja2>=3.1.0
|
||||
pyyaml>=6.0.0
|
||||
markdown>=3.5.0
|
||||
python-dotenv>=1.0.0
|
||||
@@ -0,0 +1,231 @@
|
||||
# [Medical Service] in [Location] | [Clinic Name]
|
||||
|
||||
<!-- Meta Tags -->
|
||||
<!--
|
||||
Title: [Medical Service] in [Location] | Expert Care | [Clinic Name]
|
||||
Description: Looking for professional [medical service] in [location]? [Clinic Name] offers state-of-the-art [service] with experienced doctors. ✓ Same-day appointments ✓ Insurance accepted ✓ [Unique benefit]
|
||||
Canonical: https://example.com/[location]/[service-slug]/
|
||||
-->
|
||||
|
||||
## Professional [Medical Service] Available in [Location]
|
||||
|
||||
Welcome to [Clinic Name], your trusted provider for [medical service] in [location]. Our medical team brings over [X years] of combined experience, utilizing the latest medical technology to ensure optimal results for our patients in the [location] area.
|
||||
|
||||
### Why Choose [Clinic Name] for [Medical Service] in [Location]?
|
||||
|
||||
Located conveniently at [specific address near landmark], our [location] clinic specializes in providing personalized [medical service] treatments tailored to each patient's unique needs. We understand the specific health concerns of [location] residents and have designed our services accordingly.
|
||||
|
||||
**Our [Location] Advantages:**
|
||||
- 🏥 Modern facility equipped with latest [equipment type]
|
||||
- 👨⚕️ Board-certified specialists with [certification details]
|
||||
- 📍 Easy access from [nearby subway/bus stations]
|
||||
- 🕐 Extended hours to accommodate busy [location] professionals
|
||||
- 💳 Accept major insurance plans popular in [location]
|
||||
|
||||
## Understanding [Medical Service]
|
||||
|
||||
### What Is [Medical Service]?
|
||||
|
||||
[Detailed medical explanation of the service, including scientific background, FDA approvals if applicable, and medical benefits. This section should be educational while remaining accessible.]
|
||||
|
||||
### Who Can Benefit from [Medical Service]?
|
||||
|
||||
Our [medical service] treatment in [location] is ideal for patients experiencing:
|
||||
- [Condition 1 with brief explanation]
|
||||
- [Condition 2 with brief explanation]
|
||||
- [Condition 3 with brief explanation]
|
||||
- [Condition 4 with brief explanation]
|
||||
|
||||
## Our [Medical Service] Process in [Location]
|
||||
|
||||
### 1. Initial Consultation
|
||||
Your journey begins with a comprehensive consultation at our [location] clinic. Our specialists will:
|
||||
- Review your medical history
|
||||
- Conduct necessary diagnostic tests
|
||||
- Discuss your treatment goals
|
||||
- Create a personalized treatment plan
|
||||
|
||||
### 2. Treatment Planning
|
||||
Based on your consultation, we develop a customized approach that considers:
|
||||
- Your specific medical condition
|
||||
- Lifestyle factors common to [location] residents
|
||||
- Insurance coverage options
|
||||
- Optimal scheduling for your convenience
|
||||
|
||||
### 3. Treatment Sessions
|
||||
Each [medical service] session at our [location] facility typically involves:
|
||||
- Pre-treatment preparation
|
||||
- The procedure itself (approximately [duration])
|
||||
- Post-treatment monitoring
|
||||
- Detailed aftercare instructions
|
||||
|
||||
### 4. Follow-up Care
|
||||
We provide comprehensive follow-up support including:
|
||||
- Scheduled check-ups
|
||||
- 24/7 emergency hotline
|
||||
- Ongoing treatment adjustments
|
||||
- Long-term health monitoring
|
||||
|
||||
## Expected Results and Recovery
|
||||
|
||||
### What to Expect After [Medical Service]
|
||||
|
||||
Patients at our [location] clinic typically experience:
|
||||
- **Immediate effects**: [Description]
|
||||
- **Short-term (1-2 weeks)**: [Description]
|
||||
- **Long-term (1-3 months)**: [Description]
|
||||
- **Final results**: [Timeline and description]
|
||||
|
||||
### Recovery Timeline
|
||||
- Day 1-3: [Recovery details]
|
||||
- Week 1: [Recovery details]
|
||||
- Week 2-4: [Recovery details]
|
||||
- Month 2-3: [Recovery details]
|
||||
|
||||
## Safety and Credentials
|
||||
|
||||
### Our Medical Standards
|
||||
[Clinic Name] in [location] maintains the highest medical standards:
|
||||
- ✓ [Relevant medical certification]
|
||||
- ✓ [Hospital affiliation if applicable]
|
||||
- ✓ [Safety protocol certification]
|
||||
- ✓ [Professional membership]
|
||||
|
||||
### Our Medical Team
|
||||
**Dr. [Name], MD**
|
||||
- [Medical school]
|
||||
- [Residency/Fellowship]
|
||||
- [Years of experience] specializing in [medical service]
|
||||
- [Special recognition or research]
|
||||
|
||||
## Pricing and Insurance
|
||||
|
||||
### Insurance Coverage
|
||||
We accept most major insurance plans used by [location] residents:
|
||||
- [Insurance provider 1]
|
||||
- [Insurance provider 2]
|
||||
- [Insurance provider 3]
|
||||
- [Insurance provider 4]
|
||||
|
||||
### Payment Options
|
||||
For your convenience, we offer:
|
||||
- Insurance direct billing
|
||||
- Flexible payment plans
|
||||
- Credit card payments
|
||||
- HSA/FSA acceptance
|
||||
|
||||
### Transparent Pricing
|
||||
Contact us for a detailed quote. Factors affecting cost include:
|
||||
- Severity of condition
|
||||
- Number of sessions required
|
||||
- Insurance coverage level
|
||||
- Additional treatments needed
|
||||
|
||||
## Patient Testimonials from [Location]
|
||||
|
||||
> "After struggling with [condition] for years, I finally found relief at [Clinic Name]. The team was professional, and the results exceeded my expectations."
|
||||
> — [Patient initials], [Location] resident
|
||||
|
||||
> "The convenience of having such high-quality [medical service] right here in [location] made all the difference. I no longer have to travel to [other area] for treatment."
|
||||
> — [Patient initials], [Nearby neighborhood]
|
||||
|
||||
> "Dr. [Name] took the time to explain everything thoroughly. I felt confident throughout the entire process."
|
||||
> — [Patient initials], [Location] professional
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
### General Questions
|
||||
|
||||
**Q: How do I know if [medical service] is right for me?**
|
||||
A: The best way to determine if you're a candidate is through a consultation at our [location] clinic. We'll evaluate your medical history, current condition, and treatment goals.
|
||||
|
||||
**Q: How long does [medical service] take?**
|
||||
A: Treatment sessions typically last [duration], though your first visit including consultation may take [longer duration].
|
||||
|
||||
**Q: Is [medical service] painful?**
|
||||
A: [Comfort level explanation with pain management options available]
|
||||
|
||||
### Location-Specific Questions
|
||||
|
||||
**Q: Where exactly is your [location] clinic located?**
|
||||
A: We're located at [full address], just [distance] from [landmark/station]. [Parking/public transport information].
|
||||
|
||||
**Q: Do you have parking available?**
|
||||
A: Yes, we offer [parking details specific to location].
|
||||
|
||||
**Q: What are your hours for the [location] clinic?**
|
||||
A:
|
||||
- Monday-Friday: [hours]
|
||||
- Saturday: [hours]
|
||||
- Sunday: [hours/closed]
|
||||
|
||||
### Insurance and Payment
|
||||
|
||||
**Q: Does insurance cover [medical service]?**
|
||||
A: Coverage varies by plan. Our insurance specialists can verify your benefits before your appointment.
|
||||
|
||||
**Q: Do you offer payment plans?**
|
||||
A: Yes, we offer flexible payment options including [specific plans available].
|
||||
|
||||
## Schedule Your [Medical Service] Consultation in [Location]
|
||||
|
||||
Ready to take the first step? Contact our [location] clinic today:
|
||||
|
||||
### Contact Information
|
||||
📍 **Address**: [Full address]
|
||||
📞 **Phone**: [Local phone number]
|
||||
📧 **Email**: [location]@[clinicname].com
|
||||
🌐 **Online Booking**: [URL]
|
||||
|
||||
### Office Hours
|
||||
- **Monday-Friday**: [Hours]
|
||||
- **Saturday**: [Hours]
|
||||
- **Sunday**: [Hours/Closed]
|
||||
- **Emergency**: [24/7 hotline if available]
|
||||
|
||||
### Getting Here
|
||||
**By Subway**: [Detailed directions from nearest station]
|
||||
**By Bus**: [Bus routes and stops]
|
||||
**By Car**: [Driving directions and parking info]
|
||||
|
||||
---
|
||||
|
||||
<!-- Schema Markup -->
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "MedicalClinic",
|
||||
"name": "[Clinic Name] - [Location]",
|
||||
"image": "[clinic-image-url]",
|
||||
"@id": "[page-url]",
|
||||
"url": "[website-url]",
|
||||
"telephone": "[phone-number]",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": "[street]",
|
||||
"addressLocality": "[city]",
|
||||
"addressRegion": "[state/province]",
|
||||
"postalCode": "[zip]",
|
||||
"addressCountry": "KR"
|
||||
},
|
||||
"geo": {
|
||||
"@type": "GeoCoordinates",
|
||||
"latitude": [latitude],
|
||||
"longitude": [longitude]
|
||||
},
|
||||
"openingHoursSpecification": {
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
||||
"opens": "09:00",
|
||||
"closes": "18:00"
|
||||
},
|
||||
"medicalSpecialty": "[Medical Specialty]",
|
||||
"availableService": {
|
||||
"@type": "MedicalProcedure",
|
||||
"name": "[Medical Service]",
|
||||
"description": "[Service Description]"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
*Last updated: [Date] | [Clinic Name] - Professional [Medical Service] in [Location]*
|
||||
Reference in New Issue
Block a user