proposition-technique
Proposition technique : plateforme IA de génération de contenus SEO (V1)
1. Compréhension du besoin
Le projet est une plateforme SaaS B2B multi-tenant pour la gestion éditoriale automatisée. Les clients cibles sont trois types de structures différentes avec des besoins distincts :
- Agences : gèrent plusieurs clients en même temps, ont besoin d’un workflow multi-compte et de reporting par client
- Indépendants (freelances SEO, rédacteurs) : cherchent à produire plus avec moins de temps, sensibles au coût
- E-commerçants : besoin de contenu de longue traîne pour référencer des pages catégories/produits, souvent moins experts SEO
La plateforme doit couvrir le cycle éditorial complet :
- Définir la stratégie (mots-clés, intention de recherche, secteur, tone of voice)
- Analyser les SERP pour comprendre ce que Google et les concurrents mettent en avant
- Générer un brief SEO structuré (plan H1-H6, angle, questions FAQ, intention)
- Générer le contenu final (texte optimisé SEO, H1-H6, body)
- Valider le contenu (humain en boucle, export ou copier-coller)
- Suivre les performances (Search Console, évolutions de positionnement)
L’axe d’optimisation est le SEO classique (Google) : ranking dans les résultats de recherche, structuration du balisage HTML.
2. Stack technique et pourquoi ces choix
Stack retenue :
- Backend : Node.js (TypeScript strict)
- Frontend : Next.js (React)
- Base de données : PostgreSQL + pgvector
- Queue/jobs : BullMQ (Redis)
- IA génération : GPT-4o ou Claude Sonnet (les deux pertinents, explication ci-dessous)
- IA embeddings : OpenAI text-embedding-3-small
- Paiement : Stripe Billing (abonnements + usage-based)
- Validation des données : Zod (schémas stricts)
Pourquoi TypeScript et pas Python ou JavaScript brut :
Le cœur du système repose sur de l’IA générative, qui par nature est probabiliste et non déterministe. Le risque principal c’est de perdre le contrôle sur ce que le LLM produit. TypeScript avec son typage strict permet d’encadrer ça :
- Validation des outputs IA via des schémas Zod : le LLM doit produire un JSON qui respecte un contrat précis, sinon on rejette et on re-génère automatiquement
- Typage de bout en bout : chaque donnée qui traverse le pipeline a un type défini. Pas de surprise, pas de champ manquant qui casse silencieusement en prod
- Le compilateur attrape les erreurs avant qu’elles arrivent en production. Sur un système automatisé, c’est pas optionnel
Pourquoi Node.js côté backend :
- Écosystème npm avec des intégrations natives pour toutes les API tierces (Stripe, Search Console, données SERP)
- BullMQ est nativement Node.js
- Même langage que le frontend (Next.js), une seule équipe, zéro friction
Pourquoi Next.js côté frontend :
- Server-side rendering natif pour les pages de dashboard (performance)
- Même écosystème que le backend
- Le framework React le plus mature en production
Pourquoi GPT-4o ET Claude Sonnet pour la rédaction SEO :
Les deux modèles sont pertinents pour ce cas d’usage, pour des raisons différentes :
- GPT-4o : excellent rapport qualité/prix sur la rédaction longue, bon sur la structuration en H1-H6, style naturel
- Claude Sonnet : supérieur pour suivre des instructions complexes et multicritères (respecter à la fois les règles SEO, le tone of voice du client, et la structure demandée). Pour la génération de contenu avec des templates détaillés et des contraintes éditoriales strictes, Claude Sonnet est souvent plus prévisible.
Recommandation : démarrer avec GPT-4o par défaut, exposer le paramètre de modèle en config pour basculer sur Claude Sonnet par client ou par type de contenu. L’architecture permet de switcher sans refacto (un paramètre de config par tenant).
Pourquoi pgvector et les embeddings (justifié ici, contrairement à d’autres cas) :
Dans ce système, chaque client accumule un corpus de contenus publiés qui grossit dans le temps. Les embeddings deviennent pertinents pour deux besoins concrets :
- Déduplication : détecter si un sujet a déjà été traité avant de générer un nouveau contenu (recherche par similarité sémantique, pas par mots-clés exacts)
- Clustering thématique : grouper les sujets pour planifier les maillages internes et détecter les lacunes de couverture
Un e-commerçant avec 300 fiches catégories a besoin de ces deux fonctions. Une agence qui gère 20 clients avec 50 articles chacun aussi. Le volume et la nature du corpus justifient les embeddings ici.
Modèle utilisé : OpenAI text-embedding-3-small (~0.02 EUR/1M tokens, coût négligeable).
3. Ce que la plateforme fait
3.1 SEO Google
Ce que le système optimise :
- Structure balisage : H1 unique, H2-H6 hiérarchisés, balises title et meta description générées automatiquement selon les mots-clés
- Schema.org : balisage JSON-LD automatique (Article, FAQPage, BreadcrumbList, Product selon le type de contenu)
- Internal linking : suggestions de maillage basées sur le corpus existant du client (via embeddings)
- Longueur et densité : calibrées par rapport à la médiane des résultats de la SERP cible
Ce que le système ne peut PAS garantir et que je ne promets pas :
Le ranking Google dépend de plusieurs centaines de signaux dont une bonne partie est hors contrôle : autorité de domaine, backlinks, Core Web Vitals, historique du site, comportement utilisateur (CTR, temps sur page). On ne peut pas promettre de position.
Ce qu’on peut promettre : produire un contenu structurellement optimisé qui maximise les chances de ranking. C’est nécessaire mais pas suffisant.
Google Indexing API :
- Fonctionne uniquement pour les pages de type JobPosting et BroadcastEvent. Pas pour les articles de blog standard
- Pour l’indexation normale, la solution est de soumettre un sitemap mis à jour à Search Console
- Rate limit : 200 URL/jour pour les pages éligibles
Google Search Console API :
- Auth : OAuth 2.0 (compte Google du client)
- Permet : récupérer les clicks, impressions, position moyenne par URL et par mot-clé
- Rate limits : 1 200 req/min
Sorties du système :
- Export HTML structuré (copier-coller ou téléchargement)
- Export Markdown
- Le client intègre ensuite le contenu dans son outil de publication comme il le souhaite
3.2 Analyse SERP (optionnel)
Intégration optionnelle d’un provider de données SERP pour enrichir l’analyse concurrentielle : top 10 résultats, SERP features (featured snippets, PAA), volume de mots-clés.
Le choix exact du provider, du budget et de la profondeur d’analyse se définit au kickoff selon les besoins du client. L’impact sur le coût par contenu est variable et sera chiffré selon le volume à ce moment-là.
4. Système de mémoire et personnalisation IA
Mon expérience concrète sur le sujet :
J’ai développé pour mon propre usage un assistant IA (Cortex) qui intègre un système de mémoire avancé en production depuis plusieurs mois. Ce système gère des mémoires éphémères (tâches en cours, bloqueurs), des mémoires long terme (préférences, décisions passées), un système de “digestion” qui extrait automatiquement des mémoires à partir des interactions, et des tickets (actions recommandées par l’IA). C’est cette expertise concrète que j’applique ici, adaptée au use case éditorial.
Pour ce projet, version adaptée :
Chaque client dispose d’un conteneur de mémoire isolé contenant :
- Identité éditoriale : ton de marque (formel/informel, vouvoiement, emojis ou pas, registre de vocabulaire), positionnement, personas cibles
- Glossaire métier : termes spécifiques au secteur, mots à éviter (ex: pas d’anglicismes pour un client puriste)
- Règles éditoriales : longueur cible, structure préférée, sources autorisées
- Historique de sujets traités : évite la redondance sur les sujets déjà couverts (alimenté par les embeddings)
- Feedbacks historiques : chaque correction faite par le client entraîne une règle implicite extraite et stockée
Comment ça apprend :
- Le client génère un contenu
- Il le valide tel quel, le modifie, ou le rejette avec un commentaire
- Le système extrait la règle implicite (ex: le client a remplacé “booster” par “développer” = préfère le vocabulaire non anglicisé)
- Cette règle est stockée dans sa mémoire permanente
- Les prochaines générations intègrent cette règle dans le prompt
Pourquoi les embeddings sont justifiés ici :
Contrairement à un système avec 10-50 mémoires par client, ici chaque client accumule un corpus de contenus publiés qui grossit. Un client avec 200 articles a besoin d’une recherche sémantique pour détecter la redondance, pas d’une injection brute de 200 titres dans le prompt. On utilise pgvector pour indexer les titres + résumés des contenus existants, et on fait une recherche de similarité avant chaque nouvelle génération.
5. Pipeline de traitement des données
[Brief utilisateur]
│
├── Mots-clés cibles
├── URLs concurrents (optionnel)
├── Intention de recherche (informationnelle / transactionnelle / navigationnelle)
├── Ton de marque + règles éditoriales (depuis mémoire client)
│
▼
[Analyse SERP]
│ → Provider SERP (si activé) : top 10 résultats + SERP features (PAA, featured snippets)
│ → Extraction : angle dominant, longueur médiane, questions récurrentes
│ → Analyse concurrents : structure H1-H6, sujets couverts
│
▼
[Génération brief SEO]
│ → Plan structuré : H1 + H2-H6 + sections recommandées
│ → Questions FAQ identifiées depuis PAA Google + People Also Ask
│ → Mots-clés sémantiques à intégrer (NLP depuis SERP)
│ → Angle recommandé + intention primaire
│ → Vérification anti-redondance via embeddings (corpus existant du client)
│ → Schéma Zod validé avant de passer à l'étape suivante
│
▼
[Génération contenu]
│ → Corps de l'article (GPT-4o ou Claude Sonnet selon config client)
│ → Intégration mémoire client (ton, glossaire, règles éditoriales)
│ → Structure : réponses directes, FAQ, H1-H6 optimisés
│ → Génération automatique : title, meta description, alt text images
│ → Schema.org JSON-LD (Article, FAQPage selon le type)
│ → Output validé par schéma Zod
│
▼
[Validation client]
│ → File d'attente : statut "en attente de validation"
│ → Éditeur inline avec aperçu
│ → Approuver / modifier / rejeter (avec commentaire)
│ → Feedback → extraction règle implicite → mémoire
│ → Export HTML ou Markdown (copier-coller ou téléchargement)
│
▼
[Suivi performance]
│ → Search Console : clicks, impressions, position par URL et mot-clé
│ → Dashboard client : évolution positionnement, contenus produits, articles consommés
6. Système de validation et contrôle qualité
- File de validation : chaque contenu généré arrive avec statut “en attente de validation”
- Éditeur inline : modification directe dans l’interface, avec prévisualisation du rendu HTML/markdown
- Actions disponibles : approuver (débloque l’export), modifier, rejeter avec commentaire
- Feedback → mémoire : chaque modification du client est analysée pour extraire une règle implicite (ex: remplacé “dynamique” par “efficace” → le client préfère le vocabulaire concret)
- Validation par lot : pour les agences qui valident plusieurs contenus d’un coup
7. Sécurité et isolation des données
- Multi-tenancy par
tenant_idsystématique sur chaque table (isolation logique) - Clés API tierces des clients chiffrées en base (AES-256)
- Mémoires IA strictement isolées par client (aucune fuite possible entre tenants)
- Backup quotidien automatique (base + fichiers)
- Conformité RGPD : données hébergées en EU, export/suppression sur demande
- Appels IA uniquement côté backend, jamais exposés côté frontend
- Feature flags pour activer/désactiver des fonctionnalités par client
- Accès Search Console par OAuth 2.0 (le client révoque l’accès depuis son compte Google, on ne stocke pas ses identifiants)
8. Planning prévisionnel
Le développement se fait intégralement en local. La mise en production intervient en dernière phase.
| Phase | Contenu | Durée estimée |
|---|---|---|
| 1 | Architecture BDD + auth (schema PostgreSQL + pgvector, multi-tenancy, onboarding) | 3j |
| 2 | UI/UX (parcours client, composants, dashboard) | 3j |
| 3 | Module génération SEO (pipeline IA : analyse SERP → brief → contenu, schema.org, FAQ) | 5 – 10j |
| 4 | Système de mémoire + planning éditorial (déduplication, suggestions de sujets, calendrier) | 3 – 5j |
| 5 | Module facturation Stripe (abonnements, usage-based articles, portail client) | 3j |
| 6 | Module analytics (dashboard performances) | 3j |
| 7 | Tests, optimisations, mise en production | 3j |
| Total | 10 à 30 jours |