Isi-APP Docs fonctionnelles
Toutes les docs
Markdown brut
Générateur d'articles de blog SEO
Brouillon ai functional Revu le 2026-10-02 ai/blog-seo-generator.md

Générateur d'articles de blog SEO

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, sous Administration → Générateur de blog (/admin/blog-generator).

À quoi ça sert

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.

Deux sources de vérité

Le choix se fait en tête de l'écran, avant tout le reste.

Documentation d'un module — « ne rien survendre »

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.

Contexte libre — un article de fond

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 :

  • un sujet (obligatoire), qui sert de fil directeur ;
  • des éléments de contexte (facultatifs) : chiffres, études, extraits réglementaires, angle à tenir, exemples de terrain.

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.

Comment l'utiliser

  1. 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.

  2. 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.

    • Documentation d'un module : choisir un module dans la liste, triée par ordre alphabétique des titres de documentation. Les sommaires de module (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.
    • Contexte libre : saisir le sujet de l'article, et, si vous en avez, les éléments de contexte sur lesquels l'IA a le droit de s'appuyer.
  3. É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.

  4. É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.

  5. 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.

  6. 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).

  7. 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.

  8. 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é »).

  9. 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.

  10. Retrouver un article dans l'onglet « Historique » (voir ci-dessous).

Historique des générations

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 :

  • la date de lancement et l'auteur de la génération ;
  • la source utilisée — le module, ou le sujet saisi assorti d'un badge « Contexte libre » —, le titre de l'article produit et, le cas échéant, le nombre de réécritures appliquées ;
  • le statut de la génération (en attente, en cours, terminé, échec — le message d'erreur s'affiche en infobulle sur le badge) ;
  • le verdict de lisibilité mesuré au moment de la génération (Conforme, À surveiller, Hors seuil), avec ses mesures clés en infobulle. C'est lui qui permet de voir, sur dix articles, si un réglage des consignes améliore vraiment la copie. Les générations antérieures au 28/09/2026 affichent « Non mesuré » — jamais un verdict inventé ;
  • le coût en tokens (génération et réécritures cumulées) ;
  • l'article WordPress, ouvert dans un nouvel onglet. Le lien mène là où l'article est réellement consultable : sur le blog s'il est publié, sur son écran d'édition WordPress s'il est encore en brouillon — un brouillon n'est pas visible publiquement. Pour un article publié, une icône crayon donne accès à l'édition. Suivent son statut réel (Brouillon, Publié, Corbeille, Introuvable) et la date d'envoi.

Les actions se trouvent dans la première colonne :

  • Reprendre rouvre un article terminé dans l'onglet « Génération » : aperçu, métadonnées, contrôles de lisibilité et bouton de publication redeviennent disponibles, avec les consignes et les liens d'origine. C'est le moyen de rattraper un article perdu parce que l'onglet du navigateur avait été fermé, ou de relancer une génération en ajustant seulement les consignes.
  • Rattacher retrouve sur WordPress, d'après le slug de l'article, un article publié avant la mise en place du suivi — ou publié à la main hors de l'outil. Voir ci-dessous.
  • Rafraîchir les statuts WordPress (en haut de la liste) relit sur le blog l'état réel des articles affichés : un article publié depuis WordPress cesse alors d'apparaître comme un brouillon.

Chaque génération a une URL partageable : …/admin/blog-generator?job=42 rouvre directement l'article correspondant.

« Aucun envoi enregistré » sur un article pourtant publié

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 :

  • ligne par ligne, le bouton « Rattacher » ;
  • en une fois, la commande 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é.

Contrôles de lisibilité et voix active

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.

1. Des consignes explicites à la rédaction

L'IA doit désormais :

  • viser moins de 5 % de phrases passives, FAQ comprise ;
  • donner un sujet qui agit — vous, votre équipe, ou Isi-APP (« Isi-APP affecte chaque demande au bon service » plutôt que « les demandes sont affectées au bon service ») ;
  • s'adresser au lecteur (« exportez vos données en un clic » plutôt que « les données peuvent être exportées ») ;
  • bannir les tournures « il est possible de », « il est recommandé de », « peut être + participe passé ».

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.

