# Qué es el user agent y cómo identifica a cada bot

> Qué es el user agent, cómo se lee la cadena de un navegador o de Googlebot, por qué no prueba quién visita tu tienda y cómo se comprueba en los registros.

URL: https://clione.ai/es/glosario/user-agent/
Lang: es

El _user agent_ no es un [agente de IA](/es/glosario/agente-de-ia/) ni un programa que tengas que instalar: es la línea de texto con la que se presenta quien pide una página a tu servidor. La manda el navegador de un cliente, la manda [Googlebot](/es/glosario/googlebot/) y la manda cada bot de una empresa de IA. A una tienda le importa por dos motivos. Es **lo primero que miras para saber quién ha visitado una ficha**, en los registros del servidor o en las estadísticas de tu CDN. Y es el nombre al que se dirigen las reglas de [`robots.txt`](/es/glosario/robots-txt/). Lo que no hace es demostrar nada, porque lo escribe el que pide.

## Cómo funciona

El estándar de HTTP, el RFC 9110, define la cabecera `User-Agent` como la información sobre el programa que origina la petición. Dice que un cliente debería enviarla en cada petición y explica para qué la usan los servidores: para acotar problemas de compatibilidad, para esquivar o adaptar respuestas a las limitaciones de un programa concreto y para las estadísticas de navegadores y sistemas.[^rfc9110] **El formato es una lista de productos**, cada uno con su nombre y, si quiere, su versión separada por una barra, seguidos de comentarios entre paréntesis, ordenados de más a menos importante. El ejemplo del estándar es `CERN-LineMode/2.15 libwww/2.17b3`.[^rfc9110]

En la práctica, las cadenas de los navegadores son más largas y más raras. Casi todos los navegadores empiezan por `Mozilla/5.0`, una marca que hoy solo dice que el navegador es compatible con Mozilla y que se envía por razones históricas.[^mdn-ua] El propio estándar desaconseja usar los nombres de otros programas para declararse compatible con ellos, porque eso anula el sentido de la cabecera.[^rfc9110] Lo hacen igual: por eso un bot como [OAI-SearchBot](/es/glosario/oai-searchbot/) manda una cadena que empieza como la de Chrome en un Mac.[^openai-bots]

**Cada vez dice menos sobre el visitante.** El RFC avisa de que una cadena demasiado detallada ayuda a identificar a una persona sin que lo quiera, lo que se conoce como huella digital (_fingerprinting_).[^rfc9110] Chrome respondió reduciendo la suya: desde Chrome 101 la versión llega como `0.0.0` después del número principal, desde Chrome 107 empezó a recortarse la cadena de escritorio y desde Chrome 110 la de Android, que ya no incluye el modelo del móvil sino una `K` fija. La reducción quedó completa en Chrome 113.[^chromium-ua-reduction] Si un servidor necesita más detalle, puede pedirlo con las _client hints_, unas cabeceras `Sec-CH-UA` que el navegador envía solo cuando se le piden.[^mdn-ua]

**Los bots tienen dos nombres.** Google distingue entre la cadena que aparece en la petición HTTP y el nombre corto que se escribe en la línea `User-agent:` de `robots.txt`. Para Googlebot Smartphone, la cadena es larga y cambia con cada versión de Chrome; en `robots.txt` basta con `Googlebot`.[^google-common-crawlers] OpenAI añade un detalle útil: cuando OAI-SearchBot o [GPTBot](/es/glosario/gptbot/) piden el propio `robots.txt`, pueden incluir la marca `robots.txt` en la cadena para que esas peticiones se distingan en los registros.[^openai-bots]

**Y el nombre se puede falsificar.** Google lo dice en su lista de rastreadores: la cadena de _user agent_ se puede suplantar.[^google-common-crawlers] Por eso sus rastreadores se identifican de tres maneras a la vez: la cabecera `User-Agent`, la IP de origen y el nombre que devuelve la consulta de DNS inverso de esa IP.[^google-crawlers]

## En una tienda

