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.webp"
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.
Artigos relacionados
Claude Code e Sanity CMS: guia de produção para content ops
Use Sanity CMS com Claude Code para SEO, páginas de produto, conteúdo multilíngue e CTA de monetização.
Claude Code e Contentful CMS: guia prático de integração
Integre Contentful com Claude Code, Next.js e Astro: APIs, tipos, preview, locales, ISR e erros comuns.
Checagem de conversão antes de publicar: evite perder leitores com o Claude Code
O PV subiu, mas zero inscrições. A culpa: link quebrado e texto em inglês. Veja como checar tudo com o Claude Code antes de publicar.
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.