Créer un CMS de blog avec Claude Code : Astro MDX, SEO multilingue, QA et monétisation
Avec Claude Code et Astro MDX, créez un CMS de blog avec schéma, localisation, SEO, QA et CTA revenus.
Un CMS de blog doit organiser la publication jusqu’à la conversion
Un blog technique peut publier souvent sans générer de ventes, de demandes de formation ou de missions de conseil. Le problème vient rarement d’un seul paragraphe. Il vient plutôt du système autour de l’article : structure des données, relecture, traduction, aperçu, SEO, RSS, sitemap et CTA.
Ici, CMS signifie Content Management System, ou système de gestion de contenu. Avec Astro Content Collections et MDX, un CMS peut rester basé sur des fichiers tout en imposant de vraies règles. Claude Code devient alors un agent d’opérations éditoriales : il aide à rédiger, localiser, vérifier le code, contrôler les métadonnées et améliorer le chemin vers le produit ou la consultation.
Pour compléter, consultez Claude Code et Contentful CMS, l’audit de funnel de contenu, l’implémentation RSS et la génération de sitemap. Les références officielles sont Astro Content Collections, Astro MDX integration et Astro Sitemap integration.
Découper les responsabilités
Une demande comme “crée un CMS de blog” est trop vague pour Claude Code. Il faut préciser les fichiers, les règles et les vérifications. Pour un site Astro MDX, les responsabilités principales sont les suivantes.
| Zone | Rôle | Tâche adaptée à Claude Code |
|---|---|---|
| content schema | Définir les champs frontmatter et leurs types | Écrire content.config.ts |
| articles MDX | Gérer texte, tableaux, code et CTA | Réécrire et enrichir les brouillons |
| localisation | Garder le même slug par langue | Détecter les manques et localiser naturellement |
| aperçu | Vérifier l’affichage avant publication | Lancer le serveur local et tester les liens |
| SEO | Gérer title, description, OGP et sitemap | Auditer les métadonnées |
| QA gate | Bloquer les erreurs avant publication | Ajouter scripts Node et checks ciblés |
| monétisation | Relier article, produit, formation, conseil | Revoir l’emplacement du CTA |
Trois cas d’usage concrets
Premier cas : un créateur indépendant vend des templates. Un article Claude Code peut mener vers un starter kit, une bibliothèque de prompts ou une mini-formation. Le CMS doit donc contenir ctaLabel, ctaUrl, relatedPosts, updatedDate et heroImage.
Deuxième cas : un blog d’entreprise. Le risque principal est de publier un exemple convaincant mais faux : API obsolète, extrait non testé, version française à jour mais version anglaise ancienne, image OGP absente. Claude Code doit servir de garde-fou éditorial.
Troisième cas : SEO multilingue. Le même slug doit exister dans les dix collections. Le titre peut être localisé, mais l’exemple technique, l’intention du CTA et la promesse éditoriale doivent rester cohérents.
site/src/content/blog/claude-code-blog-cms.mdx
site/src/content/blog-en/claude-code-blog-cms.mdx
site/src/content/blog-zh/claude-code-blog-cms.mdx
site/src/content/blog-ko/claude-code-blog-cms.mdx
site/src/content/blog-es/claude-code-blog-cms.mdx
site/src/content/blog-fr/claude-code-blog-cms.mdx
site/src/content/blog-de/claude-code-blog-cms.mdx
site/src/content/blog-pt/claude-code-blog-cms.mdx
site/src/content/blog-hi/claude-code-blog-cms.mdx
site/src/content/blog-id/claude-code-blog-cms.mdx
Schéma Astro copiable
Un schéma est une règle exécutable sur les données. Il empêche un article sans date de mise à jour ou avec une description trop longue de passer silencieusement.
// src/content.config.ts
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
const blogSchema = z.object({
title: z.string().min(20).max(80),
description: z.string().min(40).max(120),
pubDate: z.coerce.date(),
updatedDate: z.coerce.date(),
category: z.enum(["getting-started", "tips-and-tricks", "use-cases", "comparison", "advanced"]),
tags: z.array(z.string()).min(2).max(8),
heroImage: z.string().startsWith("/images/"),
draft: z.boolean().default(false),
requireAllLocales: z.boolean().default(false),
lang: z.enum(["ja", "en", "zh", "ko", "es", "fr", "de", "pt", "hi", "id"]),
ctaLabel: z.string().max(40).optional(),
ctaUrl: z.string().url().optional(),
});
const makeBlogCollection = (base: string) =>
defineCollection({
loader: glob({ pattern: "**/*.{md,mdx}", base }),
schema: blogSchema,
});
export const collections = {
blog: makeBlogCollection("./src/content/blog"),
"blog-en": makeBlogCollection("./src/content/blog-en"),
"blog-zh": makeBlogCollection("./src/content/blog-zh"),
"blog-ko": makeBlogCollection("./src/content/blog-ko"),
"blog-es": makeBlogCollection("./src/content/blog-es"),
"blog-fr": makeBlogCollection("./src/content/blog-fr"),
"blog-de": makeBlogCollection("./src/content/blog-de"),
"blog-pt": makeBlogCollection("./src/content/blog-pt"),
"blog-hi": makeBlogCollection("./src/content/blog-hi"),
"blog-id": makeBlogCollection("./src/content/blog-id"),
};
Frontmatter MDX avec CTA
MDX est du Markdown qui peut utiliser des composants. Le frontmatter est la fiche de l’article pour les listes, l’OGP, le RSS, le sitemap et le CTA.
---
title: "Créer un CMS de blog avec Claude Code : Astro MDX, SEO multilingue, QA et monétisation"
description: "Avec Claude Code et Astro MDX, créez un CMS de blog avec schéma, localisation, SEO, QA et CTA revenus."
pubDate: "2025-12-22"
updatedDate: "2026-06-02"
category: "use-cases"
tags: ["Claude Code", "CMS", "blog", "Astro", "MDX"]
heroImage: "/images/hero/hero-036.png"
lang: "fr"
ctaLabel: "Réserver un audit contenu Claude Code"
ctaUrl: "https://example.com/consulting"
---
## Première section
Cet article relie rédaction, localisation, SEO, QA et CTA de monétisation dans un même flux.
Script Node de validation
Enregistrez ce fichier dans scripts/validate-blog-cms.mjs, puis lancez node scripts/validate-blog-cms.mjs claude-code-blog-cms.
// scripts/validate-blog-cms.mjs
import fs from "node:fs";
import path from "node:path";
const slug = process.argv[2];
if (!slug) {
console.error("Usage: node scripts/validate-blog-cms.mjs <slug>");
process.exit(1);
}
const locales = [["blog", "ja"], ["blog-en", "en"], ["blog-zh", "zh"], ["blog-ko", "ko"], ["blog-es", "es"], ["blog-fr", "fr"], ["blog-de", "de"], ["blog-pt", "pt"], ["blog-hi", "hi"], ["blog-id", "id"]];
const root = path.join(process.cwd(), "src", "content");
const failures = [];
function readFrontmatter(source) {
const match = source.match(/^---\n([\s\S]*?)\n---/);
if (!match) return {};
return Object.fromEntries(match[1].split("\n").flatMap((line) => {
const index = line.indexOf(":");
if (index === -1) return [];
return [[line.slice(0, index).trim(), line.slice(index + 1).trim().replace(/^"|"$/g, "")]];
}));
}
for (const [dir, lang] of locales) {
const file = path.join(root, dir, `${slug}.mdx`);
const source = fs.existsSync(file) ? fs.readFileSync(file, "utf8") : "";
const data = readFrontmatter(source);
if (!source) failures.push(`${dir}: missing file`);
if (data.lang !== lang) failures.push(`${dir}: wrong lang`);
if (!data.updatedDate) failures.push(`${dir}: missing updatedDate`);
if ((data.description || "").length > 120) failures.push(`${dir}: description too long`);
if (!/https:\/\/docs\.astro\.build/.test(source)) failures.push(`${dir}: missing official docs`);
if (!/\]\(\/blog\/claude-code-/.test(source)) failures.push(`${dir}: missing internal link`);
if (!/(CTA|consultation|formation|consult)/i.test(source)) failures.push(`${dir}: missing CTA`);
if ((source.match(/`{3}/g) || []).length < 6) failures.push(`${dir}: fewer than three code blocks`);
}
if (failures.length) {
console.error(failures.map((item) => `- ${item}`).join("\n"));
process.exit(1);
}
console.log(`OK: ${slug} passed localized CMS checks.`);
Prompt de publication
Rewrite the article for slug <slug> as a production-ready Astro MDX blog post.
- Edit only the localized files for this slug.
- Keep heroImage and category.
- Add updatedDate: "2026-06-02".
- Keep description within 120 characters.
- Include 3 real use cases, concrete pitfalls, runnable code, official Astro docs, internal links, and a monetization CTA.
- Report changed files and focused check results.
Pièges et résultat vérifié
Les pièges classiques sont la mise à jour d’une seule langue, un périmètre d’écriture trop large pour Claude Code, du code non exécutable, un CTA trop commercial et l’oubli du RSS ou du sitemap. Un bon parcours propose d’abord une ressource gratuite, puis un template, une formation et enfin une consultation.
J’ai testé ce flux dans un petit projet Astro. Le schéma a bloqué les dates manquantes et le script a détecté les descriptions trop longues, l’absence de liens officiels, de liens internes et de CTA. La qualité du français et la pertinence commerciale demandent encore une vraie relecture humaine avant publication.
PDF gratuit: cheatsheet Claude Code
Saisissez votre email et téléchargez une page avec commandes, habitudes de review et workflow sûr.
Nous protégeons vos données et n'envoyons pas de spam.
À propos de l'auteur
Masa
Ingénieur spécialisé dans les workflows pratiques avec Claude Code.
Articles liés
Workflow Obsidian vers CLAUDE.md avec Claude Code
Transformer des notes Obsidian en notes CLAUDE.md concises pour reprendre les sessions sans réexpliquer.
Claude Code Revenue CTA Routing : relier articles, PDF, Gumroad et consultation
Un workflow Claude Code pour orienter les lecteurs vers PDF gratuit, Gumroad ou consultation selon l'intention.
Règles de handoff Claude Code en équipe: preuves, permissions, rollback et revenus
Un format concret pour transmettre un travail Claude Code avec preuves, permissions, rollback, PDF gratuit, Gumroad et consultation.