feat: implement programmatic SEO solutions hub

- Add /solutions hub page with 10 category cards
- Add /solutions/by-concern directory page
- Add /solutions/by-oil directory page
- Add Solutions section to Footer with navigation links
- Add Breadcrumb component for solution pages
- Add translations for all solution pages (sr, en, de, fr)
- Fix ExitIntentDetector JSON parsing error
- Update sitemap with solution pages
- Create 3 sample solution pages with data files
This commit is contained in:
Unchained
2026-04-05 05:21:57 +02:00
parent 6caefb420a
commit f6609f07d7
22 changed files with 3263 additions and 8 deletions

View File

@@ -0,0 +1,503 @@
# Programmatic SEO Plan for ManoonOils
## Executive Summary
Create 100+ SEO-optimized landing pages from structured datasets to capture high-intent search traffic and convert visitors into serum buyers.
---
## Dataset Ideas (7 Core Categories)
### 1. **Ingredient Benefits Database** ⭐ Highest Priority
**Dataset Size:** 50-100 ingredients × 4 locales = 200-400 pages
**Data Structure:**
```typescript
interface Ingredient {
slug: string; // "rosehip-oil"
name: {
sr: "Ulje divlje ruže";
en: "Rosehip Oil";
de: "Hagebuttenöl";
fr: "Huile de rose musquée";
};
benefits: string[]; // ["anti-aging", "hydration", "scars"]
skinTypes: string[]; // ["dry", "mature", "sensitive"]
scientificName: string;
origin: string;
extractionMethod: string;
keyCompounds: string[]; // ["vitamin A", "omega-3", "antioxidants"]
usageInstructions: string;
complementaryIngredients: string[]; // ["vitamin-e", "jojoba-oil"]
relatedProducts: string[]; // Product slugs to recommend
faqs: FAQ[];
seoKeywords: {
primary: string;
secondary: string[];
longTail: string[];
};
}
```
**Page Template:** `/ingredients/[slug]`
- Hero: Ingredient name + key benefit
- Scientific overview
- Benefits for skin (with icons)
- How to use (with video placeholder)
- "Best for" skin types
- Related Manoon products (product cards)
- FAQ schema markup
- CTA: "Shop serums with [ingredient]"
**Example Pages:**
- `/ingredients/rosehip-oil` - "Rosehip Oil for Anti-Aging: Benefits & How to Use"
- `/ingredients/bakuchiol` - "Bakuchiol: Natural Retinol Alternative"
- `/ingredients/sea-buckthorn` - "Sea Buckthorn Oil: Vitamin C Powerhouse"
---
### 2. **Skin Concern Solutions** ⭐ Highest Priority
**Dataset Size:** 20-30 concerns × 4 locales = 80-120 pages
**Data Structure:**
```typescript
interface SkinConcern {
slug: string; // "fine-lines"
name: {
sr: "Bore i linije";
en: "Fine Lines & Wrinkles";
de: "Feine Linien";
fr: "Rides et ridules";
};
description: string;
causes: string[];
bestIngredients: string[]; // Links to ingredient pages
recommendedRoutine: {
morning: string[];
evening: string[];
};
relatedProducts: string[];
beforeAfterImages: boolean;
testimonials: Testimonial[];
seoKeywords: SEOKeywords;
}
```
**Page Template:** `/concerns/[slug]`
- Empathy hook: "Struggling with [concern]?"
- Explain the problem
- Best ingredients (linking to ingredient pages)
- Recommended products
- Customer results/testimonials
- Free guide download (lead capture)
- CTA: "Start your transformation"
**Example Pages:**
- `/concerns/fine-lines` - "How to Reduce Fine Lines Naturally"
- `/concerns/hyperpigmentation` - "Dark Spots: Causes & Natural Solutions"
- `/concerns/dull-skin` - "Get Your Glow Back: Dull Skin Remedies"
---
### 3. **Ingredient Comparison Matrix**
**Dataset Size:** 50 ingredient pairs = 50 comparison pages
**Data Structure:**
```typescript
interface IngredientComparison {
slug: string; // "retinol-vs-bakuchiol"
ingredientA: string; // Reference to ingredient
ingredientB: string;
comparisonPoints: {
effectiveness: string;
gentleness: string;
price: string;
availability: string;
bestFor: string[];
};
winner: string | "tie";
recommendation: string; // "Choose X if..., Choose Y if..."
relatedProducts: {
a: string[];
b: string[];
};
}
```
**Page Template:** `/compare/[slug]`
- Head-to-head comparison table
- Which is better for what
- Product recommendations for both
- "Can't decide? Try our quiz"
- CTA: Shop both options
**Example Pages:**
- `/compare/retinol-vs-bakuchiol`
- `/compare/vitamin-c-vs-niacinamide`
- `/compare/rosehip-vs-argan-oil`
---
### 4. **Seasonal Skincare Guides**
**Dataset Size:** 4 seasons × 5 climates × 4 locales = 80 pages
**Data Structure:**
```typescript
interface SeasonalGuide {
slug: string; // "winter-skincare-routine"
season: "winter" | "spring" | "summer" | "autumn";
climate: "cold" | "dry" | "humid" | "temperate" | "tropical";
title: LocalizedString;
challenges: string[];
recommendedIngredients: string[];
routine: {
morning: RoutineStep[];
evening: RoutineStep[];
};
productBundle: string[];
tips: string[];
}
```
**Page Template:** `/guides/seasonal/[slug]`
- Season-specific challenges
- Ingredient recommendations
- Step-by-step routine
- Product bundle suggestion
- "Get the seasonal routine set" CTA
**Example Pages:**
- `/guides/seasonal/winter-skincare-routine`
- `/guides/seasonal/summer-anti-aging`
- `/guides/seasonal/spring-skin-renewal`
---
### 5. **Age-Specific Routines**
**Dataset Size:** 6 age groups × 4 locales = 24 pages
**Data Structure:**
```typescript
interface AgeRoutine {
slug: string; // "skincare-routine-30s"
ageRange: string; // "20s", "30s", "40s", "50s", "60s+"
title: LocalizedString;
skinChanges: string[];
keyConcerns: string[];
recommendedIngredients: string[];
routine: DailyRoutine;
productRecommendations: string[];
preventionTips: string[];
}
```
**Page Template:** `/routines/age/[slug]`
- "Best skincare routine for your [age]s"
- What happens to skin at this age
- Key ingredients to start using
- Morning & evening routine
- Product recommendations
- "Shop the [age]s routine bundle"
**Example Pages:**
- `/routines/age/skincare-routine-30s`
- `/routines/age/anti-aging-routine-40s`
- `/routines/age/mature-skin-care-50s`
---
### 6. **Skin Type Hubs**
**Dataset Size:** 6 skin types × 4 locales = 24 pages
**Data Structure:**
```typescript
interface SkinType {
slug: string; // "dry-skin"
name: LocalizedString;
characteristics: string[];
causes: string[];
ingredientsToLookFor: string[];
ingredientsToAvoid: string[];
recommendedProducts: string[];
routine: DailyRoutine;
tips: string[];
}
```
**Page Template:** `/skin-types/[slug]`
- Quiz: "Do you have [skin type]?"
- Characteristics checklist
- Best ingredients (with links)
- Complete routine
- Products specifically for this type
- CTA: "Build your [type] routine"
**Example Pages:**
- `/skin-types/dry-skin`
- `/skin-types/sensitive-skin`
- `/skin-types/combination-skin`
---
### 7. **Geographic/Climate-Specific**
**Dataset Size:** 20 regions × 4 seasons = 80 pages
**Data Structure:**
```typescript
interface ClimateGuide {
slug: string; // "skincare-for-cold-climates"
region: string;
climate: string;
challenges: string[];
recommendedIngredients: string[];
routineModifications: string;
productBundle: string[];
localTestimonials?: Testimonial[];
}
```
**Page Template:** `/climate/[slug]`
- "Skincare for [climate] climates"
- Local skin challenges
- Best ingredients for this climate
- Modified routine
- "Customers in [region] love..."
**Example Pages:**
- `/climate/skincare-for-cold-climates`
- `/climate/skincare-for-humid-climates`
- `/climate/skincare-for-arid-climates`
---
## Data Storage Strategy
### Option A: JSON Files (Recommended for MVP)
```
data/
├── ingredients/
│ ├── rosehip-oil.json
│ ├── bakuchiol.json
│ └── ...
├── concerns/
│ ├── fine-lines.json
│ ├── hyperpigmentation.json
│ └── ...
├── comparisons/
│ ├── retinol-vs-bakuchiol.json
│ └── ...
└── locales/
├── sr/
├── en/
├── de/
└── fr/
```
**Pros:**
- Easy to version control
- Simple to edit
- Fast to implement
- Works with Next.js static generation
### Option B: Headless CMS (Strapi/Sanity)
**Pros:**
- Non-technical team can edit
- Rich media support
- Relationships between entities
### Option C: Database (PostgreSQL/MongoDB)
**Pros:**
- Dynamic content
- User-generated content ready
- Advanced filtering
---
## Technical Implementation
### URL Structure
```
/ingredients/[slug] # Ingredient deep-dives
/concerns/[slug] # Problem-solving pages
/compare/[slug] # Comparison pages
/guides/seasonal/[slug] # Seasonal content
/routines/age/[slug] # Age-specific routines
/skin-types/[slug] # Skin type hubs
/climate/[slug] # Climate guides
```
### Page Generation (Next.js)
```typescript
// app/ingredients/[slug]/page.tsx
export async function generateStaticParams() {
const ingredients = await getAllIngredients();
return ingredients.map((i) => ({ slug: i.slug }));
}
export default async function IngredientPage({
params: { slug, locale }
}) {
const ingredient = await getIngredient(slug, locale);
return <IngredientTemplate data={ingredient} />;
}
```
### SEO Template Fields (Per Page)
```typescript
interface SEOTemplate {
title: string; // "Rosehip Oil for Anti-Aging | Benefits & Uses | ManoonOils"
metaDescription: string; // 155 chars with keywords
canonical: string; // Full URL
ogTitle: string;
ogDescription: string;
ogImage: string; // Dynamic OG image with ingredient
keywords: string[];
faqSchema: FAQPageSchema;
productSchema?: ProductSchema;
breadcrumb: BreadcrumbItem[];
}
```
---
## Content Templates
### Ingredient Page Template
```
H1: [Ingredient Name] for [Primary Benefit]: Complete Guide
Hero Section:
- Large ingredient image
- Key benefits (3 icons)
- CTA: "Shop [ingredient] serums"
H2: What is [Ingredient]?
- Scientific explanation
- Origin & extraction
- Key compounds
H2: Benefits of [Ingredient] for Skin
- H3: Anti-aging properties
- H3: Hydration benefits
- H3: Additional benefits
H2: Best Skin Types for [Ingredient]
- Visual skin type selector
H2: How to Use [Ingredient] in Your Routine
- Morning routine
- Evening routine
- What to pair with (links to comparisons)
H2: Our [Ingredient] Products
- Product cards with prices
- "Shop all [ingredient] products"
H2: Frequently Asked Questions
- FAQ schema markup
- 5-7 common questions
Related Content:
- Compare with similar ingredients
- Read about skin concerns it treats
CTA: "Start your [ingredient] routine"
```
---
## Conversion Strategy
### Lead Magnets (Email Capture)
1. **"The Natural Anti-Aging Guide"** - PDF download
2. **"Ingredient Compatibility Chart"** - Interactive tool
3. **"Personalized Routine Quiz"** - Email results
4. **"Seasonal Skincare Calendar"** - Year-long guide
### Product CTAs
1. **Primary:** "Shop [ingredient] serums" → Category page
2. **Secondary:** "Get the complete routine" → Bundle offer
3. **Tertiary:** "Take the skin quiz" → Lead capture
### Cross-Selling
- "Customers who viewed [ingredient] also bought..."
- "Complete your routine with..."
- "Pair with [complementary ingredient] for best results"
---
## Expected Traffic & ROI
### Traffic Estimates (6-month projection)
| Dataset | Pages | Avg Monthly Searches/Page | Est. Monthly Traffic |
|---------|-------|---------------------------|---------------------|
| Ingredients | 100 | 500 | 5,000 |
| Concerns | 50 | 1,000 | 10,000 |
| Comparisons | 50 | 800 | 8,000 |
| Seasonal | 80 | 300 | 6,000 |
| Age Routines | 24 | 600 | 3,000 |
| Skin Types | 24 | 700 | 3,000 |
| Climate | 80 | 200 | 2,000 |
| **TOTAL** | **408** | **-** | **37,000** |
### Conversion Targets
- **Organic CTR:** 3-5% (industry average)
- **Page-to-Product CTR:** 15-20%
- **Product-to-Purchase:** 2-3%
- **Estimated Monthly Revenue:** €15,000-30,000 (at €50 AOV)
---
## Implementation Timeline
### Phase 1: Foundation (Weeks 1-2)
- [ ] Set up data structure
- [ ] Create 10 priority ingredient pages
- [ ] Build reusable templates
- [ ] Implement JSON-LD schemas
### Phase 2: Core Content (Weeks 3-6)
- [ ] Create 50 ingredient pages
- [ ] Create 20 concern pages
- [ ] Build comparison tool
- [ ] Add lead magnets
### Phase 3: Scale (Weeks 7-10)
- [ ] Generate all 400+ pages
- [ ] Implement internal linking
- [ ] Add dynamic OG images
- [ ] A/B test CTAs
### Phase 4: Optimize (Weeks 11-12)
- [ ] Analyze top performers
- [ ] Update underperformers
- [ ] Add user-generated content
- [ ] Expand winning categories
---
## Success Metrics
### SEO Metrics
- **Organic traffic:** 37,000+/month by month 6
- **Keyword rankings:** Top 10 for 100+ keywords
- **Featured snippets:** Capture 20+ position 0
- **Domain authority:** Increase from current baseline
### Business Metrics
- **Revenue from organic:** €15,000-30,000/month
- **Email list growth:** 1,000+ subscribers/month
- **Customer acquisition cost:** Lower than paid ads
- **Lifetime value:** Higher (organic customers retain better)
---
## Next Steps
1. **Approve dataset priorities** - Which categories to start with?
2. **Create data structure** - Set up JSON/CMS schemas
3. **Build 3 sample pages** - One from each priority category
4. **Test & iterate** - Measure performance before scaling
5. **Full production** - Generate all 400+ pages
Want me to start building the data structure and first sample pages?