Ir al contenido

Glosario User agent

¿Qué es un user agent (agente de usuario)?

  • SEO Técnico
Definición

Un user agent (agente de usuario) es el programa cliente que inicia una petición a un servidor web: un navegador, un rastreador, una app o una herramienta de línea de comandos. El término designa también el texto con el que ese programa se presenta en la cabecera HTTP User-Agent, por ejemplo «Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36». La norma actual, RFC 9110, define las dos cosas.

A la izquierda, una ventana de navegador, un teléfono y una red de puntos; cada uno envía una etiqueta de nombre por un camino de puntos hacia un servidor a la derecha, y la etiqueta de la red de puntos es naranja, con una lupa naranja encima, sobre fondo azul oscuro.
En esta página 14
  1. Origen del término
  2. Historia y evolución
  3. Cómo funciona
  4. Tipos y variantes
  5. Ejemplos
  6. Cómo se mide
  7. Ventajas y desventajas
  8. Diferencias con otros conceptos
  9. Herramientas
  10. Críticas y límites
  11. Cómo se aplica paso a paso
  12. Buenas prácticas
  13. Errores frecuentes
  14. Cómo se hizo esta entrada
En breve

Un user agent es el programa que pide una página y el texto con el que se presenta. Cómo se lee la cadena, qué cambian Client Hints y cómo usarlo bien.

A la izquierda, una ventana de navegador, un teléfono y una red de puntos; cada uno envía una etiqueta de nombre por un camino de puntos hacia un servidor a la derecha, y la etiqueta de la red de puntos es naranja, con una lupa naranja encima, sobre fondo azul oscuro.

Origen del término

La expresión viene de las especificaciones de HTTP. RFC 1945, de mayo de 1996, define el user agent como «el cliente que inicia una petición» y cita navegadores, editores, arañas (robots que recorren la web) y otras herramientas. RFC 9110 añade que el navegador es solo una pequeña parte: también son user agents las apps móviles, los electrodomésticos o los scripts que actualizan firmware.

Casi todos los navegadores empiezan su cadena por «Mozilla/5.0». MDN lo atribuye a «razones históricas». El estándar HTML conserva la misma herencia en JavaScript: navigator.appCodeName devuelve siempre «Mozilla» y navigator.appName devuelve «Netscape», para no romper webs antiguas. Con los nombres de motores pasó algo parecido. Según MDN, muchos navegadores añadieron los nombres de otros motores para que las webs no los dejaran fuera por el nombre. Por eso Chrome escribe «KHTML, like Gecko» y «Safari» aunque no sea ninguno de los dos. RFC 9110 desaconseja esa práctica porque anula el sentido del campo.

Historia y evolución

  • Mayo de 1996: RFC 1945 (HTTP/1.0) introduce la cabecera User-Agent. Los clientes deberían enviarla, pero no es obligatoria.
  • Junio de 1999: RFC 2616 (HTTP/1.1) la mantiene en la sección 14.43, con el mismo ejemplo «CERN-LineMode/2.15 libwww/2.17b3».
  • Junio de 2014: RFC 7231 añade una advertencia: las cadenas largas y detalladas aumentan el riesgo de identificar a una persona contra su voluntad, el llamado fingerprinting.
  • Junio de 2022: RFC 9110 sustituye a RFC 7231 y es la norma vigente. El user agent debería enviar la cabecera en cada petición.
  • 13 de junio de 2022: Chrome 101 llega al 100 % de los usuarios con las versiones menores congeladas en 0.0.0, según el calendario de Chromium.
  • 7 de febrero de 2023: Chrome 107 completa la cadena reducida en escritorio.
  • 11 de mayo de 2023: Chrome 110 completa la cadena reducida en Android.
  • 26 de octubre de 2026: última versión del borrador de User-Agent Client Hints del grupo comunitario WICG, que no es un estándar del W3C.

Cómo funciona

El navegador envía la cabecera User-Agent con cada petición HTTP. Según RFC 9110, el valor está formado por uno o varios productos, cada uno con nombre y versión opcional (producto/versión), seguidos de comentarios entre paréntesis. Los productos van de más a menos importante para identificar el programa. La norma prohíbe meter publicidad en el nombre del producto.

La cadena de Chrome en Windows, leída el 15.11.2026 en nuestro propio navegador, se descompone así:

