feat: implement centralized taxonomy for programmatic SEO
- Create taxonomy system with oils.json (5 oils) and concerns.json (9 concerns) - Migrate 10 content files to new data/content/oil-for-concern/ structure - Add scripts: generate-urls.js, validate-taxonomy.js, migrate-content.js - Update dataLoader.ts to use centralized taxonomy - Generate 40 URLs (10 pairs × 4 languages) - Create sitemap-programmatic.xml for SEO - Update by-oil and by-concern directory pages
This commit is contained in:
273
data/taxonomy/concerns.json
Normal file
273
data/taxonomy/concerns.json
Normal file
@@ -0,0 +1,273 @@
|
||||
{
|
||||
"schema": {
|
||||
"version": "1.0.0",
|
||||
"lastUpdated": "2026-04-09"
|
||||
},
|
||||
"concerns": {
|
||||
"wrinkles": {
|
||||
"id": "wrinkles",
|
||||
"slug": {
|
||||
"sr": "bore",
|
||||
"en": "wrinkles",
|
||||
"de": "falten",
|
||||
"fr": "rides"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Bore",
|
||||
"en": "Wrinkles",
|
||||
"de": "Falten",
|
||||
"fr": "Rides"
|
||||
},
|
||||
"namePlural": {
|
||||
"sr": "Bore",
|
||||
"en": "Wrinkles",
|
||||
"de": "Falten",
|
||||
"fr": "Rides"
|
||||
},
|
||||
"category": "anti-aging",
|
||||
"description": {
|
||||
"sr": "Fine linije i dublje bore usled smanjenja kolagena",
|
||||
"en": "Fine lines and deep wrinkles due to collagen loss",
|
||||
"de": "Feine Linien und tiefe Falten durch Kollagenverlust",
|
||||
"fr": "Ridules et rides profondes dues à la perte de collagène"
|
||||
},
|
||||
"severityLevels": ["fine-lines", "moderate", "deep"],
|
||||
"oils": ["argan-oil", "rosehip-oil"],
|
||||
"keyIngredients": ["retinol", "vitamin-e", "peptides"],
|
||||
"priority": 1
|
||||
},
|
||||
"dry-skin": {
|
||||
"id": "dry-skin",
|
||||
"slug": {
|
||||
"sr": "suva-koza",
|
||||
"en": "dry-skin",
|
||||
"de": "trockene-haut",
|
||||
"fr": "peau-seche"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Suva koža",
|
||||
"en": "Dry Skin",
|
||||
"de": "Trockene Haut",
|
||||
"fr": "Peau sèche"
|
||||
},
|
||||
"category": "hydration",
|
||||
"description": {
|
||||
"sr": "Koža koja lack vlage, često osećaj zatezanja",
|
||||
"en": "Skin lacking moisture, often feels tight",
|
||||
"de": "Haut mit Feuchtigkeitsmangel, fühlt sich oft spannt an",
|
||||
"fr": "Peau manquant d'hydratation, sensation de tiraillement"
|
||||
},
|
||||
"oils": ["argan-oil"],
|
||||
"keyIngredients": ["hyaluronic-acid", "squalene", "ceramides"],
|
||||
"priority": 2
|
||||
},
|
||||
"acne": {
|
||||
"id": "acne",
|
||||
"slug": {
|
||||
"sr": "akne",
|
||||
"en": "acne",
|
||||
"de": "akne",
|
||||
"fr": "acne"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Akne",
|
||||
"en": "Acne",
|
||||
"de": "Akne",
|
||||
"fr": "Acné"
|
||||
},
|
||||
"category": "clarifying",
|
||||
"description": {
|
||||
"sr": "Zapaljenje folikula dlaka uzrokovan bakterijama i viškom sebuma",
|
||||
"en": "Inflammation of hair follicles caused by bacteria and excess sebum",
|
||||
"de": "Entzündung der Haarfollikel durch Bakterien und überschüssigen Talg",
|
||||
"fr": "Inflammation des follicules pileux causée par des bactéries et excès de sébum"
|
||||
},
|
||||
"severityLevels": ["occasional", "moderate", "severe"],
|
||||
"oils": ["jojoba-oil"],
|
||||
"keyIngredients": ["tea-tree-oil", "salicylic-acid", "zinc"],
|
||||
"priority": 3
|
||||
},
|
||||
"oily-skin": {
|
||||
"id": "oily-skin",
|
||||
"slug": {
|
||||
"sr": "masna-koza",
|
||||
"en": "oily-skin",
|
||||
"de": "fettige-haut",
|
||||
"fr": "peau-grasse"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Masna koža",
|
||||
"en": "Oily Skin",
|
||||
"de": "Fettige Haut",
|
||||
"fr": "Peau grasse"
|
||||
},
|
||||
"category": "balancing",
|
||||
"description": {
|
||||
"sr": "Prekomerna proizvodnja sebuma koja dovodi do sjaja",
|
||||
"en": "Excessive sebum production leading to shine",
|
||||
"de": "Übermäßige Talgproduktion führt zu Glanz",
|
||||
"fr": "Production excessive de sébum entraînant de la brillance"
|
||||
},
|
||||
"oils": ["jojoba-oil"],
|
||||
"keyIngredients": ["niacinamide", "zinc", "clay"],
|
||||
"priority": 4
|
||||
},
|
||||
"dark-spots": {
|
||||
"id": "dark-spots",
|
||||
"slug": {
|
||||
"sr": "tamne-pjege",
|
||||
"en": "dark-spots",
|
||||
"de": "dunkle-flecken",
|
||||
"fr": "taches-sombres"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Tamne pjege",
|
||||
"en": "Dark Spots",
|
||||
"de": "Dunkle Flecken",
|
||||
"fr": "Taches sombres"
|
||||
},
|
||||
"category": "brightening",
|
||||
"description": {
|
||||
"sr": "Hiperpigmentacija uzrokovana suncem ili post-akne",
|
||||
"en": "Hyperpigmentation caused by sun or post-acne",
|
||||
"de": "Hyperpigmentierung durch Sonne oder Post-Akne",
|
||||
"fr": "Hyperpigmentation causée par le soleil ou post-acné"
|
||||
},
|
||||
"oils": ["rosehip-oil"],
|
||||
"keyIngredients": ["vitamin-c", "kojic-acid", "alpha-arbutin"],
|
||||
"priority": 5
|
||||
},
|
||||
"hyperpigmentation": {
|
||||
"id": "hyperpigmentation",
|
||||
"slug": {
|
||||
"sr": "hiperpigmentacija",
|
||||
"en": "hyperpigmentation",
|
||||
"de": "hyperpigmentierung",
|
||||
"fr": "hyperpigmentation"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Hiperpigmentacija",
|
||||
"en": "Hyperpigmentation",
|
||||
"de": "Hyperpigmentierung",
|
||||
"fr": "Hyperpigmentation"
|
||||
},
|
||||
"category": "brightening",
|
||||
"description": {
|
||||
"sr": "Tamne fleke na koži usled prekomernog melanina",
|
||||
"en": "Dark patches on skin due to excess melanin",
|
||||
"de": "Dunkle Hautflecken durch überschüssiges Melanin",
|
||||
"fr": "Taches sombres sur la peau dues à un excès de mélanine"
|
||||
},
|
||||
"oils": ["sea-buckthorn-oil"],
|
||||
"keyIngredients": ["vitamin-c", "tranexamic-acid"],
|
||||
"priority": 6
|
||||
},
|
||||
"acne-scars": {
|
||||
"id": "acne-scars",
|
||||
"slug": {
|
||||
"sr": "oziljci-od-akni",
|
||||
"en": "acne-scars",
|
||||
"de": "aknenarben",
|
||||
"fr": "cicatrices-dacne"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Ožiljci od akni",
|
||||
"en": "Acne Scars",
|
||||
"de": "Aknenarben",
|
||||
"fr": "Cicatrices d'acné"
|
||||
},
|
||||
"category": "healing",
|
||||
"description": {
|
||||
"sr": "Ožiljci nastali nakon zarastanja akni",
|
||||
"en": "Scars formed after acne healing",
|
||||
"de": "Narben, die sich nach der Akne-Heilung bilden",
|
||||
"fr": "Cicatrices formées après la guérison de l'acné"
|
||||
},
|
||||
"scarTypes": ["atrophic", "hypertrophic", "post-inflammatory"],
|
||||
"oils": ["rosehip-oil"],
|
||||
"keyIngredients": ["vitamin-a", "centella-asiatica", "allantoin"],
|
||||
"priority": 7
|
||||
},
|
||||
"under-eye-bags": {
|
||||
"id": "under-eye-bags",
|
||||
"slug": {
|
||||
"sr": "podocnjaci",
|
||||
"en": "under-eye-bags",
|
||||
"de": "augenringe",
|
||||
"fr": "cernes"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Podočnjaci",
|
||||
"en": "Under-Eye Bags",
|
||||
"de": "Augenringe",
|
||||
"fr": "Cernes"
|
||||
},
|
||||
"category": "anti-aging",
|
||||
"description": {
|
||||
"sr": "Oticanje i tamni krugovi ispod očiju",
|
||||
"en": "Puffiness and dark circles under eyes",
|
||||
"de": "Schwellungen und Augenringe",
|
||||
"fr": "Poches et cernes sous les yeux"
|
||||
},
|
||||
"oils": ["argan-oil"],
|
||||
"keyIngredients": ["caffeine", "vitamin-k", "peptides"],
|
||||
"priority": 8
|
||||
},
|
||||
"sensitive-skin": {
|
||||
"id": "sensitive-skin",
|
||||
"slug": {
|
||||
"sr": "osetljiva-koza",
|
||||
"en": "sensitive-skin",
|
||||
"de": "empfindliche-haut",
|
||||
"fr": "peau-sensible"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Osetljiva koža",
|
||||
"en": "Sensitive Skin",
|
||||
"de": "Empfindliche Haut",
|
||||
"fr": "Peau sensible"
|
||||
},
|
||||
"category": "soothing",
|
||||
"description": {
|
||||
"sr": "Koža sklona crvenilu, svrabu i iritaciji",
|
||||
"en": "Skin prone to redness, itching and irritation",
|
||||
"de": "Haut neigt zu Rötungen, Juckreiz und Reizungen",
|
||||
"fr": "Peau sujette aux rougeurs, démangeaisons et irritations"
|
||||
},
|
||||
"triggers": ["fragrance", "alcohol", "harsh-cleansers"],
|
||||
"oils": ["sweet-almond-oil"],
|
||||
"keyIngredients": ["panthenol", "allantoin", "chamomile"],
|
||||
"priority": 9
|
||||
}
|
||||
},
|
||||
"categories": {
|
||||
"anti-aging": {
|
||||
"name": { "sr": "Anti-aging", "en": "Anti-Aging", "de": "Anti-Aging", "fr": "Anti-âge" },
|
||||
"priority": 1
|
||||
},
|
||||
"hydration": {
|
||||
"name": { "sr": "Hidratacija", "en": "Hydration", "de": "Feuchtigkeit", "fr": "Hydratation" },
|
||||
"priority": 2
|
||||
},
|
||||
"brightening": {
|
||||
"name": { "sr": "Posvetljivanje", "en": "Brightening", "de": "Aufhellung", "fr": "Éclaircissement" },
|
||||
"priority": 3
|
||||
},
|
||||
"balancing": {
|
||||
"name": { "sr": "Balansiranje", "en": "Balancing", "de": "Balance", "fr": "Équilibrage" },
|
||||
"priority": 4
|
||||
},
|
||||
"clarifying": {
|
||||
"name": { "sr": "Čišćenje", "en": "Clarifying", "de": "Klärung", "fr": "Clarification" },
|
||||
"priority": 5
|
||||
},
|
||||
"healing": {
|
||||
"name": { "sr": "Lečenje", "en": "Healing", "de": "Heilung", "fr": "Guérison" },
|
||||
"priority": 6
|
||||
},
|
||||
"soothing": {
|
||||
"name": { "sr": "Umirujuće", "en": "Soothing", "de": "Beruhigung", "fr": "Apaisant" },
|
||||
"priority": 7
|
||||
}
|
||||
}
|
||||
}
|
||||
160
data/taxonomy/oils.json
Normal file
160
data/taxonomy/oils.json
Normal file
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"schema": {
|
||||
"version": "1.0.0",
|
||||
"lastUpdated": "2026-04-09"
|
||||
},
|
||||
"oils": {
|
||||
"argan-oil": {
|
||||
"id": "argan-oil",
|
||||
"slug": {
|
||||
"sr": "arganovo-ulje",
|
||||
"en": "argan-oil",
|
||||
"de": "arganoel",
|
||||
"fr": "huile-dargan"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Arganovo ulje",
|
||||
"en": "Argan Oil",
|
||||
"de": "Arganöl",
|
||||
"fr": "Huile d'argan"
|
||||
},
|
||||
"shortDescription": {
|
||||
"sr": "Marokansko 'tečno zlato' bogato vitaminom E",
|
||||
"en": "Moroccan 'liquid gold' rich in vitamin E",
|
||||
"de": "Marokkanisches 'flüssiges Gold' reich an Vitamin E",
|
||||
"fr": "'Or liquide' marocain riche en vitamine E"
|
||||
},
|
||||
"icon": "droplet",
|
||||
"categories": ["anti-aging", "hydration"],
|
||||
"skinTypes": ["dry", "mature", "normal"],
|
||||
"concerns": ["wrinkles", "dry-skin", "under-eye-bags"],
|
||||
"keyIngredients": ["vitamin-e", "omega-6", "omega-9", "squalene"],
|
||||
"comedogenicRating": 0,
|
||||
"absorptionRate": "medium",
|
||||
"color": "golden-yellow",
|
||||
"scent": "nutty-light"
|
||||
},
|
||||
"rosehip-oil": {
|
||||
"id": "rosehip-oil",
|
||||
"slug": {
|
||||
"sr": "ulje-divlje-ruze",
|
||||
"en": "rosehip-oil",
|
||||
"de": "hagebuttenoel",
|
||||
"fr": "huile-de-rose-musquee"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Ulje divlje ruže",
|
||||
"en": "Rosehip Oil",
|
||||
"de": "Hagebuttenöl",
|
||||
"fr": "Huile de rose musquée"
|
||||
},
|
||||
"shortDescription": {
|
||||
"sr": "Bogato vitaminom A i esencijalnim masnim kiselinama",
|
||||
"en": "Rich in vitamin A and essential fatty acids",
|
||||
"de": "Reich an Vitamin A und essenziellen Fettsäuren",
|
||||
"fr": "Riche en vitamine A et acides gras essentiels"
|
||||
},
|
||||
"icon": "flower",
|
||||
"categories": ["brightening", "regeneration", "anti-aging"],
|
||||
"skinTypes": ["mature", "damaged", "uneven"],
|
||||
"concerns": ["wrinkles", "dark-spots", "acne-scars"],
|
||||
"keyIngredients": ["vitamin-a", "vitamin-c", "omega-3", "omega-6"],
|
||||
"comedogenicRating": 1,
|
||||
"absorptionRate": "fast",
|
||||
"color": "orange-red",
|
||||
"scent": "earthy"
|
||||
},
|
||||
"jojoba-oil": {
|
||||
"id": "jojoba-oil",
|
||||
"slug": {
|
||||
"sr": "jojoba-ulje",
|
||||
"en": "jojoba-oil",
|
||||
"de": "jojobaoel",
|
||||
"fr": "huile-de-jojoba"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Jojoba ulje",
|
||||
"en": "Jojoba Oil",
|
||||
"de": "Jojobaöl",
|
||||
"fr": "Huile de jojoba"
|
||||
},
|
||||
"shortDescription": {
|
||||
"sr": "Tečni vosak sličan ljudskom sebumu",
|
||||
"en": "Liquid wax similar to human sebum",
|
||||
"de": "Flüssiges Wachs ähnlich menschlichem Talg",
|
||||
"fr": "Cire liquide similaire au sébum humain"
|
||||
},
|
||||
"icon": "leaf",
|
||||
"categories": ["balancing", "clarifying"],
|
||||
"skinTypes": ["oily", "acne-prone", "combination"],
|
||||
"concerns": ["acne", "oily-skin"],
|
||||
"keyIngredients": ["eicosenoic-acid", "erucic-acid", "oleic-acid"],
|
||||
"comedogenicRating": 2,
|
||||
"absorptionRate": "fast",
|
||||
"color": "golden",
|
||||
"scent": "neutral"
|
||||
},
|
||||
"sea-buckthorn-oil": {
|
||||
"id": "sea-buckthorn-oil",
|
||||
"slug": {
|
||||
"sr": "ulje-pasjeg-trna",
|
||||
"en": "sea-buckthorn-oil",
|
||||
"de": "sanddornoel",
|
||||
"fr": "huile-dargousier"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Ulje pasjeg trna",
|
||||
"en": "Sea Buckthorn Oil",
|
||||
"de": "Sanddornöl",
|
||||
"fr": "Huile d'argousier"
|
||||
},
|
||||
"shortDescription": {
|
||||
"sr": "Superfood za kožu sa 12x više vitamina C od narandže",
|
||||
"en": "Superfood for skin with 12x more vitamin C than oranges",
|
||||
"de": "Superfood für die Haut mit 12x mehr Vitamin C als Orangen",
|
||||
"fr": "Super-aliment pour la peau avec 12x plus de vitamine C que les oranges"
|
||||
},
|
||||
"icon": "berry",
|
||||
"categories": ["brightening", "healing"],
|
||||
"skinTypes": ["damaged", "mature", "dull"],
|
||||
"concerns": ["hyperpigmentation"],
|
||||
"keyIngredients": ["vitamin-c", "vitamin-e", "beta-carotene", "omega-7"],
|
||||
"comedogenicRating": 1,
|
||||
"absorptionRate": "medium",
|
||||
"color": "deep-orange",
|
||||
"scent": "fruity"
|
||||
},
|
||||
"sweet-almond-oil": {
|
||||
"id": "sweet-almond-oil",
|
||||
"slug": {
|
||||
"sr": "ulje-slatkog-badema",
|
||||
"en": "sweet-almond-oil",
|
||||
"de": "suessmandeloel",
|
||||
"fr": "huile-damande-douce"
|
||||
},
|
||||
"name": {
|
||||
"sr": "Ulje slatkog badema",
|
||||
"en": "Sweet Almond Oil",
|
||||
"de": "Süßmandelöl",
|
||||
"fr": "Huile d'amande douce"
|
||||
},
|
||||
"shortDescription": {
|
||||
"sr": "Blago i hranljivo, idealno za osetljivu kožu",
|
||||
"en": "Gentle and nourishing, ideal for sensitive skin",
|
||||
"de": "Sanft und nährend, ideal für empfindliche Haut",
|
||||
"fr": "Doux et nourrissant, idéal pour les peaux sensibles"
|
||||
},
|
||||
"icon": "nut",
|
||||
"categories": ["soothing", "nourishing"],
|
||||
"skinTypes": ["sensitive", "dry", "baby"],
|
||||
"concerns": ["sensitive-skin"],
|
||||
"keyIngredients": ["vitamin-e", "zinc", "oleic-acid", "linoleic-acid"],
|
||||
"comedogenicRating": 2,
|
||||
"absorptionRate": "slow",
|
||||
"color": "pale-yellow",
|
||||
"scent": "sweet-nutty"
|
||||
}
|
||||
},
|
||||
"locales": ["sr", "en", "de", "fr"],
|
||||
"defaultLocale": "sr"
|
||||
}
|
||||
Reference in New Issue
Block a user