PS PrestaShop Intermédio

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

Gera automaticamente llms.txt e llms-full.txt para expor o seu catálogo PrestaShop aos LLM (ChatGPT, Claude, Perplexity, Gemini).

Atualizado Versão do módulo 1.0.0

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. 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.
Esta página foi útil?

Ainda com dúvidas? Contacte o suporte