Última atualização: 2026-05-22
DSA Art. 27 · EU AI Act · Art. 22 RGPD

Como é que o motor ordena os resultados

Pipeline determinístico, sem perfilamento. BM25-like + heurísticas declaradas. Sem LLM no ranking. Documentado para cumprir o Regulamento (UE) 2022/2065 e o EU AI Act.

1Pipeline em alto nível

Etapa 1Crawl
Etapa 2Tokenização
Etapa 3Índice GIN
Etapa 4BM25-like
Etapa 5Boosts
Etapa 6Diversidade
SERPResultado

2O que faz o motor

Indexa páginas web acessíveis publicamente (que não bloqueiem o crawler GeniusBot via robots.txt) e devolve resultados ordenados por relevância para a consulta do utilizador.

Páginas no índice
11.1M
11.072.660 exato
Domínios cobertos
1.5M
crawl global
Configuração FTS
english + simple
stemming paralelo
Função de score
ts_rank_cd
variante BM25

3Como ordena

  1. Indexação full-text — cada página é tokenizada e armazenada num índice invertido GIN do PostgreSQL 16 (configurações english + simple em paralelo). O simple preserva tokens como "São Paulo" que stemming inglês destruiria.
  2. Pontuação base BM25-likets_rank_cd com pesos por campo: A (Título) > B (Resumo) > C (Conteúdo) > D (Keywords). Pesos atuais: {0.8, 0.4, 0.2, 0.1}.
  3. Filtros geográficos — se a consulta indica geo=pt, restringimos a domínios .pt e .com.pt via índice parcial dedicado (latência mediana < 20ms após fix de 2026-05-21).
  4. Boosts heurísticos (multiplicativos) — ver tabela abaixo.
  5. Diversidade — máximo de 2 resultados por domínio nos top-10. Evita um único site dominar (ex: Wikipedia em queries informacionais).

4Tabela completa de boosts

SinalMultiplicadorQuando aplica
Match exato de domínio com 1.ª palavra×30Query githubgithub.com top-1
Substring no domínio×3Query continentecontinente.pt
TLD .pt×5Quando geo=PT ou query em português
Autoridade do domínio(curated + Tranco rank)²Sempre
Frescorexp(-Δt / 180d)Sempre — decaimento exponencial
Intenção · notícias×3Query com "notícias", "hoje", "ao vivo"
Intenção · comércio×3Query com "preço", "comprar", "loja"
Intenção · culinária×3Query com "receita", "como fazer X"

5Exemplo trabalhado

Query: continente promoções

  1. Tokenização → {continente, promoções}
  2. FTS GIN match → 1.214 candidatos
  3. ts_rank_cd base → top candidato continente.pt/promocoes: 0.412
  4. Boost domínio substring ×3 → 1.236
  5. Boost TLD .pt ×5 → 6.180
  6. Boost autoridade (Tranco #1.8k PT, curated +50%) → ×4.2 → 25.96
  7. Boost frescor (página atualizada há 2 dias) → ×0.99 → 25.70
  8. Diversidade: continente.pt apareceria 4× nos top-10, limitamos a 2

Resultado: continente.pt ocupa posições 1 e 2; restantes lugares vão para concorrentes e blogs de comparação.

6O que NÃO fazemos

7Parâmetros principais

ParâmetroValorEditável em runtime
Configuração full-textenglish + simpleNão
Função de pontuaçãots_rank_cd (variante BM25)Não
Limite de candidatos por consulta1000Sim (via env MAX_CANDIDATES)
Resultados por página10Sim (param limit)
Meia-vida do boost de frescor180 diasNão
Máx. resultados por domínio (top-10)2Não
Concurrent crawler workers24Sim (systemd template)

8Perguntas frequentes

Usam LLM (GPT, Claude, etc.) para gerar resultados?
Não. O ranking é 100% determinístico (BM25-like + regras). Não há geração de respostas, nem "AI overview" estilo Google. Quando essa feature existir, será claramente identificada como AI-generated.
Como é decidido o multiplicador de autoridade?
Combinação de Tranco rank (público, baseado em DNS popularity) elevado ao quadrado + lista curada manualmente para casos onde o Tranco subestima (ex: blogs PT de nicho mas confiáveis). A lista curada está em db/seed_authority.sql e será publicada quando o código for open-source.
Posso contestar a posição do meu site?
Sim. Envia o URL para privacy@adgenius.pro com o motivo. Se for caso de prejuízo claro (informação desatualizada, ranking obviamente errado), revemos manualmente em 30 dias úteis (DSA Art. 20).
O ranking é diferente para utilizadores diferentes?
Não. A única variação é por (query × geo). Não há "personalização" baseada em histórico. Duas pessoas a fazer a mesma query no mesmo idioma vêem o mesmo top-10.
Vão adicionar IA no futuro?
Talvez, para features auxiliares (sumarização, rerank semântico) — mas sempre opt-in e claramente identificadas. O ranking core continuará determinístico e auditável.

Contestar um resultado

Se quiseres que removamos uma página do índice ou identificaste um resultado prejudicial, contacta-nos em privacy@adgenius.pro com o URL e o motivo. Respondemos em até 30 dias úteis (Art. 20.º DSA).


Esta página é gerada pelo servidor adgenius-server-pg.cjs e reflete o código em produção. Detalhes técnicos em /api/health e /api/stats.