ParteEjemploQué significa
Producto históricoMozilla/5.0La envía casi todo navegador por razones históricas
Plataforma(Windows NT 10.0; Win64; x64)Sistema operativo; en Chrome es un valor fijo por plataforma
MotorAppleWebKit/537.36 (KHTML, like Gecko)Herencia de motores anteriores, para que las webs no lo excluyan
NavegadorChrome/157.0.0.0Versión principal; las tres últimas cifras están congeladas
CompatibilidadSafari/537.36Chrome se declara también Safari

Fuente: navigator.userAgent en Chrome 157 (15.11.2026); MDN, «User-Agent header»; Chromium, «User-Agent Reduction».

RFC 9110 nombra tres usos de la cadena: acotar fallos de compatibilidad, adaptar la respuesta a un cliente y hacer estadísticas de navegadores y sistemas. Si la respuesta cambia según el user agent, el servidor debería indicarlo con la cabecera Vary. RFC 9110 obliga a las cachés a no reutilizar una respuesta para otra petición si las cabeceras listadas en Vary no coinciden. Sin «Vary: User-Agent», una caché o un CDN pueden entregar la versión móvil a un ordenador o al revés. Google describe ese montaje, la misma URL con HTML distinto por dispositivo, como «dynamic serving», y lo basa en leer el user agent y en «Vary: user-agent».

Tipos y variantes

Hoy el user agent llega en dos formas: la cadena clásica, que Chrome ha recortado, y los User-Agent Client Hints, cabeceras aparte que dan los mismos datos por piezas.

El motivo es la privacidad. El borrador del WICG presenta los Client Hints como una forma de adaptar el contenido sin la superficie de fingerprinting pasivo de la cabecera User-Agent. Chrome congeló las partes más detalladas de la cadena en tres fases: primero las versiones menores (Chrome 101), después la cadena de escritorio (Chrome 107) y por último la de Android (Chrome 110). Según Chromium, la plataforma pasa a ser un valor literal: en Android, «Linux; Android 10; K», aunque el sistema o el móvil sean otros.

CabeceraQué diceCuándo llega
Sec-CH-UAMarcas del navegador y versión principalPor defecto
Sec-CH-UA-MobileSi es un dispositivo móvil (?1) o no (?0)Por defecto
Sec-CH-UA-PlatformSistema operativo, por ejemplo «Windows»Por defecto
Sec-CH-UA-Platform-Version, -Model, -Full-Version-ListVersión del sistema, modelo, versión completaSolo si el servidor la pide con Accept-CH

Fuente: WICG, «User-Agent Client Hints», 26.10.2026; Chrome for Developers, «User-Agent Client Hints».

Las tres primeras son de baja entropía y se envían por defecto. Para el resto, el servidor responde con Accept-CH y el navegador las añade en las peticiones siguientes. Chrome solo envía Client Hints por HTTPS. Desde JavaScript se leen con navigator.userAgentData y getHighEntropyValues(). En la lista de marcas de nuestro Chrome 157 aparece una ficticia, «Not-A.Brand»: el borrador del WICG propone esas entradas falsas (GREASE) para que las webs no busquen un nombre exacto.

Chrome activa los Client Hints por defecto desde la versión 89. Según los datos de compatibilidad de MDN (15.11.2026), Firefox y Safari no admiten navigator.userAgentData, y MDN marca la API como experimental.

Ejemplos

Safari en iPhone, según MDN: «Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Mobile/15E148 Safari/604.1». Según MDN, Safari indica su versión con «Version/», aquí 26.0, y en iPhone añade «Mobile». MDN añade que Firefox, Chrome y Edge en iPhone también usan WebKit, así que sus cadenas se parecen a la de Safari.

Firefox en macOS, según MDN: «Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:138.0) Gecko/20100101 Firefox/138.0». «rv:138.0» es la versión del motor Gecko y «20100101» es un valor fijo en escritorio.

curl, la herramienta de línea de comandos: según su manual envía por defecto «curl/VERSION», por ejemplo «curl/8.23.1». Es un user agent sin navegador detrás.

Googlebot para smartphone, según la documentación de Google actualizada el 30.10.2026: «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)». W.X.Y.Z es un hueco que Google rellena con la versión de Chrome que usa en cada momento.

¿Qué palabra busca tu filtro en los logs?

Cómo se mide

