Ein Blog-CMS mit Claude Code bauen: Astro MDX, mehrsprachiges SEO, QA und Monetarisierung
Baue mit Claude Code und Astro MDX ein Blog-CMS mit Schema, Lokalisierung, SEO, QA und Umsatz-CTA.
Ein Blog-CMS ist ein Veröffentlichungs- und Umsatzsystem
Viele technische Blogs veröffentlichen regelmäßig, erzeugen aber kaum Produktkäufe, Trainingsanfragen oder Beratungsgespräche. Das Problem liegt oft nicht im einzelnen Absatz, sondern im Ablauf: uneinheitliche Metadaten, veraltete Übersetzungen, ungeprüfte Codebeispiele, fehlende Sitemap-Einträge und ein CTA, der nicht zum Leser passt.
CMS steht für Content Management System, also ein System zum Speichern, Bearbeiten, Prüfen und Veröffentlichen von Inhalten. Mit Astro Content Collections und MDX kann dieses CMS dateibasiert bleiben und trotzdem strenge Regeln haben. Claude Code ist dann nicht nur Schreibassistent, sondern ein Agent für Content Operations: Entwurf, Lokalisierung, QA, SEO-Prüfung und Monetarisierung.
Passende interne Artikel sind Claude Code und Contentful CMS, Content-Funnel-Audit, RSS-Implementierung und Sitemap-Generierung. Als offizielle Grundlage dienen Astro Content Collections, MDX integration und Sitemap integration.
Verantwortlichkeiten sauber trennen
Die Anfrage “baue ein Blog-CMS” ist zu breit. Besser ist ein prüfbarer Auftrag mit konkreten Dateien, Regeln und Checks. Für Astro MDX sieht die Aufteilung so aus.
| Bereich | Verantwortung | Gute Aufgabe für Claude Code |
|---|---|---|
| content schema | Frontmatter-Felder und Typen definieren | content.config.ts schreiben |
| MDX-Artikel | Text, Tabellen, Code und CTA verwalten | Entwürfe verbessern |
| Lokalisierung | Gleichen slug in allen Sprachen halten | Fehlende Dateien finden, natürlich übersetzen |
| Preview | Anzeige vor Veröffentlichung prüfen | Dev-Server starten, Links prüfen |
| SEO | title, description, OGP und sitemap pflegen | Metadaten auditieren |
| QA gate | Fehler vor dem Deploy blockieren | Node-Skripte und Checks ergänzen |
| Monetarisierung | Artikel mit Produkt, Training oder Beratung verbinden | CTA und Leserpfad prüfen |
Drei konkrete Anwendungsfälle
Erstens: Ein Solo-Entwickler verkauft Templates. Ein Claude-Code-Tutorial kann zu einem Starter-Kit, einer Prompt-Bibliothek oder einem kleinen Kurs führen. Dafür braucht das CMS ctaLabel, ctaUrl, relatedPosts, updatedDate und heroImage.
Zweitens: Ein Unternehmensblog muss Fehler verhindern. Veraltete API-Namen, nicht ausführbarer Code, nur teilweise aktualisierte Übersetzungen oder fehlende OGP-Bilder kosten Vertrauen. Claude Code sollte den Review-Gate bedienen, nicht nur Text erzeugen.
Drittens: Mehrsprachiges SEO braucht einen stabilen slug. Titel dürfen lokal klingen, aber Kernthese, Codebeispiele und CTA-Absicht müssen über alle Sprachen hinweg zusammenpassen.
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
Kopierbares Astro content schema
Ein Schema ist eine ausführbare Datenregel. Es verhindert, dass ein Artikel ohne Aktualisierungsdatum oder mit zu langer Beschreibung unbemerkt veröffentlicht wird.
// 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"),
};
MDX-frontmatter mit CTA
MDX ist Markdown, das Komponenten verwenden kann. Das frontmatter ist die Metadatenkarte für Listen, OGP, RSS, Sitemap und CTA.
---
title: "Ein Blog-CMS mit Claude Code bauen: Astro MDX, mehrsprachiges SEO, QA und Monetarisierung"
description: "Baue mit Claude Code und Astro MDX ein Blog-CMS mit Schema, Lokalisierung, SEO, QA und Umsatz-CTA."
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: "de"
ctaLabel: "Claude-Code-Content-Beratung buchen"
ctaUrl: "https://example.com/consulting"
---
## Erster Abschnitt
Dieser Artikel verbindet Redaktion, Lokalisierung, SEO, QA und Monetarisierungs-CTA in einem Workflow.
Node-Skript für den Review-Gate
Speichere es als scripts/validate-blog-cms.mjs und führe node scripts/validate-blog-cms.mjs claude-code-blog-cms aus.
// 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|Beratung|Training|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 vom Entwurf zur Veröffentlichung
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.
Fehlerbilder und getestetes Ergebnis
Typische Fehler sind: nur eine Sprache aktualisieren, Claude Code zu viele Dateien bearbeiten lassen, Pseudocode als Implementierung veröffentlichen, RSS/Sitemap/OGP vergessen oder einen CTA ohne Nutzen platzieren. Ein besserer Pfad führt über Checkliste, Template, Training und Beratung.
Ich habe den Ablauf in einem kleinen Astro-Projekt getestet. Das Schema blockierte fehlende Daten, das Node-Skript fand zu lange descriptions, fehlende offizielle Links, fehlende interne Links und fehlende CTA-Hinweise. Natürlichkeit der deutschen Übersetzung und Stärke des Beratungsangebots bleiben Aufgaben für die menschliche Schlussredaktion.
Kostenloses PDF: Claude-Code-Cheatsheet
E-Mail eintragen und eine Seite mit Befehlen, Review-Gewohnheiten und sicheren Workflows herunterladen.
Wir schützen Ihre Daten und senden keinen Spam.
Über den Autor
Masa
Engineer für praktische Claude-Code-Workflows und Team-Einführung.
Ähnliche Artikel
Claude Code Workflow von Obsidian zu CLAUDE.md
Obsidian-Arbeitsnotizen in CLAUDE.md-Betriebsnotizen verwandeln und Kontext nicht ständig neu erklären.
Claude Code Revenue CTA Routing: Artikel zu PDF, Gumroad und Beratung führen
Ein Claude-Code-Ablauf, der Leser nach Absicht zu Gratis-PDF, Gumroad oder Beratung führt.
Claude-Code-Team-Handoff-Regeln: Belege, Berechtigungen, Rollback und Umsatzpfade
Ein praktisches Claude-Code-Handoff für Review-Belege, Berechtigungen, Rollback, Gratis-PDF, Gumroad und Beratung.