marketing: migra superfície SEO para OpenSEO (motor único)
As skills de SEO assentavam em quatro dependências, nenhuma operacional: SEO Tools API (localhost:3000, pasta inexistente em disco), Ahrefs MCP (nunca esteve em config), gsc e lighthouse (em disabledServers). Os seis passos da /seo-audit e o workflow inteiro da /seo-report apontavam para tooling morto — não eram executáveis. - seo-audit v3.0: ordem por custo (grátis → lote pago → unitário pago), gate de mercado (PT = 2620/pt) e gate de maxPages - seo-report v3.0: cobertura de crawl obrigatória no entregável - ferramentas-api.md: inventário das 24 ferramentas OpenSEO + tabela de migração endpoint a endpoint - implementacao-tecnica.md: striking distance, desperdício e filtro de ruído do GSC em código - seo-specialist v3.0: primary_mcps [openseo], bloco de MCPs desligados, FID → INP nos Core Web Vitals maxPages tem default 50: descomplicar.pt auditado com o default deu 25 URLs e 92 issues sem críticos; com maxPages 600 deu 1337 issues e 9 críticos. Documentado como gate — a fase Search Console dimensiona o crawl. Limitações declaradas nas skills: get_audit_issues devolve contagens sem URLs pela bridge MCP (structuredContent.issues não é entregue) e o whoami não expõe saldo de créditos em self-hosted.
This commit is contained in:
+141
-135
@@ -1,202 +1,208 @@
|
||||
---
|
||||
name: seo-audit
|
||||
description: Auditoria SEO completa com recomendacoes de optimizacao. Analisa SEO tecnico, conteudo, backlinks e desempenho.
|
||||
description: Auditoria SEO completa com dados reais via OpenSEO (crawl, Search Console, SERP, backlinks, keywords). Analisa SEO técnico, conteúdo, autoridade e desempenho, e prioriza por retorno. Usar quando "auditoria SEO", "audit", "analisar site", "Core Web Vitals", "Search Console", "striking distance", "porque não tenho tráfego".
|
||||
---
|
||||
|
||||
# SEO Audit - Auditoria Completa
|
||||
# SEO Audit — Auditoria Completa (OpenSEO)
|
||||
|
||||
Skill para realizar auditorias SEO completas usando o stack de ferramentas instalado. Best practices 2026.
|
||||
Auditoria SEO com dados reais. **Motor único: OpenSEO** (`seo.descomplicar.pt`), que substituiu o stack antigo (SEO Tools API + Ahrefs + GSC MCP + Lighthouse MCP) — ver `references/ferramentas-api.md` para a tabela de migração.
|
||||
|
||||
---
|
||||
|
||||
## Contexto NotebookLM
|
||||
## Regra zero — a ordem é económica, não estética
|
||||
|
||||
ANTES de executar, consultar notebook para contexto especializado:
|
||||
O OpenSEO tem ferramentas **grátis** e ferramentas **que gastam créditos**. Executar pela ordem errada gasta dinheiro a produzir conclusões que as ferramentas grátis já davam.
|
||||
|
||||
| Notebook | ID | Consultar quando |
|
||||
|----------|-----|-----------------|
|
||||
| Marketing Digital PT | `4c595973` | Sempre |
|
||||
| Fase | Ferramentas | Custo | Porquê nesta ordem |
|
||||
|---|---|---|---|
|
||||
| 1 | `get_search_console_performance`, `inspect_urls` | **grátis** | Dados de primeira mão. Diz o que já posiciona e quais páginas importam |
|
||||
| 2 | `run_site_audit`, `get_audit_issues`, `get_audit_pages` | **grátis** | Estado técnico. O dimensionamento do crawl depende da fase 1 |
|
||||
| 3 | `get_keyword_metrics` | pago (lote) | Hidrata até 700 keywords conhecidas de uma vez — a melhor relação valor/crédito |
|
||||
| 4 | `get_ranked_keywords`, `get_domain_overview`, `get_backlinks_overview` | pago | Contexto competitivo |
|
||||
| 5 | `get_serp_results`, `find_serp_competitors` | pago (~30-60/keyword) | Só nas keywords que sobreviveram à filtragem |
|
||||
|
||||
```
|
||||
mcp__notebooklm__notebook_query({
|
||||
notebook_id: "4c595973-ba10-420a-a3bf-e4389e424ad3",
|
||||
query: "<adaptar ao contexto — ex: auditoria SEO tecnico, Core Web Vitals, backlinks, E-E-A-T>"
|
||||
})
|
||||
```
|
||||
|
||||
**Procedimento relacionado:** `PROC-DMARC-Email-Entregabilidade.md` -- consultar quando a auditoria envolve email deliverability.
|
||||
**Nunca começar pela fase 3 ou acima.** As fases 1-2 resolvem a maioria das auditorias sem gastar um crédito.
|
||||
|
||||
---
|
||||
|
||||
## Quando Usar
|
||||
## Pré-voo obrigatório (3 verificações, 30 segundos)
|
||||
|
||||
- Auditar um site completo (tecnico + conteudo + performance)
|
||||
- Verificar Core Web Vitals e ranking factors
|
||||
- Analisar backlinks e autoridade de dominio
|
||||
- Obter dados reais do Google Search Console
|
||||
- Identificar oportunidades de optimizacao
|
||||
- Comparar com concorrencia
|
||||
```
|
||||
1. openseo → whoami → confirma ligação, org, modo
|
||||
2. openseo → list_projects → obtém projectId E o mercado do projecto
|
||||
3. confirmar mercado → PT = locationCode 2620, languageCode "pt"
|
||||
```
|
||||
|
||||
**GATE — mercado.** Se o projecto estiver em `2840/en` (EUA/inglês, que é o default) e o cliente for português, **todas** as chamadas pagas devolvem dados do mercado errado. Ou se corrige o mercado do projecto, ou se passa `locationCode`/`languageCode` explicitamente em **cada** chamada. Um esquecimento = créditos gastos em lixo.
|
||||
|
||||
> `locationCode: 2620` = Portugal — confirmado empiricamente (SERP devolve domínios `.pt`). Não inventar códigos: se houver dúvida, correr uma query de teste e validar pelos resultados.
|
||||
|
||||
---
|
||||
|
||||
## Google Updates 2026
|
||||
## Fase 1 — Search Console primeiro (grátis, é o mapa)
|
||||
|
||||
### Core Algorithm Updates
|
||||
```
|
||||
openseo → get_search_console_performance
|
||||
dimensions: ["query"] dateRange: "last_3_months" rowLimit: 1000
|
||||
openseo → get_search_console_performance
|
||||
dimensions: ["page"] dateRange: "last_3_months" rowLimit: 1000
|
||||
```
|
||||
|
||||
| Update | Data | Impacto |
|
||||
|--------|------|---------|
|
||||
| **Helpful Content Q1** | Jan 2026 | Penaliza conteudo AI de baixa qualidade |
|
||||
| **Core Web Vitals 3.0** | Mar 2026 | INP substitui FID, thresholds mais rigorosos |
|
||||
| **E-E-A-T Focus** | Q1-Q2 | Experiencia pratica obrigatoria |
|
||||
| **Mobile-First Index** | Universal | 100% dos sites |
|
||||
Paginar com `startRow` enquanto o cabeçalho disser `more available`.
|
||||
|
||||
### Novos Ranking Factors 2026
|
||||
### As três armadilhas do GSC
|
||||
|
||||
1. **INP (Interaction to Next Paint)** -- Bom: < 200ms | Medio: 200-500ms | Mau: > 500ms
|
||||
2. **E-E-A-T** -- Autor identificado com bio, credenciais verificaveis, experiencia real
|
||||
3. **Page Experience Signals** -- HTTPS obrigatorio, intrusive interstitials penalizados
|
||||
**1. Vista por query ≠ vista por página.** O GSC anonimiza queries raras, por isso os totais por query são sempre **muito menores** que os totais por página. A vista por **página** é a real; usar essa para números globais.
|
||||
|
||||
**2. O GSC não filtra por posição.** `striking distance` tem de ser filtrado do lado do cliente, depois de puxar as linhas.
|
||||
|
||||
**3. Há lixo nas queries.** Colagens de relatórios do Google Ads, operadores `site:`, strings com mojibake. Filtrar antes de contar, ou as métricas mentem.
|
||||
|
||||
```python
|
||||
def is_noise(k):
|
||||
return ('ativado' in k and 'correspond' in k) or k.startswith('-site:') \
|
||||
or k.startswith('=') or len(k) > 90 or '0,00' in k
|
||||
```
|
||||
|
||||
### O que extrair
|
||||
|
||||
| Métrica | Cálculo | Leitura |
|
||||
|---|---|---|
|
||||
| CTR global | cliques ÷ impressões (vista por página) | < 1% = problema de captação, não de ranking |
|
||||
| Distribuição por posição | buckets 1-3 / 4-10 / 11-20 / 21-50 / 51+ | Impressões concentradas em 21+ = visibilidade inútil |
|
||||
| Branded vs não-branded | queries com o nome da marca vs resto | Se só a marca converte, o SEO não está a trabalhar |
|
||||
| **Striking distance** | pos 4-20 **e** impressões ≥ 25 | **É aqui que está o retorno** |
|
||||
| Desperdício | pos > 40 **e** impressões ≥ 300 | Páginas com procura real enterradas |
|
||||
|
||||
### O sinal mais accionável de todos
|
||||
|
||||
**Posição 4-10 com CTR perto de 0%.** Não é problema de ranking — o site está na primeira página. É o **título e a meta description** a não convencerem. Cruzar esta lista com os issues `missing-meta-description` e `title-too-long` da fase 2: a intersecção é a lista de trabalho, por ordem.
|
||||
|
||||
---
|
||||
|
||||
## Workflow de Auditoria Completa
|
||||
|
||||
### Passo 1: Analise Tecnica Basica (3 min)
|
||||
## Fase 2 — Auditoria técnica (grátis)
|
||||
|
||||
```
|
||||
1. SEO Tools API -> /seo-audit -> Meta tags, headings, estrutura HTML
|
||||
2. SEO Tools API -> /page-speed-analyzer -> Velocidade, sugestoes
|
||||
3. Lighthouse -> run_audit -> Performance, SEO, Accessibility scores
|
||||
openseo → run_site_audit
|
||||
url: "<url>" maxPages: <N> runLighthouse: true
|
||||
openseo → get_audit_status (poll até "completed")
|
||||
openseo → get_audit_issues (severity: critical → warning → info)
|
||||
```
|
||||
|
||||
**Checklist Critico:**
|
||||
- [ ] Meta title (50-60 chars)
|
||||
- [ ] Meta description (150-160 chars)
|
||||
- [ ] H1 unico com keyword
|
||||
- [ ] Canonical URL definido
|
||||
- [ ] Robots.txt acessivel
|
||||
- [ ] Sitemap.xml presente
|
||||
- [ ] HTTPS activo
|
||||
- [ ] Mobile-friendly
|
||||
### GATE — `maxPages` (o erro que cega a auditoria)
|
||||
|
||||
### Passo 2: Core Web Vitals (2 min)
|
||||
**`maxPages` tem default 50.** Um site de 600 páginas auditado com o default devolve um relatório limpo e falso: descreve 8% do site e omite exactamente o hub de conteúdo que gera o tráfego.
|
||||
|
||||
**Regra:** `maxPages` ≥ número de páginas com impressões no GSC (fase 1), com folga de ~25%. Por isso é que a fase 1 vem primeiro — é ela que dimensiona o crawl.
|
||||
|
||||
> Caso real (descomplicar.pt, 07-2026): auditoria com default 50 → 25 URLs únicos, 92 issues, **zero críticos**, nenhuma das 119 páginas `/guia-*`. Relançada com `maxPages: 600` → **1337 issues, 9 críticos**. O relatório "limpo" descrevia 4% do site.
|
||||
|
||||
### Prioridade dos issues
|
||||
|
||||
| Severidade | Tipos | Acção |
|
||||
|---|---|---|
|
||||
| **critical** | `broken-internal-link`, `blocked-page`, `server-error`, `broken-page` | Corrigir já — sangram autoridade e crawl budget |
|
||||
| **warning** | `missing-h1`, `missing-meta-description`, `duplicate-content`, `multiple-h1`, `duplicate-title` | Priorizar pelas páginas com impressões (fase 1) |
|
||||
| **info** | `title-too-long`, `noindex-page`, `slow-response`, `heading-order-skip` | Lote; só vale a pena onde há procura |
|
||||
|
||||
**Nunca tratar a lista de issues por ordem de contagem.** 300 metas em falta em páginas sem impressões valem menos que 6 em páginas na posição 8. A fase 1 é que ordena a fase 2.
|
||||
|
||||
### Limitação conhecida — issues sem URL
|
||||
|
||||
`get_audit_issues` e `get_audit_pages` devolvem **apenas contagens agregadas** através da bridge MCP. As linhas por URL vivem em `structuredContent.issues`, que a bridge não entrega; `get_audit_pages` trunca a listagem em ~25 linhas independentemente do `limit`.
|
||||
|
||||
**Contorno:** o campo `details.mcpMeta.url` da resposta traz o link do relatório na UI. Entregar esse link ao humano para os URLs concretos:
|
||||
```
|
||||
https://seo.descomplicar.pt/p/<projectId>/audit?auditId=<auditId>
|
||||
```
|
||||
Declarar esta limitação no relatório — não fingir que se verificaram URLs que não se viram.
|
||||
|
||||
### Core Web Vitals por página
|
||||
|
||||
`run_site_audit` com `runLighthouse: true` corre Lighthouse numa amostra (até 20 páginas). Para uma página específica, usar `chrome-devtools`:
|
||||
|
||||
```
|
||||
1. Lighthouse -> get_core_web_vitals -> LCP, INP, CLS (mobile + desktop)
|
||||
2. Lighthouse -> compare_mobile_desktop -> Identificar gaps
|
||||
3. Lighthouse -> get_lcp_opportunities -> Sugestoes optimizacao
|
||||
chrome-devtools → lighthouse_audit (SEO, acessibilidade, best practices)
|
||||
chrome-devtools → performance_start_trace (LCP, INP, CLS reais)
|
||||
```
|
||||
|
||||
**Thresholds 2026:**
|
||||
**Thresholds 2026:** LCP < 2,5s · **INP** < 200ms · CLS < 0,1
|
||||
(INP substituiu o FID — se algum documento ainda disser FID, está desactualizado.)
|
||||
|
||||
| Metrica | Bom | Necessita Melhoria | Mau |
|
||||
|---------|-----|-------------------|-----|
|
||||
| **LCP** | < 2.5s | 2.5-4s | > 4s |
|
||||
| **INP** | < 200ms | 200-500ms | > 500ms |
|
||||
| **CLS** | < 0.1 | 0.1-0.25 | > 0.25 |
|
||||
---
|
||||
|
||||
### Passo 3: Analise de Conteudo (3 min)
|
||||
## Fase 3 — Hidratar keywords (pago, lote)
|
||||
|
||||
```
|
||||
1. SEO Tools API -> /content-optimization -> On-page SEO, keyword density
|
||||
2. SEO Tools API -> /internal-linking -> Estrutura links internos
|
||||
3. SEO Ahrefs -> keyword_generator -> Keywords relacionadas, volume, KD
|
||||
openseo → get_keyword_metrics
|
||||
keywords: [<as keywords em striking distance da fase 1>]
|
||||
locationCode: 2620 languageCode: "pt"
|
||||
```
|
||||
|
||||
**Checklist E-E-A-T:**
|
||||
- [ ] Autor identificado com bio
|
||||
- [ ] Credenciais verificaveis
|
||||
- [ ] Data publicacao/actualizacao
|
||||
- [ ] Fontes citadas (links externos autoritativos)
|
||||
- [ ] Experiencia real demonstrada
|
||||
Até **700 keywords numa só chamada** — volume, dificuldade (KD), intenção, CPC, tendência. É a forma barata de priorizar. Só depois disto se decide onde vale a pena competir.
|
||||
|
||||
### Passo 4: Backlinks e Autoridade (2 min)
|
||||
Guardar o que sobreviver: `openseo → save_keywords` (grátis, idempotente).
|
||||
|
||||
---
|
||||
|
||||
## Fase 4 — Contexto competitivo (pago)
|
||||
|
||||
```
|
||||
1. SEO Tools API -> /backlink-checker -> Backlinks basicos, DR/UR
|
||||
2. SEO Ahrefs -> get_backlinks_list -> Lista detalhada (DR, anchor text)
|
||||
3. SEO Ahrefs -> get_traffic -> Trafego estimado mensal
|
||||
```
|
||||
|
||||
**Metricas Autoridade:**
|
||||
- **DR (Domain Rating)**: 0-100 (forca backlink profile)
|
||||
- **UR (URL Rating)**: 0-100 (forca pagina especifica)
|
||||
- **Backlinks**: Quantidade + qualidade (DR > 30)
|
||||
- **Referring Domains**: Numero de dominios unicos
|
||||
|
||||
### Passo 5: Dados Reais GSC (3 min)
|
||||
|
||||
```
|
||||
1. GSC -> get_search_analytics -> Queries, impressoes, CTR real (ultimos 90 dias)
|
||||
2. GSC -> check_indexing_issues -> Problemas de indexacao
|
||||
3. GSC -> get_sitemaps -> Status sitemaps submetidos
|
||||
```
|
||||
|
||||
**Metricas GSC a Analisar:**
|
||||
- **Impressoes vs Cliques**: CTR medio > 2%
|
||||
- **Posicao media**: Top 3 para keywords principais
|
||||
- **Cobertura**: % paginas indexadas vs submetidas
|
||||
- **Mobile Usability**: Erros especificos mobile
|
||||
|
||||
### Passo 6: Concorrencia (opcional, 2 min)
|
||||
|
||||
```
|
||||
SEO Tools API -> /competitor-analysis -> Comparar com 2-3 concorrentes
|
||||
- Keywords gap
|
||||
- Backlinks gap
|
||||
- Content gap
|
||||
openseo → get_domain_overview (tráfego orgânico estimado, nº keywords, backlinks)
|
||||
openseo → get_ranked_keywords (onde o domínio posiciona, por mercado)
|
||||
openseo → get_backlinks_overview (~50 créditos por domínio)
|
||||
openseo → get_backlinks_profile (linhas detalhadas: anchors, dofollow, spam)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Propriedades GSC Disponiveis
|
||||
## Fase 5 — SERP (pago, por último)
|
||||
|
||||
```
|
||||
sc-domain:descomplicar.pt
|
||||
https://emanuelalmeida.pt/
|
||||
https://carstuff.pt/
|
||||
https://solarfvengenharia.com/
|
||||
https://aquisevende.pt/
|
||||
https://alojadamaria.com/
|
||||
https://e-commerce.descomplicar.pt/
|
||||
openseo → get_serp_results (1-10 keywords por chamada, ~30-60 créditos cada)
|
||||
openseo → find_serp_competitors (quem compete num conjunto de keywords)
|
||||
```
|
||||
|
||||
---
|
||||
Ler a SERP como **estrutura**, não como lista: se o top-10 estiver cheio de directórios e artigos "melhores X", a intenção é comparativa e uma homepage não entra — é preciso uma página de comparação. Se estiver cheio de homepages de concorrentes, é disputa de marca.
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
### Requisitos
|
||||
- **SEO Tools API** deve estar a correr: `~/mcp-servers/seo-tools-api/start.sh`
|
||||
- **GSC** requer autenticacao OAuth na primeira utilizacao
|
||||
- **GA** requer ADC credentials configuradas
|
||||
|
||||
### Limitacoes
|
||||
- Ahrefs API tem rate limiting (100 req/day free tier)
|
||||
- GSC data maximo: 16 meses historico
|
||||
- Lighthouse scores variam +/- 5 pontos entre execucoes
|
||||
Local/Maps: `get_local_serp_results`, `search_local_businesses`, `get_google_business_questions`.
|
||||
|
||||
---
|
||||
|
||||
## References (conteudo detalhado)
|
||||
## Custos — o que sabemos e o que não sabemos
|
||||
|
||||
| Ficheiro | Conteudo |
|
||||
|----------|----------|
|
||||
| `references/template-relatorio-auditoria.md` | Template completo do relatorio com todas as seccoes e tabelas |
|
||||
| `references/ferramentas-api.md` | Endpoints SEO Tools API, Lighthouse MCP, Ahrefs, GSC, GA |
|
||||
`whoami` **não expõe saldo de créditos** em modo self-hosted (verificado antes e depois de uma chamada paga: output idêntico). Os `~30-60 créditos/keyword` são a **estimativa do schema**, não uma medição.
|
||||
|
||||
**Consequência prática:** não há medidor no OpenSEO. O contador real vive na conta DataForSEO. Para lotes grandes, confirmar saldo aí primeiro. Nunca reportar custo consumido como facto — reportar como estimativa.
|
||||
|
||||
---
|
||||
|
||||
## Anti-Patterns
|
||||
## Anti-patterns
|
||||
|
||||
- Auditar sem dados reais (nunca simular metricas)
|
||||
- Ignorar gap mobile vs desktop
|
||||
- Nao verificar se site esta no GSC antes de recolher dados
|
||||
- Recomendacoes sem priorizacao (critico/importante/melhoria)
|
||||
- Esquecer E-E-A-T na analise de conteudo
|
||||
- **Correr `run_site_audit` com o `maxPages` por omissão.** Produz relatórios limpos e falsos.
|
||||
- **Começar por ferramentas pagas.** O GSC é grátis e responde a metade das perguntas.
|
||||
- Usar totais por query como totais do site (o GSC anonimiza — usar a vista por página).
|
||||
- Priorizar issues por contagem em vez de por impressões da página afectada.
|
||||
- Correr chamadas pagas sem confirmar o mercado do projecto.
|
||||
- Apresentar contagens de issues como se fossem URLs verificados.
|
||||
- Auditar sem dados reais ou simular métricas.
|
||||
- Recomendações sem prioridade (crítico/importante/melhoria) e sem esforço estimado.
|
||||
|
||||
---
|
||||
|
||||
**Versao:** 2.1.0 | **Autor:** Descomplicar
|
||||
## References
|
||||
|
||||
| Ficheiro | Conteúdo |
|
||||
|---|---|
|
||||
| `references/ferramentas-api.md` | Inventário OpenSEO completo + tabela de migração do stack antigo |
|
||||
| `references/template-relatorio-auditoria.md` | Template do relatório com todas as secções e tabelas |
|
||||
|
||||
---
|
||||
|
||||
**Versão:** 3.0.0 | **Autor:** Descomplicar® | **Motor:** OpenSEO
|
||||
|
||||
## Healing Log
|
||||
<!-- Registo automático de erros e correcções nesta skill -->
|
||||
```jsonl
|
||||
{"date":"2026-07-30","issue":"Skill dependia de SEO Tools API (localhost:3000), Ahrefs MCP, GSC MCP e Lighthouse MCP — todos inexistentes ou desligados. Nenhum dos 6 passos era executável.","fix":"Reescrita completa sobre OpenSEO, com ordem por custo, gates de mercado e maxPages.","source":"auto"}
|
||||
```
|
||||
|
||||
@@ -1,75 +1,113 @@
|
||||
# Ferramentas e APIs - SEO Audit
|
||||
# Ferramentas SEO — OpenSEO
|
||||
|
||||
## 1. SEO Tools API (http://localhost:3000)
|
||||
Motor único do SEO Descomplicar®. Substituiu integralmente o stack anterior.
|
||||
UI: `https://seo.descomplicar.pt` · Projecto default: `1e5ad4d6-a285-4fd3-9633-339abef4b6af`
|
||||
|
||||
```bash
|
||||
# Auditoria basica
|
||||
curl "http://localhost:3000/seo-audit?url=URL"
|
||||
---
|
||||
|
||||
# Velocidade PageSpeed Insights style
|
||||
curl "http://localhost:3000/page-speed-analyzer?url=URL"
|
||||
## 1. Migração — o que morreu e o que o substitui
|
||||
|
||||
# Backlinks + DR/UR
|
||||
curl "http://localhost:3000/backlink-checker?url=URL"
|
||||
O stack antigo desta skill (v2.1.0) apontava para quatro dependências. **Nenhuma está operacional** (verificado 30-07-2026):
|
||||
|
||||
# Rankings para keywords
|
||||
curl "http://localhost:3000/rank-checker?url=URL&keywords=keyword1,keyword2"
|
||||
| Dependência antiga | Estado real | Substituto OpenSEO |
|
||||
|---|---|---|
|
||||
| **SEO Tools API** `localhost:3000` | `~/mcp-servers/seo-tools-api/` **não existe em disco** | ver tabela abaixo |
|
||||
| **Ahrefs MCP** | nunca esteve em nenhuma config MCP | `get_backlinks_*`, `get_domain_overview`, `get_keyword_metrics` |
|
||||
| **GSC MCP** | em `disabledServers` | `get_search_console_performance`, `inspect_urls` |
|
||||
| **Lighthouse MCP** | em `disabledServers` | `run_site_audit` (`runLighthouse`) ou `chrome-devtools` |
|
||||
|
||||
# Optimizacao conteudo on-page
|
||||
curl "http://localhost:3000/content-optimization?url=URL"
|
||||
### Endpoint a endpoint
|
||||
|
||||
# Internal linking structure
|
||||
curl "http://localhost:3000/internal-linking?url=URL"
|
||||
| Antigo | Novo | Nota |
|
||||
|---|---|---|
|
||||
| `/seo-audit` | `run_site_audit` + `get_audit_issues` | Atenção ao `maxPages` |
|
||||
| `/page-speed-analyzer` | `run_site_audit` com `runLighthouse: true` | Amostra até 20 páginas |
|
||||
| `/content-optimization` | `get_audit_issues` (`thin-content`, `title-*`, `meta-description-*`) | |
|
||||
| `/internal-linking` | `get_audit_issues` (`orphan-page`, `broken-internal-link`, `no-outgoing-links`) | |
|
||||
| `/backlink-checker` | `get_backlinks_overview` | |
|
||||
| `/rank-checker` | `get_rank_tracker` (grátis) ou `get_ranked_keywords` (pago) | |
|
||||
| `/competitor-analysis` | `find_serp_competitors` + `get_domain_overview` | |
|
||||
| `/sitemap-generator` | **sem equivalente** | Usar plugin WP ou gerar à mão |
|
||||
| Ahrefs `keyword_generator` | `research_keywords` (novas) / `get_keyword_metrics` (conhecidas) | |
|
||||
| Ahrefs `get_backlinks_list` | `get_backlinks_profile` | |
|
||||
| Ahrefs `get_traffic` | `get_domain_overview` | Estimado |
|
||||
| Lighthouse `run_audit` | `chrome-devtools → lighthouse_audit` | Por página |
|
||||
| Lighthouse `get_core_web_vitals` | `chrome-devtools → performance_start_trace` | LCP/INP/CLS reais |
|
||||
| GSC `get_search_analytics` | `get_search_console_performance` | |
|
||||
| GSC `check_indexing_issues` | `inspect_urls` | Até 10 URLs por chamada |
|
||||
| GSC `get_sitemaps` | **sem equivalente** | Ver na UI do Search Console |
|
||||
|
||||
# Sitemap XML generator
|
||||
curl "http://localhost:3000/sitemap-generator?url=URL"
|
||||
---
|
||||
|
||||
# Analise concorrencia
|
||||
curl "http://localhost:3000/competitor-analysis?url=URL&competitors=site1.com,site2.com"
|
||||
```
|
||||
## 2. Inventário OpenSEO (24 ferramentas)
|
||||
|
||||
## 2. Lighthouse MCP
|
||||
### Grátis — não tocam no DataForSEO
|
||||
|
||||
| Tool | Funcao | Output |
|
||||
|------|--------|--------|
|
||||
| `run_audit(url)` | Auditoria completa | Performance, SEO, A11y, Best Practices |
|
||||
| `get_performance_score(url)` | Score performance | 0-100 |
|
||||
| `get_core_web_vitals(url)` | LCP, INP, CLS | Mobile + Desktop |
|
||||
| `get_accessibility_score(url)` | Acessibilidade | 0-100 + issues |
|
||||
| `get_seo_analysis(url)` | Analise SEO tecnico | Meta, headings, indexabilidade |
|
||||
| `get_security_audit(url)` | Seguranca | HTTPS, mixed content, headers |
|
||||
| `compare_mobile_desktop(url)` | Comparacao | Diferencas performance |
|
||||
| `get_lcp_opportunities(url)` | Optimizacoes LCP | Preload, lazy load |
|
||||
| `find_unused_javascript(url)` | JS nao usado | Tamanhos, % savings |
|
||||
| Ferramenta | Função |
|
||||
|---|---|
|
||||
| `whoami` | Utilizador, org, modo, scopes. **Não mostra saldo em self-hosted** |
|
||||
| `list_projects` | Projectos + `projectId` + mercado default |
|
||||
| `create_project` | Novo projecto (nome, domínio, mercado) |
|
||||
| `run_site_audit` | Crawl same-origin, robots-aware. `maxPages` **default 50** |
|
||||
| `get_audit_status` | Progresso (fase, páginas, Lighthouse) |
|
||||
| `get_audit_issues` | Relatório priorizado. Filtros `severity`/`issueType` |
|
||||
| `get_audit_pages` | Páginas crawladas com dados SEO por página |
|
||||
| `get_search_console_performance` | Search Analytics: cliques, impressões, CTR, posição |
|
||||
| `inspect_urls` | URL Inspection do GSC (até 10 URLs): indexação, canónico |
|
||||
| `get_rank_tracker` | Configs de rank tracking + último snapshot |
|
||||
| `save_keywords` | Guardar keywords no projecto (idempotente) |
|
||||
| `list_saved_keywords` | Keywords guardadas + métricas em cache |
|
||||
|
||||
## 3. SEO Ahrefs MCP (via API)
|
||||
### Pagas — consomem créditos
|
||||
|
||||
| Tool | Funcao | Dados |
|
||||
|------|--------|-------|
|
||||
| `get_backlinks_list(domain)` | Lista backlinks | DR, UR, anchor text |
|
||||
| `keyword_generator(keyword, country)` | Ideias keywords | Volume, KD, CPC |
|
||||
| `get_traffic(domain)` | Trafego estimado | Visitas mensais, keywords |
|
||||
| `keyword_difficulty(keyword)` | Dificuldade keyword | 0-100 (KD score) |
|
||||
| Ferramenta | Custo aprox. | Função |
|
||||
|---|---|---|
|
||||
| `get_keyword_metrics` | lote | **Até 700 keywords/chamada**: volume, KD, intenção, CPC, tendência |
|
||||
| `research_keywords` | ~30-100/seed | 1-5 seeds → ideias novas + métricas |
|
||||
| `get_serp_results` | ~30-60/keyword | Google orgânico ao vivo, 1-10 keywords |
|
||||
| `find_serp_competitors` | pago | Domínios que competem num conjunto de keywords |
|
||||
| `get_ranked_keywords` | pago | Keywords onde um domínio posiciona, por mercado |
|
||||
| `get_domain_overview` | pago | Tráfego orgânico, nº keywords, backlinks, ref. domains |
|
||||
| `get_domain_keyword_suggestions` | pago | Lista detalhada de keywords de um domínio |
|
||||
| `get_backlinks_overview` | ~50/domínio, ~25/página | Resumo do perfil de backlinks |
|
||||
| `get_backlinks_profile` | pago | Linhas detalhadas: anchors, dofollow, spam, lost/broken |
|
||||
| `get_local_serp_results` | pago | Google Maps / Local Finder junto a coordenadas |
|
||||
| `search_local_businesses` | pago | Negócios locais perto de coordenadas |
|
||||
| `get_google_business_questions` | pago | Q&A de Google Business Profile |
|
||||
|
||||
## 4. Google Search Console MCP
|
||||
---
|
||||
|
||||
| Tool | Funcao | Dados Reais |
|
||||
|------|--------|-------------|
|
||||
| `list_properties` | Listar sites verificados | URLs properties |
|
||||
| `get_search_analytics(site, period)` | Queries, cliques, CTR | Ultimos 16 meses |
|
||||
| `inspect_url_enhanced(site, url)` | Inspeccionar URL | Indexacao, mobile usability |
|
||||
| `check_indexing_issues(site, urls)` | Problemas indexacao | Erros, avisos |
|
||||
| `get_sitemaps(site)` | Listar sitemaps | Status, URLs submetidos |
|
||||
## 3. Mercados
|
||||
|
||||
## 5. Google Analytics MCP
|
||||
| Mercado | `locationCode` | `languageCode` |
|
||||
|---|---|---|
|
||||
| **Portugal** | `2620` | `pt` |
|
||||
| EUA (default do projecto) | `2840` | `en` |
|
||||
|
||||
| Tool | Funcao | Metricas |
|
||||
|------|--------|----------|
|
||||
| `get_account_summaries` | Listar contas | Properties disponiveis |
|
||||
| `run_report(property, metrics, dimensions)` | Relatorio custom | Sessions, users, bounce rate |
|
||||
| `run_realtime_report(property)` | Tempo real | Utilizadores activos now |
|
||||
`2620` = Portugal, confirmado empiricamente (SERP devolve domínios `.pt`). **Não inventar códigos** — validar sempre por uma query de teste. Referência oficial: `dataforseo.com/help-center/locations`.
|
||||
|
||||
## Propriedades GSC Disponiveis
|
||||
**Aviso:** alguns países são servidos por dados do Google Ads — volume/CPC funcionam, mas KD, intenção e analytics de domínio não estão disponíveis.
|
||||
|
||||
---
|
||||
|
||||
## 4. Limitações conhecidas (verificadas, não presumidas)
|
||||
|
||||
1. **Issues sem URL.** `get_audit_issues` e `get_audit_pages` devolvem só contagens agregadas via bridge MCP. As linhas por URL vivem em `structuredContent.issues`, que a bridge não entrega. `get_audit_pages` trunca em ~25 linhas mesmo com `limit: 1000`.
|
||||
→ Contorno: `details.mcpMeta.url` traz o link do relatório na UI.
|
||||
|
||||
2. **Sem medidor de créditos.** `whoami` em self-hosted devolve o mesmo output antes e depois de chamadas pagas. Os custos documentados são estimativas do schema. O contador real está na conta DataForSEO.
|
||||
|
||||
3. **`maxPages` default 50.** A causa mais comum de auditorias falsamente limpas.
|
||||
|
||||
4. **GSC anonimiza queries.** Totais por query são sempre inferiores aos totais por página. Usar a vista por página para números globais.
|
||||
|
||||
5. **GSC não filtra por posição.** Striking distance filtra-se do lado do cliente.
|
||||
|
||||
6. **Lag do GSC:** os últimos ~3 dias podem estar incompletos. Datas em Pacific Time. Máximo 16 meses de histórico.
|
||||
|
||||
---
|
||||
|
||||
## 5. Propriedades Search Console disponíveis
|
||||
|
||||
```
|
||||
sc-domain:descomplicar.pt
|
||||
@@ -81,14 +119,6 @@ https://alojadamaria.com/
|
||||
https://e-commerce.descomplicar.pt/
|
||||
```
|
||||
|
||||
## Requisitos
|
||||
---
|
||||
|
||||
- **SEO Tools API** deve estar a correr: `~/mcp-servers/seo-tools-api/start.sh`
|
||||
- **GSC** requer autenticacao OAuth na primeira utilizacao
|
||||
- **GA** requer ADC credentials configuradas (`gcloud auth application-default login`)
|
||||
|
||||
## Limitacoes
|
||||
|
||||
- Ahrefs API tem rate limiting (100 req/day free tier)
|
||||
- GSC data maximo: 16 meses historico
|
||||
- Lighthouse scores variam +/- 5 pontos entre execucoes (network dependent)
|
||||
**Actualizado:** 30-07-2026 | Substitui a versão baseada em SEO Tools API + Ahrefs + GSC/Lighthouse MCP
|
||||
|
||||
@@ -183,11 +183,14 @@ H1: [Texto] OK
|
||||
---
|
||||
|
||||
## Ferramentas Utilizadas
|
||||
- SEO Tools API (localhost:3000)
|
||||
- Lighthouse MCP
|
||||
- SEO Ahrefs MCP
|
||||
- Google Search Console MCP
|
||||
- Google Analytics MCP (opcional)
|
||||
- OpenSEO — crawl e issues (`run_site_audit`, `get_audit_issues`)
|
||||
- OpenSEO — Search Console (`get_search_console_performance`)
|
||||
- OpenSEO — keywords e SERP (`get_keyword_metrics`, `get_serp_results`)
|
||||
- OpenSEO — autoridade (`get_backlinks_overview`, `get_domain_overview`)
|
||||
- chrome-devtools — Core Web Vitals por página (opcional)
|
||||
|
||||
**Cobertura do crawl**: [N páginas crawladas] de [M páginas com impressões no GSC]
|
||||
**Chamadas pagas**: [listar] — custo estimado, não medido (OpenSEO não expõe saldo)
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user