En los registros del servidor, el user agent queda en cada línea. El formato «combined» de Apache lo guarda con %{User-agent}i y el de nginx con $http_user_agent, así que una línea normal ya dice qué programa pidió cada URL. El análisis de logs parte de ahí para separar visitas de personas y de rastreadores. Para Googlebot, Google aconseja filtrar con comodines en la versión de Chrome, porque esa cifra cambia con el tiempo.

Ventajas y desventajas

Ventajas: llega en cada petición sin JavaScript y cualquier servidor lo registra. Sirve para estadísticas por navegador o sistema y para acotar errores de una versión.

Desventajas: lo escribe el propio cliente, así que no prueba nada. En Chrome ya no da la versión exacta ni el modelo del móvil. Su formato no es uniforme, advierte MDN, y algunos navegadores dan datos contradictorios: Chrome se declara Chrome y Safari a la vez.

Diferencias con otros conceptos

Los rastreadores también se presentan con un user agent, pero el robots.txt no trabaja con esa cadena. Según RFC 9309, cada rastreador tiene un token corto, que debería aparecer dentro de su cadena, y las reglas del robots.txt se escriben con ese token: «Googlebot», no la cadena entera de arriba. Como la cadena se puede copiar, el nombre no prueba quién llama: cómo comprobar una visita de verdad se explica en Googlebot, y las cadenas de GPTBot, ClaudeBot o PerplexityBot, en rastreadores de IA.

DatoDe dónde salePara qué sirve
Cadena User-AgentEl cliente, librementeAdaptar respuestas y registrar visitas
User-Agent Client HintsEl navegador, por piezasPedir solo los datos que hacen falta
Token de robots.txtEl operador del rastreadorEscribir reglas de rastreo
IP y DNS inversaLa conexión y el dueño de la IPComprobar quién hace la petición

Fuente: RFC 9110; RFC 9309; WICG, «User-Agent Client Hints»; Google, «Verify requests from Google crawlers and fetchers».

Herramientas

Para descomponer cadenas existen bibliotecas abiertas. Por orden alfabético:

  • Device Detector (Matomo): según su repositorio, detecta navegador, sistema, tipo de dispositivo, marca y modelo; licencia LGPL-3.0.
  • UAParser.js: biblioteca de JavaScript para navegador y Node que, según su repositorio, detecta navegadores, sistemas, dispositivos y bots; licencia AGPL-3.0.
  • uap-core: el archivo de expresiones regulares del parser de Browserscope, base de versiones en varios lenguajes.

Críticas y límites

RFC 7231 ya advertía en 2014 de que una cadena larga ayuda a reconocer a una persona sin que lo quiera (fingerprinting). El borrador de Client Hints da ese mismo motivo.

Decidir por la cadena qué funciones usar también falla. En el ejemplo de MDN, un script que da por hecho que todo «Chrome» admite una función rompe con versiones antiguas y con navegadores que la añaden después. MDN añade que el problema es el mismo con Client Hints y recomienda comprobar la función directamente (feature detection).

Por último, la cadena es falsificable. Google avisa de que otros rastreadores copian a menudo el user agent de Googlebot.

Cómo se aplica paso a paso

  • Ver el propio user agent: abre las herramientas de desarrollo del navegador, pestaña Red, y mira la cabecera User-Agent de cualquier petición, o escribe navigator.userAgent en la consola.
  • Ver los Client Hints: en la misma petición aparecen Sec-CH-UA y las demás; en la consola, navigator.userAgentData.
  • Cambiarlo en Chrome: herramientas de desarrollo, panel Network conditions, desmarca «Use browser default» en el apartado User agent y elige o escribe otro. Según Google, eso cambia lo que la web te envía, no cómo funciona Chrome.
  • Cambiarlo en curl: curl -A "texto". Con -A "" curl no envía la cabecera.
  • Sacar la conclusión: si cambiarlo cuesta un clic, la cadena no sirve como prueba de identidad.

Buenas prácticas

  • Comprueba funciones con feature detection, no con el nombre del navegador.
  • Si la respuesta depende del dispositivo o del navegador, envía «Vary: User-Agent».
  • Pide con Accept-CH solo los Client Hints que vas a usar.
  • Identifica a los bots por IP y DNS inversa, no por el nombre que declaran.
  • En los logs, filtra por cadena y por IP a la vez.

