Malmoosk

← Tous les projets

Comparateurs de prix

Contactez-moi

Le réseau en bref

Ce multisite est un réseau de comparateurs de prix thématiques. Chaque site couvre un seul univers produit et regroupe les offres de dizaines de marchands en ligne. Le visiteur trouve le bon produit au meilleur prix sans faire le tour des boutiques ; le site est rémunéré à l’affiliation quand il redirige vers le marchand.

Les sites du réseau :

Univers Site Logo
Chaussures meschaussures.fr Logo meschaussures.fr
Sneakers messneakers.fr Logo messneakers.fr
Vêtements mesfringues.fr Logo mesfringues.fr
Bijoux touslesbijoux.fr Logo touslesbijoux.fr
Montres unemontre.fr Logo unemontre.fr
Sacs messacs.fr Logo messacs.fr
Bagages votrebagage.com Logo votrebagage.com
Lunettes meslunettesenligne.fr Logo meslunettesenligne.fr
Mobilier lemobilier.fr Logo lemobilier.fr
Luminaires monluminaire.com Logo monluminaire.com
Linge de maison monlinge.fr Logo monlinge.fr
Arts de la table monartdelatable.com Logo monartdelatable.com
Ustensiles de cuisine mesustensiles.com Logo mesustensiles.com
Jouets desjouetsparmilliers.com Logo desjouetsparmilliers.com
Drones jeveuxundrone.com Logo jeveuxundrone.com
Animalerie lesanimaleries.com Logo lesanimaleries.com
Instruments de musique mesinstruments.com Logo mesinstruments.com

Fonctionnalités communes :

But du projet

Construire un seul socle technique pour N sites de niche. Un site spécialisé se positionne mieux sur des requêtes précises (« bottines cuir femme marron », « suspension laiton salon ») qu’un généraliste. Pour que ce modèle tienne, le coût d’un site supplémentaire doit être quasi nul : même front, même back-office, même chaîne d’ingestion. Seules la configuration et les données changent.

Trois enjeux structurent le projet :

  1. La qualité des données : des millions de lignes hétérogènes venues des marchands, à classer et à normaliser automatiquement.
  2. Le référencement à grande échelle : des pages utiles, rapides et bien reliées entre elles sur chaque combinaison pertinente de filtres.
  3. La fraîcheur : des prix et des disponibilités à jour sans réindexer tout le catalogue à chaque passage.

Stack technique

Flux marchands régies + Amazon Ingestion Python, règles Elasticsearch produits + marques Back-office CodeIgniter + API Front Angular SSR Vespa moteur alternatif MySQL + Redis config, SEO, cache 17 domaines visiteurs + Google _bulk upsert

Mise à jour des flux

Les catalogues marchands arrivent sous forme de fichiers (CSV, XML, souvent compressés) aux formats tous différents. Un orchestrateur planifié parcourt chaque flux actif déclaré dans le back-office et lui applique la même chaîne :

