GEO Score

https://fuels4life.com

Análise: só site técnico

completed

Mesmo site e pergunta — compare o score após corrigir

70GEO Score

Crawlabilidade

80/100

Dados estruturados

57/100

Probe LLM

N/A

Checklist para dev

Exporte tarefas com guias detalhados ou copie um prompt pronto para Cursor/Codex corrigir o site.

Ver histórico do domínio
Pré-visualizar checklist
# GEO Score — Checklist dev

- **Domínio:** https://fuels4life.com
- **Pergunta/dor:** 
- **Score:** 70/100 (orange)
- **Audit:** 401a7ab6-8430-4239-971c-b35814337926 · 2026-10-05

## Tarefas (por impacto)

- [ ] **`P2-JSONLD`** · CRITICAL — JSON-LD ausente
  - Nenhum bloco JSON-LD em https://fuels4life.com/
    - Busca: <script type="application/ld+json"> — 0 ocorrências
    - URL analisada: https://fuels4life.com/
  - Ação: Adicione JSON-LD (Organization, Product/SoftwareApplication, FAQPage).
  - **Guia:**
    - Adicione pelo menos um bloco `<script type="application/ld+json">` na home (ou layout global).
    - Inclua `Organization` ou `SoftwareApplication`/`Product` com name, url, description, logo.
    - Valide JSON (vírgulas, aspas) — JSON inválido é pior que ausência.
    - Opcional: adicione `WebSite` com `potentialAction` SearchAction se houver busca.
    - **Snippets:**
      - Organization + SoftwareApplication:
        ```
        <script type="application/ld+json">
        {
          "@context": "https://schema.org",
          "@graph": [
            {
              "@type": "Organization",
              "name": "Nome da Marca",
              "url": "https://example.com",
              "logo": "https://example.com/logo.png"
            },
            {
              "@type": "SoftwareApplication",
              "name": "Nome do Produto",
              "applicationCategory": "BusinessApplication",
              "operatingSystem": "Web",
              "description": "O que o produto faz em uma frase.",
              "url": "https://example.com"
            }
          ]
        }
        </script>
        ```
    - **Pronto quando:**
      - ≥1 bloco JSON-LD válido no HTML da home
      - Audit P2-JSONLD passa

- [ ] **`P1-ROBOTS-SITEMAP`** · MEDIUM — robots.txt não referencia sitemap
  - Nenhuma linha Sitemap: no robots.txt
    - Trecho do robots.txt:
    -   <!DOCTYPE html>
    -   <html lang="en">
    -   <head>
    -   <meta charset="utf-8">
    -   <title>Fuels 4 Life | Ingredients for Agriculture, Livestock &amp; Fermentation</title>
    -   <meta name="description" content="High-performance ingredients for crop nutrition, animal nutrition and fermentation systems. Reliable sourcing and formulation support for manufacturers.">
    -   <meta name="viewport" content="width=device-width, initial-scale=1">
    -   <link rel="canonical" href="https://fuels4life.com/">
  - Ação: Adicione Sitemap: https://seudominio/sitemap.xml no robots.txt.
  - **Guia:**
    - Confirme que o sitemap existe e está acessível (ex.: `/sitemap.xml`).
    - Adicione ao final do `robots.txt` uma linha `Sitemap:` com URL absoluta HTTPS.
    - Se houver múltiplos sitemaps (índice), liste o sitemap-index principal.
    - **Snippets:**
      - Diretiva no robots.txt:
        ```
        Sitemap: https://example.com/sitemap.xml
        ```
    - **Pronto quando:**
      - robots.txt contém linha Sitemap: com URL válida
      - Audit P1-ROBOTS-SITEMAP passa

