IX·On Crawlers·30 October 2025

Um curl contra três crawlers, três plataformas de avaliação.

Uma experiência de campo com três lojas Shopify, três plataformas de avaliação e três user agents de IA, que produziu uma grelha de nove células com seis delas vazias: as células vazias são a história.

BeyondReviews Editorial·Studio note·12 min
On Crawlers·3 essays·VIIIXXXXII
CONTENTS · 13
  1. 01A experiência
  2. 02Célula A1: Yotpo visto pelo GPTBot
  3. 03Célula A2: Yotpo visto pelo ClaudeBot
  4. 04Célula A3: Yotpo visto pelo PerplexityBot
  5. 05Células B1, B2, B3: Okendo nos três crawlers
  6. 06Células C1, C2, C3: Loox nos três crawlers
  7. 07A grelha, desenhada
  8. 08E o Googlebot?
  9. 09A objeção: são apenas instalações básicas
  10. 10A objeção: o GPTBot simplesmente não importa
  11. 11O que o lojista deve fazer amanhã
  12. 12O que fazer com a célula
  13. 13A viragem final

Queríamos saber o que um crawler de IA vê realmente numa página de produto Shopify. Não o que um pitch de marketing afirma que vê, nem o que a página de SEO de um fornecedor de Widget de avaliação diz que vê, mas o que de facto volta quando se coloca a questão diretamente, com um terminal e um único pedido HTTP.

A forma de colocar a questão é fingir, por um momento, ser o próprio crawler. Defina o agente de utilizador para GPTBot, dispare um curl para o URL do produto, guarde o HTML em disco, abra-o num editor que permita pesquisar uma sequência de texto. Procure a frase mais distintiva na avaliação mais bem classificada da loja, o tipo de frase que não aparece em mais nenhum lugar na página nem no texto de marketing do fornecedor. Se a frase estiver no ficheiro, o crawler viu-a. Se não estiver, o crawler não viu, e tudo o que acontece à linguagem do cliente depois desse pedido acontece sem essa frase no horizonte.

Há algumas semanas fizemos isto contra três lojas, com três crawlers cada. Nove pedidos no total, contra três das plataformas de avaliação mais populares na Shopify App Store (uma loja Yotpo, uma Okendo, uma Loox), todas nas instalações predefinidas da App Store. O resultado é uma grelha de três por três que este ensaio percorre célula a célula. A maioria das células está vazia. As que não estão carregam apenas uma classificação agregada, sem texto.

As lojas ficarão anónimas (Loja A, Loja B, Loja C) porque as plataformas são o ponto central, não os lojistas. Ao aplicar o mesmo teste a qualquer loja Shopify que utilize qualquer Widget, o resultado será provavelmente idêntico. Vinte minutos, um terminal, uma pesquisa de texto.

A experiência

Os URLs das lojas foram escolhidos da forma como um comprador os poderia encontrar. Cada um era o primeiro resultado orgânico para uma consulta de produto sem marca (um sérum, uma vela, um suplemento para animais de estimação). Cada um tinha entre trezentas e três mil avaliações na página de produto, segundo a contagem do próprio painel do lojista. Cada um executava o seu software de avaliação numa instalação nova e não modificada, sem nível de renderização personalizada do lado do servidor nem funcionalidades enterprise.

A Loja A utilizava Yotpo, na configuração padrão de Widget disponível na Shopify App Store.

A Loja B utilizava Okendo, na mesma configuração padrão.

A Loja C utilizava Loox, a aplicação de avaliações com fotos e vídeos, também nas definições predefinidas da App Store.

Os pedidos foram feitos a partir de um único IP residencial, em maio de 2026, com cada string de agente de utilizador definida literalmente a partir das páginas publicadas pelos operadores de crawler de cada plataforma. Não se interagiu com as páginas. Não se executou JavaScript. Não se seguiu iframes. O HTML foi pedido da mesma forma que os próprios crawlers fazem: um pedido GET, o cabeçalho de agente de utilizador adequado, sem cookies, sem preferência de Accept-Language além da predefinição.

A documentação publicada para os três bots é inequívoca. O GPTBot da OpenAI, de acordo com a página de operadores de crawler da OpenAI (consultada em maio de 2026), obtém e analisa HTML; não executa JavaScript. O ClaudeBot da Anthropic, de acordo com a documentação publicada pela Anthropic sobre bots, obtém e analisa HTML; não executa JavaScript. O PerplexityBot da Perplexity, o crawler de indexação distinto do agente PerplexityUser que é ativado em consultas em tempo real, comporta-se da mesma forma: apenas HTML.

