Acaba de aparecer un user-agent que no figuraba en la documentación de Google: GeminiiOS. Este UA no es un bot: lo envía la WebView interna de la app Gemini para iOS cuando un usuario toca una fuente dentro de la conversación y se abre tu web dentro de la propia app (WKWebView). El hallazgo —confirmado por Barry Schwartz y citado en Search Engine Roundtable— permite, por fin, separar parte del tráfico humano originado en Gemini de otras sesiones genéricas de “Google”.
UA observado (extracto)
Mozilla/5.0 (iPhone; CPU iPhone OS 18_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 GoogleWv/1.0 (WKWebView) GeminiiOS/1.2025.4170000
Por qué importa (y por qué no es “otro bot”)
- Es tráfico humano: llega tras un clic del usuario en la app de Gemini (iPhone/iPad). No corresponde a fetchers ni rastreos.
- Atribución: hasta ahora, muchos web fetch de Gemini usaban el UA genérico “Google”, lo que distorsiona mediciones y dificulta separar menciones (fetch) de visitas reales (clic).
- Canal de IA: tener un UA específico abre la puerta a medir “AI-referrals” (y su conversión) sin confundirlos con orgánico clásico o referrals difusos.
Cómo detectarlo hoy (patrones y regex)
En logs verás un WKWebView con la marca GoogleWv/1.0 y el sufijo de versión GeminiiOS/x.y.z. Para capturarlo:
- Regex flexible (insensible a mayúsculas/minúsculas)
(?i)GoogleWv/.*GeminiiOS/\d - Regex específica (iOS WebKit + GoogleWv + GeminiiOS)
(?i)AppleWebKit/.*\(KHTML, like Gecko\).*GoogleWv/.*GeminiiOS/\d
Criterio práctico: si aparece GeminiiOS/ en el UA, cuenta como visita humana desde la app de Gemini en iOS.
GA4: crea una dimensión y un informe ad hoc
- Dimensión personalizada
- Admin → Custom definitions → Create
- Nombre:
ua_gemini_ios(o similar) - Scope: Event
- Event parameter:
user_agent(si lo envías) o crea un server-side param en tu proxy/Tag Manager Server. - Alternativa sin param: usa Explorations con Filtro → Device category → “matches regex” no sirve para UA; por eso es útil capturar el UA en un parámetro.
- Etiquetado (client-side rápido)
- Añade un Custom JS variable en GTM que lea
navigator.userAgenty lo envíe como parámetro a un evento (e.g., page_view). - En GA4, crea un Segmento con condición
user_agentcontainsGeminiiOS/y guarda un Exploration “Gemini iOS traffic”.
- Añade un Custom JS variable en GTM que lea
- Canal agrupado (opcional)
- En Admin → Channel groups (Beta) crea un rule: si
user_agentcontainsGeminiiOS/→ Source/Medium “gemini_ios / referral”.
- En Admin → Channel groups (Beta) crea un rule: si
Tip: si usas server-side tagging, captura el UA en tu endpoint y añade una flag (
ai_source = gemini_ios) para no depender de cambios en el cliente.
BigQuery: consulta rápida para dashboards
SELECT
DATE(TIMESTAMP_MICROS(event_timestamp)) AS event_date,
COUNTIF(REGEXP_CONTAINS(LOWER((SELECT value.string_value
FROM UNNEST(event_params)
WHERE key = 'user_agent')), r'geminiios/')) AS sessions_gemini_ios,
COUNT(*) AS events
FROM `mi-proyecto.analytics_XXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20251001' AND '20251231'
GROUP BY event_date
ORDER BY event_date;
Si no envías
user_agentcomo parámetro, necesitarás capturarlo en el proxy/edge (Cloudfront/Cloudflare/Nginx) y anotarlo en un custom header o cookie consumida por tu tagging.
Nginx/Apache: etiqueta en logs y crea métricas
Nginx (map + log_format + var)
map $http_user_agent $is_gemini_ios {
default 0;
~*GeminiiOS/ 1;
}
log_format ai '$remote_addr - $time_local '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'geminiiOS=$is_gemini_ios';
access_log /var/log/nginx/access_ai.log ai;
Apache (LogFormat con env SetEnvIfNoCase)
SetEnvIfNoCase User-Agent "GeminiiOS/" is_gemini_ios
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" geminiiOS:%{is_gemini_ios}e" ai
CustomLog logs/access_ai.log ai
Ahora puedes sumarizar fácilmente sesiones con geminiiOS=1 en tus pipelines de análisis (ELK, Loki, Datadog, etc.).
Cloudflare: regla en el Firewall (o Transform Rule)
- Expression:
http.user_agent contains "GeminiiOS/" - Action: Skip WAF / Add header
X-AI-Source: gemini_ios - Con Worker, puedes anotar la petición y enviar esa flag a tu colector.
Matomo: segmento personalizado
- Segment expression:
userAgent=@GeminiiOS/ - Crea un Informe “Gemini iOS” y compáralo con Googlebot y otros AI-referrals que identifiques.
Diferenciar “clic humano” vs “fetch bot” (hoy)
- GeminiiOS ⇒ clic humano desde la app de iOS.
- UA genérico
Google⇒ suele corresponder a web fetch (no siempre distinguible por plataforma). - Otros agentes AI (Bard/Gemini fetchers, OpenAI, Perplexity, etc.) pueden tener UAs propios o IP-ranges conocidos; conviene mantener una tabla viva de bots de IA.
No bloquees automáticamente a GeminiiOS: perderías tráfico humano con intención alta (el usuario ya “eligió” tu fuente dentro de Gemini).
Atribución y reporting: crea el canal “AI Referrals”
- Canal:
AI Referrals - Fuente:
gemini_ios - Medio:
referral - Página de aterrizaje: mide engagement y conversiones (¿estos usuarios convierten mejor/peor que orgánico?).
- Contenido: anota la consulta o tópico si la referrer policy lo permite (muchas WebViews no envían
Referer; por eso el UA es clave).
Expectativas: ¿habrá “GeminiAndroid”?
Lo razonable es esperar un patrón similar en Android (algo como GeminiAndroid/<versión> en una WebView de Google). Monitorea tus logs con un regex más laxo:
(?i)Gemini(ios|android)/
y documenta los nuevos UAs que aparezcan. Cuanto antes tengas segmentos por plataforma, antes podrás comparar engagement y conversiones por iOS vs Android.
Buenas prácticas rápidas
- No mezcles Gemini iOS con orgánico: crea canal/segmento.
- No filtres por bot a ciegas: GeminiiOS es humano.
- Crea alertas (umbral de hits GeminiiOS) para detectar picos y oportunidades.
- Cruza con eventos de conversión para evaluar valor (no solo volumen).
- Mantén un inventario de AI-UAs en tu repo de analítica.
Preguntas frecuentes
¿Es seguro tratar “GeminiiOS” como tráfico humano?
Sí. Este UA aparece cuando un usuario toca una fuente en la app de Gemini para iOS y tu web se abre en su WKWebView. No es un crawler.
¿Puede enviar Referer?
Muchas WebViews de Google no siempre envían Referer (o lo limitan). Por eso capturar el UA y etiquetar el canal es esencial para la atribución.
¿Cómo separo “Google fetch” de “Gemini iOS”?
Crea segmentos: user_agent contains 'GeminiiOS/' (humano) vs. UAs genéricos Google que uses para tus fetchers (ojo: el UA “Google” es ambivalente; en fetchers, combina con IPs/rangos o reglas edge).
¿Debo bloquear “GeminiiOS” en robots/Firewall?
No. Es tráfico con clic. Trátalo como referral o AI Referral y mídelo.
Fuentes
- Logs reales con
GeminiiOS/en WKWebView de la app de Gemini (iOS). - Confirmación y cobertura de Barry Schwartz en Search Engine Roundtable sobre la aparición del nuevo UA.
Si detectas variantes (p. ej.,
GeminiAndroid/), compártelas y actualiza tu playbook de analítica. Cuanto antes midamos bien los AI-referrals, antes sabremos qué tráfico de IA convierte de verdad.