- [ ] **`P1-LINK-HEADERS`** · MEDIUM — Headers HTTP Link (RFC 8288) ausentes
  - GET https://fuels4life.com/ sem header Link — agentes não descobrem llms.txt, sitemap ou API pelo HTTP
    - Não confundir com <link> no HTML (canonical no <head> não conta). O check lê o header HTTP Link.
    - Formato: Link: </llms.txt>; rel="describedby"; type="text/markdown"
    - Nenhum header Link na resposta da home
  - Ação: Adicione headers Link na home apontando para /llms.txt, sitemap e, se houver API, /.well-known/api-catalog.
  - **Guia:**
    - Confirme que o check é o header HTTP `Link`, não a tag HTML `<link rel="canonical">`.
    - Na home, envie pelo menos um `Link` apontando para recursos que agentes devem descobrir: `/llms.txt`, `/sitemap.xml`, docs de API se existirem.
    - Em hosting estático: `_headers` (Netlify/Cloudflare Pages), `nitro.routeRules`, ou config do CDN/nginx.
    - Valide: `curl -sI https://seudominio.com/ | findstr /i Link` (Windows) ou `curl -sI … | grep -i ^link`.
    - **Snippets:**
      - Headers HTTP (RFC 8288):
        ```
        Link: </llms.txt>; rel="describedby"; type="text/markdown"
        Link: </sitemap.xml>; rel="index"
        Link: </.well-known/api-catalog>; rel="api-catalog"
        ```
      - Nuxt — nitro.routeRules:
        ```
        nitro: {
          routeRules: {
            '/': {
              headers: {
                Link: '</llms.txt>; rel="describedby"; type="text/markdown", </sitemap.xml>; rel="index"',
              },
            },
          },
        },
        ```
      - Cloudflare Pages / Netlify — public/_headers:
        ```
        /
          Link: </llms.txt>; rel="describedby"; type="text/markdown"
          Link: </sitemap.xml>; rel="index"
        ```
    - **Pronto quando:**
      - GET / inclui header Link com rel de descoberta (describedby, index, api-catalog ou service-doc)
      - Audit P1-LINK-HEADERS passa
    - **Notas:**
      - Verificado pelo isitagentready.com (Discoverability).
      - Landing sem API: describedby → llms.txt + index → sitemap já basta. api-catalog só se houver catálogo RFC 9727.

- [ ] **`P2-OPENING`** · MEDIUM — Abertura pouco extratível
  - Primeiros parágrafos não definem o produto claramente
    - Parágrafo 1 (10 chars): "Loading..."
    - Parágrafo 2 (18 chars): "What Sets Us Apart"
  - Ação: Defina o produto de forma direta nos 2 primeiros parágrafos ("X é uma ferramenta de Y que Z").
  - **Guia:**
    - Se a evidência indicar SPA / HTML cru sem <p>: ative SSR/SSG primeiro (P1-RENDER) — reescrever copy no Hero.vue não coloca texto no HTML inicial.
    - Com HTML populado: reescreva os 2 primeiros parágrafos acima da dobra.
    - Primeira frase: "[Marca] é [categoria] que [benefício principal]."
    - Segunda frase: público-alvo ou diferencial concreto.
    - Evite abrir só com slogans ou CTAs.
    - **Snippets:**
      - Modelo de abertura:
        ```
        <p>Acme é uma plataforma de gestão de tempo para equipes remotas que integra timesheet, aprovações e relatórios em um só lugar.</p>
        <p>Indicada para agências e consultorias B2B que cobram por hora e usam Slack no dia a dia.</p>
        ```
    - **Pronto quando:**
      - View Source mostra parágrafo de abertura >50 chars com definição clara
      - Audit P2-OPENING passa
    - **Notas:**
      - GEO mede o HTML cru. Texto só após JS = abertura “ausente” para crawlers.

- [ ] **`P1-LLMS-TXT-QUALITY`** · LOW — llms.txt com conteúdo insuficiente
  - Arquivo encontrado mas com qualidade baixa para LLMs
    - Sem título H1 (linha começando com "# ")
    - Sem seções H2 (linhas começando com "## ")
    - Tamanho atual: 31956 caracteres
  - Ação: Enriqueça o /llms.txt raiz (H1, seções, ≥100 palavras). Detalhes longos por página → .md linkados no índice.
  - **Guia:**
    - Abra `/llms.txt` e verifique os itens apontados na evidência.
    - Adicione título H1 se ausente: `# Nome do Produto`.
    - Adicione seções H2 se ausentes: `## Funcionalidades`, `## FAQ`, `## Docs e páginas` (ou `## Links`).
    - Expanda até ≥100 palavras com fatos citáveis (o que é, para quem, diferencial) — evite marketing vazio.
    - Se o conteúdo por página for distinto: mova detalhes longos para `.md` por URL e deixe na raiz só resumo + lista de links (melhor para agentes).
    - Use linguagem direta; alinhe FAQ do llms.txt às dores usadas no probe GEO.
    - **Pronto quando:**
      - llms.txt tem título H1
      - llms.txt tem pelo menos 2 seções H2
      - llms.txt tem ≥100 palavras de conteúdo
      - Audit P1-LLMS-TXT-QUALITY passa
    - **Notas:**
      - Prefira enriquecer a raiz com links para MD por página a inflar um único arquivo.
      - HTML da página continua sendo a fonte principal de busca — mantenha paridade de fatos entre HTML e Markdown.