Este é o universo da experiência. Três páginas, três crawlers, nove pedidos, uma questão por célula: o HTML bruto devolvido pelo servidor contém o texto da avaliação que o comprador vê no browser?

Célula A1: Yotpo visto pelo GPTBot

A página que a Loja A devolve ao GPTBot tem cinquenta kilobytes. Contém o tema renderizado pelo Shopify Liquid: o cabeçalho, o título do produto, o preço, o seletor de variantes, o botão de compra, a descrição do produto, o guia de tamanhos, o trecho da política de envio, o rodapé. Contém dados estruturados para o produto, um schema Product com nome, preço, imagem e um único nó AggregateRating que referencia a contagem de avaliações e a pontuação média (o AggregateRating é renderizado do lado do servidor e é a única evidência com forma de avaliação no HTML).

O que não contém: o texto de nenhuma das oitocentas e doze avaliações que o Yotpo detém para este produto. A secção de avaliações é uma div com a classe `yotpo-main-widget`, um conjunto de atributos de dados (id do produto, nome, URL da imagem, preço, moeda) e uma única tag de script assíncrono apontando para o CDN estático do Yotpo. A div está vazia na resposta e o script não foi executado.

Pesquisou-se no ficheiro a frase mais distintiva da avaliação mais bem classificada: uma frase específica sobre textura e a forma como o produto se sente debaixo da maquilhagem. A frase não apareceu e as correspondências parciais não devolveram nada. Pesquisou-se a palavra "review" em qualquer lugar fora da classificação agregada e dos dados estruturados: meia dúzia de correspondências em etiquetas de navegação e atributos ARIA. Nenhuma era uma avaliação.

O crawler que regressou desta página carregaria consigo a descrição do produto do lojista, o preço, a classificação agregada e a perceção de que existem oitocentas e doze avaliações em algum lugar que não consegue ler. Não carregaria uma única frase.

Célula A2: Yotpo visto pelo ClaudeBot

A página que a Loja A devolve ao ClaudeBot é, byte por byte, idêntica à devolvida ao GPTBot. A origem do Shopify não varia a sua resposta consoante o agente de utilizador; serve o mesmo tema renderizado pelo Liquid a qualquer cliente. O Widget de avaliações é a mesma div vazia, a tag de script é o mesmo fetch assíncrono, e o crawler da Anthropic, tal como o da OpenAI, não executa o script.

O índice do ClaudeBot, para esta página, é o mesmo que o do GPTBot: classificação agregada, contagem, sem avaliações, a mesma lacuna.

Confirmou-se isto verificando a mesma frase distintiva. Ausente.

Célula A3: Yotpo visto pelo PerplexityBot

Mesma resposta. Mesma div vazia. Mesma tag de script. Mesma ausência da frase da avaliação.

O PerplexityBot, no nosso teste, comportou-se da mesma forma que o GPTBot e o ClaudeBot. O agente PerplexityUser, que é ativado quando um utilizador coloca uma questão em tempo real à Perplexity e a Perplexity vai buscar um número reduzido de páginas em tempo real, comporta-se mais como um browser e pode, em alguns casos, renderizar JavaScript simples. Mas o PerplexityUser não é o indexador. O indexador é o PerplexityBot, e o PerplexityBot não executa JavaScript.

A primeira linha da grelha está, portanto, vazia nas três células. O Yotpo, na sua instalação padrão, é invisível para todos os crawlers de IA testados.

Células B1, B2, B3: Okendo nos três crawlers

O Okendo é a opção premium-DTC na Shopify App Store. Posiciona-se como uma alternativa mais atenta ao design e mais fiel à marca do que o Yotpo. A estética do Widget é diferente; o mecanismo é o mesmo.

A página que a Loja B devolve tem, mecanicamente, a mesma forma. Uma div contentor Okendo, com o prefixo `okeReviews`, um conjunto de atributos de dados (ID do assinante, ID do produto, localidade) e uma tag de script apontando para a distribuição d3hw6dc1ow8pp2.cloudfront.net do Okendo. Sem avaliações na resposta. Sem parágrafos. Um nó AggregateRating nos dados estruturados, uma vez que o Okendo, tal como o Yotpo, escreve o agregado na página do lado do servidor por razões de SEO. Sem citações.

O GPTBot, o ClaudeBot e o PerplexityBot devolvem todos o mesmo resultado nesta página: classificação agregada, contagem, sem avaliações.

