Ajouter un blog à votre application SaaS sans construire de CMS

saas

Toute entreprise SaaS finit par avoir besoin d’un blog : pour les annonces produit, les guides, et la longue traîne du trafic de recherche, qui s’accumule au fil des années. L’erreur de la plupart des équipes techniques est de voir « ajouter un blog » soit comme une installation de WordPress le temps d’un week-end, soit comme un projet de CMS interne qui occupe un trimestre. Il existe une troisième voie, qui vous donne un blog en production sur votre propre domaine en un après-midi.

Choisissez où vit le blog : sous-domaine ou sous-répertoire

Avant d’écrire la moindre ligne de code, fixez l’URL. Vous avez trois options :

  • blog.yourapp.com — un sous-domaine, qui pointe en général vers une plateforme hébergée à part.

  • yourapp.com/blog — un sous-répertoire de votre site principal, affiché par votre propre frontend.

  • Un domaine tiers — publier sur Medium ou un service équivalent.

Pour le référencement, le sous-répertoire est la meilleure option : chaque article renforce l’autorité du domaine où vit votre produit, les liens internes circulent naturellement entre les pages marketing et les articles, et les statistiques restent dans une seule propriété. Un sous-domaine reste viable ; avec un domaine tiers, l’autorité profite entièrement à quelqu’un d’autre.

Choisir le sous-répertoire impose une contrainte d’architecture : c’est votre application qui doit afficher les articles. Cela exclut les plateformes couplées qui tiennent à servir elles-mêmes les pages, et oriente vers une architecture API-first : du contenu rédigé dans un tableau de bord, récupéré en JSON et affiché par votre frontend.

Une architecture en trois couches

Un blog SaaS a besoin d’exactement trois couches, et une seule relève de votre code :

  1. Rédaction — un tableau de bord où s’écrivent les articles : éditeur de texte riche, tags, catégories, brouillons, métadonnées SEO (titre, description, image Open Graph) et publication programmée.

  2. Diffusion — une API qui sert les articles publiés en JSON, avec pagination, filtre par tag et recherche.

  3. Affichage — deux routes dans votre application : une page de liste et une page d’article.

C’est en construisant soi-même les couches 1 et 2 que les projets de blog internes meurent : l’éditeur seul représente des semaines de travail, puis viennent l’envoi d’images, les brouillons, les permissions et les slugs. Un backend de contenu vous fournit ces deux couches sous forme de service, et tout votre projet se réduit à la couche 3.

L’affichage : deux routes et une requête

Avec un SDK typé, la couche d’affichage reste petite. La page de liste récupère une page d’articles :

ts
const { data: posts } = await kookee.blog.list({ page: 1, limit: 10 });

La page d’article récupère l’article par son slug :

ts
const post = await kookee.blog.getBySlug(params.slug);

Affichez le corps de l’article avec vos propres composants et votre design system existant. En React, l’effort est encore plus faible : des hooks comme useBlogPosts et useBlogPost gèrent les états de chargement et la pagination, et un composant de contenu affiche pour vous le HTML de l’article. Vous pouvez aussi vous passer complètement du balisage : des composants rendus côté serveur affichent la liste des articles, le filtre par tag, la pagination et la page d’article à partir des données que vous récupérez ; voir Créer un blog avec les composants React.

Deux règles maintiennent la qualité :

  • Faites le rendu côté serveur. Utilisez le SSR ou la génération statique pour que les robots d’indexation et les lecteurs reçoivent un HTML complet. Un rendu uniquement côté client fonctionne, mais vous perdez le référencement pour lequel vous avez choisi le sous-répertoire.

  • Renvoyez de vraies 404. Quand un slug ne correspond à rien, répondez avec le statut 404, pas avec une jolie page « introuvable » servie avec un statut 200. Les soft 404 polluent l’index.

La liste des métadonnées

Chaque page d’article doit produire, à partir des données que le CMS stocke déjà :

  • <title> et la meta description, tirés des champs SEO de l’article.

  • Une URL canonique qui pointe vers le chemin de l’article lui-même.

  • Les balises Open Graph et Twitter Card, image de l’article comprise.

  • article:published_time et article:modified_time.

  • Les données structurées JSON-LD Article.

Comme tout cela découle d’une seule réponse de l’API, une seule fonction utilitaire suffit. Ajoutez un flux RSS et une entrée de sitemap par article : les deux se génèrent sans difficulté à partir du même endpoint list que votre page de blog appelle déjà.

Tags, recherche et fonctionnalités offertes

Une fois que les articles sont des données structurées, des fonctionnalités qui seraient des projets entiers dans un système maison deviennent des paramètres de requête :

  • Pages de tag : kookee.blog.list({ tags: ['engineering'] }) derrière une route /blog/tags/:tag.

  • Recherche : kookee.blog.list({ search: query }) derrière un champ de recherche.

  • Commentaires et réactions : servis par la même API si vous voulez que les lecteurs réagissent aux articles.

  • Traductions : récupérez les autres langues d’un article quand vous vous développez à l’international.

Rien de tout cela ne demande de changement de schéma ni de migration de votre côté : le backend les modélise déjà.

Ce que cela vous coûte

Le bilan honnête de l’approche API-first :

  • Votre code : deux routes, une fonction pour les métadonnées, un flux. Une journée de travail dans la plupart des frameworks, moins si vous partez de vos modèles de page existants.

  • Coût récurrent : un abonnement à une plateforme de contenu. Avec des forfaits gratuits plafonnés selon l’usage (celui de Kookee inclut 100 000 requêtes API par mois), un blog ordinaire tourne longtemps sur le forfait gratuit.

  • Ce que vous évitez : construire et maintenir un éditeur, un stockage de médias, un circuit de publication et une deuxième application déployée.

Comparez avec l’auto-hébergement : une construction initiale qui se compte en semaines, puis la charge permanente des correctifs de sécurité et des mises à jour de dépendances pour un système qui n’est pas votre produit.

Un ordre de construction concret

  1. Créez un projet dans votre backend de contenu et écrivez un article de test.

  2. Ajoutez les routes /blog et /blog/:slug, qui le récupèrent et l’affichent côté serveur.

  3. Branchez la fonction des métadonnées : titre, description, URL canonique, balises OG, JSON-LD.

  4. Ajoutez le filtre par tag et le flux RSS.

  5. Envoyez votre équipe vers le tableau de bord et rayez « construire un blog » du backlog technique.

Le blog lui-même n’est jamais la partie difficile. La partie difficile, c’est de consacrer l’effort technique à votre produit tout en donnant au marketing une publication rapide, fidèle à votre marque et sur votre domaine. C’est exactement ce que vous apporte la séparation entre un backend de contenu et une fine couche d’affichage.