Outil interne (réservé à l'équipe ISI) qui rédige des articles de blog optimisés pour le référencement — à partir de la documentation d'un module ISI-APP, ou d'un sujet libre — puis les publie en brouillon sur le blog WordPress (isi-app.com) via son API REST.
Statut : en développement (
@dev). Accessible aux administrateurs ISI et aux développeurs, sousAdministration → Générateur de blog(/admin/blog-generator).
Industrialiser la production d'articles de blog SEO de qualité, sans jamais survendre le produit : l'IA ne décrit que des fonctionnalités réellement documentées dans le module choisi. Un humain relit toujours le brouillon avant publication.
Le choix se fait en tête de l'écran, avant tout le reste.
La génération est ancrée sur la documentation du module : les fichiers
docs/<slug>.md et .claude/technical-docs/<slug>.md sont injectés comme
contexte, et le modèle est explicitement instruit de ne rien inventer (pas de
fonctionnalité, d'intégration, de certification ni de chiffre absents du
contexte). Si aucune documentation n'existe pour le module, la génération est
refusée.
Tous les articles du blog ne parlent pas du produit. Pour un sujet de fond — « les mairies en retard sur le virage numérique », par exemple — vous donnez :
Le garde-fou change de nature, il ne disparaît pas. L'IA traite le sujet avec ses connaissances générales du domaine, mais n'a le droit d'affirmer aucun fait vérifiable absent de vos éléments : ni chiffre, ni pourcentage, ni date, ni montant, ni nom d'organisme, ni étude, ni citation. Sans donnée fournie, elle reste qualitative. Elle ne décrit aucune fonctionnalité d'ISI-APP : tout au plus une ouverture d'une ou deux phrases vers le produit en fin d'article.
Un article en contexte libre demande donc la même relecture qu'un autre, avec une attention particulière aux chiffres : s'il en apparaît un que vous n'avez pas fourni, retirez-le.
Configurer WordPress (une seule fois) : URL du blog, identifiant exact d'un compte éditeur dédié (le login WordPress, pas le nom affiché) et Application Password. Le bouton « Tester la connexion » vérifie l'accès sans rien publier : il affiche le compte, ses rôles, et alerte si le compte n'a pas le droit de créer des brouillons.
Une fois renseignée, la configuration se replie en une simple ligne de statut (blog, compte, « Configuré ») pour laisser toute la place au générateur. Les boutons « Tester la connexion » et « Modifier » y restent accessibles ; « Modifier » rouvre le formulaire, qui se referme après enregistrement.
Choisir la source de vérité (voir ci-dessus). L'écran se parcourt en trois étapes — Source, Cadrage, Maillage — et s'adapte au choix fait à la première : le formulaire n'affiche jamais que les champs qui concernent la source retenue.
README) n'y figurent pas : ce sont des pages de liens, sur lesquelles
l'IA n'aurait rien de concret à écrire. Le bouton « Parcourir les
docs », à droite du champ, ouvre les documentations fonctionnelles
publiques dans un nouvel onglet pour vérifier le contenu d'un module avant
de générer. Dès qu'un module est sélectionné, il devient « Voir cette
doc » et pointe directement sur la documentation correspondante.Étape 2 — Cadrage : la longueur cible (800 à 2 500 mots ; 1 200 par défaut), d'éventuelles consignes, un ancien article à retravailler et l'article du blog à remplacer.
Étape 3 — Maillage : les liens internes et externes à intégrer, puis un récapitulatif de tout ce qui part au modèle — y compris ce qui a été saisi aux étapes précédentes et n'est plus à l'écran.
Chaque étape est validée avant la suivante : l'erreur s'affiche sous le champ concerné, et non au moment du lancement. Le fil d'étapes en tête permet de revenir sur une étape déjà franchie ; rien n'est perdu en naviguant.
Pour les liens internes, « Articles proches de votre sujet » propose les articles du blog les plus pertinents pour le sujet en préparation : un clic les ajoute, avec leur titre comme ancre. La liste « Articles du blog à lier » reste disponible en dessous, avec les 50 derniers articles publiés. Dans les deux cas, plus fiable que de retaper une URL de mémoire.
Générer : l'IA (Claude) produit le titre, les métadonnées SEO, le contenu HTML et une FAQ. Le bouton passe en « Lancement de la génération… » dès le clic, puis un bandeau d'attente indique l'étape en cours (mise en file, puis rédaction) et le temps écoulé. Comptez une à deux minutes : la page se met à jour automatiquement, elle peut rester ouverte.
Prévisualiser : aperçu du rendu, longueurs des métas, HTML prêt à coller. Trois boutons « Copier » en tête de l'aperçu évitent de sélectionner quoi que ce soit à la souris (voir « Copier le résultat » plus bas). La FAQ est intégrée en fin d'article (section « Questions fréquentes »), elle apparaît donc dans l'aperçu et part avec le brouillon. Le tableau des contrôles de lisibilité donne le verdict Yoast avant publication (voir ci-dessous).
Choisir une image mise en avant (facultatif) parmi les images de la médiathèque WordPress. Sans sélection, l'article part sans image : elle reste à poser dans WordPress.
Choisir les catégories WordPress du brouillon (facultatif, sélection multiple ; la liste est lue sur le blog). Sans sélection, WordPress applique sa catégorie par défaut (« Non classé »).
Envoyer en brouillon WordPress : l'article est créé au statut draft (invisible publiquement). Un rédacteur le relit et le publie depuis WordPress.
Pour un article retravaillé, choisissez plutôt l'article du blog à remplacer (champ « Article du blog à remplacer », sous l'ancien article) : le bouton « Mettre à jour l'article #… » écrase alors son contenu au lieu d'en publier un second sur la même requête. L'URL et le statut de l'article d'origine sont conservés — son référencement acquis aussi. Le remplacement demande confirmation, il est sans retour côté blog.
Une fois l'envoi enregistré, le bouton devient « Créer un second brouillon » et demande confirmation : republier crée un article supplémentaire sur le blog, à supprimer à la main s'il n'était pas voulu.
Retrouver un article dans l'onglet « Historique » (voir ci-dessous).
L'écran est découpé en deux onglets : « Génération » (le formulaire et l'aperçu) et « Historique », dont le compteur indique le nombre total de générations. Passer d'un onglet à l'autre est instantané et n'interrompt pas une génération en cours : vous pouvez consulter l'historique pendant que l'IA rédige, le suivi reprend son affichage au retour.
L'onglet « Historique » liste les générations, toutes personnes confondues, 15 par page, avec un filtre par source et par auteur. Le filtre de source liste les modules déjà utilisés, plus une entrée « Contexte libre » regroupant les articles de fond. Chaque ligne indique :
Les actions se trouvent dans la première colonne :
Chaque génération a une URL partageable : …/admin/blog-generator?job=42
rouvre directement l'article correspondant.
Le suivi du lien WordPress n'existe que depuis le 28/08/2026. Les articles envoyés avant cette date n'en portent aucune trace : l'historique affiche « Aucun envoi enregistré », ce qui signifie information inconnue, et non article non publié.
Deux façons de rattraper :
php artisan isi:blog:reconcile-drafts
(option --dry-run pour simuler, --refresh-status pour relire aussi les
statuts). Elle recherche chaque article sur le blog d'après son slug.Passée sur les données existantes le 28/08/2026, elle a rattaché l'article « Connecteur GLPI » du 24/08 à l'article WordPress #2024, déjà publié.
Yoast SEO plafonne la voix passive à 10 % des phrases. Les premiers articles générés dépassaient ce seuil. Deux réponses ont été mises en place le 28/08/2026.
L'IA doit désormais :
Les autres critères de lisibilité mesurés par Yoast sont couverts au passage : longueur des phrases, mots de transition, variété des débuts de phrase, longueur des paragraphes et fréquence des sous-titres. Ces règles s'appliquent aussi au retravail d'un ancien article, qui contient presque toujours trop de passifs.
Depuis le 28/09/2026, les consignes de rédaction visent aussi le naturel du texte — un article ne doit pas se lire comme un texte produit par une machine :
Ces consignes vivent dans le prompt versionné blog-seo-generator : elles
s'appliquent aux deux sources, et se modifient sans toucher au code.
Depuis le 02/10/2026, le générateur suit les mêmes règles que le projet Claude « Articles isi-app.com » :
<!-- À VÉRIFIER : … --> dans le HTML, à traiter avant publication.L'aperçu affiche un tableau « Contrôles de lisibilité (Yoast) » : pour chaque critère, la valeur mesurée, la cible et un état (Conforme, À surveiller, Hors seuil).
| Contrôle | Cible |
|---|---|
| Phrases à la voix passive | moins de 10 % |
| Phrases de plus de 20 mots | moins de 25 % |
| Phrases avec mot de transition | au moins 30 % |
| Paragraphes trop longs | aucun au-delà de 150 mots |
| Texte sans sous-titre | moins de 300 mots d'affilée |
| Longueur de l'article | au moins 700 mots |
Un bouton déplie la liste des phrases repérées comme passives, pour juger sur pièces.
Le bouton « Corriger la lisibilité » lance une seconde passe d'IA dès qu'un défaut de phrase est mesuré. Trois défauts sont traités, seuls ou ensemble :
| Défaut | Ce que fait la passe |
|---|---|
| Phrases à la voix passive | les réécrit à la voix active |
| Phrases de plus de 20 mots | les coupe en deux phrases ou davantage |
| Manque de mots de transition | en ajoute le nombre nécessaire, sans inventer de contenu |
Jusqu'au 28/09/2026, seule la voix passive était corrigeable : un article conforme sur ce point mais hors seuil sur la longueur des phrases — le cas le plus fréquent — n'avait aucun recours dans l'écran.
La passe ne touche qu'aux phrases repérées : sens, faits, chiffres, structure, liens et métadonnées SEO restent inchangés. Comptez une à deux minutes, comme pour une génération. Les paragraphes trop longs, l'absence de sous-titres et la longueur de l'article restent affichés sans bouton : les corriger reviendrait à réécrire l'article, pas à le retoucher.
Le bouton « Revenir à la version d'origine » rétablit l'article tel qu'il avait été généré. L'historique indique le nombre de corrections appliquées.
Le compteur de l'écran reproduit la méthode de Yoast, il n'en est pas une copie exacte. Le contrôle final se fait toujours dans Yoast, sur le brouillon.
En tête de l'aperçu, trois boutons déposent le résultat dans le presse-papier — plus besoin de sélectionner l'article à la souris :
| Bouton | Contenu copié |
|---|---|
| Copier l'article | L'article mis en forme. Un collage dans l'éditeur visuel de WordPress (ou dans Word, un mail) garde titres, listes, gras et liens. |
| Copier le HTML | Le même article en code HTML, à coller dans l'éditeur de code de WordPress. |
| Copier les métadonnées SEO | Titre H1, meta title, meta description, slug, requête cible et requêtes secondaires, en texte brut — utile pour remplir Yoast à la main. |
Dans les trois cas, c'est ce qui part réellement sur WordPress qui est copié, FAQ comprise. Une notification confirme la copie ; en cas d'échec (presse-papier bloqué par le navigateur), elle le dit au lieu de laisser croire à une réussite.
Les petites icônes de copie des blocs de code (« HTML à coller », « JSON-LD ») fonctionnent elles aussi désormais en environnement de développement : elles échouaient jusqu'ici sans rien afficher.
En contexte libre, l'écran compare les faits vérifiables de l'article — pourcentages, montants, années, grands nombres, tournures du type « selon une étude » — avec les éléments que vous avez fournis. Tout ce qui n'y figure pas est listé dans un encadré, avec la phrase d'origine.
Ce contrôle est déterministe : il ne juge pas si l'affirmation est vraie, il signale ce que rien ne permet de vérifier. À vous de confirmer le chiffre, de le sourcer dans les éléments de contexte, ou de le retirer de l'article.
Deux articles qui visent la même requête se privent mutuellement de position dans Google. Si le blog contient déjà des articles répondant à la requête cible de l'article généré, un avertissement les liste dans l'aperçu. À vous de juger : ou le sujet est bien distinct, ou il vaut mieux retravailler l'article existant que d'en publier un second.
Le blog utilise Yoast SEO. Les métas (title, description, focus keyphrase) sont écrites automatiquement sur le brouillon : plus de
copier-coller à faire à la validation. Vérifié en écriture réelle sur
isi-app.com le 20/08/2026 — Yoast y expose lui-même ces champs via l'API, aucun
plugin supplémentaire n'a été nécessaire.
Elles restent affichées dans l'écran de génération avec leur longueur, pour
contrôle avant publication. Si un jour le blog cible n'expose plus ces champs, il
suffit de poser WP_YOAST_META_REST=false : le générateur revient au mode
copier-coller.
Yoast gratuit cherche les mots exacts de l'expression clé, sans synonymes. L'IA la place donc dans le premier paragraphe, en tête du titre SEO, dans la méta-description (120 à 155 caractères, sans « Découvrez »), dans le slug, qui reprend l'expression clé elle-même, et dans au moins 30 % des sous-titres. Sa densité reste entre 0,5 et 3 %, soit environ 7 occurrences pour 1 500 mots.
Chaque article se termine, après la FAQ, par un encadré qui présente le module Isi-APP le plus lié au sujet : nom, accroche, trois points forts, bouton « Découvrir … » vers la page du module et bouton « Demander une démo » vers l'essai gratuit.
L'IA choisit seulement le module et rédige l'accroche (une phrase de 20 mots au plus). Le nom, les points forts et les liens viennent d'une liste fixe, reprise mot pour mot des pages du site : l'IA ne peut ni les reformuler ni inventer une adresse. Quand aucun module ne correspond au sujet, l'encadré présente Isi-APP avec le seul bouton de démo.
La mise en forme vient du thème du site (classes isi-cta) : dans l'aperçu de
l'écran, l'encadré apparaît sans style. Il n'entre pas dans la mesure de
lisibilité, et la correction assistée n'y touche pas.
La FAQ générée, de 3 à 5 questions, est ajoutée dans le corps de l'article, juste avant l'encadré module, sous un titre « Questions fréquentes ». C'est ce qui lui donne sa valeur : elle répond à des requêtes formulées en question et sert de matière aux réponses des moteurs conversationnels.
Le bloc JSON-LD FAQPage proposé à la copie reste facultatif. Il décrit la
FAQ visible sur la page — condition posée par Google pour qu'un balisage soit
valide. À savoir avant de s'en servir : depuis août 2023, les résultats enrichis
FAQ ne sont plus affichés que pour les sites publics de santé et
d'administration, le gain est donc limité pour un site B2B.
Dans WordPress : Utilisateurs → Profil du compte concerné, section
« Mots de passe d'application » → saisir un nom d'application (par exemple
ISI-APP Blog Generator), valider, puis copier la valeur générée.
Deux points qui font perdre du temps :
xxxx xxxx xxxx xxxx xxxx xxxx — et
non le nom donné à l'application, ni le mot de passe du compte. L'écran de
configuration refuse désormais toute valeur qui n'a pas ce format.En cas d'échec, le test de connexion affiche une piste de correction sous le message d'erreur (identifiants à revoir, droits insuffisants, URL ou permaliens du blog, ou en-tête d'authentification bloqué par le serveur du blog).
.claude/technical-docs/ai/blog-seo-generator.md