Téléchargement + décompression Conversion XML → CSV UTF-8 Diff hash par produit Extraction famille, type, attributs Offre prix, remise, marque _bulk ES + Vespa Cycle de vie fin de passage Rapport email + BO inchangé → rien à faire
  1. Téléchargement du flux, avec une nouvelle tentative en cas d’échec et un contrôle de taille minimale. La décompression se base sur le contenu réel du fichier (gzip, bzip2, zip) et non sur l’extension annoncée.
  2. Conversion en CSV UTF-8, en streaming : les gros fichiers XML ne sont jamais chargés entièrement en mémoire.
  3. Diff incrémental : chaque produit reçoit une empreinte qui est comparée à l’archive du passage précédent. Seuls les produits ajoutés ou modifiés sont retraités, et les produits disparus sont désactivés. Un flux strictement identique est ignoré.
  4. Extraction des attributs par un moteur de règles maison, sans modèle d’IA, pour un résultat déterministe et explicable :
    • environ 15 000 règles déterminent la famille, le type, le sous-type et une soixantaine d’attributs (couleur, matière, genre, taille…) à partir du titre, de la description et de la catégorie fournie par le marchand ;
    • l’automate Aho-Corasick sert aux correspondances exactes, RapidFuzz à la correspondance approximative ;
    • le traitement est réparti sur tous les cœurs.
  5. Construction de l’offre : prix actuel et ancien prix, pourcentage de remise, frais de port, images, lien affilié, EAN, marque.
  6. Envoi en masse (_bulk NDJSON) vers Elasticsearch et Vespa.
  7. Cycle de vie en fin de passage :
    • activation des promotions et des nouveautés du jour, puis retrait des nouveautés trop anciennes ;
    • retrait des remises devenues trop faibles et désactivation des prix aberrants ;
    • compactage de l’index.
  8. Rapport : chaque flux reçoit son bilan (ajouts, modifications, retraits, erreurs) dans le back-office, et un email récapitulatif part en fin de passage. L’échec d’un flux n’interrompt jamais le traitement des suivants.

La base Elasticsearch

Elasticsearch est le cœur du catalogue. Il sert à la fois de stockage des produits et de moteur de recherche des 17 sites :

L’enrichissement des marques

Les marchands écrivent la même marque de dix façons différentes : « NIKE », « Nike Inc. », « nike sportswear »… Sans normalisation, la facette « marque » serait inutilisable et les pages marque se cannibaliseraient. L’enrichissement s’appuie sur les mécanismes natifs d’Elasticsearch :

Flux marchand input_marque « NIKE Inc. » Bulk upsert ingestion Pipeline marque_lookup processeur enrich Produit indexé out_marque « Nike » Back-office marques en attente Index marques brute → normalisée marques inconnues validation + recharger politique d'enrichissement
  1. Un index de référence marques associe chaque graphie brute (normalisée sans accents ni casse) à la marque canonique.
  2. Une politique d’enrichissement (enrich policy) est compilée à partir de cet index, et un pipeline d’ingestion marque_lookup l’applique automatiquement à chaque produit écrit. La marque normalisée (out_marque) est calculée par Elasticsearch lui-même, sans code applicatif dans la boucle.
  3. La boucle de validation dans le back-office : pour chaque flux, un écran liste les marques rencontrées mais pas encore référencées. L’opérateur les rattache à une marque existante ou en crée une nouvelle, puis « recharge » : la politique est recompilée et les produits concernés sont ré-enrichis en tâche de fond.
  4. Pour Vespa, qui n’a pas d’enrichissement à l’ingestion, la chaîne Python embarque un export statique de la table des marques et calcule out_marque avant l’envoi. Les deux moteurs restent ainsi cohérents.

Référencement

Maillage interne

Données structurées

L’API du back-office génère les blocs JSON-LD Schema.org à partir des mêmes données que la page. Le front les injecte dans le HTML rendu côté serveur :

Les blocs sont échappés côté front : un titre produit venu d’un flux marchand ne peut pas fermer la balise <script> et casser la page.

Historique

Les comparateurs de prix apparaissent avec le e-commerce à la fin des années 1990 (Kelkoo, LeGuide). Ils reposent sur un modèle de coût par clic ou d’affiliation reversé par les marchands. La montée de Google Shopping a poussé le marché vers des comparateurs spécialisés, plus pertinents sur des requêtes précises : c’est le positionnement de ce réseau.

Mon expertise

Depuis 2015, je conçois et j’édite des comparateurs de prix sur des niches (mode, décoration, high-tech), avec un pilotage complet : définition des besoins, création des sites, des API et des applications mobiles, et optimisation SEO continue.

Le réseau actuel de 17 sites repose sur un seul socle technique (front Angular SSR, back-office CodeIgniter, ingestion Python vers Elasticsearch). Pendant dix ans, plus de 800 flux Talend intégraient les marchands, avant la bascule vers une solution Python pilotée par des règles.

Réalisations

Contactez-moi