An e-commerce client contacts me in April 2026. Odoo catalog of 1,622 products: professional furniture for hair salons, beauty institutes and barber shops. Everything is technically clean on the site side, except for title and meta description tags: generated by the Odoo native plugin which repeats the same formula across the catalog. Result: 76% of metas contain at least two occurrences of the word "professional", and over a third contain three or four. Unacceptable from both SEO and editorial standpoints.
The immediate reflex would have been to rewrite a new template. But a template, by definition, generates redundancy. Redoing the same problem better is not solving the problem. So I built a clean method, which I named Semantic Prism™, now deployed on this client and the next ones. Here's how it works, and why it changes the game for any e-commerce above 500 product pages.
The root problem: a template always produces the same tags
Odoo's native templating plugin (like those of Magento, PrestaShop, Shopify or WordPress with Rank Math) works on a simple principle: you define a model, and each product page fills it with its own data. For example: {Product_name} professional: free shipping | Brand.
The result across 1,622 pages: 1,622 times the same sentence, except for the product name. To Google, these are near-identical tags across hundreds of pages: a thin, repetitive content signal. And above all, you miss the entire spectrum of queries your customers actually type.
"Nobody searches just for 'professional hair styling chair'. Real queries are 'premium hair styling chair', 'high-end hair styling chair', 'pro grade hair styling chair', and dozens of other variants your uniform tags completely ignore."
On the client catalog, I measured this opportunity gap via Search Console. At least 12 high-potential queries were already generating impressions without clicks, simply because the meta wording wasn't catching the user's exact intent. Latent traffic, never converted.
The insight: think like a bookseller, not like a robot
A good bookseller doesn't put the same label on every book. They describe each one according to what makes it distinctive, while keeping editorial consistency. The Semantic Prism applies exactly this principle to an e-commerce catalog: we keep global consistency (tone, structure, business keywords), but we intelligently vary the semantic complements to cover all the ways people search for your products.
The metaphor is in the name: a prism decomposes white light into a colored spectrum. The Semantic Prism takes a single SEO intent ("professional hair styling chair") and decomposes it into multiple equivalent wordings ("premium", "high-end", "pro grade"), calibrated against actual Google search volumes.
The ratio measured on Google Keyword Planner: the term "professional" generates 26,730 monthly searches in France, while its abbreviation "pro" only generates 1,380. This kind of volume gap is what calibrates variant weighting. Not gut feeling: data.
The 4 weighted pools of the Prism
The method rests on 4 "families" of interchangeable semantic complements. For each product page, the generator draws a variant from each family according to a weighted probability:
- Product qualifier · professional (60%), premium (15%), high-end (15%), pro grade (10%)
- Commercial action · buy online, quick quote, order, wholesale, b2b purchase
- Logistics · Europe shipping, always in stock, fast shipping, in stock
- Service · support included, 2-year warranty, assembly included, free quote
Across 1,622 product pages, this mechanism generates for example ~970 products with "professional", ~240 with "premium", ~240 with "high-end", ~160 with "pro grade". Instead of 1,622 occurrences of the same word, we cover 4 distinct intent angles, calibrated on actual search volumes.
Concretely, here are three product pages of the same type (hair styling chair) getting three different but coherent metas:
The technical rules guaranteeing quality
Simple rotation isn't enough. Without guardrails, you could draw the same word three times in one meta, or generate sentences exceeding the 60-character title limit. The Prism therefore integrates 6 technical rules implemented in a Python script that runs across the entire catalog before export:
1. Strict length with smart truncation
Title ≤ 60 characters, meta description ≤ 160 characters. If the generated combination exceeds, the generator first drops optional complements (never the main keyword), then the secondary metier target. Never a brutal "Chair…" cut.
2. Uniqueness guaranteed by hash
Before publishing, each title is hashed across the entire catalog. If two products end up with the same title, forced rotation of one complement until a unique title is obtained. Across 1,622 pages: zero duplicates.
3. Conditional product attribute injection
If the product contains a high-volume attribute (hydraulic, electric, massage, foldable, heated, double), the generator auto-injects it into the title. The keyword "massage shampoo bowl" generates 9,360 monthly searches: it would be a waste to miss it when the attribute already exists in Odoo.
4. Anti-semantic repetition
QA regex: \bpro(?:fessionnel(?:le|s)?)?\b applied across the title+meta couple. Maximum 2 occurrences allowed. Beyond that, forced rotation of a complement until compliance. End of keyword stuffing.
5. Import-ready CSV, CMS-agnostic
The final deliverable is a UTF-8 BOM CSV containing URL, title, meta description, lengths and a validation flag. Directly importable into Odoo (via ORM script or native import with External ID), Magento, PrestaShop, Shopify or WooCommerce. No dependency on a CMS-native templating plugin, often too rigid.
The step-by-step applied on 1,622 pages
On the client project, here's the actual sequence:
- Day 1: Sitebulb crawl of sitemap.xml in URL List mode (1,622 FR URLs only, exclusion of 29 useless language versions), with 3 CSS custom extractors to retrieve product description, category breadcrumb and variant attributes.
- Day 2: Cross-referencing Sitebulb export with Search Console data (clicks, impressions, top 30-day queries per URL) to identify high-potential products and calibrate weights.
- Day 3: Scripted Python generation: 1,622 rows in under 30 seconds, with automated validation of all rules. 18 title collisions detected and resolved through forced rotation. 47 metas exceeding 160 characters intelligently truncated.
- Day 4: Manual validation of a representative 15-product sample with the client, adjustment of 2 weights based on field feedback.
- Day 5: Final CSV delivery + Python script for Odoo ORM import for the client's developer. Production integration validated.
The measurable results
Immediate post-deployment technical measurements:
- 5× semantic coverage: instead of 1 qualifying keyword repeated 1,622 times, we cover 4 intent angles with their product attribute variants (hydraulic, electric, massage…).
- 0 title duplicates across the entire catalog, vs. over 4,800 duplicate titles measured by Sitebulb before intervention.
- 100% compliant tags with Google constraints (length, casing, punctuation, no poorly escaped HTML entities from Odoo).
- Maximum 2 occurrences of the "pro / professional" lemma per title+meta couple, vs. 30% of metas with 3 occurrences or more before.
SEO results on organic traffic are measured at D+30 minimum (time for Google to recrawl the full catalog and surface the new tags in SERPs). Tracking via Search Console is ongoing. Expected gains: significant average CTR improvement on long-tail queries and position improvements on category pages.
Contextual enrichments applied across the 1,461 product pages
Beyond semantic weighting, the engine injected three layers of contextual enrichment on the catalog:
- 260 distributed brands detected and injected (18% of catalog): Ecopostural (480 monthly searches), AGV, MRP, MRPADAM, Karisma, Pollié, Ayala, Mirplay. Captured from H1, description, current title or URL slug.
- 171 high-volume technical attributes injected (12%): hydraulic (740 monthly searches), electric (massively present on treatment chairs), massage (9,360 monthly searches on shampoo bowls), foldable, heated, double.
- 431 products with contextualized colors or variants (29%): "4 colors", "12 laminate colors", "9 bases to choose from", "23 variants". Automatic extraction from product description with a safeguard on meaningful numbers (≥ 2).
The engine also recognizes 40+ business product types to trigger the right contextualization: chairs (styling, barber, treatment, pedicure, beauty, makeup, waiting room), shampoo bowls, tables (massage, treatment, head spa, hydraulic), treatment cabins, stools, carts, dressing tables, hair caps (styling, steam), pro hair dryers, clippers, reception desks, mirrors, furniture, beauty devices (high-frequency facial, suction, exfoliation, microdermabrasion, pressotherapy), wash columns, waiting room sofas / benches, professional white coats, reusable aprons, cutting capes / gowns, scissors, covers, consumables.
For "generic" types (furniture, mirror, cart, stool, reception desk, hair accessory, beauty device…), the engine automatically detects the dominant business sector (hair salon / beauty institute / barbershop) from the description, or applies an intelligent fallback. Result: a title like "H-3 Stool" becomes "H-3 Stool | hair salon | premium" and captures "stool hair salon" queries.
Which e-commerces it fits
The method finds its full relevance on catalogs above a certain threshold:
- 500 products and more: below, manual writing remains viable. Above, CMS-native templating generates too much redundancy to remain acceptable.
- B2B and B2C catalogs: the mechanism adapts, we just calibrate the pools on the tone and USPs specific to the market.
- Multilingual catalogs: pools are duplicated per language with weights recalibrated on the local market. No literal translation: search intents vary by country.
- All CMS: Odoo, Magento, PrestaShop, Shopify, WooCommerce. The CSV deliverable adapts to all import workflows.
The method is particularly powerful on catalogs with rich attributes (colors, sizes, mechanisms, materials), where conditional attribute injection automatically captures massive long-tail traffic.
Got a catalog of 500+ product pages?
Free audit of your tags: I crawl your catalog, count duplicates, measure semantic diversity and potential gains. No commitment, I tell you whether the Semantic Prism will bring value to your site, and if so, how much.
Request my free audit →Going further
For a complete presentation of the method, the 4 weighted pools and the 6 technical rules, see the dedicated Semantic Prism page. For the overall SEO methodology that frames this intervention, see the SEO expertise and the e-commerce expertise.
📖 Methodological note: figures and examples cited come from an anonymized real client case. Search volumes measured via Google Keyword Planner and Search Console (April-May 2026). Technical crawl performed with Sitebulb v6.5, scripted generation in Python 3.11.