- [ ] **`P1-MARKDOWN`** · LOW — Servidor não serve Markdown por negociação de conteúdo
  - Requisição com Accept: text/markdown não retornou text/markdown
    - LLMs preferem Markdown limpo a HTML — menos tokens, menos ruído.
    - Para Nuxt/Next.js: adicione um endpoint /api/content ou middleware de content negotiation.
    - Para sites estáticos: serve /llms.txt já cobre a maioria dos casos práticos.
  - Ação: Configure o servidor/framework para responder com Markdown quando solicitado via Accept: text/markdown.
  - **Guia:**
    - Avalie se faz sentido para seu stack — sites estáticos já têm /llms.txt como alternativa mais simples.
    - Para Nuxt/Next.js: adicione middleware que, quando `Accept: text/markdown` for enviado, sirva uma versão Markdown da página.
    - Para sites estáticos: garanta que /llms.txt esteja rico — é o equivalente prático.
    - **Snippets:**
      - Nuxt server middleware (server/middleware/markdown.ts):
        ```
        export default defineEventHandler(async (event) => {
          const accept = getHeader(event, 'accept') ?? ''
          if (!accept.includes('text/markdown')) return
        
          // Redireciona para versão Markdown equivalente
          const url = getRequestURL(event)
          if (url.pathname === '/') {
            setHeader(event, 'content-type', 'text/markdown; charset=utf-8')
            // retorne o conteúdo Markdown da home
            return '# Worklift\n\nDescrição Markdown da home...'
          }
        })
        ```
    - **Pronto quando:**
      - GET / com Accept: text/markdown retorna Content-Type: text/markdown
      - Audit P1-MARKDOWN passa
    - **Notas:**
      - Este check tem impacto prático menor que llms.txt — priorize os outros primeiro.

## Prompt para code agent (todos os findings)

Copie o bloco abaixo para Cursor/Codex:

```
Você está corrigindo múltiplos problemas de GEO (Generative Engine Optimization) em um site.
Trabalhe por ordem de severidade. Mudanças mínimas, estilo consistente.

## Contexto
- Domínio: https://fuels4life.com
- Pergunta/dor: 
- Score atual: 70/100
- Audit ID: 401a7ab6-8430-4239-971c-b35814337926

## 6 finding(s) a tratar

---
### 1. P2-JSONLD — JSON-LD ausente (critical)

Nenhum bloco JSON-LD em https://fuels4life.com/

Detalhes coletados:
- Busca: <script type="application/ld+json"> — 0 ocorrências
- URL analisada: https://fuels4life.com/

**Ação resumida:** Adicione JSON-LD (Organization, Product/SoftwareApplication, FAQPage).

## Passos
1. Adicione pelo menos um bloco `<script type="application/ld+json">` na home (ou layout global).
2. Inclua `Organization` ou `SoftwareApplication`/`Product` com name, url, description, logo.
3. Valide JSON (vírgulas, aspas) — JSON inválido é pior que ausência.
4. Opcional: adicione `WebSite` com `potentialAction` SearchAction se houver busca.

## Snippets (adapte ao stack do projeto)

### Organization + SoftwareApplication
```
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "name": "Nome da Marca",
      "url": "https://example.com",
      "logo": "https://example.com/logo.png"
    },
    {
      "@type": "SoftwareApplication",
      "name": "Nome do Produto",
      "applicationCategory": "BusinessApplication",
      "operatingSystem": "Web",
      "description": "O que o produto faz em uma frase.",
      "url": "https://example.com"
    }
  ]
}
</script>
```

## Definition of done
- ≥1 bloco JSON-LD válido no HTML da home
- Audit P2-JSONLD passa
---
### 2. P1-ROBOTS-SITEMAP — robots.txt não referencia sitemap (medium)

Nenhuma linha Sitemap: no robots.txt

Detalhes coletados:
- Trecho do robots.txt:
-   <!DOCTYPE html>
-   <html lang="en">
-   <head>
-   <meta charset="utf-8">
-   <title>Fuels 4 Life | Ingredients for Agriculture, Livestock &amp; Fermentation</title>
-   <meta name="description" content="High-performance ingredients for crop nutrition, animal nutrition and fermentation systems. Reliable sourcing and formulation support for manufacturers.">
-   <meta name="viewport" content="width=device-width, initial-scale=1">
-   <link rel="canonical" href="https://fuels4life.com/">

**Ação resumida:** Adicione Sitemap: https://seudominio/sitemap.xml no robots.txt.

## Passos
1. Confirme que o sitemap existe e está acessível (ex.: `/sitemap.xml`).
2. Adicione ao final do `robots.txt` uma linha `Sitemap:` com URL absoluta HTTPS.
3. Se houver múltiplos sitemaps (índice), liste o sitemap-index principal.

## Snippets (adapte ao stack do projeto)

### Diretiva no robots.txt
```
Sitemap: https://example.com/sitemap.xml
```

## Definition of done
- robots.txt contém linha Sitemap: com URL válida
- Audit P1-ROBOTS-SITEMAP passa
---
### 3. P1-LINK-HEADERS — Headers HTTP Link (RFC 8288) ausentes (medium)

GET https://fuels4life.com/ sem header Link — agentes não descobrem llms.txt, sitemap ou API pelo HTTP

Detalhes coletados:
- Não confundir com <link> no HTML (canonical no <head> não conta). O check lê o header HTTP Link.
- Formato: Link: </llms.txt>; rel="describedby"; type="text/markdown"
- Nenhum header Link na resposta da home

**Ação resumida:** Adicione headers Link na home apontando para /llms.txt, sitemap e, se houver API, /.well-known/api-catalog.

## Passos
1. Confirme que o check é o header HTTP `Link`, não a tag HTML `<link rel="canonical">`.
2. Na home, envie pelo menos um `Link` apontando para recursos que agentes devem descobrir: `/llms.txt`, `/sitemap.xml`, docs de API se existirem.
3. Em hosting estático: `_headers` (Netlify/Cloudflare Pages), `nitro.routeRules`, ou config do CDN/nginx.
4. Valide: `curl -sI https://seudominio.com/ | findstr /i Link` (Windows) ou `curl -sI … | grep -i ^link`.

## Snippets (adapte ao stack do projeto)

### Headers HTTP (RFC 8288)
```
Link: </llms.txt>; rel="describedby"; type="text/markdown"
Link: </sitemap.xml>; rel="index"
Link: </.well-known/api-catalog>; rel="api-catalog"
```

### Nuxt — nitro.routeRules
```
nitro: {
  routeRules: {
    '/': {
      headers: {
        Link: '</llms.txt>; rel="describedby"; type="text/markdown", </sitemap.xml>; rel="index"',
      },
    },
  },
},
```

### Cloudflare Pages / Netlify — public/_headers
```
/
  Link: </llms.txt>; rel="describedby"; type="text/markdown"
  Link: </sitemap.xml>; rel="index"
```

## Definition of done
- GET / inclui header Link com rel de descoberta (describedby, index, api-catalog ou service-doc)
- Audit P1-LINK-HEADERS passa

## Notas
- Verificado pelo isitagentready.com (Discoverability).
- Landing sem API: describedby → llms.txt + index → sitemap já basta. api-catalog só se houver catálogo RFC 9727.
---
### 4. P2-OPENING — Abertura pouco extratível (medium)

Primeiros parágrafos não definem o produto claramente

Detalhes coletados:
- Parágrafo 1 (10 chars): "Loading..."
- Parágrafo 2 (18 chars): "What Sets Us Apart"

**Ação resumida:** Defina o produto de forma direta nos 2 primeiros parágrafos ("X é uma ferramenta de Y que Z").

## Passos
1. Se a evidência indicar SPA / HTML cru sem <p>: ative SSR/SSG primeiro (P1-RENDER) — reescrever copy no Hero.vue não coloca texto no HTML inicial.
2. Com HTML populado: reescreva os 2 primeiros parágrafos acima da dobra.
3. Primeira frase: "[Marca] é [categoria] que [benefício principal]."
4. Segunda frase: público-alvo ou diferencial concreto.
5. Evite abrir só com slogans ou CTAs.

## Snippets (adapte ao stack do projeto)