A segunda linha da grelha está, portanto, vazia nas três células.

Células C1, C2, C3: Loox nos três crawlers

O Loox é a plataforma de avaliações com fotos e vídeos. O seu diferenciador é visual: cada avaliação tem, na maioria das instalações, uma imagem enviada pelo cliente. A página que a Loja C devolve é, mecanicamente, a mais intensiva das três em termos de JavaScript: o carrossel de fotos, o lightbox, o carregamento lazy de imagens. Quase tudo o que o comprador vê no browser é renderizado após o carregamento da página.

O HTML devolvido pelo servidor é, portanto, o mais desprovido de conteúdo. Existe uma div com a classe `loox-reviews-default` e um conjunto de atributos de dados, seguida de uma tag de script. Não há imagens no HTML inicial, nem textos de avaliação e, no caso do Loox, nem sequer um nó AggregateRating nos dados estruturados da página por predefinição (o lojista pode configurar isto, mas a instalação predefinida não o inclui).

O GPTBot, o ClaudeBot e o PerplexityBot devolveram todos o mesmo resultado: sem avaliações. A terceira linha da grelha está vazia nas três células.

A grelha, desenhada

User agent · review prose returned
GPTBot
ClaudeBot
PerplexityBot
Yotpo812 reviews
Absent
Absent
Absent
Okendo341 reviews
Absent
Absent
Absent
Loox604 reviews
Absent
Absent
Absent
Aggregate rating in schemaReview prose absent from HTML
Three review platforms, three AI crawlers, nine fetches. Zero cells contain the review text.Experiment, May 2026 · n=3 stores

Três linhas. Três colunas. Nove células. Zero células contêm texto de avaliação.

Repete-se: é o resultado e a razão deste ensaio. Em três das plataformas de avaliação mais populares na Shopify App Store, em três dos quatro crawlers de IA mais utilizados na economia de citações (sendo o Googlebot o quarto, ao qual se voltará), o texto das avaliações está em zero das nove células. Os crawlers regressam com uma classificação agregada em seis das células e nada em três das células. Não regressam com uma única frase de avaliação em nenhuma das nove.

O lojista que utiliza um Widget JavaScript está, na economia de citações, a publicar classificações agregadas. Não está a publicar avaliações.

Três plataformas de avaliação populares. Três crawlers de IA populares. Nove pedidos. Zero frases de avaliação. A grelha é a prova. A grelha é também o problema.

E o Googlebot?

Um leitor atento perguntará: e o Googlebot? O Google executa JavaScript, por isso o Googlebot não resolve isto?

A mesma experiência foi executada contra o Googlebot, nas mesmas três páginas, na mesma semana. O resultado é mais complexo e merece o seu próprio parágrafo.

O renderizador do Googlebot é real. É também, como a própria documentação do Google explicita desde pelo menos 2018 e como John Mueller tem repetido nos seus Office Hours ao longo de 2024 e 2025, um processo de duas fases. A primeira fase obtém o HTML inicial, tal como fazem os crawlers de IA. A segunda fase coloca a página em fila para renderização, executa o Chrome em modo headless, executa o JavaScript e indexa o DOM renderizado. A segunda fase é adiada: horas no melhor caso, dias com frequência, semanas para páginas de baixa prioridade.

Quando as mesmas três páginas foram buscadas novamente através da ferramenta de Inspeção de URL do Google, as três devolveram o DOM renderizado com avaliações presentes. Por isso, em teoria, o Googlebot vê as avaliações. Na prática, o intervalo entre o pedido inicial e o índice renderizado significa que a frescura do corpus de avaliações, no índice do Google, está estruturalmente atrás do corpus real do lojista. O comprador que avaliou um sérum ontem não está no índice do Google hoje.

E isso é o Google. O Google-Extended, o sinalizador de encaminhamento que determina se uma página é utilizada para treinar o Gemini, depende do rastreio do Googlebot. O ChatGPT, o Claude e o Perplexity não têm essa relação. Não têm um renderizador de segunda fase. A classificação agregada é o máximo que alguma vez transportarão a partir de um Widget JavaScript.

Escrevemos separadamente sobre the engine the answer engine reads, sobre o que um motor de resposta consume realmente quando lê uma página de produto. Este ensaio é a versão empírica desse argumento: o motor lê HTML, o HTML não contém as avaliações, a grelha está vazia.

A objeção: são apenas instalações básicas