Écrire comme un rédacteur professionnel

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 :

  • Phrases courtes : moins de 15 % au-delà de 20 mots (Yoast en tolère 25 %). Depuis le 02/10/2026, la consigne ne vise plus « zéro exception », qui hachait le texte.
  • Pas de « Concrètement » ni « En pratique » en ouverture de phrase, ni de « Découvrez comment », « répond précisément à », « capital humain » ou de série de tirets cadratins.
  • Mots de transition variés : jamais deux fois le même dans un paragraphe, et pas d'enchaînement mécanique « de plus » / « en outre » / « par ailleurs ».
  • Rythme varié : des phrases courtes alternées avec des phrases moyennes.
  • Formules interdites, marqueurs habituels du texte généré : « à l'ère du numérique », « dans un monde en constante évolution », « il est important de noter que », « incontournable », « en conclusion », « plongeons dans »…
  • Concret plutôt que général, sous-titres informatifs, pas de question rhétorique en tête de chaque section, pas de triade « simple, rapide et efficace ».

Ces consignes vivent dans le prompt versionné blog-seo-generator : elles s'appliquent aux deux sources, et se modifient sans toucher au code.

Charte éditoriale du blog isi-app.com

Depuis le 02/10/2026, le générateur suit les mêmes règles que le projet Claude « Articles isi-app.com » :

  • Lecteurs visés : DSI, RH et directions d'établissements de santé, d'ESMS, de collectivités et d'associations.
  • Produits citables : Isi-APP et ses modules publiés sur le site, rien d'autre. Les libellés de l'interface sont repris à l'identique, et le périmètre (inclus dans Isi-APP ou réservé à un module) est précisé.
  • Passage douteux : l'IA le signale par un commentaire <!-- À VÉRIFIER : … --> dans le HTML, à traiter avant publication.
  • Longueur : 1 200 à 2 000 mots par défaut, 700 au minimum.
  • Maillage : au moins deux liens internes, dont la page pilier du module, et un lien externe (le site de Youzer pour Isi-Identité), ouvert dans un nouvel onglet.

2. Une mesure dans l'écran, 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.

3. La correction assistée

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.

Copier le résultat

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.

Faits à vérifier (contexte libre)

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.

Éviter de se cannibaliser

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.

Métadonnées SEO (Yoast)

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.

L'expression clé

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.

Encadré module en fin d'article

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.

FAQ et balisage JSON-LD

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.

Où trouver l'Application Password

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 :

  • Le mot de passe attendu est la valeur générée par WordPress — 24 caractères alphanumériques présentés sous la forme 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.
  • Cette valeur n'est affichée qu'une seule fois et n'est pas récupérable ensuite : si elle est perdue, révoquer la ligne et en créer une nouvelle.

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).

Limites (phase 1)

  • Publication en brouillon uniquement (pas de publication directe ni programmée).
  • Un seul blog cible (isi-app.com).
  • Le contrôle final de fidélité repose sur la relecture humaine du brouillon.
  • L'ancrage se fait par choix explicite du module (pas de recherche sémantique/RAG sur l'ensemble de la documentation).
  • En contexte libre, rien ne vérifie automatiquement les faits avancés : la consigne interdit d'inventer un chiffre, la relecture humaine reste le seul contrôle.
  • Le compteur de voix passive reproduit la méthode de Yoast sans en être une copie : un écart avec Yoast reste possible sur des tournures rares. Le contrôle final se fait dans Yoast, sur le brouillon.
  • L'image mise en avant se choisit parmi les images déjà présentes dans la médiathèque : l'outil ne produit pas de visuel.
  • Le statut WordPress n'est relu qu'à la demande (bouton de rafraîchissement), pas en continu.
  • L'historique n'a aucune règle de purge : toutes les générations sont conservées.

Voir aussi

  • Doc technique : .claude/technical-docs/ai/blog-seo-generator.md