Errores frecuentes

  • Bloquear o dejar pasar a un rastreador solo por su user agent.
  • Servir HTML distinto según el dispositivo sin la cabecera Vary.
  • Buscar en Chrome la versión completa en la cadena: desde Chrome 101 termina en 0.0.0.
  • Filtrar los logs por una versión exacta de Googlebot en lugar de usar comodines.
  • Detectar Gecko buscando «Gecko» y contar como Firefox a Chrome y Safari, que llevan «like Gecko».

Cómo se hizo esta entrada

Redactamos esta entrada en noviembre de 2026 con ayuda de IA. Los datos proceden de las normas RFC de la IETF, del estándar HTML, del borrador de User-Agent Client Hints, de MDN, de la documentación de Chrome, Chromium y Google, de los manuales de curl, Apache y nginx y de los repositorios citados. La revisamos antes de publicarla y no contiene datos de clientes.

Manuel Riveiro Rodriguez CEO & Digital Strategist

Una auditoría técnica revisa esto y el resto en un solo paso.

Solicitar auditoría

Preguntas frecuentes

¿Para qué sirve el user agent?

Para que el servidor sepa qué programa pide la página. Con ese dato adapta la respuesta, acota fallos de un navegador concreto y hace estadísticas de navegadores y sistemas.

¿Cómo puedo ver mi user agent?

En las herramientas de desarrollo del navegador, pestaña Red, en la cabecera User-Agent de cualquier petición. También en la consola, escribiendo navigator.userAgent.

¿Qué es un user agent string?

Es la cadena de texto que el programa envía en la cabecera User-Agent, por ejemplo la que empieza por «Mozilla/5.0» y termina en «Safari/537.36» en Chrome.

¿Se puede falsificar el user agent?

Sí. Las herramientas de desarrollo de Chrome, las extensiones o curl permiten enviar cualquier texto. Por eso un servidor no debería fiarse del nombre que declara un cliente.

¿Qué significa el asterisco en la línea User-agent del robots.txt?

Que el grupo de reglas vale para todos los rastreadores que no tienen un grupo propio. Según RFC 9309, un rastreador sin grupo con su nombre sigue el grupo con el asterisco.

Fuentes

  1. IETF, RFC 9110 «HTTP Semantics», junio de 2022, secciones 3.5 (user agent), 10.1.5 (User-Agent) y 12.5.5 (Vary) (en inglés).
  2. IETF, RFC 1945 «Hypertext Transfer Protocol -- HTTP/1.0», mayo de 1996, sección 10.15 (en inglés).
  3. IETF, RFC 2616 «Hypertext Transfer Protocol -- HTTP/1.1», junio de 1999, sección 14.43 (en inglés).
  4. IETF, RFC 7231 «HTTP/1.1: Semantics and Content», junio de 2014, sección 5.5.3 (en inglés).
  5. IETF, RFC 9309 «Robots Exclusion Protocol», septiembre de 2022 (en inglés).
  6. WHATWG, HTML Standard, apartado «Client identification» (en inglés).
  7. WICG, «User-Agent Client Hints», Draft Community Group Report, 26 de octubre de 2026 (en inglés).
  8. MDN, «User-Agent».
  9. MDN, «Browser detection using the user agent string (UA sniffing)», modificado el 6 de enero de 2026 (en inglés).
  10. MDN, «Vary».
  11. MDN, «User-Agent Client Hints API», modificado el 12 de noviembre de 2026, con datos de compatibilidad (en inglés).
  12. Chrome for Developers, «Improving user privacy and developer experience with User-Agent Client Hints» (en inglés).
  13. Chromium, «User-Agent Reduction», fases y calendario (en inglés).
  14. Chrome DevTools, «Network conditions: Override the user agent string», actualizado el 24 de mayo de 2024 (en inglés).
  15. Google, «Google's common crawlers», actualizado el 30 de octubre de 2026 (en inglés).
  16. Google, «Verify requests from Google crawlers and fetchers», actualizado el 20 de marzo de 2026 (en inglés).
  17. Google Search Central, «Googlebot», actualizado el 3 de febrero de 2026 (en inglés).
  18. Google Search Central, «Mobile-first indexing best practices», apartado «dynamic serving» (en inglés).
  19. curl, manual, opción -A, --user-agent (en inglés).
  20. Apache HTTP Server 2.4, «Log Files», Combined Log Format (en inglés).
  21. nginx, «Module ngx_http_log_module», formato combined (en inglés).
  22. Matomo, Device Detector, repositorio (en inglés).
  23. UAParser.js, repositorio (en inglés).
  24. uap-core, repositorio (en inglés).