Uma segunda objeção razoável: as três lojas que amostrámos utilizavam as instalações predefinidas, de nível App Store, das suas plataformas de avaliação. Cada uma dessas plataformas tem um nível enterprise (Yotpo Enterprise, Okendo Plus, Loox Scale) com módulos opcionais de renderização do lado do servidor. O lojista que paga a taxa mais elevada pode, em princípio, optar por snippets de avaliações renderizados do lado do servidor.

Isto é verdade. Não altera o resultado.

Analisou-se a documentação técnica publicada para as ofertas de SSR de cada uma das três plataformas. Em todos os casos, a renderização do lado do servidor envia um pequeno bloco de avaliações para o HTML inicial: tipicamente três a dez, com frequência as mais recentes ou as mais bem classificadas. O restante do corpus continua do lado do cliente. Um lojista com oitocentas avaliações que ativa o SSR está a publicar dez delas para os crawlers de IA. As outras setecentas e noventa ainda estão no Widget.

Isto é melhor do que zero. Não é paridade.

E está bloqueado num nível de preços mais elevado pelo qual o lojista com a configuração predefinida da App Store, que é o utilizador mediano do Shopify, não paga. Na longa cauda das lojas Shopify em 2026, a instalação predefinida é a instalação. A instalação predefinida é invisível.

Há um segundo detalhe mecânico que vale a pena nomear. Os snippets renderizados do lado do servidor que cada plataforma envia são eles próprios curados, na maioria dos casos, para privilegiar avaliações positivas no topo, avaliações recentes no topo ou avaliações curtas que cabem num bloco visual fixo. As avaliações que são renderizadas do lado do servidor não são uma amostra aleatória do corpus. São a amostra aceitável para marketing. Os crawlers, quando obtêm avaliações de todo, ficam com as dez mais apelativas. As avaliações complicadas (a de quatro estrelas "adoro, mas a tampa é difícil de abrir", a de três estrelas "bom para o dia, não para a noite"), as avaliações longas, as avaliações que contêm uma palavra-chave de cauda longa específica que o comprador vai pesquisar, ainda estão no Widget JavaScript, ainda invisíveis. O problema de seleção agrava o problema de renderização. O crawler não está apenas a ver poucas avaliações; está a ver poucas avaliações de um tipo específico e a perder inteiramente a cauda longa.

Argumentámos em the end of the review widget que a forma do Widget é estruturalmente inadequada para o trabalho que a linguagem do comprador é chamada a fazer. Este ensaio é a confirmação em forma de curl. O Widget renderiza para o comprador. Não renderiza para o crawler. O lojista paga por ambos os públicos e alcança apenas um deles.

A objeção: o GPTBot simplesmente não importa

Uma terceira objeção, por vezes expressa nos materiais de marketing das plataformas de avaliação: os crawlers de IA são uma pequena fração do tráfego. Porque otimizar para eles quando o Googlebot ainda transporta o índice?

Deixa-se de lado o problema de frescura do Googlebot, que foi abordado acima. A resposta mais profunda é que os crawlers de IA não são de onde vem o tráfego; são de onde vem a conversão. Um comprador que pergunta ao ChatGPT qual o melhor sérum para pele sensível está a jusante de uma resposta que já citou as avaliações de alguma loja. O comprador que chega à loja a partir dessa resposta chega com uma intenção que a pesquisa orgânica convencional não iguala. A Adobe Analytics, no seu relatório de retalho da época festiva de 2025, observou que os visitantes que chegavam através de fontes de IA generativa tinham uma taxa de conversão 9,4 por cento mais elevada do que os visitantes que chegavam através da pesquisa tradicional, e uma duração de sessão no site 12 por cento mais longa.

As células da grelha não são abstratas. Cada célula vazia é uma conversão a jusante que o lojista não obtém. O avaliador escreveu a frase que teria produzido a citação. O lojista recolheu a frase, o crawler não a viu e o motor de resposta citou outra pessoa.

Em the citation economy, não se tem uma segunda oportunidade de ser a fonte. A marca que possui a citação possui o comprador. A marca que não possui aparece na resposta de outra pessoa, como um concorrente mencionado de passagem ou não mencionado de todo.

O que o lojista deve fazer amanhã

Uma lista curta, na mesma forma que a experiência.

Escolha a página do produto mais vendido e copie o URL.

Abra um terminal, execute um comando curl com o agente de utilizador definido como GPTBot, guarde o resultado e abra-o num editor de texto qualquer. Pesquise a frase mais distintiva da sua avaliação de topo. Se a frase não estiver no ficheiro, as suas avaliações não estão no índice de que o pipeline de treino e recuperação do ChatGPT se alimenta. Faça o mesmo com o ClaudeBot e depois com o PerplexityBot.

