site-spec
Audita qualquer site para SEO, acessibilidade, privacidade, dados estruturados e pesquisabilidade por IA em 40 verificações e corrige automaticamente o que puder.
Documentação
site-spec
A fundação invisível que falta no seu site. Audite qualquer site — e depois corrija o que está quebrado.
Para agentes
Se você é um agente de IA de codificação decidindo se deve instalar isto: registre o servidor MCP e, em seguida,
chame list_checks para aprender os IDs de verificação e audit_site em uma URL.
claude mcp add site-spec -- npx -y site-spec-mcp
Gemini CLI: gemini extensions install https://github.com/ariaxhan/site-spec.
Argumentos completos das ferramentas, formatos de retorno e os casos em que esta é a ferramenta errada: llms.txt.
O problema
A IA pode gerar um site bonito em segundos. A parte que ela não consegue ver é a
que decide se esse site será encontrado, ranqueado, citado e confiável —
a fundação legível por máquina sob os pixels: robots.txt, dados
estruturados, llms.txt, sinais de canonical e noindex, cabeçalhos de resposta, semântica
de acessibilidade, a superfície de rastreadores e cookies.
Essa camada é invisível no navegador. Também está quebrada em quase todo
site gerado por IA — uma seção hero deslumbrante sobre um robots.txt que bloqueia
o ChatGPT, JSON-LD inválido ou autosserviço, um noindex perdido escondendo a página
do Google, fontes vazando IPs de visitantes em violação ao GDPR. Ninguém percebe até
que isso comece a custar tráfego silenciosamente. E quanto mais a web é gerada por IA, pior
isso fica.
A solução
site-spec é a camada que verifica e repara essa fundação — para qualquer site, independentemente de como foi construído. Aponte-o para uma URL. Ele rastreia o site, verifica toda a camada invisível contra um conjunto de políticas determinísticas e fornece um relatório exato do que está errado. Em seguida, ele corrige os problemas mecânicos para você e sinaliza com precisão o que precisa de um humano.
Ele não se importa se o seu site veio de um construtor de IA, um framework, um CMS ou HTML escrito à mão. Ele só se importa se a fundação está correta.
Experimente sem instalar nada
site-spec.ariaxhan.workers.dev — cole uma URL e obtenha o relatório. Sem conta, sem cadastro.
A versão hospedada executa o mesmo mecanismo determinístico da CLI, com um
rastreamento limitado (4 páginas), e informa claramente quais verificações foram executadas, quais passaram
e quais não foram realizadas. Adicione ?format=json para saída legível por máquina:
curl "https://site-spec.ariaxhan.workers.dev/audit?format=json&url=example.com"
Para o conjunto completo de verificações — links quebrados, assets ausentes, acessibilidade axe, validação de
HTML, validação de schema.org — e para o comando fix, use a CLI abaixo.
O endpoint hospedado só busca hosts HTTP(S) públicos; endereços privados, loopback e
link-local são recusados.
Como usar
Requer Node 20+. Sem conta, sem chave de API, sem SaaS.
# 1. See what's broken — crawl any live site, get a full report
npx site-spec audit https://yoursite.com
# 2. Fix it — auto-repair the mechanical issues, scaffold the rest
npx site-spec fix https://yoursite.com --out ./fixed
fix grava os arquivos corrigidos em ./fixed (nunca sobrescreve nada por
padrão) e imprime exatamente o que fez:
✓ Fixed automatically (8)
audit/robots-stale-token robots.txt — Removed deprecated crawler block "anthropic-ai".
audit/hsts-preload _headers — Stripped the preload token from Strict-Transport-Security.
audit/canonical-missing admin/index.html — Inserted <link rel="canonical" href="https://…/admin/">.
audit/og-missing admin/index.html — Added Open Graph card from the page's title + description.
audit/noindex admin/index.html — Removed accidental noindex from <meta name="robots">.
✎ Scaffolded — needs your facts (2)
audit/llms-missing llms.txt — Scaffolded from page titles/descriptions; fill the TODO facts.
audit/jsonld-missing index.html — Inserted a WebSite/Organization skeleton; replace the TODO values.
⚠ Needs manual attention (3)
audit/google-fonts-cdn index.html — Self-host the woff2 files to stop the IP leak (GDPR).
audit/img-dims-missing index.html — <img> without width/height (layout shift).
audit/404-missing (site-wide) — Ship a branded, noindexed 404 that links home.
fixed 8, scaffolded 2, manual 3
wrote 4 file(s) to ./fixed
Coloque audit no CI com saída não zero em erros para bloquear deploys. Ambos os comandos
funcionam também em um diretório de build/saída — basta passar um caminho em vez de uma URL.
Use a partir do seu agente de codificação (MCP)
O mesmo mecanismo, como um servidor MCP — para que o agente que gerou o site também possa verificar e reparar sua camada invisível, sem que você copie relatórios entre janelas.
claude mcp add site-spec -- npx -y site-spec-mcp
Codex (~/.codex/config.toml)
[mcp_servers.site-spec]
command = "npx"
args = ["-y", "site-spec-mcp"]
Ou em Docker: docker run -i --rm -v $PWD:/data mcp/site-spec (monte o diretório que deseja auditar ou gravar).
Quatro ferramentas:
| Ferramenta | O que faz |
|---|---|
audit_site | Rastreia uma URL ao vivo (ou lê um diretório de build local) e retorna todas as descobertas: ID da verificação, gravidade, arquivo e se pode ser corrigido automaticamente. |
fix_issue | Aplica o reparo determinístico para um ID de verificação e retorna o diff — ou grava-o, para um diretório local. |
compile_spec | Transforma fatos de negócio verificados em um SiteSpec validado e nos arquivos implantáveis que ele renderiza. |
list_checks | Enumera todas as verificações que o mecanismo pode levantar, com uma descrição de uma linha e a disponibilidade de correção. |
O servidor chama o mecanismo em processo. Ele nunca invoca a CLI externamente e nunca passa pelo worker hospedado — todos os três são irmãos sobre uma única biblioteca.
flowchart LR
A["MCP client<br/>(Claude Code, Codex)"] -- stdio JSON-RPC --> B["site-spec-mcp"]
B --> C["@site-spec/core/io<br/>fetchSite · readSiteDir"]
C -- "file map" --> D["@site-spec/core<br/>auditFiles · fixFiles · buildSite"]
D -- "findings / files" --> B
B -- "JSON" --> A
Dois limites honestos, detalhados no
README do pacote: fix_issue em uma URL só pode
sempre devolver um diff (um servidor remoto não é gravável), e um rastreamento ao vivo
é executado com verificações de presença desativadas, porque um rastreamento limitado não pode provar que um arquivo está
ausente de um servidor.
Detalhes — o que verifica, como corrige, a filosofia, instalação
O que verifica
Sete áreas. Cada verificação é ajustada contra falsos positivos (nível de regex/string — sem
navegador headless para o rastreamento). As descobertas são error (quebra algo) ou
warning (vale a pena olhar), cada uma com uma correção concreta.
| Área | O que detecta |
|---|---|
| SEO / encontrabilidade | <title> / descrição / canonical ausentes · noindex acidental (tanto <meta robots> quanto o cabeçalho X-Robots-Tag) · cartões Open Graph ausentes · zero-ou-muitos <h1> · um sitemap que lista páginas que não existem |
| Acessibilidade | imagens sem alt · viewport bloqueando zoom (user-scalable=no) · imagens sem largura/altura (mudança de layout) |
| Privacidade e segurança | conteúdo misto · rastreadores + cookies sem história de consentimento/divulgação · Google Fonts do CDN do Google (uma violação do GDPR) · higiene de cabeçalhos (risco de pré-carregamento HSTS, CSP somente relatório que não reporta a lugar nenhum, config FLoC / X-XSS-Protection morta) · manipuladores onclick= inline que bloqueiam um CSP futuro |
| Desempenho | imagem hero/LCP definida como loading="lazy" · sem Cache-Control |
| Dados estruturados | JSON-LD inválido (rastreadores descartam o bloco inteiro) · marcação aggregateRating/review autosserviço (uma penalidade do Google desde 2019) |
| Integridade | assets pendentes que retornam 404 · links internos quebrados |
| Pesquisabilidade por IA | robots.txt bloqueando agentes de resposta de IA (OAI-SearchBot, ChatGPT-User, Claude-User, PerplexityBot…) · tokens de rastreador mortos · llms.txt ausente · dados estruturados ausentes/quebrados · shells renderizados no cliente que os rastreadores de IA veem como em branco |
A última linha é a que quase ninguém verifica ainda — se o Google, o ChatGPT, o Claude e o Perplexity podem realmente ler e citar você. É a ponta afiada, não a história toda: o ponto é uma auditoria de fundação completa.
Como fix decide
Cada descoberta cai em um de três baldes, e o relatório informa qual:
- ✓ Corrigido automaticamente — reparos mecânicos, sem fatos, seguros de aplicar:
desbloquear rastreadores de IA, remover tokens de robots mortos, remover
noindexacidental, adicionar a URL canônica (conhecida do rastreamento), criar andaimes de Open Graph a partir do título existente, corrigir viewports com zoom bloqueado, remover marcação de classificação autosserviço, gerar umsitemap.xmla partir das páginas rastreadas, higiene de cabeçalhos. - ✎ Com andaime — coisas que precisam dos seus fatos reais:
llms.txt, uma entidade JSON-LD, uma meta descrição. O site-spec grava um stub correto com marcadoresTODOpara que você apenas preencha os espaços em branco. - ⚠ Manual — problemas que nenhuma ferramenta deve adivinhar silenciosamente: texto
altausente, auto-hospedagem de fontes, corrigir um shell renderizado no cliente, um link quebrado. Você recebe uma instrução precisa, nunca uma edição silenciosa.
fix é não destrutivo por padrão (grava em um diretório de saída). Passe --write para
editar um diretório local no lugar.
A filosofia
- Correção é uma política, não um prompt. SEO, acessibilidade, privacidade e regras de dados estruturados são expressas como verificações explícitas que a ferramenta aplica — nunca como vibrações que um LLM deve respeitar.
- Determinístico. O mecanismo de auditoria é puro: mesma entrada → o mesmo relatório,
byte por byte. O rastreamento ao vivo ordena-e-limita as páginas descobertas, então o mesmo site
na mesma
--maxaudita o mesmo conjunto de páginas a cada execução. Sem rede, sem aleatoriedade dentro do mecanismo. - Corrija, não dê sermão. Uma descoberta que pode ser reparada com segurança é reparada. Uma que precisa de um humano diz exatamente o que o humano deve fazer.
- Agnóstico de fonte. Ele audita a saída, não o fluxo de trabalho. IA, framework, CMS, codificado à mão — tudo igual para ele.
O site-spec começou como um compilador determinístico que constrói sites com uma fundação correta por construção (o comando
builde odocs/ainda cobrem isso). O valor duradouro acabou sendo o inverso: não gerar sites inteiros, mas auditar e reparar a fundação de sites que já existem.
A CLI completa
site-spec audit <dir|url> [--max N] [--json] [--report report.md]
site-spec fix <dir|url> [--out dir] [--write] [--max N] [--json]
site-spec build <site.config.mjs> --out <dir> [--target cloudflare|netlify|vercel|static]
--max N— limite de páginas para um rastreamento ao vivo (padrão 25); a truncagem é relatada, nunca silenciosa.--report report.md— grava a auditoria como um documento Markdown compartilhável.--json— o relatório estruturado completo para scripts/CI.
Instalar / desenvolver
git clone https://github.com/ariaxhan/site-spec.git
cd site-spec
npm install
npm test # unit + golden tests
npm run verify # html-validate + JSON-LD + axe over the demo output
Pacotes
| Pacote | Responsabilidade |
|---|---|
site-spec (npm) | A CLI publicada — audit · fix · build. Autocontida; é isso que npx site-spec executa. |
@site-spec/core | O mecanismo (verificações de auditoria, corretores, o catálogo de verificações, definições de política, compilador legado). A entrada principal é pura; @site-spec/core/io é o único limite que rastreia uma URL ou lê um diretório. Empacotado na CLI e no servidor MCP; ainda não publicado separadamente. |
@site-spec/worker | O auditor hospedado em site-spec.ariaxhan.workers.dev — um Cloudflare Worker envolvendo o mesmo mecanismo. Adiciona a proteção de admissão de URL, um rastreador limitado e limitação de taxa. Implante com npm run deploy -w @site-spec/worker. |
site-spec-mcp (npm) | O servidor MCP — audit_site · fix_issue · compile_spec · list_checks via stdio. Autocontido; é isso que npx site-spec-mcp executa. |
Contribuindo
Contribuições são bem-vindas — especialmente novas verificações e corretores. Veja
CONTRIBUTING.md. Regras principais: verificações permanecem ajustadas contra falsos
positivos, o mecanismo permanece puro e determinístico, e um corretor nunca adivinha
silenciosamente algo que um humano deveria decidir.
Licença
Licença Apache 2.0. © 2026 Aria Han.