### Modelo de abertura
```
<p>Acme é uma plataforma de gestão de tempo para equipes remotas que integra timesheet, aprovações e relatórios em um só lugar.</p>
<p>Indicada para agências e consultorias B2B que cobram por hora e usam Slack no dia a dia.</p>
```

## Definition of done
- View Source mostra parágrafo de abertura >50 chars com definição clara
- Audit P2-OPENING passa

## Notas
- GEO mede o HTML cru. Texto só após JS = abertura “ausente” para crawlers.
---
### 5. P1-LLMS-TXT-QUALITY — llms.txt com conteúdo insuficiente (low)

Arquivo encontrado mas com qualidade baixa para LLMs

Detalhes coletados:
- Sem título H1 (linha começando com "# ")
- Sem seções H2 (linhas começando com "## ")
- Tamanho atual: 31956 caracteres

**Ação resumida:** Enriqueça o /llms.txt raiz (H1, seções, ≥100 palavras). Detalhes longos por página → .md linkados no índice.

## Passos
1. Abra `/llms.txt` e verifique os itens apontados na evidência.
2. Adicione título H1 se ausente: `# Nome do Produto`.
3. Adicione seções H2 se ausentes: `## Funcionalidades`, `## FAQ`, `## Docs e páginas` (ou `## Links`).
4. Expanda até ≥100 palavras com fatos citáveis (o que é, para quem, diferencial) — evite marketing vazio.
5. Se o conteúdo por página for distinto: mova detalhes longos para `.md` por URL e deixe na raiz só resumo + lista de links (melhor para agentes).
6. Use linguagem direta; alinhe FAQ do llms.txt às dores usadas no probe GEO.

## Definition of done
- llms.txt tem título H1
- llms.txt tem pelo menos 2 seções H2
- llms.txt tem ≥100 palavras de conteúdo
- Audit P1-LLMS-TXT-QUALITY passa

## Notas
- Prefira enriquecer a raiz com links para MD por página a inflar um único arquivo.
- HTML da página continua sendo a fonte principal de busca — mantenha paridade de fatos entre HTML e Markdown.
---
### 6. P1-MARKDOWN — Servidor não serve Markdown por negociação de conteúdo (low)

Requisição com Accept: text/markdown não retornou text/markdown

Detalhes coletados:
- LLMs preferem Markdown limpo a HTML — menos tokens, menos ruído.
- Para Nuxt/Next.js: adicione um endpoint /api/content ou middleware de content negotiation.
- Para sites estáticos: serve /llms.txt já cobre a maioria dos casos práticos.

**Ação resumida:** Configure o servidor/framework para responder com Markdown quando solicitado via Accept: text/markdown.

## Passos
1. Avalie se faz sentido para seu stack — sites estáticos já têm /llms.txt como alternativa mais simples.
2. Para Nuxt/Next.js: adicione middleware que, quando `Accept: text/markdown` for enviado, sirva uma versão Markdown da página.
3. Para sites estáticos: garanta que /llms.txt esteja rico — é o equivalente prático.

## Snippets (adapte ao stack do projeto)

### Nuxt server middleware (server/middleware/markdown.ts)
```
export default defineEventHandler(async (event) => {
  const accept = getHeader(event, 'accept') ?? ''
  if (!accept.includes('text/markdown')) return

  // Redireciona para versão Markdown equivalente
  const url = getRequestURL(event)
  if (url.pathname === '/') {
    setHeader(event, 'content-type', 'text/markdown; charset=utf-8')
    // retorne o conteúdo Markdown da home
    return '# Worklift\n\nDescrição Markdown da home...'
  }
})
```

## Definition of done
- GET / com Accept: text/markdown retorna Content-Type: text/markdown
- Audit P1-MARKDOWN passa

## Notas
- Este check tem impacto prático menor que llms.txt — priorize os outros primeiro.