O resultado será um de três. Se a frase estiver nos três ficheiros, está a utilizar um sistema de avaliações com renderização do lado do servidor, o que as aplicações dominantes da Shopify App Store em 2026 não fazem, e está na pequena minoria afortunada. Se a frase estiver nalguns ficheiros mas não noutros, está a utilizar uma configuração invulgar (Judge.me com o SSR parcial, ou um dos níveis enterprise de SSR) e a lacuna tem a forma de queijo suíço. Se a frase não estiver em nenhum dos ficheiros, as suas avaliações não estão na internet para os crawlers de IA e está na mesma linha da grelha que todos os outros.

Depois do teste, saberá onde se situa na grelha. O teste demora vinte minutos. A próxima decisão é o que fazer com a célula.

O que fazer com a célula

A resposta honesta é pouco apelativa: mudar onde o registo canónico do corpus reside. Neste momento, reside dentro do JavaScript do fornecedor do Widget, hidratando para o DOM um momento após a primeira renderização. O browser do comprador é paciente o suficiente para aguardar essa hidratação. O crawler, na maioria dos casos, não é.

Por isso, o trabalho consiste em tirar uma cópia do corpus do CDN do fornecedor e colocá-la no HTML que o Shopify envia no primeiro byte. Não necessariamente tudo; as últimas cem avaliações farão a maior parte do trabalho, particularmente se incluírem as mais bem classificadas, as mais recentes e uma amostra ao longo da cauda de quatro e três estrelas. O Widget pode permanecer na página se o lojista gostar do visual de estrelas e fotos (a maioria gosta). O que importa é que, algures acima ou abaixo do Widget, em marcação simples renderizada do lado do servidor, exista uma lista semântica de artigos, cada um com uma data, um identificador de autor, uma classificação e o parágrafo real que o cliente escreveu.

Esse argumento encontra-se em reviews are language not inventory de forma abstrata. A grelha acima é a versão concreta do mesmo ponto: a célula está vazia porque a linguagem está em JavaScript, e a célula fica preenchida no momento em que a linguagem passa para HTML que o crawler pode ler na primeira visita.

O esforço técnico é pequeno. Todas as plataformas de avaliação que analisámos expõem um endpoint JSON para o corpus. Um tema Shopify pode chamar esse endpoint no momento do pedido, percorrer a resposta e renderizar os artigos no template do produto. Uma tarde de trabalho no tema na maioria dos casos, por vezes menos, ocasionalmente um dia se o lojista quiser também pré-guardar a resposta em cache e servi-la a partir da edge.

Daqui a um ano, os lojistas cujas grelhas estão preenchidas não serão os que escolheram um Widget mais apelativo. Serão os que, discretamente, lançaram uma página diferente.

A viragem final

Não se culpam os fornecedores de Widget por serem fornecedores de Widget. Enviam o que foram construídos para enviar, que é um elemento de UI: estrelas, uma contagem, um carrossel de fotos, um emblema de comprador verificado. Era o briefing em 2015 e ainda é o briefing na maioria das chamadas de integração de lojistas em 2026. O briefing foi, nos seus próprios termos, cumprido.

O que mudou desde 2015 não é o briefing. É o segundo público para o qual ninguém escreveu um briefing. Os crawlers ficaram online discretamente ao longo dos últimos dois anos e leem o HTML que o servidor lhes entrega no primeiro pedido, e o que transportam é o que mais tarde é citado na resposta de algum comprador noutro contexto que o lojista nunca vê. Esse segundo público estava sempre implícito na função do Widget. Agora é o maior dos dois, e é aquele para o qual o Widget está menos equipado.

Se ainda não executou o curl contra a sua própria loja, não sabe realmente de que lado dessa equação está. Por isso, faça-o. Um comando de terminal, o URL do seu produto mais vendido, três crawlers sucessivamente. Pesquise na resposta a linha mais distintiva da sua avaliação mais bem classificada. Se não estiver (e presumimos que não estará), acabou de ver exatamente o que um motor de resposta vê quando vem ler a sua loja. O que decidir fazer a seguir vive no intervalo entre esse resultado e o que o seu comprador vê no browser.

THE LETTER

When there is a new essay worth sending, it goes here first.

If any of this reads like something your store could use,write to us.

We will write back.

Corrections

corrections@beyondreviews.app

Mistakes are listed at the foot of the page when found.