Cuatro peticiones a la misma [ficha de producto](/es/glosario/ficha-de-producto/), con las cadenas que documentan Chromium, Google y OpenAI. La tienda y el orden son un **ejemplo ficticio**; `W.X.Y.Z` es la versión de Chrome, que cambia:

| Quién dice ser                             | Cadena de _user agent_                                                                                                                                                                                                       | Cómo se comprueba                                                                 |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Un cliente con Chrome en Android           | `Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Mobile Safari/537.36`[^chromium-ua-reduction]                                                                                      | No se comprueba: es una persona, y el modelo del móvil ya no viaja                |
| Googlebot Smartphone                       | `Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)`[^google-common-crawlers] | DNS inverso y directo de la IP, o los rangos que publica Google[^google-crawlers] |
| OAI-SearchBot                              | `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot`[^openai-bots]                          | La IP, contra `openai.com/searchbot.json`[^openai-bots]                           |
| [ChatGPT-User](/es/glosario/chatgpt-user/) | `Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot`[^openai-bots]                                                                                                    | La IP, contra `openai.com/chatgpt-user.json`[^openai-bots]                        |

Fíjate en la segunda fila: **la cadena de Googlebot incluye «Android» y «Chrome»**. Un filtro que busque «Chrome» o «Android» la cuenta como un cliente. Lo que identifica al bot es su nombre propio dentro de la cadena, y lo que demuestra que es él es la comprobación de la última columna.


Que adaptar la página según el _user agent_ es una forma legítima de «ayudar» a los bots. Google llama _cloaking_ a presentar contenido distinto a los usuarios y a los buscadores con la intención de manipular la clasificación, y pone como ejemplo **insertar texto o palabras clave solo cuando el _user agent_ que pide la página es el de un buscador**. Para el contenido que a un buscador le cuesta leer, como el que depende de JavaScript, remite a sus recomendaciones para hacerlo accesible sin _cloaking_.[^google-spam]


## Cómo comprobarlo

1. **Mira el campo de _user agent_ en tus registros.** En el servidor o en la CDN, cada línea de acceso lo trae al final. Separa las peticiones de los bots que te importan por su nombre propio, no por «Chrome» o «Mozilla».
2. **Verifica los bots por la IP.** Para Google, haz la consulta de DNS inverso y la directa, o compara la IP con sus rangos publicados;[^google-crawlers] OpenAI publica un archivo JSON de IP por cada agente.[^openai-bots]
3. **Pide tu ficha como si fueras otro.** En Chrome, el panel Network conditions de las herramientas para desarrolladores deja sustituir la cadena: no cambia cómo funciona el navegador, cambia lo que el servidor le entrega.[^devtools-ua] Desde la terminal, `curl -A "cadena" https://tudominio.com/products/...` hace lo mismo.
4. **Compara lo que recibe cada uno.** Si el título, el precio o los [datos estructurados](/es/glosario/datos-estructurados/) cambian según la cadena, averigua qué lo provoca antes de que afecte a la [indexación](/es/glosario/indexacion/) de la ficha.
5. **Lee con cuidado los paneles de bots.** En el plan gratuito, AI Crawl Control de Cloudflare identifica a los rastreadores de IA por su cadena de _user agent_, así que solo detecta a los que se identifican a sí mismos.[^cf-manage-crawlers]

## Concepto cercano: rastreador

Un [rastreador](/es/glosario/rastreador/) es un programa que recorre la web; el _user agent_ es la etiqueta con la que se presenta en cada petición. Todo rastreador tiene uno, pero también lo tiene tu navegador, el de tu cliente y cualquier script que pida una URL. **Leer el _user agent_ te dice quién dice ser el visitante; verificar su IP te dice si lo es.** Para ir un paso más allá del nombre, algunos agentes firman sus peticiones con [Web Bot Auth](/es/glosario/web-bot-auth/), y esa firma es lo que exige, por ejemplo, el [pago por rastreo](/es/glosario/pay-per-crawl/) de Cloudflare.

Para seguir, la [ruta de lectura de rastreo e indexación](/es/aprender/rastreo-e-indexacion/) ordena el resto de términos, y el término de Googlebot detalla cómo verificar al rastreador de Google paso a paso.
