Files
manoon-headless/docs/PROGRAMMATIC_SEO_PLAN.md
Unchained f6609f07d7 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
2026-04-05 05:21:57 +02:00

503 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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?