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

13 KiB
Raw Blame History

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:

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:

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:

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:

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:

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:

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:

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

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)

// 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)

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?