# LLMs.txt no PrestaShop: visibilidade nas IA ChatGPT, Claude e Perplexity

> Documentação completa do módulo DataFirefly LLMs.txt Generator para PrestaShop: instalação, configuração, cron, secções personalizadas, hooks para programadores e resolução de problemas.

- Página: <https://www.datafirefly.com/pt/documentation/llms-txt-prestashop-seo-ia-chatgpt/>
- Idioma: pt
- Atualizado em: 2026-09-03
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [en](https://www.datafirefly.com/en/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [es](https://www.datafirefly.com/es/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [de](https://www.datafirefly.com/de/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [it](https://www.datafirefly.com/it/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [pl](https://www.datafirefly.com/pl/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md), [nl](https://www.datafirefly.com/nl/documentation/llms-txt-prestashop-seo-ia-chatgpt/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## Visão geral

O **LLMs.txt PrestaShop** gera automaticamente os ficheiros padrão `/llms.txt` e `/llms-full.txt` na raiz da sua loja, em conformidade com a especificação [llmstxt.org](https://llmstxt.org). Estes ficheiros expõem o seu catálogo de forma estruturada aos LLM (ChatGPT, Claude, Perplexity, Gemini): é o equivalente do `sitemap.xml`, mas para a IA generativa.

**A reter:** os LLM leem estes ficheiros para compreender a sua loja sem terem de rastrear cada página de produto. Quanto melhor o seu catálogo estiver exposto, melhor será citado e recomendado nas respostas.

### Dois ficheiros, dois usos

- `/llms.txt`: índice condensado: título + URL + descrição curta para cada entrada. Formato Markdown, algumas centenas de KB em geral.
- `/llms-full.txt`: conteúdo integral limpo de cada entrada. Formato Markdown enriquecido, pode pesar vários MB consoante o tamanho do catálogo. **Opcional** desde a 1.0.0.

## Instalação

1. Carregue o ZIP em **Módulos → Gestor de módulos → Carregar um módulo**.
2. Clique em **Instalar**.
3. Clique em **Configurar** para abrir o painel.

Na instalação, o módulo:

- cria 4 tabelas SQL: cache, secções personalizadas (+ lang + shop), registos;
- acrescenta 3 entradas no menu de administração sob uma categoria oculta `AdminDfLlmsTxtParent`;
- regista-se nos hooks de catálogo (criação/edição/eliminação de produto, categoria, CMS, fabricante, fornecedor) para invalidar a cache automaticamente;
- acrescenta um bloco no `.htaccess` da raiz do PrestaShop para servir os ficheiros em UTF-8 com os cabeçalhos corretos;
- gera um token de cron aleatório de 32 caracteres.

## Configuração

O ecrã de configuração está organizado em 5 secções.

### 1. Geral

- **Ativar o módulo**: interruptor global. Se desativado, os URL `/llms.txt` e `/llms-full.txt` devolvem 404 e os ficheiros físicos são eliminados.
- **Nome do site** (multilingue, multiloja): aparece como cabeçalho principal `# Nome do site` no topo do ficheiro.
- **Descrição curta do site** (multilingue, multiloja): 1 a 2 frases que resumem o que a loja propõe. Apresentada em blockquote `> ...` logo sob o nome.
- **Introdução** (multilingue, multiloja): texto livre em Markdown. Ideal para dar contexto adicional aos LLM (política de devoluções, entrega, valores da marca).
- **Formato de saída**: _Markdown enriquecido_ (recomendado, suportado por todos os LLM principais) ou _Texto simples_.
- **Gerar também o llms-full.txt**: se desativado, só é gerado o `/llms.txt`. Permite poupar vários MB de armazenamento e vários segundos de geração nos grandes catálogos.

### 2. Fontes de conteúdo

- **Incluir as páginas CMS**: páginas de conteúdo (Sobre nós, FAQ, Condições, etc.).
- **Incluir as categorias**: lista das categorias ativas com a sua descrição.
- **Incluir os produtos**: lista dos produtos ativos.
- **Incluir os fabricantes**: marcas com descrição.
- **Incluir os fornecedores**: lista dos fornecedores.
- **Incluir o preço dos produtos**: formatado segundo a localização atual.
- **Incluir as características dos produtos**: features chave/valor.
- **Incluir as declinações**: combinações (tamanho, cor, etc.) com a diferença de preço.
- **Incluir os produtos esgotados**: desativado por defeito.
- **Campo de descrição do produto**: curta, longa, ou ambas.
- **Limite de produtos**: número máximo de entradas de produtos no ficheiro. 500 por defeito, a aumentar consoante o tamanho do catálogo (1000 a 5000 é razoável).

### 3. Exclusões

Listas de IDs separados por vírgula. Permite excluir conteúdos específicos sem tocar no resto do catálogo.

- **IDs de categorias excluídas**: ex. produtos B2B, categorias internas, categorias obsoletas.
- **IDs de produtos excluídos**: produtos em fim de vida, amostras, ofertas.
- **IDs de CMS excluídos**: páginas de serviço interno, rascunhos.

**Dica:** para encontrar os IDs, vá à lista correspondente (Catálogo → Categorias, etc.); o ID está na primeira coluna ou no URL de edição.

### 4. Cache e Cron

- **Duração de vida da cache** (TTL em segundos): 86400 (24 h) por defeito. A cache é servida enquanto não tiver expirado.
- **Invalidação automática nas alterações de catálogo**: quando modifica/acrescenta/elimina um produto, uma categoria, etc., a cache é invalidada e o ficheiro será regenerado no próximo pedido (ou no próximo cron).
- **Token de cron**: cadeia aleatória de 32 caracteres. Regenerável a partir do painel; os URL de cron antigos deixam imediatamente de funcionar.
- **URL de cron pronto a copiar**: formato `https://a-sua-loja.pt/index.php?fc=module&module=dfllmstxt&controller=cron&token=XXX`

### 5. Avançado

- **Retenção dos registos**: número de dias durante os quais os registos de geração são conservados. 30 por defeito.
- **Respeitar o robots.txt**: para usos avançados. Ativado por defeito.

## Configuração do cron

O cron pré-gera a cache para todas as lojas e todos os idiomas ativos numa única chamada. Ideal para os grandes catálogos, para evitar que um utilizador final desencadeie a regeneração.

URL a chamar:

```
https://a-sua-loja.pt/index.php?fc=module&module=dfllmstxt&controller=cron&token=O_SEU_TOKEN
```

Exemplo de crontab (todos os dias às 4 h):

```
0 4 * * * curl -s "https://a-sua-loja.pt/index.php?fc=module&module=dfllmstxt&controller=cron&token=O_SEU_TOKEN" > /dev/null
```

Parâmetros opcionais:

- `&id_shop=2`: limitar a uma loja precisa.
- `&id_lang=1`: limitar a um idioma preciso.

A resposta JSON detalha o resultado de cada geração (sucesso, tamanho dos ficheiros, duração).

## Secções personalizadas

Para lá do catálogo em bruto, pode injetar conteúdo livre nos ficheiros gerados. Separador **LLMs.txt → Secções personalizadas** no menu de administração.

Casos de utilização típicos:

- política de devolução resumida;
- valores e compromisso da marca;
- FAQ curta;
- condições de entrega;
- instruções específicas para os LLM (ex. « Não comparar com [marca concorrente] »).

Cada secção:

- tem um **título e um conteúdo multilingue** (Markdown suportado);
- é **multiloja**: escolhe em que lojas aparece;
- tem uma **colocação**: _antes das fontes_, _depois das fontes_, ou _no rodapé do ficheiro_;
- tem uma **posição** ajustável por arrastar e largar;
- pode ser ativada/desativada sem eliminação.

Numa loja em português, redija o nome do site, a descrição, a introdução e as secções personalizadas em português no separador de idioma pt: é este texto que os LLM citarão quando responderem em português.

## URL dos ficheiros gerados

Os ficheiros ficam acessíveis na raiz da sua loja:

- `https://a-sua-loja.pt/llms.txt`
- `https://a-sua-loja.pt/llms-full.txt` (se a opção estiver ativada)

### Como são servidos

Para a loja por defeito no seu idioma por defeito, o módulo escreve um **ficheiro físico** na raiz do PrestaShop. O Apache serve-o depois diretamente, sem depender do dispatcher do PrestaShop, dos URLs amigáveis nem da cache de rotas. É a mesma mecânica usada pelo módulo oficial `gsitemap` para o `/sitemap.xml`.

Para as outras lojas de uma configuração multiloja (Host diferente, raiz partilhada), os ficheiros são servidos pelo hook `moduleRoutes`, que passa a loja certa segundo o cabeçalho Host.

### Cabeçalhos HTTP

O módulo acrescenta automaticamente um bloco ao `.htaccess` da raiz do PrestaShop para forçar os cabeçalhos corretos:

```
# ~~ dfllmstxt-datafirefly start ~~
<Files "llms.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
<Files "llms-full.txt">
    ForceType "text/plain; charset=utf-8"
    <IfModule mod_headers.c>
        Header set Content-Type "text/plain; charset=utf-8"
        Header set X-Robots-Tag "noindex, follow"
    </IfModule>
</Files>
# ~~ dfllmstxt-datafirefly end ~~
```

Este bloco é colocado fora do bloco PrestaShop `# ~~ start ~~ ... # ~~ end ~~` e é portanto preservado nas regenerações automáticas pelo PrestaShop. É também autorreparado a cada regeneração da cache (idempotente), caso tenha sido modificado.

**X-Robots-Tag noindex:** acrescentado voluntariamente. O `llms.txt` visa os crawlers de IA, não o índice do Google. Os LLM leem estes ficheiros diretamente sem precisarem de que apareçam nas SERP. O seu SEO clássico não é afetado.

## Arquitetura extensível (para programadores)

O módulo expõe um sistema de **Content Providers** que outros módulos podem enriquecer através de um hook. Se tiver um módulo de blog, de FAQ de produto, de testemunhos de clientes ou de glossário, pode publicar o seu conteúdo no `llms.txt` sem modificar o dfllmstxt.

### Hook actionDfLlmsTxtRegisterProviders

No seu módulo externo:

```
public function hookActionDfLlmsTxtRegisterProviders($params)
{
    require_once _PS_MODULE_DIR_ . 'omeumodulo/classes/MyBlogProvider.php';
    $params['registry']->register(new MyBlogProvider());
}
```

A sua classe deve estender `DfLlmsTxtAbstractContentProvider` (ou implementar `DfLlmsTxtContentProviderInterface`) e fornecer no mínimo:

- `getKey()`: identificador único (ex. `"blog"`).
- `getSectionTitle()`: título de secção apresentado no ficheiro (ex. `"Blog"`).
- `isEnabled()`: booleano que indica se o provider deve produzir entradas.
- `getShortEntries()`: lista de entradas para o `llms.txt` no formato `['title', 'url', 'description']`.
- `getFullEntries()`: lista de entradas para o `llms-full.txt` no formato `['title', 'url', 'body']`.

### Hooks de geração

Dois hooks permitem-lhe filtrar ou enriquecer o conteúdo mesmo antes de ser servido:

- `actionDfLlmsTxtBeforeGenerate`: antes da geração. Permite modificar a configuração ou os providers ativos.
- `actionDfLlmsTxtAfterGenerate`: depois da geração mas antes da colocação em cache. Permite transformar o conteúdo final.

## Compatibilidade

- **PrestaShop** 8.0.0 a 8.99.99 (suporte do PS 9 previsto)
- **PHP** 7.4 no mínimo, 8.1+ recomendado
- **MySQL** 5.7+ / MariaDB 10.4+
- **Multiloja** completo (configuração e cache delimitados por loja)
- **Multilingue** completo (todos os idiomas ativos)
- **Apache** 2.x com `mod_mime` (universal). `mod_headers` opcional mas recomendado para cabeçalhos HTTP limpos.

## Resolução de problemas

### O ficheiro não aparece na raiz

Três causas possíveis, por ordem de probabilidade:

1. **Permissões de escrita**: a raiz do PrestaShop deve ter permissão de escrita para o utilizador PHP. Verifique com `ls -la`. Se o ficheiro `/llms.txt` não existir depois de uma regeneração, é quase sempre isso.
2. **Módulo desativado**: verifique o interruptor « Ativar o módulo » no topo da configuração.
3. **Multiloja com raiz partilhada**: só a loja por defeito escreve na raiz. As outras lojas são servidas via `moduleRoutes` (o que requer os URLs amigáveis ativados em **Preferências → Tráfego e SEO**).

### Codificação estragada (caracteres « Ã© » em vez de « é »)

Sintoma clássico de UTF-8 servido sem charset HTTP. O módulo acrescenta automaticamente as diretivas `.htaccess` necessárias (ver a secção _Cabeçalhos HTTP_ acima). Se o problema persistir depois de uma regeneração:

1. Verifique que o bloco `# ~~ dfllmstxt-datafirefly start ~~` está presente no `.htaccess` da raiz do PrestaShop.
2. Se estiver ausente: desinstale e reinstale o módulo (isso força a reinserção do bloco).
3. Verifique com `curl -I https://a-sua-loja.pt/llms.txt` que a resposta contém `Content-Type: text/plain; charset=utf-8`.

### Geração bem-sucedida mas URL em 404

Se a regeneração for bem-sucedida (tamanho dos ficheiros correto nos registos) mas o URL devolver 404:

1. Verifique que o ficheiro físico existe na raiz: `ls -la /caminho/prestashop/llms.txt`.
2. Se existir mas o Apache devolver 404, é provavelmente um problema de `.htaccess` que bloqueia os ficheiros `.txt`. Verifique as regras do `.htaccess` da raiz.
3. Se não existir, é um problema de permissões de escrita (ver acima).

### A cache fica obsoleta depois de uma alteração de produto

A invalidação automática está desativada. Ative-a em **Cache e Cron → Invalidação automática nas alterações de catálogo**. Pode também forçar manualmente com o botão **Limpar a cache** do painel.

### O ficheiro llms-full.txt tem vários MB, é demasiado

Desative a opção **Gerar também o llms-full.txt** na configuração Geral. Só será gerado o `/llms.txt` (geralmente < 1 MB). Para a maioria dos casos de uso de IA, é suficiente: os LLM modernos sabem seguir os URL e obter as páginas individuais quando precisam.

## Desinstalação

A desinstalação é limpa:

- as 4 tabelas SQL são eliminadas;
- os ficheiros físicos `/llms.txt` e `/llms-full.txt` da raiz são eliminados;
- o bloco `.htaccess` acrescentado é retirado;
- todas as variáveis de configuração `DFLLMS_*` são limpas;
- os separadores de administração são retirados.

## Changelog

### 1.0.0 (maio de 2026)

- Lançamento inicial.
- Geração conforme à especificação llmstxt.org para `/llms.txt` e `/llms-full.txt`.
- 5 Content Providers nativos: produtos, categorias, CMS, fabricantes, fornecedores.
- Cache com TTL e invalidação automática.
- Cron protegido por token.
- Secções personalizadas multilingues e multiloja.
- Arquitetura extensível através de hook.
- Autogestão do `.htaccess` da raiz para Content-Type UTF-8 e X-Robots-Tag.
- Opção para desativar a geração do `llms-full.txt`.