---
## Instruções finais
- Corrija na ordem listada (critical → high → medium → low).
- Um commit ou PR por tema (robots/sitemap, HTML/headings, JSON-LD) se fizer sentido.
- Ao terminar, liste cada finding e se o critério de pronto foi atendido.
```

---
_Gerado por GEO Score_

Oportunidades

P1-ROBOTS-SITEMAP

robots.txt não referencia sitemap

medium

Nenhuma linha Sitemap: no robots.txt

  • Trecho do robots.txt:
  • <!DOCTYPE html>
  • <html lang="en">
  • <head>
  • <meta charset="utf-8">
  • <title>Fuels 4 Life | Ingredients for Agriculture, Livestock &amp; Fermentation</title>
  • <meta name="description" content="High-performance ingredients for crop nutrition, animal nutrition and fermentation systems. Reliable sourcing and formulation support for manufacturers.">
  • <meta name="viewport" content="width=device-width, initial-scale=1">
  • <link rel="canonical" href="https://fuels4life.com/">

Ação: Adicione Sitemap: https://seudominio/sitemap.xml no robots.txt.

Ver guia de correção

Passos

  1. Confirme que o sitemap existe e está acessível (ex.: `/sitemap.xml`).
  2. Adicione ao final do `robots.txt` uma linha `Sitemap:` com URL absoluta HTTPS.
  3. Se houver múltiplos sitemaps (índice), liste o sitemap-index principal.

Diretiva no robots.txt

Sitemap: https://example.com/sitemap.xml

Pronto quando

  • robots.txt contém linha Sitemap: com URL válida
  • Audit P1-ROBOTS-SITEMAP passa

P1-LLMS-TXT-QUALITY

llms.txt com conteúdo insuficiente

low

Arquivo encontrado mas com qualidade baixa para LLMs

  • Sem título H1 (linha começando com "# ")
  • Sem seções H2 (linhas começando com "## ")
  • Tamanho atual: 31956 caracteres

Ação: Enriqueça o /llms.txt raiz (H1, seções, ≥100 palavras). Detalhes longos por página → .md linkados no índice.

Ver guia de correção

Passos

  1. Abra `/llms.txt` e verifique os itens apontados na evidência.
  2. Adicione título H1 se ausente: `# Nome do Produto`.
  3. Adicione seções H2 se ausentes: `## Funcionalidades`, `## FAQ`, `## Docs e páginas` (ou `## Links`).
  4. Expanda até ≥100 palavras com fatos citáveis (o que é, para quem, diferencial) — evite marketing vazio.
  5. Se o conteúdo por página for distinto: mova detalhes longos para `.md` por URL e deixe na raiz só resumo + lista de links (melhor para agentes).
  6. Use linguagem direta; alinhe FAQ do llms.txt às dores usadas no probe GEO.

Pronto quando

  • llms.txt tem título H1
  • llms.txt tem pelo menos 2 seções H2
  • llms.txt tem ≥100 palavras de conteúdo
  • Audit P1-LLMS-TXT-QUALITY passa

P1-MARKDOWN

Servidor não serve Markdown por negociação de conteúdo

low

Requisição com Accept: text/markdown não retornou text/markdown

  • LLMs preferem Markdown limpo a HTML — menos tokens, menos ruído.
  • Para Nuxt/Next.js: adicione um endpoint /api/content ou middleware de content negotiation.
  • Para sites estáticos: serve /llms.txt já cobre a maioria dos casos práticos.

Ação: Configure o servidor/framework para responder com Markdown quando solicitado via Accept: text/markdown.

Ver guia de correção

Passos

  1. Avalie se faz sentido para seu stack — sites estáticos já têm /llms.txt como alternativa mais simples.
  2. Para Nuxt/Next.js: adicione middleware que, quando `Accept: text/markdown` for enviado, sirva uma versão Markdown da página.
  3. Para sites estáticos: garanta que /llms.txt esteja rico — é o equivalente prático.

Nuxt server middleware (server/middleware/markdown.ts)

export default defineEventHandler(async (event) => {
  const accept = getHeader(event, 'accept') ?? ''
  if (!accept.includes('text/markdown')) return

  // Redireciona para versão Markdown equivalente
  const url = getRequestURL(event)
  if (url.pathname === '/') {
    setHeader(event, 'content-type', 'text/markdown; charset=utf-8')
    // retorne o conteúdo Markdown da home
    return '# Worklift\n\nDescrição Markdown da home...'
  }
})

Pronto quando

  • GET / com Accept: text/markdown retorna Content-Type: text/markdown
  • Audit P1-MARKDOWN passa

P1-LINK-HEADERS

Headers HTTP Link (RFC 8288) ausentes

medium

GET https://fuels4life.com/ sem header Link — agentes não descobrem llms.txt, sitemap ou API pelo HTTP

  • Não confundir com <link> no HTML (canonical no <head> não conta). O check lê o header HTTP Link.
  • Formato: Link: </llms.txt>; rel="describedby"; type="text/markdown"
  • Nenhum header Link na resposta da home

