SEO Landing
Uma skill de agente para criar landing pages de SEO tecnicamente otimizadas e de alta performance. Transforme um agente de codificação de IA em um especialista técnico em SEO.
Documentação
SEO Landing
Dê ao seu agente de IA as capacidades de um engenheiro sênior de SEO técnico.
Uma skill de agente para construir landing pages de alta performance e tecnicamente otimizadas para SEO. Transforme um agente de IA em um especialista em SEO técnico.
Construa e melhore landing pages com:
- 🚀 Meta de 100/100 no Google PageSpeed
- ⚡ Otimização de Core Web Vitals
- 🔍 SEO técnico
- 🧩 Dados estruturados completos com Schema.org
- 🖼️ Otimização de imagens AVIF
- 🎨 CSS crítico
- 🧹 Zero requisições de terceiros no primeiro carregamento
- 📱 Performance mobile-first
- 🤖 HTML semântico
🇷🇺 Описание скила на русском языке
Funciona com agentes de IA
Projetado para fluxos de trabalho de codificação agêntica e compatível com ambientes no estilo Agent Skills.
O que ele faz?
A skill guia um agente de IA por todo o fluxo de trabalho de landing pages:
- Analisar a página existente
- Corrigir problemas técnicos de SEO
- Otimizar a estrutura HTML
- Melhorar os Core Web Vitals
- Otimizar imagens e fontes
- Adicionar dados estruturados
- Remover dependências desnecessárias
- Validar a implementação final
Por quê?
A IA pode gerar uma landing page bonita em segundos. O problema é que as páginas geradas geralmente contêm:
- JavaScript desnecessário
- imagens superdimensionadas
- estrutura semântica ruim
- dados estruturados ausentes
- metadados fracos
- gargalos de performance
- erros técnicos de SEO
A SEO Landing Skill dá ao agente um fluxo de trabalho técnico de SEO repetível, em vez de depender de prompts genéricos.
Uma skill de agente que constrói e atualiza landing pages visando 100/100 no PageSpeed de laboratório e performance compatível com Core Web Vitals, e acerta o SEO técnico. HTML estático, CSS crítico, imagens AVIF, marcação schema.org completa, zero requisições de terceiros no primeiro carregamento (widgets adiados, quando usados, são controlados por consentimento e documentados no manifesto de dependências). Estes são alvos de otimização, não resultados garantidos — os resultados dependem do conteúdo, hospedagem, dispositivos e tráfego real; o status dos Core Web Vitals em si é determinado pelo Google a partir de dados de campo (RUM), não por ferramentas de laboratório.
BEFORE
Landing page
↓
LCP: 4.2s
Performance: 61
Missing schema
Large PNG
Render-blocking CSS
↓ SEO LANDING SKILL ↓
AFTER
Landing page
↓
LCP: 1.1s
Performance: 100
Schema.org ✓
AVIF ✓
Critical CSS ✓
Semantic HTML ✓
Formato — Agent Skills (padrão aberto originalmente desenvolvido pela Anthropic): funciona no VS Code Copilot, Claude Code, OpenAI Codex, Google Antigravity, Cursor, Gemini CLI, OpenClaw, Hermes e outros agentes compatíveis.
O que está incluído
seo-landing/
├── SKILL.md # Main workflow: mode routing → brief → generation → stop point → validation → report
├── references/
│ ├── tech-spec.md # Technical spec (13 requirement sections + executable validation contract)
│ ├── server-config.md # Server config: caching, Brotli/gzip, security headers (Nginx/Apache)
│ ├── video-facade.md # Reference implementation of the "facade" pattern for YouTube
│ └── map-facade.md # Reference implementation of the "facade" pattern for map embeds
├── benchmark/ # Lab benchmark disclosure: fixture, raw Lighthouse reports, methodology
└── tests/
└── fixtures/broken-landing/ # Negative fixture: every validator gate must fail on it
Principais requisitos aplicados pela skill
- Performance: LCP < 2,5s, INP < 100ms, CLS < 0,1; CSS crítico inline, o restante carregado de forma assíncrona; a imagem LCP carrega com prioridade com
fetchpriority="high"(umimagesrcset/imagesizesresponsivo com preload apenas quando a medição mostrar benefício) - Imagens: AVIF → WebP → JPEG via
<picture>,srcset/sizes,width/height,loading="lazy"apenas para imagens abaixo da dobra (nunca na imagem LCP), breakpoints 320–1920 - SEO: title/description/canonical/robots, Open Graph, Twitter Card, JSON-LD (
WebSite,Organization,BreadcrumbList,FAQPage,VideoObject— emitidos apenas quando baseados em fatos e relatados conforme o modo de vídeo escolhido, nunca como um recurso de busca garantido) - Acessibilidade: WCAG 2.1 AA, contraste ≥ 4,5:1, navegação por teclado,
prefers-reduced-motion - Segurança:
X-Content-Type-Options,X-Frame-Options,Permissions-Policy,Referrer-Policy, CSP por página, HSTS em etapas, aplicação de HTTPS,rel="noopener noreferrer" - Fontes: apenas fontes do sistema — sem fontes externas, sem Google Fonts
- Orçamento de JS ≤ 15 KB para o primeiro carregamento, um arquivo com
defer; widgets de terceiros adiados (quando usados) são controlados por consentimento, excluídos do orçamento e divulgados no manifesto de dependências - Proibido: bibliotecas externas de JS/CSS, imagens SVG, scripts síncronos, iframes no primeiro carregamento
- Vídeo e mapas: padrão "facade" por padrão — a capa é uma imagem responsiva local (com prioridade quando é o LCP/acima da dobra, lazy abaixo da dobra), o iframe carrega apenas ao clicar. Vídeo somente por clique troca a descoberta de vídeo do Google por privacidade/performance pré-ativação; um modo opt-in com descoberta para SEO (
<video>auto-hospedado ou um embed direto documentado) existe quando a busca por vídeo importa (especificação técnica §9). Mapas permanecem apenas como facade. - Blocos comuns sem JS: FAQ via
<details>, slider viascroll-snap, modal via<dialog> - Ponto de parada: antes da validação e do relatório final, a skill sempre pede ao usuário para confirmar a versão HTML
Resultado no mundo real (medições de laboratório — não Core Web Vitals de campo)
Um benchmark de laboratório reproduzível: Lighthouse CLI 13.4.1, emulação mobile, throttling simulado. Original — uma SPA Angular (102 requisições, 1 execução); a mesma página reconstruída como HTML estático com esta skill (17–18 requisições, mediana de 5 execuções). Divulgação completa — fixture, flags exatas, relatórios JSON brutos, timestamps e método de agregação — está em benchmark/README.md.
| Métrica | Original | Reconstruída | Ganho |
|---|---|---|---|
| Performance | 75 | 100 | +25 |
| Acessibilidade | 75 | 100 | +25 |
| Boas Práticas | 73 | 100 | +27 |
| LCP | 3,3 s | 1,6 s | −52% |
| Tempo Total de Bloqueio | 490 ms | 13 ms | −97% |
| TTI | 9,4 s | 1,6 s | −83% |
| Dados transferidos | 769 KiB | 110 KiB | −86% |
| Requisições | 102 | 17 | −83% |
Estes são números de laboratório para um único par antes/depois. Não são Core Web Vitals de campo (o Google determina o status de CWV a partir de dados de campo CrUX/RUM no 75º percentil, e o Lighthouse não consegue medir INP sem interação real), e não são uma garantia de que outra página, host, dispositivo ou público alcançará os mesmos resultados — os alvos da skill são metas de otimização, não resultados prometidos.
Instalação
A skill está hospedada em github.com/aleksandr-alhoff/seo-landing. Clone o repositório — a raiz do repositório é a própria pasta da skill — e execute os comandos abaixo a partir do diretório que contém seo-landing/:
git clone https://github.com/aleksandr-alhoff/seo-landing.git
Global (disponível em todos os projetos)
Cada receita abaixo é autocontida: ela cria primeiro o diretório de destino e depois copia a skill para ele. Cada uma deve sair com status 0 e deixar a estrutura <skills-dir>/seo-landing/SKILL.md no lugar.
Nota: cp -R de um clone git também copia o diretório .git do clone para a instalação — inofensivo, mas desnecessário. Para manter as instalações enxutas, substitua cp -R seo-landing <dir>/ por rsync -a --exclude=.git seo-landing <dir>/seo-landing/ (a mesma sincronização usada para atualizações abaixo).
# VS Code Copilot
mkdir -p ~/.copilot/skills
cp -R seo-landing ~/.copilot/skills/
# Claude Code
mkdir -p ~/.claude/skills
cp -R seo-landing ~/.claude/skills/
# OpenAI Codex CLI / ChatGPT desktop
mkdir -p ~/.agents/skills
cp -R seo-landing ~/.agents/skills/
# Cursor
mkdir -p ~/.cursor/skills
cp -R seo-landing ~/.cursor/skills/
# Gemini CLI
mkdir -p ~/.gemini/skills
cp -R seo-landing ~/.gemini/skills/
# Google Antigravity
mkdir -p ~/.gemini/config/skills
cp -R seo-landing ~/.gemini/config/skills/
# OpenCode
mkdir -p ~/.config/opencode/skills
cp -R seo-landing ~/.config/opencode/skills/
# OpenClaw (via CLI — installs into the shared ~/.openclaw/skills)
openclaw skills install git:aleksandr-alhoff/seo-landing --global
# or from a local clone: openclaw skills install ./seo-landing --global
# or manually:
mkdir -p ~/.openclaw/skills
cp -R seo-landing ~/.openclaw/skills/
# Hermes
mkdir -p ~/.hermes/skills
cp -R seo-landing ~/.hermes/skills/
O OpenClaw também capta skills de ~/.agents/skills (o caminho do Codex acima), e o Hermes pode escaneá-lo também se você adicionar ~/.agents/skills a skills.external_dirs em ~/.hermes/config.yaml.
O Gemini CLI também pode instalar diretamente de um repositório Git:
gemini skills install https://github.com/aleksandr-alhoff/seo-landing.git
Por projeto (apenas workspace)
# Shared .agents/skills — picked up by VS Code Copilot, Codex, Cursor, Antigravity, Gemini CLI, OpenCode, OpenClaw, Hermes
mkdir -p .agents/skills
cp -R seo-landing .agents/skills/
# Claude Code
mkdir -p .claude/skills
cp -R seo-landing .claude/skills/
# VS Code Copilot (GitHub-style location)
mkdir -p .github/skills
cp -R seo-landing .github/skills/
# OpenClaw (workspace skills — highest precedence)
# via CLI: openclaw skills install ./seo-landing
mkdir -p skills
cp -R seo-landing skills/
# Hermes (project-local; then trust the repo once: hermes skills trust)
mkdir -p .hermes/skills
cp -R seo-landing .hermes/skills/
Atualizando, verificando e desinstalando cópias instaladas
Dois fatos orientam tudo abaixo:
git pullaltera apenas o clone. Uma cópia instalada feita comcp -Ré independente — puxar o clone de origem NÃO atualiza nenhuma instalação.cp -Rcopia, não sincroniza. O GNUcpnão tem comportamento de sincronização/remoção no destino: um arquivo excluído upstream permanece na cópia instalada para sempre, produzindo uma versão mista de instruções antigas e novas.
Portanto, uma atualização é uma sincronização explícita, limitada e idempotente para o destino resolvido da skill — nunca uma re-cópia cega.
Destinos (um por cliente e escopo)
| Cliente / escopo | Destino da skill instalada ($DEST) |
|---|---|
| VS Code Copilot — global | ~/.copilot/skills/seo-landing |
| Claude Code — global | ~/.claude/skills/seo-landing |
| OpenAI Codex CLI / ChatGPT desktop — global | ~/.agents/skills/seo-landing |
| Cursor — global | ~/.cursor/skills/seo-landing |
| Gemini CLI — global | ~/.gemini/skills/seo-landing |
| Google Antigravity — global | ~/.gemini/config/skills/seo-landing |
| OpenCode — global | ~/.config/opencode/skills/seo-landing |
| OpenClaw — global | ~/.openclaw/skills/seo-landing |
| Hermes — global | ~/.hermes/skills/seo-landing |
| Compartilhado por projeto (Copilot, Codex, Cursor, Antigravity, Gemini CLI, OpenCode, OpenClaw, Hermes) | .agents/skills/seo-landing |
| Claude Code — por projeto | .claude/skills/seo-landing |
| VS Code Copilot — por projeto (estilo GitHub) | .github/skills/seo-landing |
| OpenClaw — workspace (maior precedência) | skills/seo-landing |
| Hermes — por projeto | .hermes/skills/seo-landing |
Atualização (sincronização idempotente, remove arquivos excluídos upstream)
Execute a partir do diretório que contém o clone atualizado de seo-landing/, com $DEST definido para o destino da tabela acima:
DEST=~/.copilot/skills/seo-landing # ← substitute the right destination
# 1. Recovery first: back up the current installation (the sync is destructive).
cp -R "$DEST" "$DEST.backup-$(date +%Y%m%d)"
# 2. Bounded idempotent sync: copy new/changed files AND delete files inside
# $DEST that no longer exist upstream. --delete only ever touches $DEST.
rsync -a --delete --exclude=.git seo-landing/ "$DEST/"
# 3. Verify: zero differences (exit status 0) and the installed SKILL.md
# matches the source revision byte-for-byte.
diff -qr -x .git seo-landing "$DEST" && cmp "$DEST/SKILL.md" seo-landing/SKILL.md
Notas:
rsync -a --deleteestá disponível nativamente no macOS (openrsync) e em sistemas Linux típicos;--exclude=.gitmantém o histórico do clone fora da instalação.- O backup no passo 1 é o caminho de recuperação: se a nova versão se comportar mal, restaure-o com
rm -rf "$DEST" && cp -R "$DEST.backup-<date>" "$DEST". (O openrsync do macOS não suporta--backup, então a cópia explícita é o mecanismo verificado.) - A sincronização é segura para reexecutar a qualquer momento — executá-la duas vezes seguidas não muda nada na segunda vez.
- Caminho de atualização testado: uma instalação contendo um arquivo que a nova revisão removeu perde esse arquivo após a sincronização, e o
SKILL.mdinstalado torna-se byte-idêntico à revisão de origem.
Verifique uma instalação existente a qualquer momento
diff -qr -x .git seo-landing "$DEST"
Status de saída 0 (sem saída) significa que a instalação corresponde exatamente ao clone. Qualquer diferença impressa é um arquivo desatualizado, modificado ou extra — reexecute a sincronização de atualização para resolvê-la. Para verificar qual versão da especificação está instalada, leia a linha Version no topo de $DEST/references/tech-spec.md (a fonte única de verdade para versões).
Recarregar / reiniciar após uma atualização
Os agentes leem as skills quando uma sessão começa. Após atualizar, inicie uma nova sessão de chat (ou reinicie o CLI do agente) antes de confiar na nova versão. Clientes que controlam skills por confiança/aprovação (ex.: Hermes: hermes skills trust) podem exigir re-confiança na cópia atualizada.
Desinstalação
rm -rf "$DEST" # the destination from the table above
Se a cópia foi instalada por meio de um CLI de cliente (openclaw skills install, gemini skills install), prefira o comando de desinstalação do próprio cliente quando ele fornecer um; caso contrário, remover o diretório de destino é suficiente. Remova também quaisquer backups ($DEST.backup-*) que você não precisar mais.
Instalações com symlink — opcional/experimental
Criar um symlink do clone em um diretório de skills (para que git pull o atualize no lugar) é possível em princípio, mas o suporte oficial a symlinks, o tratamento de confiança e o comportamento de recarga diferem por cliente e NÃO são verificados aqui — trate isso como experimental. A sincronização rsync acima é o caminho de atualização suportado e independente de cliente.
Uma vez instalada, a skill é captada automaticamente pela sua descrição — basta pedir ao seu agente para "criar uma landing page a partir de um briefing com foco em SEO e PageSpeed".
Uso
- Dê ao agente um briefing: domínio, idioma (tag BCP-47, direção base para idiomas RTL e locale do Open Graph — três entradas separadas), tópico e palavras-chave, tipo de negócio, CTA e contatos.
- A skill cria uma pasta de projeto separada (
<workspace>/<project-slug>/) comindex.htmle todos os ativos locais que ela referencia (todas as variantes de imagem, favicon), além de — condicionalmente —styles.css(apenas CSS adiado),script.js(quando JS é usado),robots.txt,sitemap.xml,ASSETS.mdeSERVER-SETUP.md. Imagens de origem ausentes são solicitadas ao usuário, nunca inventadas. - No ponto de parada, confirme a versão HTML — a skill então executa a validação (existência de ativos/links locais, W3C, JSON-LD, Lighthouse como evidência automatizada, além das verificações manuais de acessibilidade necessárias) e produz um relatório: LCP, pontuações do PageSpeed e os tipos de schema.org usados.
Sobre o autor
Aleksandr Alhov — mais de 14 anos de experiência em SEO, marketing de conteúdo e GEO/AEO. Gerencia uma boutique de SEO para equipes de produto que atuam nos mercados EN, LATAM, MENA e CIS: construção de departamentos internos de SEO turnkey, lançamento de mídia corporativa lucrativa, descoberta de hipóteses de crescimento no canal de SEO e consultoria prática de SEO.
Co-fundador de:
Feito para o canal t.me/sdelay_tam — um canal aconchegante de SEO para times de produto. Dúvidas de SEO: t.me/alhov.
Licença
MIT — livre para usar, modificar e distribuir, inclusive comercialmente. Apenas mantenha o aviso de direitos autorais. Especificação: veja references/tech-spec.md — a versão atual e o histórico de alterações estão declarados lá.