zark-seo 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js
CHANGED
|
@@ -49,7 +49,7 @@ async function copyDir(src, dest) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
async function appendNoteToContextFiles(targetRoot, skillsDirName) {
|
|
52
|
-
const note = `\n\n## SEO & GEO Skills (ZARK)\nEste projeto tem o **ZARK SEO & GEO Skills Stack** instalado em \`${skillsDirName}/\` —
|
|
52
|
+
const note = `\n\n## SEO & GEO Skills (ZARK)\nEste projeto tem o **ZARK SEO & GEO Skills Stack** instalado em \`${skillsDirName}/\` — 14 skills (1 orquestrador + 13 especialistas) em SEO Local, SEO técnico, SEO de conteúdo e GEO (otimização para LLMs).\n\n**Como usar:**\n- Em pedidos amplos ("monta plano de SEO completo", "cliente novo chegou", "como começo SEO") → consulte \`${skillsDirName}/seo-orchestrator-SKILL.md\` que roteia pra sequência correta.\n- Em pedidos específicos ("auditoria do site", "criar schema", "otimizar GBP", "página de cidade", "GEO/LLM SEO") → consulte a skill correspondente em \`${skillsDirName}/\`.\n- Lista completa de skills + pipelines documentados em \`${skillsDirName}/README.md\`.\n\nCada skill tem frontmatter \`name\` + \`description\` com triggers naturais — Claude Code roteia automaticamente; em outros clientes (Cursor/Codex/Aider) a IA usa o README como índice.\n\nFoco BR (CNPJ, CEP, +55, diretórios BR, idioma PT-BR). Stack derivado de auditoria real (não teórico).\n`;
|
|
53
53
|
|
|
54
54
|
const candidates = [
|
|
55
55
|
path.join(targetRoot, '.ai-context', 'CONTEXT.md'),
|
|
@@ -79,7 +79,7 @@ async function appendNoteToContextFiles(targetRoot, skillsDirName) {
|
|
|
79
79
|
function printHelp(version) {
|
|
80
80
|
banner(`zark-seo v${version}`);
|
|
81
81
|
console.log(` ${c.bold('Comandos:')}\n`);
|
|
82
|
-
console.log(` ${c.green('init')} ${c.dim('[pasta]')} instala
|
|
82
|
+
console.log(` ${c.green('init')} ${c.dim('[pasta]')} instala 14 skills SEO/GEO (default: ./seo-skills)`);
|
|
83
83
|
console.log(` ${c.green('help')} mostra esta ajuda`);
|
|
84
84
|
console.log(` ${c.green('version')} mostra a versão\n`);
|
|
85
85
|
console.log(` ${c.bold('Uso:')}`);
|
|
@@ -87,14 +87,14 @@ function printHelp(version) {
|
|
|
87
87
|
console.log(` npx zark-seo init ./skills ${c.dim('# instala em ./skills')}`);
|
|
88
88
|
console.log(` npx zark-seo init --force ${c.dim('# sobrescreve se já existe')}\n`);
|
|
89
89
|
console.log(` ${c.bold('Filosofia:')}`);
|
|
90
|
-
console.log(`
|
|
90
|
+
console.log(` 14 skills (1 orquestrador + 13 especialistas) em SEO Local, técnico, conteúdo e GEO.`);
|
|
91
91
|
console.log(` Cada skill tem frontmatter com triggers naturais — Claude Code roteia auto;`);
|
|
92
92
|
console.log(` em outros clientes a IA usa o README como índice. Foco mercado brasileiro.\n`);
|
|
93
93
|
console.log(` ${c.bold('Skills incluídas:')}`);
|
|
94
94
|
console.log(` ${c.dim('Orquestrador:')} seo-orchestrator`);
|
|
95
95
|
console.log(` ${c.dim('Diagnóstico:')} seo-local-auditor · competitor-gap-analyzer`);
|
|
96
96
|
console.log(` ${c.dim('Local SEO:')} gbp-optimizer · service-area-page-builder · citations-builder-br`);
|
|
97
|
-
console.log(` ${c.dim('Técnico:')} schema-jsonld-builder · meta-tags-optimizer · core-web-vitals-fixer`);
|
|
97
|
+
console.log(` ${c.dim('Técnico:')} schema-jsonld-builder · meta-tags-optimizer · core-web-vitals-fixer · seo-technical-engineer`);
|
|
98
98
|
console.log(` ${c.dim('Conteúdo:')} topical-authority-architect · seo-content-writer-br`);
|
|
99
99
|
console.log(` ${c.dim('Off-site:')} review-acquisition-engine`);
|
|
100
100
|
console.log(` ${c.dim('LLM/GEO:')} geo-llm-optimizer ★\n`);
|
|
@@ -147,7 +147,7 @@ async function runInit(args) {
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
console.log('');
|
|
150
|
-
console.log(c.green(`✓
|
|
150
|
+
console.log(c.green(`✓ 14 skills instaladas em ${skillsDirName}/`));
|
|
151
151
|
console.log('');
|
|
152
152
|
console.log(c.bold('Próximo passo:'));
|
|
153
153
|
console.log(` ${c.dim('•')} Diga pra IA: "leia ${skillsDirName}/README.md e use as skills SEO/GEO conforme contexto"`);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zark-seo",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "ZARK SEO & GEO Skills Stack — install via `npx zark-seo init` to drop
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "ZARK SEO & GEO Skills Stack — install via `npx zark-seo init` to drop 14 SEO/GEO specialist skills (1 orchestrator + 13 specialists in Local SEO, technical SEO, content, GEO/LLM optimization) as REFERENCE for AI in any project. Brazilian market focus, derived from real ZARK audits.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"zark-seo": "bin/cli.js"
|
package/templates/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🚀 ZARK SEO & GEO Skills Stack
|
|
2
2
|
|
|
3
|
-
Stack completo de
|
|
3
|
+
Stack completo de **13 skills especialistas** (+ 1 orquestrador) em SEO Local, SEO técnico, SEO de conteúdo e GEO (Generative Engine Optimization) para o mercado brasileiro. Cada skill é autocontida, especialista em uma frente específica, e foi desenhada pra ser composta com as demais.
|
|
4
4
|
|
|
5
5
|
> **Contexto de criação:** desenvolvido pela ZARK em maio de 2026 a partir de auditoria real (Limppetec) que evidenciou os gaps mais comuns de SEO em PMEs brasileiras. As skills incorporam o stack ZARK Chat / n8n / Evolution API / Supabase para automação operacional.
|
|
6
6
|
|
|
@@ -22,6 +22,7 @@ Stack completo de 12 skills especialistas em SEO Local, SEO de conteúdo e GEO (
|
|
|
22
22
|
| 10 | `competitor-gap-analyzer` | Análise competitiva em 3 dimensões | "analisar concorrentes", "gap analysis", "espionar concorrente" |
|
|
23
23
|
| 11 | `citations-builder-br` | Cadastro em diretórios BR com NAP consistente | "cadastrar em diretórios", "NAP", "citations", "presença online" |
|
|
24
24
|
| 12 | `geo-llm-optimizer` | Otimização para LLMs (ChatGPT, Claude, Gemini, Perplexity) ★ | "GEO", "aparecer no ChatGPT", "ranking em IA", "LLM SEO" |
|
|
25
|
+
| 13 | `seo-technical-engineer` | SEO técnico avançado (indexação, crawl, JS rendering, migração, robots/sitemap, GSC errors) | "site não indexa", "Search Console com erro", "JavaScript SEO", "migrar domínio", "Crawled not indexed", "robots.txt", "Soft 404" |
|
|
25
26
|
|
|
26
27
|
★ = moat competitivo ZARK em 2026
|
|
27
28
|
|
|
@@ -37,7 +38,8 @@ Cliente chegou. Empresa com presença digital fraca ou nenhuma. Aplicar nessa or
|
|
|
37
38
|
Semana 1 ┌─ 1. seo-local-auditor (diagnóstico inicial)
|
|
38
39
|
└─ 10. competitor-gap-analyzer (contextualizar gaps)
|
|
39
40
|
│
|
|
40
|
-
Semana 2-3 ┌─
|
|
41
|
+
Semana 2-3 ┌─ 13. seo-technical-engineer (fundação técnica: indexação, rendering, sitemap)
|
|
42
|
+
├─ 3. gbp-optimizer (60% do ranking Local)
|
|
41
43
|
├─ 2. schema-jsonld-builder (fundação de entidade)
|
|
42
44
|
└─ 6. core-web-vitals-fixer (performance se aplicável)
|
|
43
45
|
│
|
|
@@ -65,6 +67,7 @@ Trimestral ─ 1. seo-local-auditor (re-auditoria)
|
|
|
65
67
|
─ 10. competitor-gap-analyzer (mercado mudou)
|
|
66
68
|
─ 11. citations-builder-br (manutenção NAP)
|
|
67
69
|
─ 12. geo-llm-optimizer (re-medir BMR/SOV)
|
|
70
|
+
─ 13. seo-technical-engineer (re-check GSC, indexação, redirects)
|
|
68
71
|
|
|
69
72
|
Semestral ─ 6. core-web-vitals-fixer (validar performance)
|
|
70
73
|
─ 7. topical-authority-architect (refresh de estratégia)
|
|
@@ -84,7 +87,8 @@ Estrutura ┌─ 4. service-area-page-builder (páginas de cidade)
|
|
|
84
87
|
Por página ┌─ 5. meta-tags-optimizer (title/desc/OG)
|
|
85
88
|
└─ 2. schema-jsonld-builder (schema apropriado)
|
|
86
89
|
│
|
|
87
|
-
Pré-launch ┌─
|
|
90
|
+
Pré-launch ┌─ 13. seo-technical-engineer (robots.txt, sitemap, rendering, redirects)
|
|
91
|
+
├─ 6. core-web-vitals-fixer (validar performance)
|
|
88
92
|
└─ 1. seo-local-auditor (checklist final)
|
|
89
93
|
│
|
|
90
94
|
Pós-launch ┌─ 3. gbp-optimizer (vincular ao site)
|
|
@@ -114,7 +118,13 @@ Mês 7-12 └─ 12. geo-llm-optimizer (Wikipedia se elegível, aw
|
|
|
114
118
|
|
|
115
119
|
| Cliente disse... | Skill principal | Skills complementares |
|
|
116
120
|
|---|---|---|
|
|
117
|
-
| "Meu site não aparece no Google" |
|
|
121
|
+
| "Meu site não aparece no Google" | 13 | 1, 3, 6 |
|
|
122
|
+
| "Site React/Vue/Next não rankeia" | 13 | 6, 5 |
|
|
123
|
+
| "Search Console com 'Crawled not indexed'" | 13 | 1, 8 |
|
|
124
|
+
| "Quero migrar de domínio sem perder ranking" | 13 | 5, 2, 11 |
|
|
125
|
+
| "Mudei de HTTP pra HTTPS / www pra non-www" | 13 | — |
|
|
126
|
+
| "Site grande, só 10% das páginas estão indexadas" | 13 | 6 |
|
|
127
|
+
| "Auditoria SEO geral" | 1 | 3, 6, 11 |
|
|
118
128
|
| "Quero rankear em [cidade]" | 4 | 1, 3, 11 |
|
|
119
129
|
| "Como aparecer mais no Google Meu Negócio?" | 3 | 9, 11 |
|
|
120
130
|
| "Preciso de mais reviews" | 9 | 3 |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: seo-orchestrator
|
|
3
|
-
description: Meta-skill que ROTEIA pedidos amplos ou ambíguos de SEO/GEO para a sequência correta de skills especialistas do stack ZARK. Use SEMPRE que o pedido do usuário for genérico, abrangente, ou quando ele não souber por onde começar — exemplos de triggers "cliente novo chegou", "o que faço pra rankear esse site", "monta um plano de SEO completo", "minha empresa precisa aparecer no Google", "ajuda essa empresa do zero", "preciso de tudo de SEO", "estratégia completa de SEO", "como começar SEO", "auxilia esse cliente", "não sei o que fazer", "por onde começo", "monta o plano", "faz a estratégia", "executa SEO completo". Acionar TAMBÉM quando o pedido envolve múltiplas frentes (auditoria + execução + conteúdo + GEO) ou quando há necessidade de planejamento sequencial. NÃO acionar quando o usuário pediu uma skill específica ("cria schema", "auditoria do site", "escreve um post") — nesses casos, vá direto pra skill especialista. Essa skill orquestra; não executa diretamente. Sempre delega pras skills especialistas (1-
|
|
3
|
+
description: Meta-skill que ROTEIA pedidos amplos ou ambíguos de SEO/GEO para a sequência correta de skills especialistas do stack ZARK. Use SEMPRE que o pedido do usuário for genérico, abrangente, ou quando ele não souber por onde começar — exemplos de triggers "cliente novo chegou", "o que faço pra rankear esse site", "monta um plano de SEO completo", "minha empresa precisa aparecer no Google", "ajuda essa empresa do zero", "preciso de tudo de SEO", "estratégia completa de SEO", "como começar SEO", "auxilia esse cliente", "não sei o que fazer", "por onde começo", "monta o plano", "faz a estratégia", "executa SEO completo". Acionar TAMBÉM quando o pedido envolve múltiplas frentes (auditoria + execução + conteúdo + GEO) ou quando há necessidade de planejamento sequencial. NÃO acionar quando o usuário pediu uma skill específica ("cria schema", "auditoria do site", "escreve um post") — nesses casos, vá direto pra skill especialista. Essa skill orquestra; não executa diretamente. Sempre delega pras skills especialistas (1-13) e coordena ordem, contexto e cronograma.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SEO Orchestrator — Padrão ZARK
|
|
@@ -16,7 +16,7 @@ Meta-skill que coordena o stack ZARK SEO/GEO. Recebe pedido amplo, faz diagnóst
|
|
|
16
16
|
- Tradutora de pedidos vagos em sequências executáveis
|
|
17
17
|
|
|
18
18
|
**NÃO é:**
|
|
19
|
-
- Substituta das
|
|
19
|
+
- Substituta das 13 skills especialistas (sempre delega)
|
|
20
20
|
- Auditoria por si só (delega pra skill 1)
|
|
21
21
|
- Geradora de output técnico final (delega pra skills específicas)
|
|
22
22
|
- Skill pra pedidos pontuais e específicos (esses vão direto pra skill apropriada)
|
|
@@ -35,7 +35,7 @@ Meta-skill que coordena o stack ZARK SEO/GEO. Recebe pedido amplo, faz diagnóst
|
|
|
35
35
|
|
|
36
36
|
5. **Detectar dependências.** Skill 11 (citations) sem GBP otimizado é desperdício — orchestrator move skill 3 antes.
|
|
37
37
|
|
|
38
|
-
6. **Realismo de cronograma.** Não propor "
|
|
38
|
+
6. **Realismo de cronograma.** Não propor "14 skills numa sessão". Distribuir em batches realistas.
|
|
39
39
|
|
|
40
40
|
7. **Delegação sempre.** Orchestrator nunca produz schema, conteúdo ou auditoria — delega pra skills.
|
|
41
41
|
|
|
@@ -136,6 +136,7 @@ Sessão 1: Diagnóstico
|
|
|
136
136
|
[skill 10] competitor-gap-analyzer
|
|
137
137
|
|
|
138
138
|
Sessão 2: Fundação técnica
|
|
139
|
+
[skill 13] seo-technical-engineer (indexação, rendering, robots/sitemap)
|
|
139
140
|
[skill 6] core-web-vitals-fixer (se performance ruim)
|
|
140
141
|
[skill 2] schema-jsonld-builder
|
|
141
142
|
[skill 5] meta-tags-optimizer (páginas existentes)
|
|
@@ -172,6 +173,7 @@ Trimestral:
|
|
|
172
173
|
[skill 10] re-análise competitiva
|
|
173
174
|
[skill 11] manutenção de citations
|
|
174
175
|
[skill 12] re-medição GEO
|
|
176
|
+
[skill 13] re-check técnico (GSC, indexação, redirects)
|
|
175
177
|
[skill 7] refresh estratégia conteúdo
|
|
176
178
|
|
|
177
179
|
Semestral:
|
|
@@ -194,6 +196,7 @@ Estrutura de páginas:
|
|
|
194
196
|
[skill 2] schema-jsonld-builder (cada página)
|
|
195
197
|
|
|
196
198
|
Pré-launch técnico:
|
|
199
|
+
[skill 13] seo-technical-engineer (robots/sitemap/rendering/redirects)
|
|
197
200
|
[skill 6] core-web-vitals-fixer
|
|
198
201
|
[skill 1] seo-local-auditor (checklist final)
|
|
199
202
|
|
|
@@ -497,9 +500,9 @@ Orchestrator não confunde contextos. Pede confirmação: "É pra Limppetec ou G
|
|
|
497
500
|
**Pedido fora do escopo (design, dev, copy de venda):**
|
|
498
501
|
Orchestrator declara fora de escopo. Sugere como ZARK pode resolver com outras competências (design, dev, ads) que não são do stack SEO/GEO.
|
|
499
502
|
|
|
500
|
-
## Conexão com as
|
|
503
|
+
## Conexão com as 13 skills
|
|
501
504
|
|
|
502
|
-
Orchestrator é a **camada superior** que coordena as
|
|
505
|
+
Orchestrator é a **camada superior** que coordena as 13. Não substitui nenhuma:
|
|
503
506
|
|
|
504
507
|
| Skill | Quando orchestrator aciona |
|
|
505
508
|
|---|---|
|
|
@@ -515,6 +518,7 @@ Orchestrator é a **camada superior** que coordena as 12. Não substitui nenhuma
|
|
|
515
518
|
| 10. competitor-gap-analyzer | Cliente novo / antes de plano de conteúdo / trimestral |
|
|
516
519
|
| 11. citations-builder-br | Após Skill 3 / cliente sem presença em diretórios |
|
|
517
520
|
| 12. geo-llm-optimizer | Cliente com fundação pronta / vetor competitivo |
|
|
521
|
+
| 13. seo-technical-engineer | Indexação travada, JS SEO, migração de domínio, GSC errors, pré-launch de site novo, re-check trimestral técnico |
|
|
518
522
|
|
|
519
523
|
## Exemplos de invocação esperada
|
|
520
524
|
|
|
@@ -0,0 +1,907 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: seo-technical-engineer
|
|
3
|
+
description: SEO técnico avançado para sites, sistemas web e aplicações — diagnostica e corrige problemas de indexação, crawlability, renderização (JavaScript SEO), arquitetura de URL, redirecionamentos, migrações de domínio, sitemap.xml, robots.txt, hreflang, canonical, paginação, faceted navigation, Search Console issues, e tudo que envolve fazer um sistema ser rastreado, renderizado e indexado corretamente pelo Google. Use SEMPRE que o usuário pedir para "site não indexa", "Google não acha minha página", "problema no Search Console", "erro de indexação", "robots.txt", "sitemap.xml", "canonical", "redirect 301", "migrar domínio", "mudar de HTTP para HTTPS", "site React não rankeia", "JavaScript SEO", "site Next.js", "SSR vs SSG", "rendering", "Soft 404", "Crawled not indexed", "Discovered not indexed", "página com redirect", "noindex", "hreflang", "paginação SEO", "filtros não rankeiam", "ecommerce indexação", "URLs com parâmetros", "trailing slash", "www vs non-www", "log file analysis", "Googlebot", "crawl budget", "site grande não indexa todas as páginas", "disavow", "manual action", "penalidade", "recovery", "estrutura de URL", "arquitetura de site", "depth de cliques", "internal linking técnico", "soft 404", "x-robots-tag", "HTTP headers SEO". Acionar também quando outras skills (1, 6, 2) detectarem gargalo técnico que exige aprofundamento. Trabalha como engenheiro de SEO sênior — entrega diagnóstico técnico em camadas e código pronto pra colar em servidor (nginx, apache, htaccess, next.config.js, robots.txt, sitemap).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SEO Technical Engineer — Padrão ZARK
|
|
7
|
+
|
|
8
|
+
Skill de SEO técnico avançado pra sites, sistemas e aplicações web. Trabalha como engenheiro de SEO sênior — diagnostica em camadas, corrige na raiz, e produz código pronto pra colar em produção.
|
|
9
|
+
|
|
10
|
+
## Por que essa skill existe
|
|
11
|
+
|
|
12
|
+
SEO técnico é **fundação invisível**. Cliente que tem GBP perfeito, conteúdo excelente, schema completo e reviews ótimas — mas tem `robots.txt` bloqueando o site, `noindex` acidental, ou JavaScript não renderizando pro Googlebot — **não rankeia nada**. Os 13 skills anteriores otimizam superfície; essa skill otimiza fundação.
|
|
13
|
+
|
|
14
|
+
Em 2026, com a popularização de frameworks JavaScript (React, Vue, Next.js, Angular, Svelte), sistemas SaaS, e e-commerces complexos, problemas técnicos de SEO viraram o **maior bloqueador silencioso** de ranking. Site que parece "ok" pra humano frequentemente é incompreensível pro Googlebot.
|
|
15
|
+
|
|
16
|
+
## Princípios não-negociáveis
|
|
17
|
+
|
|
18
|
+
1. **Diagnóstico em 5 camadas antes de prescrição.** Acessibilidade → Crawlability → Renderability → Indexability → Rankability. Pular camada gera fix superficial.
|
|
19
|
+
|
|
20
|
+
2. **Inspeção real, não suposição.** Skill executa `curl -I`, simula Googlebot, verifica robots.txt, lê sitemap, busca `site:` no Google. Não inventa diagnóstico.
|
|
21
|
+
|
|
22
|
+
3. **Código pronto pra colar.** Output não é "ajuste seu robots.txt" — é o conteúdo exato do robots.txt pra esse caso.
|
|
23
|
+
|
|
24
|
+
4. **Reconhecer limites.** Sem acesso ao servidor, algumas coisas não dão pra resolver. Skill instrui o que pedir ao dev/hospedagem.
|
|
25
|
+
|
|
26
|
+
5. **JavaScript SEO requer rigor.** Site React/Vue/Next/Angular renderizando client-side é caso especial. Skill diagnostica modo de renderização.
|
|
27
|
+
|
|
28
|
+
6. **Migrações exigem plano de rollback.** Migração mal feita destrói anos de ranking. Skill nunca migra sem checklist + monitoramento.
|
|
29
|
+
|
|
30
|
+
7. **Search Console é a fonte de verdade.** Cliente sem acesso ao GSC é cego. Skill instrui setup primeiro, antes de diagnóstico profundo.
|
|
31
|
+
|
|
32
|
+
8. **Cada framework tem armadilhas próprias.** WordPress + Elementor difere de Next.js que difere de Shopify. Skill conhece cada um.
|
|
33
|
+
|
|
34
|
+
9. **Honestidade sobre tempo de impacto.** Fix técnico não traz ranking em 24h. Re-crawl + re-index leva 1-30 dias. Reranking leva 30-90 dias.
|
|
35
|
+
|
|
36
|
+
10. **Não substitui auditoria.** Skill 1 (`seo-local-auditor`) faz diagnóstico holístico; Skill 13 faz aprofundamento técnico. Complementam-se.
|
|
37
|
+
|
|
38
|
+
## Fluxo de execução
|
|
39
|
+
|
|
40
|
+
### Etapa 1 — Coleta inicial
|
|
41
|
+
|
|
42
|
+
Antes de qualquer diagnóstico, levante:
|
|
43
|
+
|
|
44
|
+
**Acesso e contexto:**
|
|
45
|
+
- URL principal do site/sistema
|
|
46
|
+
- Cliente tem acesso ao Google Search Console (GSC)?
|
|
47
|
+
- Cliente tem acesso ao servidor / FTP / cPanel / hospedagem?
|
|
48
|
+
- Stack técnico:
|
|
49
|
+
- CMS (WordPress, Wix, Shopify, custom)
|
|
50
|
+
- Framework (Elementor, Next.js, Vue, React, Angular, Astro, Hugo)
|
|
51
|
+
- Hospedagem (qual provedor)
|
|
52
|
+
- Servidor (nginx, apache, IIS, edge)
|
|
53
|
+
- CDN (Cloudflare? outro?)
|
|
54
|
+
- Site novo ou existente?
|
|
55
|
+
- Mudou algo recentemente (migração, redesign, plugin)?
|
|
56
|
+
|
|
57
|
+
**Sintoma específico:**
|
|
58
|
+
- O que o cliente está vendo?
|
|
59
|
+
- Search Console mostra erros? Quais?
|
|
60
|
+
- Comparativo: o que rankeava antes vs agora?
|
|
61
|
+
- Páginas específicas com problema?
|
|
62
|
+
|
|
63
|
+
Se faltar acesso ao GSC, **antes de mais nada** instrua o cliente a configurar. Sem GSC, diagnóstico é parcial.
|
|
64
|
+
|
|
65
|
+
### Etapa 2 — Diagnóstico em 5 camadas
|
|
66
|
+
|
|
67
|
+
Execute em ordem. Não pular.
|
|
68
|
+
|
|
69
|
+
#### CAMADA 1 — ACESSIBILIDADE
|
|
70
|
+
|
|
71
|
+
**Pergunta:** o Googlebot consegue chegar no servidor?
|
|
72
|
+
|
|
73
|
+
**Checks:**
|
|
74
|
+
|
|
75
|
+
1. **DNS funcional?**
|
|
76
|
+
- `dig dominio.com.br` ou `nslookup dominio.com.br`
|
|
77
|
+
- Resolve em IP válido?
|
|
78
|
+
|
|
79
|
+
2. **Servidor responde?**
|
|
80
|
+
- `curl -I https://dominio.com.br`
|
|
81
|
+
- Status 200 OK?
|
|
82
|
+
- Tempo de resposta razoável (< 3s)?
|
|
83
|
+
|
|
84
|
+
3. **HTTPS configurado corretamente?**
|
|
85
|
+
- Certificado válido?
|
|
86
|
+
- HSTS ativo?
|
|
87
|
+
- Redirect HTTP → HTTPS funciona?
|
|
88
|
+
|
|
89
|
+
4. **robots.txt acessível e correto?**
|
|
90
|
+
- `https://dominio.com.br/robots.txt` retorna 200?
|
|
91
|
+
- Conteúdo NÃO bloqueia `User-agent: Googlebot`?
|
|
92
|
+
- Erro comum: `Disallow: /` (bloqueia tudo)
|
|
93
|
+
- Erro comum: `Disallow: /wp-admin/` ok, mas `Disallow: /wp-content/` quebra imagens
|
|
94
|
+
|
|
95
|
+
5. **Server returns código correto?**
|
|
96
|
+
- Páginas que existem retornam 200
|
|
97
|
+
- Páginas removidas retornam 410 ou 404 (não 200 com mensagem "página não encontrada")
|
|
98
|
+
- Páginas movidas retornam 301
|
|
99
|
+
- **Cuidado com Soft 404** (página de erro com status 200)
|
|
100
|
+
|
|
101
|
+
#### CAMADA 2 — CRAWLABILITY
|
|
102
|
+
|
|
103
|
+
**Pergunta:** o Googlebot consegue navegar e descobrir todas as páginas?
|
|
104
|
+
|
|
105
|
+
**Checks:**
|
|
106
|
+
|
|
107
|
+
1. **sitemap.xml existe e está correto?**
|
|
108
|
+
- `https://dominio.com.br/sitemap.xml` retorna 200?
|
|
109
|
+
- XML válido (não erro de parse)?
|
|
110
|
+
- Lista todas as URLs importantes?
|
|
111
|
+
- Não lista URLs com noindex?
|
|
112
|
+
- Lista canonical URLs (não versões com parâmetro)?
|
|
113
|
+
- `lastmod` atualizado em mudanças recentes?
|
|
114
|
+
- Tamanho < 50.000 URLs por sitemap (limite Google)?
|
|
115
|
+
- Se site grande: tem sitemap-index?
|
|
116
|
+
|
|
117
|
+
2. **Sitemap registrado no GSC?**
|
|
118
|
+
- Cliente confirma no Search Console → Sitemaps?
|
|
119
|
+
- Status: Sucesso, sem erros?
|
|
120
|
+
|
|
121
|
+
3. **Internal linking funciona?**
|
|
122
|
+
- Cada página importante tem links pra ela de pelo menos 1 outra página?
|
|
123
|
+
- Páginas órfãs (sem links internos apontando) — Google pode nem descobrir
|
|
124
|
+
- Depth de cliques: nenhuma página importante a mais de 3-4 cliques da home
|
|
125
|
+
|
|
126
|
+
4. **Redirects funcionam?**
|
|
127
|
+
- Cadeia de redirects: A → B → C → D quebra crawl budget
|
|
128
|
+
- Idealmente: A → D direto (1 redirect, não 3)
|
|
129
|
+
- 301 vs 302 vs 307 vs 308: usar `301` pra mudanças permanentes
|
|
130
|
+
- Verificar com `curl -I` ou `curl -IL`
|
|
131
|
+
|
|
132
|
+
5. **Crawl budget otimizado?**
|
|
133
|
+
- URLs com parâmetros gerando infinitas variações?
|
|
134
|
+
- Pages de filtros gerando combinatorial explosion?
|
|
135
|
+
- URLs de busca interna sendo indexadas?
|
|
136
|
+
|
|
137
|
+
6. **Paginação correta?**
|
|
138
|
+
- `rel="next"` e `rel="prev"` foram depreciados pelo Google em 2019
|
|
139
|
+
- Páginas paginadas (2, 3, 4) devem ter canonical próprio (não apontar pra página 1)
|
|
140
|
+
- Cada página com title diferenciado
|
|
141
|
+
|
|
142
|
+
#### CAMADA 3 — RENDERABILITY (CRÍTICO PRA SITES JS)
|
|
143
|
+
|
|
144
|
+
**Pergunta:** o Googlebot consegue VER o conteúdo da página?
|
|
145
|
+
|
|
146
|
+
**Checks pra site WordPress + Elementor (server-rendered):**
|
|
147
|
+
|
|
148
|
+
1. **View source mostra conteúdo?**
|
|
149
|
+
- `curl https://dominio.com.br/pagina | grep "[texto chave]"`
|
|
150
|
+
- Se conteúdo aparece no HTML cru → ok
|
|
151
|
+
- Se HTML cru mostra `<div id="root"></div>` vazio → problema!
|
|
152
|
+
|
|
153
|
+
**Checks pra site React/Vue/Next/Angular (potencialmente client-rendered):**
|
|
154
|
+
|
|
155
|
+
1. **Modo de renderização identificado:**
|
|
156
|
+
- **CSR (Client-Side Rendering):** HTML cru vazio, JS popula. **PROBLEMA SEO crítico em sites Vue/React puro sem SSR.**
|
|
157
|
+
- **SSR (Server-Side Rendering):** servidor renderiza, manda HTML completo. **OK pra SEO.**
|
|
158
|
+
- **SSG (Static Site Generation):** páginas pré-buildadas em HTML. **Melhor cenário SEO.**
|
|
159
|
+
- **ISR (Incremental Static Regeneration, Next.js):** SSG + revalidação. **OK pra SEO.**
|
|
160
|
+
- **Dynamic Rendering:** servidor detecta Googlebot, manda HTML pré-renderizado; usuário pega CSR. **Funcional mas desencorajado em 2026.**
|
|
161
|
+
|
|
162
|
+
2. **Mobile-first rendering:**
|
|
163
|
+
- Google avalia mobile há anos
|
|
164
|
+
- Site renderiza ok no mobile?
|
|
165
|
+
- Conteúdo visível sem scroll horizontal?
|
|
166
|
+
- JavaScript executa em mobile dentro do limite de tempo do Googlebot?
|
|
167
|
+
|
|
168
|
+
3. **Lazy loading de conteúdo crítico:**
|
|
169
|
+
- Texto importante NÃO deve ser lazy-loaded
|
|
170
|
+
- Imagens above-the-fold NÃO devem ter `loading="lazy"`
|
|
171
|
+
- Conteúdo dependente de scroll/interação não é indexável
|
|
172
|
+
|
|
173
|
+
4. **Tools de validação:**
|
|
174
|
+
- **Google Search Console → Inspect URL** — mostra HTML renderizado pelo Googlebot
|
|
175
|
+
- **Mobile-Friendly Test** — confirma renderização mobile
|
|
176
|
+
- **Rich Results Test** — confirma schema e renderização
|
|
177
|
+
- **Manual:** `curl -A "Googlebot/2.1" https://dominio.com.br` vs `curl https://dominio.com.br` — comparar
|
|
178
|
+
|
|
179
|
+
5. **Frameworks específicos:**
|
|
180
|
+
|
|
181
|
+
**Next.js:**
|
|
182
|
+
- Usa SSR/SSG por default (App Router). Verifica se páginas estão usando `'use server'` corretamente
|
|
183
|
+
- Páginas marcadas `'use client'` precisam ter SSR do shell
|
|
184
|
+
- Metadata API (Next 13+) gera meta tags server-side
|
|
185
|
+
|
|
186
|
+
**Vue.js (puro):**
|
|
187
|
+
- SPA sem SSR é problema SEO. Recomendar Nuxt.js
|
|
188
|
+
- Se Nuxt: confirmar modo SSR/SSG ativado em `nuxt.config.js`
|
|
189
|
+
|
|
190
|
+
**React (puro):**
|
|
191
|
+
- SPA sem framework SSR é problema. Recomendar Next.js, Remix ou Gatsby
|
|
192
|
+
- Create React App (CRA) puro = ruim pra SEO
|
|
193
|
+
|
|
194
|
+
**Angular:**
|
|
195
|
+
- SPA sem SSR é problema. Recomendar Angular Universal
|
|
196
|
+
|
|
197
|
+
**Svelte:**
|
|
198
|
+
- SPA puro = ruim. Recomendar SvelteKit (SSR/SSG)
|
|
199
|
+
|
|
200
|
+
#### CAMADA 4 — INDEXABILITY
|
|
201
|
+
|
|
202
|
+
**Pergunta:** o Google quer indexar essas páginas?
|
|
203
|
+
|
|
204
|
+
**Checks:**
|
|
205
|
+
|
|
206
|
+
1. **`noindex` em meta robots ou x-robots-tag:**
|
|
207
|
+
- `<meta name="robots" content="noindex, follow">` impede indexação
|
|
208
|
+
- `x-robots-tag: noindex` no header HTTP idem
|
|
209
|
+
- Cuidado: WordPress tem opção "Discourage search engines" que adiciona noindex em TUDO. Erro frequente em sites migrados de staging.
|
|
210
|
+
|
|
211
|
+
2. **Canonical correto:**
|
|
212
|
+
- `<link rel="canonical" href="...">` em toda página
|
|
213
|
+
- Aponta pra si mesma (versão preferida) OU pra página master
|
|
214
|
+
- Erro grave: canonical apontando pra página diferente da que se quer indexar
|
|
215
|
+
- Erro: canonical apontando pra HTTP quando site é HTTPS
|
|
216
|
+
- Erro: canonical relativo (`/pagina`) em vez de absoluto (`https://...`)
|
|
217
|
+
- Páginas paginadas: canonical pra si mesma, não pra página 1
|
|
218
|
+
|
|
219
|
+
3. **Duplicate content:**
|
|
220
|
+
- Versões com/sem www, http/https, trailing slash, parâmetros
|
|
221
|
+
- Cada variação deveria redirecionar pra canonical
|
|
222
|
+
- Conteúdo igual em URLs diferentes = canonical apontando pra master
|
|
223
|
+
|
|
224
|
+
4. **Hreflang (sites multi-idioma):**
|
|
225
|
+
- Tag presente em todas as variações de idioma
|
|
226
|
+
- Auto-referência (cada versão lista a si própria)
|
|
227
|
+
- Reciprocidade (versão PT aponta pra EN e vice-versa)
|
|
228
|
+
- Códigos corretos: `pt-BR`, `en-US`, `es-ES`
|
|
229
|
+
- x-default pra versão padrão
|
|
230
|
+
|
|
231
|
+
5. **Qualidade percebida pelo Google:**
|
|
232
|
+
- Conteúdo thin (< 300 palavras em página de serviço)
|
|
233
|
+
- Conteúdo duplicado de outro site
|
|
234
|
+
- Páginas geradas automaticamente sem valor
|
|
235
|
+
- Páginas com 1 linha de conteúdo + 1000 anúncios
|
|
236
|
+
|
|
237
|
+
#### CAMADA 5 — RANKABILITY
|
|
238
|
+
|
|
239
|
+
**Pergunta:** se indexado, vai rankear?
|
|
240
|
+
|
|
241
|
+
Essa camada cruza com Skills 7, 8, 10:
|
|
242
|
+
|
|
243
|
+
- Conteúdo cobre intenção da busca?
|
|
244
|
+
- Site tem autoridade temática?
|
|
245
|
+
- Concorrentes dominam? Como?
|
|
246
|
+
- Sinais de E-E-A-T presentes?
|
|
247
|
+
|
|
248
|
+
Skill 13 não aprofunda camada 5 — delega pra skills de conteúdo/estratégia.
|
|
249
|
+
|
|
250
|
+
### Etapa 3 — Diagnóstico do Google Search Console
|
|
251
|
+
|
|
252
|
+
Cliente tem GSC? Skill interpreta os relatórios principais:
|
|
253
|
+
|
|
254
|
+
#### Página "Indexação de páginas" (Coverage)
|
|
255
|
+
|
|
256
|
+
**Páginas indexadas:**
|
|
257
|
+
- Quantidade
|
|
258
|
+
- Cresceu ou caiu nos últimos 30 dias?
|
|
259
|
+
|
|
260
|
+
**Páginas NÃO indexadas — interpretar cada motivo:**
|
|
261
|
+
|
|
262
|
+
| Motivo no GSC | Significado | Ação |
|
|
263
|
+
|---|---|---|
|
|
264
|
+
| **Crawled - currently not indexed** | Google viu mas não quis indexar | Melhorar qualidade do conteúdo, internal linking, autoridade do site |
|
|
265
|
+
| **Discovered - currently not indexed** | Google descobriu URL mas ainda não rastreou | Aguardar (crawl budget) ou submeter manualmente via Inspect URL |
|
|
266
|
+
| **Excluded by 'noindex' tag** | Página tem noindex (intencional ou bug) | Verificar se noindex é intencional; se não, remover |
|
|
267
|
+
| **Soft 404** | Página retorna 200 mas Google detectou que é página de erro | Corrigir conteúdo ou retornar 404 real |
|
|
268
|
+
| **Not found (404)** | Página retorna 404 | Restaurar página se importante, ou criar 301 pra alternativa |
|
|
269
|
+
| **Page with redirect** | URL redireciona pra outra | Ok se intencional; URL final precisa estar indexada |
|
|
270
|
+
| **Blocked by robots.txt** | robots.txt bloqueia | Verificar se bloqueio é intencional |
|
|
271
|
+
| **Alternate page with proper canonical tag** | URL tem canonical apontando pra outra | Comportamento correto |
|
|
272
|
+
| **Duplicate without user-selected canonical** | Google escolheu canonical sozinho | Definir canonical explícito |
|
|
273
|
+
| **Duplicate, Google chose different canonical than user** | Google ignorou seu canonical | Investigar por que Google preferiu outra |
|
|
274
|
+
| **URL is not on Google** (status genérico) | URL não está indexada | Investigar motivo específico |
|
|
275
|
+
|
|
276
|
+
#### Página "Experiência" (Core Web Vitals)
|
|
277
|
+
|
|
278
|
+
Delega pra Skill 6 (`core-web-vitals-fixer`).
|
|
279
|
+
|
|
280
|
+
#### Página "Aprimoramentos" (Enhancements)
|
|
281
|
+
|
|
282
|
+
- Erros de schema (delega pra Skill 2 — `schema-jsonld-builder`)
|
|
283
|
+
- Mobile usability (verificar viewport, tap targets, font size)
|
|
284
|
+
- Sitemap (verificar status: success / errors / warnings)
|
|
285
|
+
|
|
286
|
+
#### Página "Performance" (Search Analytics)
|
|
287
|
+
|
|
288
|
+
- Queries onde o site aparece
|
|
289
|
+
- Pages que recebem cliques
|
|
290
|
+
- Países/dispositivos
|
|
291
|
+
- Comparativo com período anterior
|
|
292
|
+
|
|
293
|
+
### Etapa 4 — Casos específicos comuns
|
|
294
|
+
|
|
295
|
+
#### Caso 1: Site não está sendo indexado
|
|
296
|
+
|
|
297
|
+
**Diagnóstico em ordem:**
|
|
298
|
+
|
|
299
|
+
1. `site:dominio.com.br` no Google → quantos resultados?
|
|
300
|
+
- 0 resultados → site totalmente fora do índice
|
|
301
|
+
- Poucos resultados → indexação parcial
|
|
302
|
+
- Muitos resultados → indexação ok, problema é ranking
|
|
303
|
+
|
|
304
|
+
2. `https://dominio.com.br/robots.txt` → bloqueio?
|
|
305
|
+
|
|
306
|
+
3. `curl -I https://dominio.com.br` → status 200? HTTPS ok?
|
|
307
|
+
|
|
308
|
+
4. View source da home → `<meta name="robots" content="noindex">`?
|
|
309
|
+
|
|
310
|
+
5. Search Console → Inspect URL → status?
|
|
311
|
+
|
|
312
|
+
6. Sitemap submetido? Status no GSC?
|
|
313
|
+
|
|
314
|
+
**Soluções comuns:**
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
# Caso "Discourage search engines" ativado no WordPress
|
|
318
|
+
Settings → Reading → desmarcar "Discourage search engines from indexing this site"
|
|
319
|
+
+ remover meta noindex se estiver hardcoded no tema
|
|
320
|
+
|
|
321
|
+
# Caso robots.txt bloqueia tudo
|
|
322
|
+
User-agent: *
|
|
323
|
+
Allow: /
|
|
324
|
+
|
|
325
|
+
Sitemap: https://dominio.com.br/sitemap.xml
|
|
326
|
+
|
|
327
|
+
# Caso noindex em todas as páginas (header HTTP)
|
|
328
|
+
# Verificar no .htaccess ou nginx.conf se há:
|
|
329
|
+
# Header set X-Robots-Tag "noindex"
|
|
330
|
+
# REMOVER
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
#### Caso 2: Site React/Vue não rankeia
|
|
334
|
+
|
|
335
|
+
**Diagnóstico:**
|
|
336
|
+
|
|
337
|
+
1. `curl https://dominio.com.br` → HTML mostra conteúdo ou vazio?
|
|
338
|
+
- Vazio = problema crítico
|
|
339
|
+
- Tem conteúdo = ok
|
|
340
|
+
|
|
341
|
+
2. Search Console → Inspect URL → "View tested page" → "HTML" → Googlebot vê conteúdo?
|
|
342
|
+
|
|
343
|
+
3. Identificar framework e modo de renderização
|
|
344
|
+
|
|
345
|
+
**Soluções por framework:**
|
|
346
|
+
|
|
347
|
+
```javascript
|
|
348
|
+
// Next.js — garantir SSR/SSG em páginas críticas
|
|
349
|
+
// app/page.tsx (App Router) - SSR por default
|
|
350
|
+
export default async function Home() {
|
|
351
|
+
const data = await fetch('...', { cache: 'force-cache' });
|
|
352
|
+
return <div>{/* conteúdo */}</div>;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Pra SSG em rotas dinâmicas
|
|
356
|
+
export async function generateStaticParams() {
|
|
357
|
+
return [{ slug: 'pagina-1' }, { slug: 'pagina-2' }];
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// pages/[slug].tsx (Pages Router) - SSR
|
|
361
|
+
export async function getServerSideProps(context) {
|
|
362
|
+
// busca dados
|
|
363
|
+
return { props: { data } };
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Ou SSG
|
|
367
|
+
export async function getStaticProps() {
|
|
368
|
+
// busca dados em build time
|
|
369
|
+
return { props: { data } };
|
|
370
|
+
}
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
```javascript
|
|
374
|
+
// Vue/Nuxt — confirmar modo no nuxt.config.js
|
|
375
|
+
export default {
|
|
376
|
+
ssr: true, // SSR ativado
|
|
377
|
+
target: 'static', // ou 'server'
|
|
378
|
+
// ...
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
```javascript
|
|
383
|
+
// React puro sem framework SSR
|
|
384
|
+
// Recomendação: migrar pra Next.js ou Remix
|
|
385
|
+
// Solução alternativa: dynamic rendering via prerender.io ou rendertron
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
#### Caso 3: Migração de domínio
|
|
389
|
+
|
|
390
|
+
**Checklist obrigatório:**
|
|
391
|
+
|
|
392
|
+
```markdown
|
|
393
|
+
## Pré-migração (1-2 semanas antes)
|
|
394
|
+
- [ ] Backup completo do site antigo
|
|
395
|
+
- [ ] Lista exaustiva de todas as URLs do site antigo (Screaming Frog ou Sitebulb)
|
|
396
|
+
- [ ] Mapa de URL antiga → URL nova (redirect map)
|
|
397
|
+
- [ ] Validação do redirect map (todas as URLs antigas têm destino na nova)
|
|
398
|
+
- [ ] Site novo pronto, em staging, indexado como noindex
|
|
399
|
+
- [ ] Search Console configurado pro domínio novo
|
|
400
|
+
- [ ] Google Analytics configurado pro domínio novo
|
|
401
|
+
- [ ] Avisar GSC: Settings → Change of Address (preparar)
|
|
402
|
+
|
|
403
|
+
## Dia da migração
|
|
404
|
+
- [ ] Implementar 301 redirects (.htaccess, nginx.conf, ou middleware)
|
|
405
|
+
- [ ] Atualizar sitemap.xml no domínio novo
|
|
406
|
+
- [ ] Submeter sitemap no GSC do domínio novo
|
|
407
|
+
- [ ] Remover noindex do domínio novo
|
|
408
|
+
- [ ] Verificar redirects funcionando: curl -IL https://antigo.com.br
|
|
409
|
+
- [ ] Confirmar SSL no domínio novo
|
|
410
|
+
- [ ] Notificar parceiros (atualizar backlinks importantes)
|
|
411
|
+
|
|
412
|
+
## Pós-migração (primeiras 4 semanas)
|
|
413
|
+
- [ ] Monitorar GSC do domínio antigo (espera erros 404)
|
|
414
|
+
- [ ] Monitorar GSC do domínio novo (espera crescimento de indexação)
|
|
415
|
+
- [ ] Settings → Change of Address no GSC antigo, apontando pro novo
|
|
416
|
+
- [ ] Acompanhar ranking de keywords principais (queda esperada 10-30%)
|
|
417
|
+
- [ ] Verificar Analytics de tráfego (queda esperada 10-30%)
|
|
418
|
+
- [ ] Atualizar GBP com novo site (Skill 3)
|
|
419
|
+
- [ ] Atualizar citations principais com novo URL (Skill 11)
|
|
420
|
+
- [ ] Manter redirects 301 por no mínimo 6-12 meses
|
|
421
|
+
|
|
422
|
+
## Recuperação esperada
|
|
423
|
+
- Semana 1-2: queda de 20-40% de tráfego
|
|
424
|
+
- Semana 3-6: recuperação parcial
|
|
425
|
+
- Semana 7-12: ranking estabiliza
|
|
426
|
+
- Mês 4-6: alcança ou supera ranking pré-migração
|
|
427
|
+
|
|
428
|
+
## Bandeira vermelha (algo deu errado)
|
|
429
|
+
- Queda > 50% após semana 4
|
|
430
|
+
- Sumiu do índice
|
|
431
|
+
- Manual action no GSC
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
#### Caso 4: Mudança HTTP → HTTPS
|
|
435
|
+
|
|
436
|
+
```apache
|
|
437
|
+
# .htaccess (Apache)
|
|
438
|
+
RewriteEngine On
|
|
439
|
+
RewriteCond %{HTTPS} off
|
|
440
|
+
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
```nginx
|
|
444
|
+
# nginx
|
|
445
|
+
server {
|
|
446
|
+
listen 80;
|
|
447
|
+
server_name dominio.com.br www.dominio.com.br;
|
|
448
|
+
return 301 https://$server_name$request_uri;
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
Depois:
|
|
453
|
+
- Atualizar `sitemap.xml` com URLs HTTPS
|
|
454
|
+
- Verificar canonical aponta pra HTTPS
|
|
455
|
+
- HSTS header pra forçar HTTPS no navegador
|
|
456
|
+
- Submeter `https://dominio.com.br` como nova propriedade no GSC
|
|
457
|
+
|
|
458
|
+
#### Caso 5: www vs non-www
|
|
459
|
+
|
|
460
|
+
Escolher UMA versão como canônica. Redirecionar a outra com 301.
|
|
461
|
+
|
|
462
|
+
```apache
|
|
463
|
+
# Forçar www
|
|
464
|
+
RewriteEngine On
|
|
465
|
+
RewriteCond %{HTTP_HOST} ^dominio\.com\.br$
|
|
466
|
+
RewriteRule ^(.*)$ https://www.dominio.com.br/$1 [L,R=301]
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
```apache
|
|
470
|
+
# Forçar non-www (mais comum hoje)
|
|
471
|
+
RewriteEngine On
|
|
472
|
+
RewriteCond %{HTTP_HOST} ^www\.dominio\.com\.br$
|
|
473
|
+
RewriteRule ^(.*)$ https://dominio.com.br/$1 [L,R=301]
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
#### Caso 6: E-commerce — facetas e filtros
|
|
477
|
+
|
|
478
|
+
E-commerces geram explosão de URLs com filtros (`/categoria?cor=azul&tamanho=m&preco=100`). Solução padrão:
|
|
479
|
+
|
|
480
|
+
```html
|
|
481
|
+
<!-- URLs com facetas: canonical pra categoria mãe -->
|
|
482
|
+
<link rel="canonical" href="https://dominio.com.br/categoria">
|
|
483
|
+
|
|
484
|
+
<!-- OU noindex em variações de filtro -->
|
|
485
|
+
<meta name="robots" content="noindex, follow">
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**Páginas que devem indexar (canonical pra si):**
|
|
489
|
+
- Categorias principais
|
|
490
|
+
- Subcategorias importantes
|
|
491
|
+
- Combinações de filtro com volume de busca real (ex: "tênis nike masculino" pode merecer página própria)
|
|
492
|
+
|
|
493
|
+
**Páginas que NÃO devem indexar:**
|
|
494
|
+
- Filtros combinatórios sem busca
|
|
495
|
+
- URLs com parâmetro de ordenação (`?sort=price`)
|
|
496
|
+
- Carrinho, login, checkout
|
|
497
|
+
- Páginas de busca interna
|
|
498
|
+
|
|
499
|
+
#### Caso 7: Páginas órfãs
|
|
500
|
+
|
|
501
|
+
Página existe mas nenhuma outra linka pra ela = Google pode nem descobrir.
|
|
502
|
+
|
|
503
|
+
**Diagnóstico:** Screaming Frog → "Orphaned URLs" report.
|
|
504
|
+
|
|
505
|
+
**Solução:** adicionar página ao menu, breadcrumb, footer, ou linkar contextualmente de outras páginas.
|
|
506
|
+
|
|
507
|
+
#### Caso 8: Pagination
|
|
508
|
+
|
|
509
|
+
Páginas tipo `/blog?page=2`, `/blog?page=3`:
|
|
510
|
+
|
|
511
|
+
- **Não use** `rel="next"` e `rel="prev"` (depreciados pelo Google em 2019)
|
|
512
|
+
- Cada página tem canonical pra si mesma (não pra página 1)
|
|
513
|
+
- Cada página tem title único: "Blog - Página 2 | Marca"
|
|
514
|
+
- Considerar paginação por URL semântica: `/blog/page/2`
|
|
515
|
+
|
|
516
|
+
#### Caso 9: Internacionalização
|
|
517
|
+
|
|
518
|
+
Site PT + EN + ES. Estrutura recomendada (em ordem de preferência):
|
|
519
|
+
|
|
520
|
+
1. **Subdiretórios:** `dominio.com.br/pt`, `dominio.com.br/en` — mais simples, autoridade concentrada
|
|
521
|
+
2. **Subdomínios:** `pt.dominio.com`, `en.dominio.com` — mais separação, autoridade dividida
|
|
522
|
+
3. **ccTLDs:** `dominio.com.br`, `dominio.com.us` — máxima separação, autoridade totalmente separada
|
|
523
|
+
|
|
524
|
+
Hreflang em todas as versões:
|
|
525
|
+
|
|
526
|
+
```html
|
|
527
|
+
<link rel="alternate" hreflang="pt-BR" href="https://dominio.com.br/pt/">
|
|
528
|
+
<link rel="alternate" hreflang="en-US" href="https://dominio.com.br/en/">
|
|
529
|
+
<link rel="alternate" hreflang="es-ES" href="https://dominio.com.br/es/">
|
|
530
|
+
<link rel="alternate" hreflang="x-default" href="https://dominio.com.br/">
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
#### Caso 10: Crawl budget de site grande
|
|
534
|
+
|
|
535
|
+
Sites com 50k+ páginas têm limite de crawl. Sintomas:
|
|
536
|
+
- Páginas demoram pra aparecer no índice
|
|
537
|
+
- Mudanças demoram pra refletir
|
|
538
|
+
- Páginas antigas continuam indexadas mesmo após exclusão
|
|
539
|
+
|
|
540
|
+
**Soluções:**
|
|
541
|
+
- Bloquear via robots.txt URLs sem valor (filtros, parâmetros)
|
|
542
|
+
- Otimizar internal linking (priorizar páginas importantes)
|
|
543
|
+
- Submeter sitemap segmentado por prioridade
|
|
544
|
+
- 410 (não 404) em páginas removidas (sinaliza pro Google parar de tentar)
|
|
545
|
+
- Páginas com baixo valor: noindex + follow
|
|
546
|
+
|
|
547
|
+
## Catálogo de templates prontos
|
|
548
|
+
|
|
549
|
+
### robots.txt — padrão WordPress
|
|
550
|
+
|
|
551
|
+
```
|
|
552
|
+
User-agent: *
|
|
553
|
+
Allow: /
|
|
554
|
+
|
|
555
|
+
# Bloquear áreas administrativas
|
|
556
|
+
Disallow: /wp-admin/
|
|
557
|
+
Disallow: /wp-includes/
|
|
558
|
+
Disallow: /wp-login.php
|
|
559
|
+
Disallow: /xmlrpc.php
|
|
560
|
+
Disallow: /readme.html
|
|
561
|
+
Disallow: /license.txt
|
|
562
|
+
|
|
563
|
+
# Permitir admin-ajax (necessário pra plugins)
|
|
564
|
+
Allow: /wp-admin/admin-ajax.php
|
|
565
|
+
|
|
566
|
+
# Bloquear arquivos sensíveis
|
|
567
|
+
Disallow: /wp-content/uploads/wpforms/
|
|
568
|
+
Disallow: /?s=
|
|
569
|
+
Disallow: /search/
|
|
570
|
+
Disallow: /*?replytocom
|
|
571
|
+
|
|
572
|
+
# Permitir CSS, JS, imagens (CRÍTICO pro Googlebot renderizar)
|
|
573
|
+
Allow: /wp-content/uploads/
|
|
574
|
+
Allow: /wp-content/plugins/*.css
|
|
575
|
+
Allow: /wp-content/plugins/*.js
|
|
576
|
+
Allow: /wp-content/themes/*.css
|
|
577
|
+
Allow: /wp-content/themes/*.js
|
|
578
|
+
|
|
579
|
+
# Sitemap
|
|
580
|
+
Sitemap: https://dominio.com.br/sitemap.xml
|
|
581
|
+
Sitemap: https://dominio.com.br/sitemap-news.xml
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### robots.txt — padrão Next.js / SPA
|
|
585
|
+
|
|
586
|
+
```
|
|
587
|
+
User-agent: *
|
|
588
|
+
Allow: /
|
|
589
|
+
|
|
590
|
+
# Bloquear APIs e área administrativa
|
|
591
|
+
Disallow: /api/
|
|
592
|
+
Disallow: /admin/
|
|
593
|
+
Disallow: /_next/static/
|
|
594
|
+
|
|
595
|
+
# Permitir assets críticos
|
|
596
|
+
Allow: /_next/static/css/
|
|
597
|
+
Allow: /_next/static/chunks/
|
|
598
|
+
|
|
599
|
+
# Sitemap
|
|
600
|
+
Sitemap: https://dominio.com.br/sitemap.xml
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### sitemap.xml — estrutura básica
|
|
604
|
+
|
|
605
|
+
```xml
|
|
606
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
607
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
608
|
+
<url>
|
|
609
|
+
<loc>https://dominio.com.br/</loc>
|
|
610
|
+
<lastmod>2026-05-12</lastmod>
|
|
611
|
+
<changefreq>weekly</changefreq>
|
|
612
|
+
<priority>1.0</priority>
|
|
613
|
+
</url>
|
|
614
|
+
<url>
|
|
615
|
+
<loc>https://dominio.com.br/sobre</loc>
|
|
616
|
+
<lastmod>2026-04-15</lastmod>
|
|
617
|
+
<changefreq>monthly</changefreq>
|
|
618
|
+
<priority>0.8</priority>
|
|
619
|
+
</url>
|
|
620
|
+
<!-- mais URLs -->
|
|
621
|
+
</urlset>
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### sitemap-index.xml (sites grandes, > 50k URLs)
|
|
625
|
+
|
|
626
|
+
```xml
|
|
627
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
628
|
+
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
629
|
+
<sitemap>
|
|
630
|
+
<loc>https://dominio.com.br/sitemap-pages.xml</loc>
|
|
631
|
+
<lastmod>2026-05-12</lastmod>
|
|
632
|
+
</sitemap>
|
|
633
|
+
<sitemap>
|
|
634
|
+
<loc>https://dominio.com.br/sitemap-products.xml</loc>
|
|
635
|
+
<lastmod>2026-05-12</lastmod>
|
|
636
|
+
</sitemap>
|
|
637
|
+
<sitemap>
|
|
638
|
+
<loc>https://dominio.com.br/sitemap-posts.xml</loc>
|
|
639
|
+
<lastmod>2026-05-12</lastmod>
|
|
640
|
+
</sitemap>
|
|
641
|
+
</sitemapindex>
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
### .htaccess — boas práticas SEO
|
|
645
|
+
|
|
646
|
+
```apache
|
|
647
|
+
# Forçar HTTPS
|
|
648
|
+
RewriteEngine On
|
|
649
|
+
RewriteCond %{HTTPS} off
|
|
650
|
+
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
|
651
|
+
|
|
652
|
+
# Forçar non-www
|
|
653
|
+
RewriteCond %{HTTP_HOST} ^www\.dominio\.com\.br$
|
|
654
|
+
RewriteRule ^(.*)$ https://dominio.com.br/$1 [L,R=301]
|
|
655
|
+
|
|
656
|
+
# Remover trailing slash (ou manter, escolher um padrão)
|
|
657
|
+
RewriteCond %{REQUEST_FILENAME} !-d
|
|
658
|
+
RewriteRule ^(.+)/$ /$1 [R=301,L]
|
|
659
|
+
|
|
660
|
+
# Cache headers pra SEO + performance
|
|
661
|
+
<FilesMatch "\.(jpg|jpeg|png|gif|webp|svg|css|js|woff2|woff|ttf)$">
|
|
662
|
+
Header set Cache-Control "max-age=31536000, public"
|
|
663
|
+
</FilesMatch>
|
|
664
|
+
|
|
665
|
+
# Compressão Gzip
|
|
666
|
+
<IfModule mod_deflate.c>
|
|
667
|
+
AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/x-javascript
|
|
668
|
+
</IfModule>
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
### nginx.conf — boas práticas SEO
|
|
672
|
+
|
|
673
|
+
```nginx
|
|
674
|
+
server {
|
|
675
|
+
listen 443 ssl http2;
|
|
676
|
+
server_name dominio.com.br;
|
|
677
|
+
|
|
678
|
+
# SSL config
|
|
679
|
+
ssl_certificate /path/to/cert;
|
|
680
|
+
ssl_certificate_key /path/to/key;
|
|
681
|
+
|
|
682
|
+
# HSTS
|
|
683
|
+
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
|
684
|
+
|
|
685
|
+
# Compressão
|
|
686
|
+
gzip on;
|
|
687
|
+
gzip_vary on;
|
|
688
|
+
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
|
689
|
+
|
|
690
|
+
# Cache assets
|
|
691
|
+
location ~* \.(jpg|jpeg|png|gif|webp|svg|css|js|woff2)$ {
|
|
692
|
+
expires 1y;
|
|
693
|
+
add_header Cache-Control "public, immutable";
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
# Redirect HTTP -> HTTPS
|
|
698
|
+
server {
|
|
699
|
+
listen 80;
|
|
700
|
+
server_name dominio.com.br www.dominio.com.br;
|
|
701
|
+
return 301 https://dominio.com.br$request_uri;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
# Redirect www -> non-www
|
|
705
|
+
server {
|
|
706
|
+
listen 443 ssl http2;
|
|
707
|
+
server_name www.dominio.com.br;
|
|
708
|
+
return 301 https://dominio.com.br$request_uri;
|
|
709
|
+
}
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
## Estrutura obrigatória do entregável
|
|
713
|
+
|
|
714
|
+
```markdown
|
|
715
|
+
# 🔧 AUDITORIA SEO TÉCNICA — [SITE / SISTEMA]
|
|
716
|
+
|
|
717
|
+
## 📊 CONTEXTO
|
|
718
|
+
- URL: [...]
|
|
719
|
+
- Stack: [...]
|
|
720
|
+
- Acesso GSC: [sim/não]
|
|
721
|
+
- Acesso servidor: [sim/não]
|
|
722
|
+
- Sintoma principal: [...]
|
|
723
|
+
|
|
724
|
+
## 🎯 DIAGNÓSTICO EM 5 CAMADAS
|
|
725
|
+
|
|
726
|
+
### CAMADA 1 — ACESSIBILIDADE
|
|
727
|
+
- [check 1]: ✅ / ⚠️ / ❌
|
|
728
|
+
- [check 2]: [...]
|
|
729
|
+
[...]
|
|
730
|
+
|
|
731
|
+
### CAMADA 2 — CRAWLABILITY
|
|
732
|
+
[...]
|
|
733
|
+
|
|
734
|
+
### CAMADA 3 — RENDERABILITY
|
|
735
|
+
- Modo de renderização identificado: [CSR / SSR / SSG / ISR / Dynamic]
|
|
736
|
+
- Problemas: [...]
|
|
737
|
+
|
|
738
|
+
### CAMADA 4 — INDEXABILITY
|
|
739
|
+
[...]
|
|
740
|
+
|
|
741
|
+
### CAMADA 5 — RANKABILITY
|
|
742
|
+
[Delegação pra outras skills]
|
|
743
|
+
|
|
744
|
+
## 🔍 DIAGNÓSTICO DO SEARCH CONSOLE
|
|
745
|
+
|
|
746
|
+
[Interpretação de cada relatório relevante]
|
|
747
|
+
|
|
748
|
+
## 🚨 PROBLEMAS IDENTIFICADOS
|
|
749
|
+
|
|
750
|
+
### Problema #1: [Título]
|
|
751
|
+
**Camada:** [N]
|
|
752
|
+
**Severidade:** Crítica / Alta / Média / Baixa
|
|
753
|
+
**Diagnóstico:** [...]
|
|
754
|
+
**Causa raiz:** [...]
|
|
755
|
+
**Solução:**
|
|
756
|
+
|
|
757
|
+
```código pronto pra colar```
|
|
758
|
+
|
|
759
|
+
**Trade-off / risco:** [...]
|
|
760
|
+
**Tempo de impacto esperado:** [...]
|
|
761
|
+
|
|
762
|
+
[Repetir pra cada problema]
|
|
763
|
+
|
|
764
|
+
## 🛠️ PLANO DE CORREÇÃO PRIORIZADO
|
|
765
|
+
|
|
766
|
+
### FASE 1 — Críticos (resolver hoje)
|
|
767
|
+
1. [...]
|
|
768
|
+
|
|
769
|
+
### FASE 2 — Importantes (1-2 semanas)
|
|
770
|
+
2. [...]
|
|
771
|
+
|
|
772
|
+
### FASE 3 — Melhorias (1-3 meses)
|
|
773
|
+
3. [...]
|
|
774
|
+
|
|
775
|
+
## 📝 CÓDIGO PRONTO PRA COLAR
|
|
776
|
+
|
|
777
|
+
### robots.txt
|
|
778
|
+
[código]
|
|
779
|
+
|
|
780
|
+
### sitemap.xml (ou estrutura)
|
|
781
|
+
[código]
|
|
782
|
+
|
|
783
|
+
### .htaccess / nginx.conf
|
|
784
|
+
[código]
|
|
785
|
+
|
|
786
|
+
### Outros (next.config.js, etc.)
|
|
787
|
+
[código]
|
|
788
|
+
|
|
789
|
+
## ✅ CHECKLIST PÓS-IMPLEMENTAÇÃO
|
|
790
|
+
- [ ] Backup completo antes de qualquer mudança
|
|
791
|
+
- [ ] Testar em staging (se possível)
|
|
792
|
+
- [ ] Aplicar mudanças
|
|
793
|
+
- [ ] Validar via curl / GSC Inspect URL
|
|
794
|
+
- [ ] Submeter sitemap no GSC
|
|
795
|
+
- [ ] Solicitar reindexação manual de páginas críticas
|
|
796
|
+
- [ ] Monitorar GSC por 14-30 dias
|
|
797
|
+
|
|
798
|
+
## ⏰ TEMPO DE IMPACTO ESPERADO
|
|
799
|
+
|
|
800
|
+
- Mudanças em robots.txt / noindex: 1-7 dias
|
|
801
|
+
- Redirects: 1-30 dias pra Google reprocessar
|
|
802
|
+
- Sitemap atualizado: 7-30 dias
|
|
803
|
+
- Mudança de framework / arquitetura: 30-90 dias
|
|
804
|
+
- Migração de domínio: 60-180 dias
|
|
805
|
+
|
|
806
|
+
## 🔗 DELEGAÇÕES PRA OUTRAS SKILLS
|
|
807
|
+
|
|
808
|
+
- Performance específica → Skill 6 (`core-web-vitals-fixer`)
|
|
809
|
+
- Schema → Skill 2 (`schema-jsonld-builder`)
|
|
810
|
+
- Meta tags → Skill 5 (`meta-tags-optimizer`)
|
|
811
|
+
- Conteúdo / autoridade → Skills 7, 8
|
|
812
|
+
|
|
813
|
+
## ⚠️ ALERTAS
|
|
814
|
+
|
|
815
|
+
[Riscos específicos, mudanças que requerem cuidado especial]
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
## Erros comuns que esta skill EVITA
|
|
819
|
+
|
|
820
|
+
1. **Diagnosticar sem inspecionar.** Sempre executar curl, view source, GSC Inspect URL antes de prescrever.
|
|
821
|
+
|
|
822
|
+
2. **Pular camada de diagnóstico.** Acessibilidade → Crawlability → Renderability → Indexability → Rankability. Sempre em ordem.
|
|
823
|
+
|
|
824
|
+
3. **Ignorar Search Console.** Sem GSC, diagnóstico é parcial. Skill instrui configurar antes de aprofundar.
|
|
825
|
+
|
|
826
|
+
4. **Recomendar Dynamic Rendering pra novo projeto.** Google desencoraja desde 2022. Recomendar SSR/SSG.
|
|
827
|
+
|
|
828
|
+
5. **Assumir que site WordPress não tem problema técnico.** WP + Elementor pode ter noindex acidental, robots.txt mal configurado, plugin gerando duplicate content.
|
|
829
|
+
|
|
830
|
+
6. **Recomendar `rel="next/prev"` em paginação.** Depreciado em 2019. Usar canonical pra si mesma + title diferenciado.
|
|
831
|
+
|
|
832
|
+
7. **Esquecer mobile-first.** Google indexa versão mobile. Site bem no desktop e mal no mobile = problema crítico.
|
|
833
|
+
|
|
834
|
+
8. **Mudar redirects sem mapa.** Migração sem URL mapping destrói ranking. Sempre redirect map exaustivo antes.
|
|
835
|
+
|
|
836
|
+
9. **Confundir 301 com 302.** 301 = permanente, passa autoridade. 302 = temporário, não passa autoridade plenamente. Pra mudanças permanentes, sempre 301.
|
|
837
|
+
|
|
838
|
+
10. **Não distinguir Soft 404 de 404 real.** Página de erro com status 200 confunde Google. Retornar 404 real.
|
|
839
|
+
|
|
840
|
+
11. **Ignorar cadeia de redirects.** A → B → C → D = perda de crawl budget e autoridade. Encurtar pra A → D.
|
|
841
|
+
|
|
842
|
+
12. **Recomendar fix técnico sem mencionar tempo de impacto.** Cliente espera resultado em 24h, vê em 30 dias = expectativa quebrada. Skill sempre menciona prazo realista.
|
|
843
|
+
|
|
844
|
+
13. **Apagar páginas removidas com 404.** Pra páginas removidas permanentemente, usar 410 (Gone) — Google retira do índice mais rápido.
|
|
845
|
+
|
|
846
|
+
14. **Recomendar disavow leviamente.** Disavow é arma pesada. Só usar após auditoria de backlinks tóxicos e análise de manual action.
|
|
847
|
+
|
|
848
|
+
15. **Esquecer de validar mudança.** Aplicou fix? Confirmar via curl / GSC / re-crawl. Sem validação, fica no escuro.
|
|
849
|
+
|
|
850
|
+
## Edge cases
|
|
851
|
+
|
|
852
|
+
**Site Shopify com problemas técnicos:**
|
|
853
|
+
Shopify tem limitações (não dá pra editar robots.txt antes de Shopify 2.0, themes têm schema próprio). Diagnóstico se adapta. Sometimes recomendar mudar de tema.
|
|
854
|
+
|
|
855
|
+
**Site Wix com problemas:**
|
|
856
|
+
Wix gerencia muita coisa automaticamente. Cliente tem controle limitado. Algumas correções exigem upgrade de plano ou migração de plataforma.
|
|
857
|
+
|
|
858
|
+
**Sistema SaaS (LAXNEST, CRONOS, ZARK CRM tipo):**
|
|
859
|
+
SaaS tem páginas atrás de auth (não indexáveis) + páginas públicas (landing, blog). Skill foca em otimizar páginas públicas + garantir que privadas não vazam.
|
|
860
|
+
|
|
861
|
+
**Sites multi-marca compartilhando código (white label):**
|
|
862
|
+
Cuidado com duplicate content entre marcas. Cada marca precisa de conteúdo único o suficiente. Canonical não resolve sozinho.
|
|
863
|
+
|
|
864
|
+
**E-commerce com 100k+ produtos:**
|
|
865
|
+
Crawl budget é gargalo. Estratégia: noindex em variações de baixo valor, sitemap segmentado, internal linking otimizado.
|
|
866
|
+
|
|
867
|
+
**Cliente sem dev:**
|
|
868
|
+
Mudanças em servidor exigem dev ou suporte da hospedagem. Skill instrui o que pedir ao suporte (ex: "ative HTTP/2 no plano X"). Algumas coisas só funcionam com mudança de plano.
|
|
869
|
+
|
|
870
|
+
**Penalidade manual no Search Console:**
|
|
871
|
+
Caso grave. Skill entrega plano de recuperação: identificar causa, corrigir, request reconsideration. Pode levar 30-90 dias.
|
|
872
|
+
|
|
873
|
+
**Sistema custom com SEO ruim por design:**
|
|
874
|
+
Refactor estrutural. Skill aponta mudanças em código (rota, render mode, meta tags) + estima esforço de dev.
|
|
875
|
+
|
|
876
|
+
## Conexão com outras skills ZARK
|
|
877
|
+
|
|
878
|
+
- **`seo-local-auditor`** (1): diagnóstico holístico → quando achado técnico → aciona Skill 13
|
|
879
|
+
- **`schema-jsonld-builder`** (2): schema é parte da indexability — Skill 13 detecta gap, Skill 2 implementa
|
|
880
|
+
- **`gbp-optimizer`** (3): após migração de domínio, atualizar GBP — delegação
|
|
881
|
+
- **`service-area-page-builder`** (4): páginas criadas precisam estar indexáveis — Skill 13 valida
|
|
882
|
+
- **`meta-tags-optimizer`** (5): meta tags são parte de indexability — Skill 13 detecta noindex acidental
|
|
883
|
+
- **`core-web-vitals-fixer`** (6): performance é métrica técnica — Skill 6 cuida, Skill 13 cuida do resto
|
|
884
|
+
- **`seo-content-writer-br`** (8): conteúdo precisa estar em página indexável — fundação da Skill 13
|
|
885
|
+
- **`seo-orchestrator`**: pode acionar Skill 13 quando diagnóstico indica problema técnico profundo
|
|
886
|
+
|
|
887
|
+
## Exemplo de invocação esperada
|
|
888
|
+
|
|
889
|
+
**Usuário:** "Meu site React não tá rankeando, nenhuma página aparece no Google"
|
|
890
|
+
|
|
891
|
+
**Resposta esperada:** acionar essa skill, pedir URL, executar `curl` pra ver HTML cru vs renderizado, identificar CSR sem SSR, recomendar Next.js migration ou prerendering, fornecer código de exemplo.
|
|
892
|
+
|
|
893
|
+
**Usuário:** "Quero migrar dominioantigo.com.br pra dominionovo.com.br sem perder ranking"
|
|
894
|
+
|
|
895
|
+
**Resposta esperada:** acionar essa skill, fornecer checklist completo de migração (pré, dia, pós), incluindo mapa de URLs, 301 redirects, GSC Change of Address, monitoramento.
|
|
896
|
+
|
|
897
|
+
**Usuário:** "Search Console mostra 'Crawled - currently not indexed' em 500 páginas"
|
|
898
|
+
|
|
899
|
+
**Resposta esperada:** acionar essa skill, explicar o que significa, perguntar exemplos de URLs afetadas, diagnosticar (qualidade? thin content? duplicate?), prescrever ação por categoria.
|
|
900
|
+
|
|
901
|
+
**Usuário:** "Site WordPress não tá indexando, já fiz tudo certo"
|
|
902
|
+
|
|
903
|
+
**Resposta esperada:** acionar essa skill, fazer diagnóstico em 5 camadas, verificar "Discourage search engines" do WP, robots.txt, noindex meta, sitemap, canonical, status 200, etc. Frequentemente é uma das checkboxes do WordPress.
|
|
904
|
+
|
|
905
|
+
**Usuário:** "Tenho 50.000 URLs no e-commerce, só 5.000 indexadas"
|
|
906
|
+
|
|
907
|
+
**Resposta esperada:** acionar essa skill, identificar problema de crawl budget, prescrever estratégia (noindex em filtros, sitemap segmentado, internal linking, 410 em produtos descontinuados).
|