Ação: Adicione headers Link na home apontando para /llms.txt, sitemap e, se houver API, /.well-known/api-catalog.

Ver guia de correção

Passos

  1. Confirme que o check é o header HTTP `Link`, não a tag HTML `<link rel="canonical">`.
  2. Na home, envie pelo menos um `Link` apontando para recursos que agentes devem descobrir: `/llms.txt`, `/sitemap.xml`, docs de API se existirem.
  3. Em hosting estático: `_headers` (Netlify/Cloudflare Pages), `nitro.routeRules`, ou config do CDN/nginx.
  4. Valide: `curl -sI https://seudominio.com/ | findstr /i Link` (Windows) ou `curl -sI … | grep -i ^link`.

Headers HTTP (RFC 8288)

Link: </llms.txt>; rel="describedby"; type="text/markdown"
Link: </sitemap.xml>; rel="index"
Link: </.well-known/api-catalog>; rel="api-catalog"

Nuxt — nitro.routeRules

nitro: {
  routeRules: {
    '/': {
      headers: {
        Link: '</llms.txt>; rel="describedby"; type="text/markdown", </sitemap.xml>; rel="index"',
      },
    },
  },
},

Cloudflare Pages / Netlify — public/_headers

/
  Link: </llms.txt>; rel="describedby"; type="text/markdown"
  Link: </sitemap.xml>; rel="index"

Pronto quando

  • GET / inclui header Link com rel de descoberta (describedby, index, api-catalog ou service-doc)
  • Audit P1-LINK-HEADERS passa

P2-JSONLD

JSON-LD ausente

critical

Nenhum bloco JSON-LD em https://fuels4life.com/

  • Busca: <script type="application/ld+json"> — 0 ocorrências
  • URL analisada: https://fuels4life.com/

Ação: Adicione JSON-LD (Organization, Product/SoftwareApplication, FAQPage).

Ver guia de correção

Passos

  1. Adicione pelo menos um bloco `<script type="application/ld+json">` na home (ou layout global).
  2. Inclua `Organization` ou `SoftwareApplication`/`Product` com name, url, description, logo.
  3. Valide JSON (vírgulas, aspas) — JSON inválido é pior que ausência.
  4. Opcional: adicione `WebSite` com `potentialAction` SearchAction se houver busca.

Organization + SoftwareApplication

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "name": "Nome da Marca",
      "url": "https://example.com",
      "logo": "https://example.com/logo.png"
    },
    {
      "@type": "SoftwareApplication",
      "name": "Nome do Produto",
      "applicationCategory": "BusinessApplication",
      "operatingSystem": "Web",
      "description": "O que o produto faz em uma frase.",
      "url": "https://example.com"
    }
  ]
}
</script>

Pronto quando

  • ≥1 bloco JSON-LD válido no HTML da home
  • Audit P2-JSONLD passa

P2-OPENING

Abertura pouco extratível

medium

Primeiros parágrafos não definem o produto claramente

  • Parágrafo 1 (10 chars): "Loading..."
  • Parágrafo 2 (18 chars): "What Sets Us Apart"

Ação: Defina o produto de forma direta nos 2 primeiros parágrafos ("X é uma ferramenta de Y que Z").

Ver guia de correção

Passos

  1. Se a evidência indicar SPA / HTML cru sem <p>: ative SSR/SSG primeiro (P1-RENDER) — reescrever copy no Hero.vue não coloca texto no HTML inicial.
  2. Com HTML populado: reescreva os 2 primeiros parágrafos acima da dobra.
  3. Primeira frase: "[Marca] é [categoria] que [benefício principal]."
  4. Segunda frase: público-alvo ou diferencial concreto.
  5. Evite abrir só com slogans ou CTAs.

Modelo de abertura

<p>Acme é uma plataforma de gestão de tempo para equipes remotas que integra timesheet, aprovações e relatórios em um só lugar.</p>
<p>Indicada para agências e consultorias B2B que cobram por hora e usam Slack no dia a dia.</p>

Pronto quando

  • View Source mostra parágrafo de abertura >50 chars com definição clara
  • Audit P2-OPENING passa

⚠ Precisão do probe não avaliada — ground truth não informado

⚠ Teste em IA não solicitado — apenas análise técnica do site