Criar um CMS de blog com Claude Code: Astro MDX, SEO multilíngue, QA e monetização
Use Claude Code e Astro MDX para criar um CMS de blog com schema, localização, SEO, QA e CTA de receita.
Um CMS de blog deve levar o conteúdo até a receita
Publicar muitos artigos não garante vendas, treinamentos ou consultorias. Em blogs técnicos, a falha costuma estar no fluxo: metadados inconsistentes, traduções defasadas, código não testado, RSS esquecido, sitemap incompleto e CTA genérico.
CMS significa Content Management System, ou sistema de gestão de conteúdo. Aqui ele não precisa ser um painel enorme. Com Astro Content Collections e MDX, você cria um CMS baseado em arquivos, mas com regras fortes. Claude Code ajuda como operador editorial: escreve, revisa, localiza, valida exemplos, confere SEO e melhora a ponte entre artigo, produto e consultoria.
Para contexto, leia Claude Code e Contentful CMS, auditoria de funil de conteúdo, implementação de RSS e geração de sitemap. Use também a documentação oficial de Astro Content Collections, Astro MDX integration e Astro Sitemap integration.
Separe as responsabilidades do CMS
“Crie um CMS de blog” é amplo demais. Para Claude Code trabalhar bem, defina arquivos, regras e verificações. Em um site Astro MDX, a divisão prática é esta.
| Área | Responsabilidade | Boa tarefa para Claude Code |
|---|---|---|
| content schema | Definir campos e tipos do frontmatter | Implementar content.config.ts |
| artigos MDX | Gerenciar texto, tabelas, código e CTA | Reescrever rascunhos e adicionar exemplos |
| localização | Manter o mesmo slug em idiomas | Encontrar ausências e adaptar linguagem |
| preview | Conferir a tela antes da publicação | Rodar dev server e verificar links |
| SEO | Controlar title, description, OGP e sitemap | Auditar metadados |
| QA gate | Barrar erros antes do deploy | Criar scripts Node e checks focados |
| monetização | Ligar artigo a produto, treinamento ou consultoria | Revisar CTA e jornada |
Três usos reais
Primeiro: um desenvolvedor independente vende templates. Um tutorial de Claude Code pode terminar em um starter kit, biblioteca de prompts ou mini curso. O CMS precisa de ctaLabel, ctaUrl, relatedPosts, updatedDate e heroImage.
Segundo: um blog técnico corporativo evita riscos. API antiga, snippet que não roda, tradução parcial ou imagem OGP quebrada afetam confiança. Claude Code deve fazer a checagem pré-publicação, não só gerar texto.
Terceiro: SEO multilíngue exige um slug comum. O título pode ser natural em português, mas a tese, os exemplos e a intenção do CTA precisam ficar alinhados com os outros idiomas.
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
Schema Astro pronto para uso
Schema é uma regra executável sobre dados. Ele impede que um artigo sem data de atualização ou com description longa demais passe despercebido.
// 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 com CTA
MDX é Markdown que pode usar componentes. O frontmatter é a ficha do artigo para listas, OGP, RSS, sitemap e CTA.
---
title: "Criar um CMS de blog com Claude Code: Astro MDX, SEO multilíngue, QA e monetização"
description: "Use Claude Code e Astro MDX para criar um CMS de blog com schema, localização, SEO, QA e CTA de receita."
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: "pt"
ctaLabel: "Agendar consultoria de conteúdo com Claude Code"
ctaUrl: "https://example.com/consulting"
---
## Primeira seção
Este artigo conecta redação, localização, SEO, QA e CTA de monetização em um único fluxo editorial.
Script Node de validação
Salve como scripts/validate-blog-cms.mjs e execute 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|consultoria|treinamento|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 rascunho para publicação
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.
Falhas comuns e resultado verificado
As falhas comuns são atualizar só um idioma, dar escopo amplo demais ao Claude Code, publicar pseudocódigo como implementação, esquecer RSS/sitemap/OGP ou usar um CTA sem utilidade. Uma jornada melhor oferece checklist, template, treinamento e depois consultoria.
Testei o fluxo em um projeto Astro pequeno. O schema bloqueou datas ausentes e o script encontrou descriptions longas, links oficiais ausentes, links internos faltantes e CTA omitido. A naturalidade do português e a força comercial da oferta ainda exigem revisão humana antes da publicação.
PDF grátis: cheatsheet do Claude Code
Informe seu e-mail e baixe uma página com comandos, hábitos de revisão e workflows seguros.
Cuidamos dos seus dados e não enviamos spam.
Sobre o autor
Masa
Engenheiro focado em workflows práticos com Claude Code.
Artigos relacionados
Workflow Obsidian para CLAUDE.md com Claude Code
Transforme notas de trabalho do Obsidian em notas operacionais CLAUDE.md para preservar contexto.
Claude Code Revenue CTA Routing: artigos para PDF, Gumroad e consultoria
Um fluxo com Claude Code para levar leitores ao PDF grátis, Gumroad ou consultoria conforme intenção.
Regras de handoff para equipes com Claude Code: evidências, permissões, rollback e receita
Formato prático para entregar trabalho do Claude Code com prova, permissões, rollback, PDF grátis, Gumroad e consultoria.