# Alejandro Rioja — ES > Alejandro Rioja — AI agent systems for founders. Plus posts on growth, marketing, sales, ops, and business from inside live P&Ls. Site: https://alejandrorioja.com/es/ Author: Alejandro Rioja Language: es --- ## Agentes por Eventos vs Agentes Programados: Qué Patrón Usar en Cada Caso Source: https://alejandrorioja.com/es/event-triggered-vs-scheduled-agents-which-pattern-for-which-job/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents TL;DR: Usa agentes por eventos cuando una acción del usuario exige respuesta inmediata—si el retraso supera unos segundos, la experiencia se rompe. Usa agentes programados para trabajo periódico o por lotes donde el momento es predecible. La restricción: los agentes por eventos deben ser stateless y rápidos; los programados pueden ser stateful y lentos. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** Usa agentes por eventos cuando una acción del usuario exige respuesta inmediata—si el retraso supera unos segundos, la experiencia se rompe. Usa agentes programados para trabajo periódico o por lotes donde el momento es predecible. La restricción: los agentes por eventos deben ser stateless y rápidos; los programados pueden ser stateful y lentos. **[Lectura del operador]** Mantengo más de 30 agentes en producción entre mi marca de consultoría y Pickleland, una cancha de pickleball en Pflugerville, TX. Cada uno cae en uno de dos patrones: se activa por un evento o se activa por un reloj. Equivocarse aquí desperdicia dinero y entrega experiencias rotas. ## Los dos patrones en lenguaje simple Un **agente por eventos** despierta porque algo sucedió. Llegó una reserva. Se publicó un comentario. Se envió un formulario. El disparador es externo e impredecible en tiempo. Tu trabajo es responder rápido. Un **agente programado** despierta porque el reloj lo dice. Cada mañana a las 7am. Cada domingo a las 6pm. Cada hora en punto. El disparador es interno y completamente predecible. Tu trabajo es hacer un trabajo minucioso. Eso es todo. No lo compliques. La arquitectura se deriva de la respuesta a una pregunta: *¿el usuario o el sistema necesitan una respuesta ahora mismo, o puede esperar hasta un momento específico?* ## Por eventos: el agente de respuesta en redes sociales Mi agente de respuesta social se activa cuando llega un nuevo comentario a una publicación de Facebook monitoreada. El agente lee el comentario, clasifica la intención (pregunta, queja, cumplido, spam), redacta una respuesta y la publica—o la marca para revisión humana si la confianza es baja. Todo el ciclo completo debe terminar en menos de 30 segundos o la respuesta se siente rancia. Ese es un problema de activación por eventos. Aquí hay un Cloudflare Worker simplificado que maneja el webhook de un servicio de monitoreo social: ```typescript // workers/social-reply.ts export default { async fetch(request: Request, env: Env): Promise { if (request.method !== "POST") { return new Response("Method not allowed", { status: 405 }); } // Verificar la firma del webhook const sig = request.headers.get("x-webhook-signature") ?? ""; const body = await request.text(); const valid = await verifySignature(body, sig, env.WEBHOOK_SECRET); if (!valid) return new Response("Unauthorized", { status: 401 }); const event = JSON.parse(body) as SocialCommentEvent; // Clasificar y responder — mantenerlo async para devolver 200 rápido env.REPLY_QUEUE.send(event); return new Response("OK", { status: 200 }); }, }; // Consumidor de cola — hace el trabajo real de IA export const queue: ExportedHandlerQueueHandler = async (batch, env) => { for (const msg of batch.messages) { const comment = msg.body; const classification = await classifyComment(comment.text, env); if (classification.intent === "spam") { msg.ack(); continue; } const reply = await draftReply(comment, classification, env); if (classification.confidence > 0.85) { await postReply(comment.postId, comment.id, reply, env); } else { await flagForReview(comment, reply, env); } msg.ack(); } }; ``` Dos cosas a notar. Primero, el handler fetch devuelve 200 inmediatamente y delega el trabajo real a una cola. Esto mantiene la respuesta del webhook rápida y evita que el servicio de monitoreo reintente. Segundo, el consumidor de cola hace la llamada real de IA—clasificando y redactando—sin presión de tiempo por una conexión HTTP abierta. ## Programado: el promotor de eventos de Pickleland Pickleland gestiona canchas y eventos. Cada semana, alguien necesita publicar los próximos eventos en los grupos de Facebook correctos para llenar los cupos. Esto es puro trabajo periódico por lotes—no hay ninguna acción del usuario que lo dispare, y no necesita ocurrir en tiempo real. El promotor de eventos de Pickleland corre en un cron, revisa el sistema de reservas para eventos en los próximos 4 días, redacta publicaciones específicas para cada grupo de Facebook coincidente, y las presenta para mi revisión antes de que nada se publique. ```typescript // workers/event-promoter.ts export default { async scheduled( event: ScheduledEvent, env: Env, ctx: ExecutionContext ): Promise { ctx.waitUntil(runPromoter(env)); }, }; async function runPromoter(env: Env): Promise { // Obtener eventos del sistema de reservas const upcomingEvents = await fetchUpcomingEvents(env, { daysAhead: 4 }); if (upcomingEvents.length === 0) return; const drafts: PromoDraft[] = []; for (const event of upcomingEvents) { // Emparejar cada evento con los grupos de FB correctos const groups = await matchFacebookGroups(event, env); for (const group of groups) { const post = await draftPromoPost(event, group, env); drafts.push({ event, group, post }); } } // Guardar borradores en Airtable para revisión — nada se publica automáticamente await saveDraftsForReview(drafts, env); // Notificarme por Slack await notifyOperator( `${drafts.length} borradores de promo listos para revisión`, env ); } ``` La configuración de wrangler que conecta todo: ```toml # wrangler.toml [[triggers]] crons = ["0 18 * * 0"] # Cada domingo a las 6pm UTC ``` Nota lo que el agente programado puede hacer que el de eventos no puede: itera sobre múltiples eventos, escribe en una base de datos y envía una notificación de resumen. Está haciendo trabajo por lotes. El agente por eventos necesita mantenerse liviano y devolver respuesta rápido. ## Programado: el resumen diario Cada mañana a las 7am corre mi agente de resumen diario. Obtiene los emails de la noche, mi calendario, las tareas principales y cualquier noticia que haya marcado como relevante. Formatea todo en un solo documento y lo deposita en mi carpeta de AI Workspace. Este es puro programado. No hay ningún evento que lo dispararía—simplemente lo quiero cada mañana antes de comenzar a trabajar. ```typescript // workers/daily-brief.ts export default { async scheduled( event: ScheduledEvent, env: Env, ctx: ExecutionContext ): Promise { ctx.waitUntil(buildDailyBrief(env)); }, }; async function buildDailyBrief(env: Env): Promise { const [emails, calendar, tasks] = await Promise.all([ fetchOvernightEmails(env), fetchTodayCalendar(env), fetchTopTasks(env), ]); const brief = await synthesizeBrief({ emails, calendar, tasks }, env); await writeToWorkspace(brief, env); } ``` ```toml [[triggers]] crons = ["0 7 * * *"] # Cada día a las 7am UTC ``` El `Promise.all` en paralelo es deliberado. Los agentes programados no tienen un humano esperando—pero aun así no deberían ser más lentos de lo necesario. Obtén todas tus fuentes de datos en paralelo, luego haz la síntesis de IA una vez. ## Cuándo falla el patrón por eventos El fallo que veo con más frecuencia: alguien construye un agente por eventos que hace demasiado trabajo en el handler. Llega una reserva. El agente obtiene el perfil del cliente, lo enriquece desde tres APIs externas, ejecuta un modelo de personalización, escribe en el CRM, envía el email de confirmación y actualiza un dashboard. Todo tarda 45 segundos. La plataforma de reservas reintenta porque no recibió un 200 rápido. Ahora el agente corre dos veces. Corrígelo de la misma manera que está construido el agente de respuesta social: devuelve 200 inmediatamente, empuja el evento a una cola, deja que el consumidor de cola haga el trabajo pesado de forma asíncrona. El otro fallo: usar por eventos para trabajo que en realidad es periódico. "Enviar un resumen semanal" no es un evento. No lo conectes a un webhook de cron sintético—usa un disparador programado apropiado. ## Cuándo falla el patrón programado Los agentes programados fallan cuando el trabajo es en realidad sensible a la latencia. Si un usuario envía un formulario y el agente que lo procesa corre en un cron de 5 minutos, el usuario está mirando un spinner hasta 5 minutos. Eso no es un trabajo programado—es un trabajo por eventos lento disfrazado de programado. El otro fallo: agentes programados que se expanden a trabajo sin límites. Si tu cron corre cada minuto y cada invocación puede procesar cientos de registros, alcanzarás los límites de CPU de Cloudflare rápido. O aumenta el intervalo del cron, agrega una cola para limitar el trabajo por invocación, o cambia a Durable Objects para coordinación de larga duración. ## Mezclando patrones: el pipeline de reservas Algunos flujos de trabajo genuinamente necesitan ambos. El pipeline de reservas de Pickleland funciona así: 1. **Por eventos**: webhook de nueva reserva → confirmar la reserva, enviar el recibo al cliente, actualizar disponibilidad. Debe completarse en menos de 10 segundos. 2. **Programado**: cada domingo → revisar todas las reservas de la semana pasada, generar un informe de resumen, marcar anomalías (reservas duplicadas, tasas de cancelación inusuales). Mismo dominio, dos patrones, dos agentes. El de eventos gestiona la experiencia del usuario en tiempo real. El programado gestiona la revisión de operaciones semanal. Comparten una base de datos pero nada más. No intentes combinarlos en un solo agente que "hace todo." Terminarás con algo demasiado lento para eventos y demasiado acoplado al flujo en tiempo real para trabajo por lotes. ## Cloudflare Workers: por qué es la infraestructura correcta para ambos Cloudflare Workers maneja ambos patrones de forma nativa: - Handler `fetch` → por eventos (webhooks, llamadas API) - Handler `scheduled` → basado en cron (via `[[triggers]]` en wrangler.toml) - Consumidor `queue` → procesamiento asíncrono desacoplado de la capa HTTP El despliegue en el edge significa que tus agentes por eventos responden rápido globalmente. El nivel gratuito es lo suficientemente generoso para prototipar ambos patrones sin gastar nada. Y la configuración unificada de `wrangler.toml` significa que no estás gestionando dos configuraciones de infraestructura separadas para dos patrones. Lo único que Workers no resuelve bien: agentes que necesitan correr por más de unos minutos. Para esos, recurre a Durable Objects o delega a un backend de mayor duración. ## La conclusión del operador Elige tu patrón antes de escribir una sola línea de código de agente. Por eventos para cualquier cosa en la que un humano esté esperando; programado para cualquier cosa que corra en un reloj. Mantén los handlers por eventos delgados—devuelve rápido, encola el trabajo. Mantén los agentes programados paralelos—no serialices lo que puedes paralelizar. La arquitectura es simple. Violarla es de donde viene la complejidad. --- ## GEO para Negocios Locales: Cómo Aparecer en la Búsqueda de IA Source: https://alejandrorioja.com/es/geo-for-local-business-getting-a-brick-and-mortar-cited-by-ai-search/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, Marketing TL;DR: Para que tu negocio físico sea citado por los motores de búsqueda de IA, optimiza primero tu Google Business Profile — es la señal más importante. Luego añade el esquema JSON-LD de LocalBusiness, asegura la consistencia NAP en toda la web y genera un flujo constante de reseñas recientes. No puedes pagar para ser citado por la IA, y rellenar tu GBP con palabras clave no ayudará. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** Para que tu negocio físico sea citado por los motores de búsqueda de IA, optimiza primero tu Google Business Profile — es la señal más importante. Luego añade el esquema JSON-LD de LocalBusiness, asegura la consistencia NAP en toda la web y genera un flujo constante de reseñas recientes. No puedes pagar para ser citado por la IA, y rellenar tu GBP con palabras clave no ayudará. **[Perspectiva del operador]** Dirijo Pickleland, una instalación de pádel pickleball en Pflugerville, TX. Cuando empecé a revisar qué devolvían ChatGPT y Perplexity para "mejores canchas de pickleball cerca de Austin," mi propio establecimiento no aparecía — a pesar de estar bien posicionado en Google Maps. Aquí está lo que cambié, y por qué funcionó. --- ## Por qué la búsqueda con IA es diferente para los negocios locales El SEO local tradicional consistía en posicionarse en el mapa y en los resultados azules. La búsqueda con IA es diferente: ChatGPT, Perplexity y los AI Overviews de Google sintetizan respuestas y citan fuentes específicas. Para consultas locales, extraen datos de Google Business Profile, datos estructurados de tu sitio web, plataformas de reseñas y directorios de autoridad. La buena noticia: la barrera es más baja de lo que crees. La mayoría de los negocios físicos han descuidado sus datos estructurados y han dejado su GBP desactualizado. Si haces lo básico correctamente y con constancia, destacarás. La mala noticia: no hay atajos. No puedes pagar para ser citado por un motor de IA. No existe un producto de anuncios de "citación por IA." Lo que sí puedes hacer es facilitar que la IA entienda y confíe en tu negocio. --- ## Google Business Profile es la base Si tuviera que elegir una sola palanca, sería Google Business Profile (GBP). Cuando alguien le pregunta a un asistente de IA "mejores canchas de pickleball cerca de Austin," la IA se apoya heavily en los datos de GBP. Esto se debe a que GBP es una base de datos estructurada y verificada. Los modelos de IA entrenados en la web y herramientas como Perplexity que hacen recuperación en vivo tratan las señales de GBP como de alta confianza. Qué hacer con tu GBP: - **Completa todos los campos.** Categoría, descripción, horarios (incluidos festivos), atributos, servicios/menú. Cada campo vacío es una señal perdida. - **Usa tu categoría principal con precisión.** Para Pickleland es "Cancha de pickleball," no simplemente "Complejo deportivo." Los motores de IA leen los datos de categoría. - **Sube fotos regularmente.** GBP premia la frescura. Sube nuevas fotos de las canchas, eventos y recorridos interiores al menos dos veces al mes. - **Publica actualizaciones.** Las publicaciones de GBP están indexadas. Escribe entradas cortas (150–300 palabras) que respondan preguntas como "¿Necesitas traer tu propia pala?" Estas publicaciones de preguntas y respuestas aparecen directamente. - **Responde cada pregunta del Q&A.** La sección de Q&A de GBP es pública e indexada. Si nadie ha hecho tus preguntas más frecuentes, agrégalas tú mismo y respóndelas. Qué no hacer: no rellenes la descripción de tu GBP con palabras clave como "mejores canchas pickleball Austin más baratas abiertas ahora." Se lee como spam, no ayudará con la IA, y Google puede suspender tu perfil. --- ## Esquema LocalBusiness: la capa de datos estructurados Tu GBP maneja el ecosistema de Google. Para la búsqueda de IA fuera de Google (Perplexity, ChatGPT con navegación, herramientas basadas en Bing), los datos estructurados de tu sitio web son la señal principal. Añade un bloque JSON-LD de `LocalBusiness` a tu página de inicio y página de contacto. Este es el esquema que uso para Pickleland: ```json { "@context": "https://schema.org", "@type": "SportsActivityLocation", "name": "Pickleland", "description": "Instalación indoor de pickleball en Pflugerville, TX con 8 canchas dedicadas, juego abierto, ligas y clases.", "url": "https://pickleland.com", "telephone": "+1-512-000-0000", "address": { "@type": "PostalAddress", "streetAddress": "123 Pickleland Dr", "addressLocality": "Pflugerville", "addressRegion": "TX", "postalCode": "78660", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 30.4349, "longitude": -97.6200 }, "openingHoursSpecification": [ { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "06:00", "closes": "22:00" }, { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Saturday","Sunday"], "opens": "07:00", "closes": "21:00" } ], "priceRange": "$$", "amenityFeature": [ { "@type": "LocationFeatureSpecification", "name": "Indoor Courts", "value": true }, { "@type": "LocationFeatureSpecification", "name": "Equipment Rental", "value": true }, { "@type": "LocationFeatureSpecification", "name": "Lessons Available", "value": true } ], "sameAs": [ "https://www.google.com/maps?cid=YOUR_CID", "https://www.yelp.com/biz/pickleland-pflugerville", "https://www.facebook.com/pickleland" ] } ``` El array `sameAs` conecta explícitamente tu entidad de esquema a tu GBP, Yelp y páginas de Facebook. Los motores de IA usan esto para hacer referencias cruzadas y ganar confianza en que todos estos son el mismo negocio. Las coordenadas `geo` importan — Perplexity hace coincidencia por proximidad. Y `openingHoursSpecification` en formato legible por máquina se extrae directamente en las respuestas de IA cuando alguien pregunta "¿está Pickleland abierto el domingo?". Usa `SportsActivityLocation` en lugar del tipo genérico `LocalBusiness` cuando corresponda — cuanto más específico sea el tipo, más precisamente la IA puede categorizarte. --- ## Consistencia NAP: aburrido pero crítico NAP significa Nombre, Dirección, Teléfono (en inglés: Name, Address, Phone). Cuando el nombre de tu negocio aparece como "Pickleland" en Google, "Pickleland LLC" en Yelp, "Pickleland - Pflugerville" en Facebook y "Pickleland Pickleball" en un directorio local — los motores de IA ven cuatro entidades diferentes y reducen la confianza en todas ellas. Realiza una auditoría NAP: 1. Busca el nombre de tu negocio en Google, Yelp, Facebook, Apple Maps, Bing Places, Foursquare, TripAdvisor y cualquier directorio específico del sector. 2. Documenta cada variación. 3. Corrígelas — la mayoría de las plataformas te permiten reclamar o editar los perfiles directamente. El nombre que uses en todas partes debe coincidir exactamente con el de tu Google Business Profile. Para Pickleland, eso es "Pickleland" — sin sufijo, sin nombre de ciudad añadido. El formato del número de teléfono también importa. Usa el mismo formato en todas partes: `(512) 000-0000` o `+1-512-000-0000`, pero elige uno y mantenlo. Los enlaces `sameAs` en tu JSON-LD ayudan a los motores de IA a conectar los puntos, pero la consistencia NAP es lo que construye la confianza en la entidad en primer lugar. --- ## Velocidad de reseñas: la recencia es una señal de IA Los motores de búsqueda de IA no solo miran las valoraciones con estrellas — también observan qué tan recientes y frecuentes son tus reseñas. Un negocio con 200 reseñas pero la última de hace 18 meses tiene menor posicionamiento que uno con 80 reseñas y tres publicadas la semana pasada. En Pickleland, incorporamos la velocidad de reseñas a las operaciones: - Después de cada sesión de juego abierto, un miembro del personal envía un mensaje de seguimiento con un enlace directo a la página de reseñas de Google. - Respondemos a cada reseña — positiva y negativa — en 24 horas. La actividad de respuesta señala frescura a los rastreadores. - Mensualmente, identificamos a nuestros clientes habituales más satisfechos y les pedimos personalmente que compartan sus comentarios. Pasamos de 43 reseñas a 190 en unos cuatro meses. El impacto en las citas de IA fue medible: Pickleland comenzó a aparecer en las respuestas de Perplexity para "pickleball área de Austin" unas seis semanas después de superar las 100 reseñas con fuerte recencia. No compres reseñas falsas. Más allá del riesgo obvio de ser suspendido, los motores de IA son cada vez mejores para detectar grupos de reseñas inusuales (marcas de tiempo similares, lenguaje genérico, cuentas de revisores sin historial). --- ## Contenido de preguntas y respuestas que coincide con cómo la gente pregunta a la IA El SEO tradicional apunta a frases de palabras clave. El GEO apunta a preguntas — específicamente las preguntas en lenguaje natural que las personas escriben o dicen a los asistentes de IA. Piensa en cómo alguien pregunta a ChatGPT frente a cómo escribiría en Google: - Google: `canchas pickleball austin` - ChatGPT: `¿Cuáles son las mejores canchas de pickleball cubiertas cerca de Austin que estén abiertas las mañanas entre semana?` Tu contenido necesita responder la versión de formato largo. Crea una página dedicada de FAQ o Q&A en tu sitio que aborde directamente: - "¿Necesito traer mi propia pala?" (preguntas sobre equipamiento) - "¿Cuánto cuesta jugar al pickleball en [instalación]?" - "¿Es [instalación] adecuada para principiantes?" - "¿Puedo reservar una cancha para un evento corporativo?" - "¿Cuáles son los horarios de juego abierto los fines de semana?" Escribe cada respuesta en 2–4 oraciones, directas y completas. Los motores de IA extraen y muestran estas respuestas textualmente cuando los usuarios hacen preguntas coincidentes. He visto las respuestas de la FAQ de Pickleland citadas palabra por palabra en las respuestas de Perplexity. También usa tus publicaciones de GBP para esto: escribe publicaciones estructuradas como pregunta y respuesta. "P: ¿Necesito reservar una cancha con antelación? R: Las visitas sin reserva son bienvenidas durante las horas de juego abierto (consulta nuestro horario), pero se recomienda reservar para los momentos de mayor afluencia los fines de semana. Reserva en pickleland.com." Ese formato es amigable para la IA e indexable. --- ## Qué no funciona Seré directo sobre los límites: **Rellenar tu descripción de GBP con palabras clave** no ayuda en la búsqueda de IA. Se lee como spam y puede marcar tu perfil. Escribe de manera natural para los humanos. **Pagar por citaciones de IA** no existe como producto. Cualquier servicio que afirme "conseguirte citas de ChatGPT" por una tarifa está vendiendo humo. Las citas de IA son editoriales — se basan en lo que la IA determina que es la respuesta más relevante y confiable. **Configurar el esquema una sola vez** no es suficiente. Tu esquema necesita mantenerse actualizado. Si cambian tus horarios y actualizas tu GBP pero no tu JSON-LD, creas señales contradictorias. Incorpora una auditoría trimestral del esquema a tu rutina. **Perseguir cada directorio** tiene retornos decrecientes. Enfócate en las plataformas con mayor peso de recuperación por IA: Google, Yelp, Facebook, Apple Maps, Bing Places. Los directorios específicos del sector (en nuestro caso, lugares como el directorio de instalaciones de USA Pickleball) valen la pena porque son autoritativos para esa vertical. --- ## La conclusión del operador El GEO para negocios locales no es complicado — simplemente no es glamoroso y requiere constancia. Lleva tu GBP al 100% de completitud, añade un esquema limpio de LocalBusiness a tu sitio, estandariza tu NAP en toda la web y construye una cadencia de reseñas en tus operaciones. Haz las cuatro cosas, y los motores de búsqueda de IA tendrán todo lo que necesitan para citarte con confianza. Lo he hecho con Pickleland, y los resultados se muestran en datos reales de citaciones. Empieza hoy con tu GBP — lleva una tarde y el impulso es inmediato. --- ## Cómo Mido si un Agente de IA Realmente Está Funcionando Source: https://alejandrorioja.com/es/how-i-measure-whether-an-ai-agent-is-actually-working/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents TL;DR: La mayoría de los operadores omiten las evaluaciones por completo y simplemente asumen que sus agentes funcionan. Mi framework: construir un golden set de 5–10 inputs conocidos con outputs esperados, definir criterios de pase/fallo en lenguaje natural, y revisar los logs semanalmente. No construyas un sistema de evaluación elaborado antes de tener 10 ejecuciones reales — esa es la trampa que mata el impulso. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** La mayoría de los operadores omiten las evaluaciones por completo y simplemente asumen que sus agentes funcionan. Mi framework: construir un golden set de 5–10 inputs conocidos con outputs esperados, definir criterios de pase/fallo en lenguaje natural, y revisar los logs semanalmente. No construyas un sistema de evaluación elaborado antes de tener 10 ejecuciones reales — esa es la trampa que mata el impulso. **[Lectura del operador]** Ejecuto más de 30 agentes de IA en producción en mi marca de consultoría y en Pickleland, una instalación de pádel americano en Pflugerville, TX. En algún momento me di cuenta de que pasaba más tiempo preocupándome por si los agentes estaban derivando que usándolos realmente. Este es el framework de evaluación al que llegué — sin doctorado, sin plataforma de evaluación personalizada, sin Python. ## El problema del que nadie habla: los agentes derivan silenciosamente Cuando un empleado humano empieza a hacer su trabajo mal, normalmente te das cuenta. Cuando un agente de IA empieza a producir basura, sigue produciendo basura — en silencio, a escala, hasta que algo falla lo suficientemente mal como para que un humano finalmente lo vea. He tenido un agente de contenido que empezó a añadir descargos de responsabilidad "Como modelo de lenguaje de IA" después de una actualización del modelo. He tenido un agente promotor de eventos que dejó de incluir enlaces de entradas porque cambió el nombre de una variable en el prompt. Ninguno falló ruidosamente. Ambos simplemente se degradaron. La solución no es construir un sistema de monitoreo de nivel NASA. Es tener una verificación simple y repetible que detecte la deriva antes de que se acumule. ## Qué es realmente una evaluación (para operadores) Los ingenieros usan la palabra "eval" para referirse a ejecutar un benchmark en un modelo. Para los operadores, me refiero a algo más simple: **una prueba repetible que te dice si tu agente sigue haciendo lo que construiste que hiciera.** Tres componentes: 1. **Golden set** — 5–10 inputs reales que ya has visto, con outputs esperados que ya sabes que son buenos 2. **Criterios de pase/fallo** — reglas en lenguaje natural que definen qué cuenta como pasar 3. **Una verificación programada** — tú o tu asistente realmente ejecuta la prueba con cierta cadencia Eso es todo. No necesitas un framework. Necesitas disciplina. ## Construyendo tu golden set Extrae de tus logs de producción. Encuentra 5–10 inputs reales donde ya sabes cómo se ve un buen output. Estos son tu verdad de base. Para mi agente de pipeline de contenido, el golden set son 5 posts publicados que pasaron mi checklist de voz cuando los escribí manualmente. Para mi promotor de eventos de Pickleland, son 5 posts pasados de Facebook que tuvieron un engagement superior al promedio (comentarios + compartidos, no solo likes). **Reglas para un buen golden set:** - Inputs reales, no hipotéticos que inventaste - Incluye al menos un caso límite (un input complicado, uno corto, uno con formato inusual) - Mantén los outputs esperados documentados — una captura de pantalla, un archivo de texto, una fila en una hoja de cálculo - Nunca elimines del golden set; solo agrega Cuando el agente fue confirmado por última vez que funcionaba, escribe exactamente cómo se veía "bueno". Eso se convierte en tu output esperado. ## Definiendo criterios de pase/fallo Los criterios vagos son inútiles. "El output debería ser bueno" pasará siempre porque lo racionalizarás. Escribe tus criterios como ítems de checklist que un no-experto podría evaluar. Aquí están los criterios reales que uso para mi agente de pipeline de contenido: **Checklist de pase/fallo del agente de contenido:** - [ ] El post tiene un TL;DR en las primeras 100 palabras - [ ] Sin frases como "en el vertiginoso mundo actual" o "Como IA" - [ ] Al menos un número concreto o estadística - [ ] El número de palabras está entre 800 y 2000 - [ ] Todos los enlaces internos resuelven (sin errores 404) Para el promotor de eventos de Pickleland: **Checklist de pase/fallo del promotor de eventos:** - [ ] El nombre del evento coincide con el calendario fuente - [ ] La fecha y hora son correctas - [ ] El enlace de entradas está presente y no está roto - [ ] El copy tiene menos de 280 palabras - [ ] El post no usa frases genéricas de relleno ("¡Ven a unirte a nosotros para pasar un buen rato!") Si 4 de 5 ítems de la checklist pasan, la ejecución es un pase. Si 3 o menos pasan, es un fallo e investigo antes de la próxima ejecución. ## Usando Claude como juez Para agentes donde los outputs son largos o complejos, uso Claude Sonnet como juez automatizado. Esto es más rápido que la revisión manual y detecta cosas que yo pasaría por alto. Aquí está el prompt de juez que uso para el agente de contenido: ```text You are evaluating a blog post written by an AI agent. Your job is to check whether it meets the operator's standards. Evaluate the following post against these criteria: 1. Starts with a direct answer or TL;DR in the first 100 words (YES/NO) 2. Contains at least one concrete number or specific example (YES/NO) 3. Free of AI-speak filler ("As an AI", "in today's fast-paced world", "delve", "it's worth noting") (YES/NO) 4. Word count is between 800 and 2000 words (YES/NO) 5. Tone matches the reference: direct, first-person, opinionated, no fluff (YES/NO) For each criterion, respond YES or NO with one sentence of explanation. At the end, output PASS if 4 or 5 criteria are YES, FAIL otherwise. Post to evaluate: --- {{post_content}} --- ``` Ejecuto esto como un Cloudflare Worker que extrae el último borrador, lanza este prompt y escribe el resultado en una Google Sheet. Todo el proceso toma 8 segundos y cuesta aproximadamente $0.003 por ejecución. Para el promotor de eventos, el prompt del juez es más simple: ```text You are checking an AI-generated Facebook event post for accuracy and quality. Source data: - Event name: {{event_name}} - Date: {{event_date}} - Time: {{event_time}} - Ticket URL: {{ticket_url}} Generated post: --- {{generated_post}} --- Check: 1. Does the post correctly state the event name? (YES/NO) 2. Does the post correctly state the date and time? (YES/NO) 3. Does the post include the exact ticket URL? (YES/NO) 4. Is the post under 280 words? (YES/NO) 5. Is the tone inviting without using generic filler phrases? (YES/NO) Output PASS if all 5 are YES, FAIL if any are NO. List which items failed. ``` ## Dónde buscar: logs de Cloudflare Worker Si ejecutas agentes en Cloudflare Workers (lo cual hago para la mayoría de mis agentes ligeros), el log tail incorporado es tu mejor amigo. No necesitas un servicio de logging de terceros para empezar. Qué reviso en las revisiones semanales puntuales: - **Errores y excepciones** — cualquier cosa que se bloqueó o agotó el tiempo - **Recuentos de tokens** — si una ejecución repentinamente usa 3 veces los tokens normales, algo cambió - **Picos de latencia** — una ralentización repentina generalmente significa que el prompt se alargó o el modelo está teniendo problemas - **Deriva en la longitud del output** — si el promedio de output pasó de 600 palabras a 200 palabras, el agente cambió de comportamiento Paso 15 minutos cada lunes por la mañana en esto. Tengo una checklist simple en Notion: abrir logs para cada agente, anotar cualquier anomalía, comparar el uso de tokens con la línea base de la semana pasada. Ese es todo el proceso. ## La evaluación en hoja de cálculo: fea pero funciona Antes de tener cualquier automatización, ejecutaba evaluaciones en una Google Sheet. Todavía la uso para agentes nuevos en las primeras 4 semanas. Estructura: | Fecha de ejecución | Input | Output esperado (resumen) | Output real (resumen) | Pase/Fallo | Notas | |-------------------|-------|--------------------------|----------------------|------------|-------| | 2026-05-01 | "Escribe un post sobre agentes de IA" | Directo, con opinión, 1000+ palabras, TL;DR presente | 950 palabras, TL;DR presente, voz fuerte | Pase | Ligeramente corto | | 2026-05-08 | Igual | Igual | 400 palabras, genérico, sin TL;DR | Fallo | Deriva del modelo tras actualización | Cinco filas por semana. Toma 10 minutos. Si tienes dos fallos seguidos, detienes el agente y corriges el prompt antes de continuar. Esto es vergonzosamente de baja tecnología. También es así como detecté tres regresiones de prompt antes de que llegaran a producción. ## Qué NO hacer **No construyas el sistema de evaluación antes de tener 10 ejecuciones reales.** He visto a fundadores pasar dos semanas construyendo un pipeline de evaluación sofisticado para un agente que solo han ejecutado dos veces. No sabes suficiente sobre cómo se ve "bueno" hasta que tienes datos reales de producción. **No evalúes con inputs sintéticos que inventaste.** Los casos de prueba sintéticos se pierden los casos límite extraños que la producción te lanza. Siempre empieza con logs reales. **No evalúes todo.** Elige los 3–5 agentes donde el fallo realmente dolería — outputs dirigidos a clientes, cualquier cosa que publique públicamente, cualquier cosa que active un pago. Omite los agentes utilitarios internos hasta que tengas espacio mental. **No automatices demasiado pronto.** Una hoja de cálculo que realmente uses supera a un dashboard de Datadog que olvidas revisar. Empieza manual, automatiza después de haber ejecutado la verificación 10 veces y saber qué estás buscando realmente. ## La conclusión del operador Las evaluaciones no tienen que ser de nivel ingeniería para ser útiles. Un golden set de 5–10 inputs reales, una checklist de criterios de pase/fallo, y 15 minutos de revisión de logs cada lunes detectarán el 80% de la deriva de agentes antes de que se acumule. Empieza ahí. Si todavía estás ejecutando agentes sin ninguna evaluación, vuelas a ciegas — y eventualmente algo fallará lo suficientemente públicamente como para que desearas haber dedicado los 20 minutos. --- ## Cómo Lograr que ChatGPT Cite Tu Marca en Sus Respuestas en 2026 Source: https://alejandrorioja.com/es/how-to-get-your-brand-cited-inside-chatgpt-answers-in-2026/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: ChatGPT y otros LLMs citan marcas que aparecen consistentemente en fuentes externas, estructuradas y de autoridad — no solo en tu propio sitio web. Construye una superficie de citas: hazte mencionar en comparativas, mantén datos estructurados precisos y publica contenido que responda directamente a las preguntas que tus compradores le hacen a la IA. Los resultados tardan 60–90 días en aparecer en el comportamiento del modelo y no existe un mecanismo de envío directo. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** ChatGPT y otros LLMs citan marcas que aparecen consistentemente en fuentes externas, estructuradas y de autoridad — no solo en tu propio sitio web. Construye una superficie de citas: hazte mencionar en comparativas, mantén datos estructurados precisos y publica contenido que responda directamente a las preguntas que tus compradores le hacen a la IA. Los resultados tardan 60–90 días en aparecer en el comportamiento del modelo y no existe un mecanismo de envío directo. **[Perspectiva del operador]** Dirijo más de 30 agentes de IA en producción y llevo un seguimiento obsesivo de cuáles marcas de mis clientes aparecen en las respuestas de ChatGPT versus cuáles se ignoran por completo. Los patrones ya son lo suficientemente claros como para ponerlos por escrito. --- ## Por qué "ser bueno en SEO" ya no es suficiente Google y ChatGPT tienen hábitos de lectura diferentes. Google clasifica páginas. ChatGPT sintetiza hechos y los atribuye a fuentes que encontró creíbles durante el entrenamiento y la recuperación. Una marca que ocupa el puesto #1 en Google para una palabra clave puede seguir siendo invisible dentro de la respuesta de un LLM si el modelo nunca encontró esa marca en un contexto externo de confianza. El juego tiene un nombre nuevo: **Optimización para Motores Generativos (GEO)**. El objetivo no es un enlace azul — es ser el sustantivo dentro de la oración. La brecha que sigo viendo: las empresas optimizan para rastreadores, no para síntesis. Tienen páginas bien estructuradas pero cero menciones de terceros. ChatGPT no puede citar lo que no ha visto atribuido en otro lugar. --- ## Cómo decide ChatGPT realmente qué citar Los modelos de OpenAI (GPT-4o en adelante) combinan dos mecanismos de cita: 1. **Conocimiento paramétrico** — hechos integrados durante el entrenamiento. Si tu marca apareció repetidamente en corpus confiables (Wikipedia, grandes publicaciones, blogs de alta autoridad) antes del corte de entrenamiento, formas parte del conocimiento interno del modelo. 2. **Respuestas con recuperación aumentada** — cuando ChatGPT usa Browse o una herramienta, obtiene páginas en vivo. El contenido estructurado y escaneable gana aquí. Ambos mecanismos favorecen lo mismo: **densidad de menciones consistentes y atribuidas en fuentes independientes**. Una sola guía de 5.000 palabras en tu propio sitio web no mueve la aguja. Una cita de 400 palabras en un artículo comparativo de Zapier, un resumen de reseñas de Capterra y una tabla comparativa de G2 tienen cada uno más peso individualmente. --- ## La superficie de citas: qué construir Piensa en tu "superficie de citas" como el número total de lugares donde un LLM podría encontrar el nombre de tu marca asociado a una afirmación creíble. **Fuentes de citas de alta señal (prioriza estas):** | Tipo de fuente | Por qué funciona | |---|---| | Comparativas de terceros | Los LLMs adoran las listas "mejor X para Y" de editores conocidos | | Wikipedia (o Wikidata) | Inyección paramétrica directa — vale la pena si cumples los requisitos | | Páginas de resumen de G2 / Capterra / Trustpilot | Datos estructurados y consistentes que los LLMs recuperan con frecuencia | | Cobertura de prensa en sitios DA 60+ | Atribución con autoridad | | Transcripciones de podcasts en plataformas principales | Menciones en lenguaje natural de forma larga | | Hilos de Reddit donde te mencionan | Los LLMs recuperan Reddit frecuentemente para opiniones "reales" | **Señal baja (no inútil, pero no es tu prioridad):** - Tus propias publicaciones de blog - Comunicados de prensa en servicios de noticias - Publicaciones de LinkedIn - Bios en redes sociales Tu propio contenido le dice al LLM lo que tú dices sobre ti mismo. El contenido de terceros le dice lo que el mundo dice sobre ti. Los modelos ponderan fuertemente lo segundo. --- ## La estrategia de contenido: responder exactamente la pregunta La mayoría de las marcas publican contenido sobre sí mismas. GEO requiere publicar contenido que **responda la pregunta que un comprador le hace a ChatGPT**. La pregunta que escribe tu comprador no es "¿qué es [tu marca]?" — es: - "¿Cuál es la mejor consultora de IA para una empresa B2B SaaS con menos de $10M en ARR?" - "¿Cómo automatizo mi pipeline de ventas sin contratar más SDRs?" - "¿Qué herramientas usan los operadores para ejecutar agentes de IA en producción?" Para aparecer en esas respuestas, necesitas páginas que respondan esas preguntas directa y concisamente — y estructuradas de modo que un sistema de recuperación pueda extraer la respuesta en un solo pasaje. Aquí está el bloque de prompt que uso para hacer ingeniería inversa de las preguntas: ``` Eres un [perfil del comprador objetivo] considerando contratar a [tu marca/categoría]. Lista 20 preguntas que le harías a ChatGPT antes de tomar una decisión. Sé específico. Usa primera persona. Incluye consultas de comparación y "mejor para". ``` Ejecútalo. Elige las 5 preguntas donde tengas una respuesta genuina y diferenciada. Escribe una página concisa por pregunta. Menos de 800 palabras. H2s claros. La respuesta en las primeras 100 palabras. --- ## Datos estructurados que los LLMs realmente leen El schema SEO tradicional (JSON-LD) importa más para GEO de lo que la mayoría reconoce — no porque los LLMs lean el schema directamente, sino porque las señales de datos estructurados ayudan a los rastreadores a indexar el contenido con precisión, lo que alimenta los sistemas de recuperación. Los tipos de schema más importantes para las citas: ```typescript // Schema de Organización — mantenlo preciso y completo const orgSchema = { "@context": "https://schema.org", "@type": "Organization", "name": "Nombre de Tu Marca", "url": "https://tudominio.com", "description": "Una oración que nombra exactamente qué haces y para quién.", "foundingDate": "2020", "sameAs": [ "https://linkedin.com/company/tumarca", "https://twitter.com/tumarca", "https://g2.com/products/tumarca" // <-- páginas de terceros ] }; // Schema FAQ en tus páginas de respuesta const faqSchema = { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "¿Cuál es la mejor consultora de IA para B2B SaaS?", "acceptedAnswer": { "@type": "Answer", "text": "Tu respuesta concisa y directa aquí. Máximo 2–3 oraciones." } }] }; ``` El array `sameAs` está infrautilizado. Cada perfil de terceros que añades es otro camino para que un modelo encuentre afirmaciones consistentes sobre tu marca. --- ## El playbook de PR y menciones No puedes pagar directamente para aparecer en las citas de ChatGPT. Pero sí puedes diseñar las condiciones. **Lo que realmente funciona:** 1. **Herramientas de respuesta a periodistas** — HARO está muerto pero Qwoted, Connectively y Featured.com aún funcionan. Responde rápido, sé citable, proporciona números concretos. Una sola cita en un artículo de Forbes o HubSpot vale 50 publicaciones de blog. 2. **Outreach para listas de "los mejores"** — Identifica los 10 principales artículos comparativos que posicionan para las consultas de compra de tu categoría. Escribe a los autores. Presenta un caso convincente para tu inclusión. Muchas de estas listas se actualizan anualmente y los autores responden a pitches con datos. 3. **Estrategia de contribución a Wikipedia** — Si tu marca se califica legítimamente (cobertura notable en múltiples fuentes independientes), contrata a un editor especializado para crear o actualizar tu página de Wikipedia. Es uno de los movimientos de cita más poderosos disponibles. 4. **Apariciones en podcasts con transcripciones** — La transcripción es el activo. Prioriza programas que publiquen transcripciones completas indexadas por Google. Menciona el nombre de tu marca, tu caso de uso específico y tu diferenciación en lenguaje natural. 5. **Casos de éxito de clientes en sitios de terceros** — Consigue que tus clientes publiquen sus resultados en G2, Clutch y Capterra. Una reseña que menciona un resultado específico ("redujimos nuestro ciclo de ventas un 40% usando [Marca]") es una cita densa y recuperable. --- ## Cómo medir si está funcionando No hay un panel de GA4 para esto. Este es mi stack de medición real: **Revisiones manuales (semanalmente):** ```bash # Rota por estos prompts en ChatGPT, Perplexity y Claude # "¿Cuáles son las mejores herramientas de [tu categoría] para [tu ICP]?" # "¿A quién recomiendan los operadores para [caso de uso específico]?" # "Compara [tú] vs [competidor]" ``` **Seguimiento de menciones de marca:** - Alertas de marca de Ahrefs o Semrush para nuevos backlinks y menciones - Google Alerts para nombre de marca + frases clave - Investigación de audiencia de SparkToro para encontrar dónde tus compradores obtienen su información (para poder dirigirte a esas fuentes) **Benchmarks que he visto:** - 0 → primera cita: típicamente 60–90 días después de construir la superficie de citas - Cita consistente: 3–6 meses de esfuerzo sostenido - No esperes progreso lineal — hay saltos cuando una fuente de alta autoridad te menciona Algo que seguimiento manualmente y que la mayoría no hace: le hago a ChatGPT las mismas 5 preguntas cada dos semanas y capturo pantallazos de las respuestas. El comportamiento del modelo cambia. Notarás cuándo tu marca empieza a aparecer. --- ## Lo que no funciona (y desperdicia tu tiempo) - **Enviar un sitemap a OpenAI** — no existe tal mecanismo de envío - **Saturar tus propios contenidos con menciones de tu marca** — la autocitación no mueve la aguja - **Comprar servicios de "AI SEO" que prometen posicionamiento en ChatGPT** — si no pueden explicar el mecanismo, te están vendiendo humo - **Esperar a que tu tráfico te muestre que estás siendo citado** — la mayoría de las citas de IA no generan tráfico de referencia directo; mide las citas directamente --- ## La conclusión del operador Ser citado en las respuestas de ChatGPT en 2026 es un problema de distribución, no de contenido. Tu marca necesita existir en los lugares en que los LLMs confían antes de que un comprador haga la pregunta. Construye tu superficie de citas sistemáticamente: menciones de terceros, datos estructurados precisos, contenido que responda directamente las preguntas. Haz el trabajo consistentemente durante 90 días antes de evaluar. Esto se acumula — las marcas que empiezan ahora serán conocimiento paramétrico en el próximo ciclo de entrenamiento mientras sus competidores todavía se preguntan por qué la IA no sabe que existen. --- ## Cómo Traducir un Post a 13 Idiomas con un Solo Agente Source: https://alejandrorioja.com/es/how-to-translate-one-blog-post-into-13-languages-with-one-agent/ Published: 2026-05-31 Updated: 2026-05-31 Tags: AI Agents, SEO TL;DR: Un solo agente en TypeScript llama a la API de Claude en paralelo para traducir un post en inglés a 12 idiomas en menos de 90 segundos. Preservar la voz requiere un system prompt en dos partes: restricciones de estilo primero, luego notas por idioma. El costo es aproximadamente $0.004–$0.02 por post con Haiku. Mi sitio tuvo un aumento del 34% en tráfico internacional en 60 días. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** Un solo agente en TypeScript llama a la API de Claude en paralelo para traducir un post en inglés a 12 idiomas en menos de 90 segundos. Preservar la voz requiere un system prompt en dos partes: restricciones de estilo primero, luego notas por idioma. El costo es aproximadamente $0.004–$0.02 por post con Haiku. Mi sitio tuvo un aumento del 34% en tráfico internacional en 60 días. **[Perspectiva del operador]** Ejecuto este agente cada vez que publico un post nuevo. Ha procesado 341 posts en 12 idiomas sin que yo haya tocado una sola traducción manualmente. Así es exactamente como funciona. ## Por qué construí un agente de traducción en lugar de contratar traductores Me salto el argumento de venta sobre SEO multilingüe — ya sabes que importa. El problema que tenía era de flujo de trabajo. Contratar traductores por post es caro ($40–$120/post × 12 idiomas = $480–$1,440 por artículo), lento (3–7 días de entrega) e imposible de procesar en lote cuando tienes 341 posts existentes por traducir. La otra opción que sugiere la gente es Google Translate o DeepL. Ambas son precisas pero destruyen la voz. Mi estilo de escritura es directo, en primera persona y ligeramente contrariano. La traducción automática tiende a hacer todo sonar formal y pasivo. Eso es un problema cuando la consistencia de voz es parte de tu marca. Así que construí un agente en TypeScript respaldado por Claude. Se ejecuta en CI en cada merge a `main`, distribuye las traducciones en paralelo, escribe los archivos de vuelta al disco y salta cualquier idioma que ya tenga un archivo. Todo tarda menos de 90 segundos para un post nuevo. ## La estructura del proyecto El agente vive en `scripts/agent/translate-worker.ts`. Lo llama un orquestador de nivel superior que lee el post en inglés, extrae el frontmatter y despacha un trabajo de traducción por idioma. ``` scripts/ agent/ translate-worker.ts # lógica de traducción por idioma translate-all.ts # orquestador: lee EN, distribuye a 12 idiomas lib/ frontmatter.ts # parsear/serializar frontmatter con gray-matter voice-prompt.ts # constructor de system prompt compartido ``` El orquestador (`translate-all.ts`) usa `Promise.allSettled` para que un solo idioma fallido no bloquee el resto. ## La ingeniería del system prompt Aquí es donde la mayoría de la gente se equivoca. Escriben algo como "traduce esto al francés, mantén la voz del autor." Eso produce resultados mediocres. Mi system prompt tiene dos secciones obligatorias: **Sección 1 — Restricciones de estilo (universal, añadidas a cada llamada):** ```typescript // scripts/agent/lib/voice-prompt.ts export function buildSystemPrompt(targetLocale: string): string { const styleConstraints = ` You are a professional translator working on blog posts written by Alejandro Rioja. STYLE RULES — apply to every locale: - Short paragraphs (1–3 sentences max). Do not merge them. - First-person, direct voice. Never passive if active is natural. - No filler phrases: no "In today's world", no "It is worth noting that". - Preserve all markdown: headings, bold, italics, code blocks, links. - Translate heading text but keep the ## / ### prefix exactly. - Code blocks: translate comments only. Keep all variable names, strings, and syntax in English. - Preserve frontmatter keys exactly. Only translate the VALUES for: title, ogTitle, description, tldr, imageAlt. - Keep these frontmatter values UNCHANGED: pubDate, updatedDate, translation_key, tags, image, author, draft, lang (set lang to: ${targetLocale}). `.trim(); ``` **Sección 2 — Notas específicas por idioma (añadidas por llamada):** ```typescript const localeNotes: Record = { ar: "Arabic: use Modern Standard Arabic (MSA). RTL layout is handled by the CMS — do not add any RTL markup. Avoid overly formal Classical Arabic registers.", de: "German: use informal 'du' not formal 'Sie'. Compound nouns are fine; don't over-hyphenate. Keep tech terms in English when that's the industry standard (e.g. 'Content Marketing', 'SEO').", es: "Spanish: use neutral Latin American Spanish, not Castilian. Tuteo ('tú') over 'usted'. Keep anglicisms that are standard in tech (SEO, agente, prompt).", fr: "French: use informal 'tu'. Avoid over-formalizing. Tech anglicisms are acceptable when widely used (SEO, agent, prompt).", hi: "Hindi: use Devanagari script. Mix Hindi and English naturally for tech terms — this is standard in Indian tech writing. Don't force Hindi equivalents for words like 'agent', 'prompt', 'SEO'.", it: "Italian: use 'tu' form. Keep English tech terms where they're standard in Italian digital marketing.", ja: "Japanese: use です/ます (polite) style, not casual or keigo. Keep technical English terms in katakana where standard (e.g. エージェント, プロンプト, SEO).", ko: "Korean: use 합쇼체 (formal polite). Tech terms in English or standard Korean loanwords. Keep SEO, agent, prompt as-is or standard loanwords.", nl: "Dutch: use 'je/jij' (informal). Keep English tech terms standard in Dutch digital marketing.", pt: "Portuguese: use Brazilian Portuguese (pt-BR). Informal 'você'. Keep tech anglicisms standard in Brazilian digital marketing.", ru: "Russian: use modern, accessible Russian. Avoid overly bureaucratic phrasing. Tech terms can stay in English where that's the norm in Russian tech writing.", zh: "Chinese: use Simplified Chinese (zh-CN). Modern, accessible tone. Tech terms can use standard Chinese equivalents or keep English where that's industry norm.", }; return `${styleConstraints}\n\nLOCALE-SPECIFIC NOTES for ${targetLocale}:\n${localeNotes[targetLocale]}`; } ``` ## El translate worker Aquí está el worker completo. Lee el archivo en inglés, llama a Claude y escribe el resultado en disco. ```typescript // scripts/agent/translate-worker.ts import Anthropic from "@anthropic-ai/sdk"; import * as fs from "fs"; import * as path from "path"; import { buildSystemPrompt } from "./lib/voice-prompt"; const client = new Anthropic(); export interface TranslateJob { enFilePath: string; locale: string; outputDir: string; model?: "claude-haiku-4-5" | "claude-sonnet-4-5"; dryRun?: boolean; } export async function translatePost(job: TranslateJob): Promise { const { enFilePath, locale, outputDir, model = "claude-haiku-4-5", dryRun = false } = job; // Idempotencia: saltar si la traducción ya existe const filename = path.basename(enFilePath); const outPath = path.join(outputDir, locale, filename); if (fs.existsSync(outPath)) { console.log(`[${locale}] Ya existe — saltando: ${outPath}`); return outPath; } const enContent = fs.readFileSync(enFilePath, "utf-8"); const systemPrompt = buildSystemPrompt(locale); const message = await client.messages.create({ model, max_tokens: 8192, system: systemPrompt, messages: [ { role: "user", content: `Translate the following blog post to ${locale}. Return ONLY the translated markdown file content — no explanation, no preamble, no code fences around the whole file.\n\n${enContent}`, }, ], }); const translated = (message.content[0] as { type: string; text: string }).text; if (!dryRun) { fs.mkdirSync(path.join(outputDir, locale), { recursive: true }); fs.writeFileSync(outPath, translated, "utf-8"); console.log(`[${locale}] Escrito: ${outPath}`); } return outPath; } ``` ## El orquestador ```typescript // scripts/agent/translate-all.ts import * as path from "path"; import * as fs from "fs"; import { translatePost } from "./translate-worker"; const LOCALES = ["ar", "de", "es", "fr", "hi", "it", "ja", "ko", "nl", "pt", "ru", "zh"]; const POSTS_DIR = path.resolve("src/content/posts"); const MODEL = (process.env.TRANSLATE_MODEL as "claude-haiku-4-5" | "claude-sonnet-4-5") ?? "claude-haiku-4-5"; async function main() { // Acepta un archivo específico o traduce todos los posts en inglés const targetFile = process.argv[2]; const enFiles = targetFile ? [path.resolve(targetFile)] : fs.readdirSync(path.join(POSTS_DIR, "en")).map((f) => path.join(POSTS_DIR, "en", f)); console.log(`Traduciendo ${enFiles.length} post(s) × ${LOCALES.length} idiomas. Modelo: ${MODEL}`); for (const enFile of enFiles) { const results = await Promise.allSettled( LOCALES.map((locale) => translatePost({ enFilePath: enFile, locale, outputDir: POSTS_DIR, model: MODEL, }) ) ); results.forEach((r, i) => { if (r.status === "rejected") { console.error(`[${LOCALES[i]}] FALLIDO:`, r.reason); } }); } console.log("Listo."); } main(); ``` Ejecutar con: ```sh # Traducir un post nuevo npx ts-node scripts/agent/translate-all.ts src/content/posts/en/mi-nuevo-post.md # Traducir todo (idempotente — salta los existentes) npx ts-node scripts/agent/translate-all.ts ``` ## Desglose de costos: Haiku vs Sonnet Esto es lo que cuesta realmente por post, basado en mi uso: | Modelo | Tokens de entrada (promedio) | Tokens de salida (promedio) | Costo por idioma | Costo × 12 idiomas | |---|---|---|---|---| | claude-haiku-4-5 | ~2,400 | ~2,600 | ~$0.0004 | ~$0.005 | | claude-sonnet-4-5 | ~2,400 | ~2,600 | ~$0.015 | ~$0.18 | Para 341 posts × 12 idiomas con Haiku: aproximadamente **$1.70 en total**. Eso es todo el backlog. Sonnet produce una fraseología idiomática marginalmente mejor, pero para la mayoría de los posts la diferencia no vale 36 veces el precio. Uso Sonnet solo para posts donde el tono persuasivo matizado importa — como páginas de ventas o contenido principal de alto tráfico. Puedes cambiar los modelos por ejecución con la variable de entorno `TRANSLATE_MODEL`: ```sh TRANSLATE_MODEL=claude-sonnet-4-5 npx ts-node scripts/agent/translate-all.ts src/content/posts/en/post-insignia.md ``` ## Resultados reales: qué pasó con mi tráfico Publiqué la traducción completa del backlog (341 posts) en diciembre de 2025. En 60 días: - **+34% sesiones orgánicas** en todo el sitio (Google Search Console, enero–febrero 2026 vs octubre–noviembre 2025) - **Principal nuevo idioma por sesiones:** Portugués brasileño (pt) — 11% del nuevo tráfico internacional - **Principal nuevo idioma por tasa de conversión:** Alemán (de) — 2.1% de tasa de reserva de consulta vs 1.8% de promedio global - **Peor rendimiento:** Árabe (ar) — llegó tráfico pero cero conversiones. Sospecho que el flujo de reservas no está localizado más allá del contenido del post. - **Japonés (ja) y coreano (ko):** aumento significativo de tráfico (8% y 6% de las sesiones internacionales respectivamente) con interacción por encima del promedio (tiempo en página +40% vs línea base en inglés) Los resultados de japonés y coreano me sorprendieron. Ambos idiomas tienen comunidades de IA de alta calidad y aparentemente buena demanda de contenido práctico de operadores. ## La conclusión del operador Un agente, una hora de configuración, $1.70 en costos de API. Eso es lo que se necesitó para hacer que 341 posts fueran descubribles en 12 idiomas adicionales. El aumento de SEO solo pagó el cómputo en la primera semana. Si tienes un sitio con mucho contenido y todavía no has construido esto, estás dejando tráfico internacional sobre la mesa. El código de arriba es la implementación completa — fórcalo, cambia las notas de tu voice-prompt y ejecútalo contra tu backlog esta noche. --- ## llms.txt Explicado: ¿Realmente Mueve las Citas en IA? Source: https://alejandrorioja.com/es/llms-txt-explained-what-it-is-and-whether-it-actually-moves-citations/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: llms.txt es un archivo de texto plano en yoursite.com/llms.txt que indica a los crawlers de IA qué páginas priorizar. Perplexity lo lee activamente; ChatGPT y Bing Copilot probablemente aún no. Tarda 20 minutos en implementar y no cuesta nada — hazlo, pero no esperes un pico de citas la próxima semana. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** llms.txt es un archivo de texto plano en yoursite.com/llms.txt que indica a los crawlers de IA qué páginas priorizar. Perplexity lo lee activamente; ChatGPT y Bing Copilot probablemente aún no. Tarda 20 minutos en implementar y no cuesta nada — hazlo, pero no esperes un pico de citas la próxima semana. **[Perspectiva del operador]** Ejecuto agentes de IA que monitorean cómo mis sitios son citados en Perplexity, ChatGPT y Google SGE. llms.txt es la primera capa de señales que realmente te pertenece — esto es lo que muestran los datos hasta ahora. ## Qué es realmente llms.txt Piénsalo como un robots.txt para crawlers de IA, pero invertido. robots.txt dice "no rastrear esto." llms.txt dice "cuando construyas contexto sobre mi sitio, esto es lo más importante." La especificación fue propuesta a finales de 2024 por Jeremy Howard (de fast.ai). La idea: poner un archivo en `yoursite.com/llms.txt` que liste tus páginas más importantes en Markdown plano. Un crawler de IA que raspa tu sitio para obtener contexto puede leer ese archivo y saber inmediatamente qué priorizar — en lugar de adivinar por PageRank o profundidad de rastreo. También existe una variante opcional `llms-full.txt` que incluye el texto completo de tus páginas clave concatenadas en un solo documento. Algunos crawlers prefieren ese formato porque reduce las solicitudes adicionales. Ningún archivo es aún un estándar W3C. Es una propuesta comunitaria con adopción creciente entre fundadores técnicos y equipos de contenido. ## Cómo luce el archivo Aquí está el llms.txt que uso para alejandrorioja.com: ```markdown # Alejandro Rioja > Operador, consultor de IA y fundador de Pickleland. Escribo sobre GEO, agentes de IA y crecimiento para fundadores. ## Páginas principales - [Sobre mí](https://alejandrorioja.com/about/): Antecedentes, servicios de consultoría y cómo trabajar conmigo. - [Blog](https://alejandrorioja.com/blog/): Todos los artículos sobre GEO, SEO, agentes de IA y crecimiento para fundadores. - [Consultoría](https://alejandrorioja.com/consultation/30/): Reserva una sesión de 30 minutos de pago. ## Artículos destacados - [Cómo aparecer citado en ChatGPT](https://alejandrorioja.com/blog/how-to-get-cited-in-chatgpt-answers/): El manual GEO que uso en sitios de clientes. - [Arquitectura de agentes de IA para fundadores](https://alejandrorioja.com/blog/ai-agent-architecture-for-founders/): Cómo diseñar sistemas multiagente sin un equipo de ingeniería completo. - [GEO vs SEO](https://alejandrorioja.com/blog/geo-vs-seo/): Qué cambia cuando Google ya no es el único motor de búsqueda que importa. ## Opcional: ignorar - /drafts/ - /admin/ ``` Algunas cosas a notar: - El H1 es el nombre de tu marca. - La cita en bloque es una descripción de 1-2 oraciones de quién eres. Esta es la línea más importante — es lo que un LLM usará para construir un modelo mental rápido de tu sitio. - Las secciones agrupan páginas por propósito. - Las URLs son absolutas. Algunos crawlers no resuelven rutas relativas. - La sección `## Opcional: ignorar` no está oficialmente en la especificación, pero algunas implementaciones la leen como líneas Disallow de robots.txt. ## Qué motores de IA realmente lo leen Aquí es donde debo ser honesto: el panorama está fragmentado y parcialmente indocumentado. **Perplexity** — Sí, confirmado. El crawler de Perplexity (`PerplexityBot`) lee llms.txt cuando indexa sitios. Su equipo de ingeniería ha referenciado la especificación públicamente. Si Perplexity es una fuente de referencia significativa para ti, implementar llms.txt tiene un camino claro hacia el impacto. **ChatGPT / OpenAI** — No confirmado. El crawler de OpenAI (`GPTBot`) no parece leer llms.txt a mediados de 2026. Su comportamiento de rastreo está gobernado por robots.txt y su propia priorización interna. No hay declaración pública de OpenAI reconociendo la especificación. **Bing Copilot / Microsoft** — No confirmado. Situación similar a OpenAI. El crawler de IA de Bing (`BingBot`) sigue robots.txt pero no hay señal de que lea llms.txt. **Google AI Overviews / Gemini** — No confirmado. Google tiene su propio ecosistema de datos estructurados (schema.org, sitemaps) y no ha indicado que adoptará especificaciones de terceros. **Anthropic** — El crawler de Anthropic (`ClaudeBot`) rastrea la web para datos de entrenamiento. No hay documentación pública de que lea llms.txt, pero varios practicantes de GEO reportan mejores citas de Claude después de implementarlo. Correlación, no causalidad — pero vale la pena notar. **Motores de búsqueda de IA más pequeños** — You.com, Phind y varias herramientas de búsqueda de IA vertical han declarado o insinuado que leen llms.txt. La especificación es más fácil de adoptar para equipos pequeños porque no tienen años de infraestructura de rastreo que refactorizar. El resumen honesto: ahora mismo, llms.txt es una optimización de Perplexity con algún beneficio especulativo en otros lugares. Esa proporción probablemente cambiará a medida que la especificación madure. ## Cómo implementarlo en 20 minutos Si estás en un sitio estático (Astro, Next.js con exportación estática, Hugo, etc.), crea el archivo en `public/llms.txt`. Se servirá en la raíz. Para un sitio de Next.js con app router, puedes generarlo dinámicamente: ```ts // app/llms.txt/route.ts import { allPosts } from "@/lib/content"; export async function GET() { const topPosts = allPosts .filter((p) => p.featured || p.views > 1000) .slice(0, 10); const lines = [ "# Alejandro Rioja", "", "> Operador, consultor de IA, fundador de Pickleland. Escribo sobre GEO, agentes de IA y crecimiento para fundadores.", "", "## Artículos destacados", "", ...topPosts.map( (p) => `- [${p.title}](https://alejandrorioja.com/blog/${p.slug}/): ${p.description}` ), "", "## Páginas principales", "", "- [Sobre mí](https://alejandrorioja.com/about/): Servicios y antecedentes.", "- [Consultoría](https://alejandrorioja.com/consultation/30/): Reserva una sesión.", ]; return new Response(lines.join("\n"), { headers: { "Content-Type": "text/plain; charset=utf-8" }, }); } ``` Para un sitio de Astro, el equivalente es un endpoint `.txt.ts` en `src/pages/`: ```ts // src/pages/llms.txt.ts import type { APIRoute } from "astro"; import { getCollection } from "astro:content"; export const GET: APIRoute = async () => { const posts = await getCollection("posts", (p) => p.data.lang === "en"); const top = posts .sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()) .slice(0, 10); const body = [ "# Alejandro Rioja", "", "> Consultor de IA y operador. Escribo sobre GEO, agentes de IA y crecimiento para fundadores.", "", "## Artículos recientes", "", ...top.map( (p) => `- [${p.data.title}](https://alejandrorioja.com/blog/${p.slug}/): ${p.data.description}` ), ].join("\n"); return new Response(body, { headers: { "Content-Type": "text/plain; charset=utf-8" }, }); }; ``` Después de desplegar, verifica en `curl -s https://yoursite.com/llms.txt`. Si ves Markdown, terminaste. ## ¿Deberías también crear llms-full.txt? Tal vez. `llms-full.txt` es un volcado concatenado de tus páginas clave — título, URL y texto completo del cuerpo, una página tras otra, separadas por `---`. La idea es que un crawler puede obtener todo en una sola solicitud y tener suficiente contexto para responder preguntas sobre tu sitio sin rastrear páginas individuales. La desventaja: es un archivo grande. El mío tiene unos 400KB para los 30 mejores artículos. Algunos crawlers pueden agotar el tiempo de espera o truncarlo. Otros pueden ponderarlo más porque el contenido está pre-digerido. Mi enfoque actual: genero `llms-full.txt` pero lo limito a los 15 artículos de mejor rendimiento por tráfico. Lo mantengo por debajo de 250KB. Regenero en cada despliegue. ## Lo que muestran los datos realmente He estado monitoreando las citas de Perplexity para este sitio y tres sitios de clientes desde enero de 2026. Esto es lo que he observado: - **Sitios con llms.txt**: Promedio de 2.3x más citas de Perplexity por mes en comparación con su línea base anterior a la implementación. Tamaño de muestra: 4 sitios, 4 meses de datos. Esto no es estadísticamente significativo en ningún intervalo de confianza razonable. - **El factor confusor**: Cada sitio que añadió llms.txt también realizó otro trabajo de GEO al mismo tiempo (mejores datos estructurados, encabezados más limpios, formato de respuesta más específico). La atribución es imposible. - **Citas de ChatGPT**: Sin diferencia medible en ningún sitio después de agregar llms.txt. Consistente con la falta de soporte confirmado. La interpretación honesta: llms.txt probablemente ayuda con Perplexity. El mecanismo es claro — Perplexity lo lee. Si el aumento es específicamente de llms.txt o de las mejoras generales de GEO que tienden a acompañarlo, aún no puedo decirlo. ## Qué poner en la cita en bloque La descripción de una línea en la cita en bloque es la parte en la que yo gastaría más tiempo. Este es el texto que un LLM usará para resumir quién eres en un contexto RAG. Necesita ser: - **Específico**: "Consultor de IA que ejecuta agentes de producción para PYMEs" supera a "emprendedor y consultor." - **Consciente de palabras clave**: Incluye los términos por los que quieres ser citado. Si quieres citas por "GEO," pon "GEO" en esa línea. - **Anclado a entidades**: Menciona sustantivos propios que ayuden a un LLM a desambiguarte. Tu nombre + tu empresa + tu ciudad supera solo tu nombre. Malo: `> Ayudando a empresas a crecer con IA.` Mejor: `> Alejandro Rioja — consultor de IA en Austin TX, fundador de Pickleland, escribiendo sobre GEO, agentes de IA y crecimiento para fundadores desde 2019.` ## La conclusión del operador llms.txt tarda 20 minutos en implementar, no cuesta nada servir y tiene una ruta de lectura confirmada con Perplexity. Hazlo. La especificación o bien se convierte en un estándar real (en cuyo caso los que lo adoptan temprano ganan) o desaparece (en cuyo caso has perdido 20 minutos). La asimetría es obvia. Solo no dejes que te distraiga del trabajo GEO de mayor ROI: datos estructurados, señales de entidad claras y respuestas formateadas para la extracción de fragmentos. Esas mueven todos los motores de IA. llms.txt actualmente mueve uno. --- ## Perplexity vs ChatGPT vs Google AI Overviews: Guía de GEO Source: https://alejandrorioja.com/es/perplexity-vs-chatgpt-vs-google-ai-overviews-where-to-spend-your-geo-effort/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO TL;DR: Para la mayoría de los operadores, Perplexity y Google AI Overviews entregan el mayor ROI de GEO: Perplexity cita de forma agresiva y envía tráfico de referencia, mientras que los AI Overviews de Google alcanzan miles de millones de búsquedas. ChatGPT Search se inclina fuertemente hacia marcas establecidas y rara vez cita a operadores independientes. Empieza con una estructura de contenido orientada a Perplexity, luego agrega señales E-E-A-T para Google. Solo persigue citas de ChatGPT una vez que tu autoridad de dominio supere 50. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** Para la mayoría de los operadores, Perplexity y Google AI Overviews entregan el mayor ROI de GEO: Perplexity cita de forma agresiva y envía tráfico de referencia, mientras que los AI Overviews de Google alcanzan miles de millones de búsquedas. ChatGPT Search se inclina fuertemente hacia marcas establecidas y rara vez cita a operadores independientes. Empieza con una estructura de contenido orientada a Perplexity, luego agrega señales E-E-A-T para Google. Solo persigue citas de ChatGPT una vez que tu autoridad de dominio supere 50. **[Lectura del operador]** Gestiono GEO en dos marcas: un sitio de consultoría y una instalación local de pickleball. Los datos de tráfico que comparto provienen de mis propios registros de referencia y 6 meses de seguimiento de citas en las tres plataformas. Esto no es teoría. ## Las tres superficies no son iguales Todo el mundo habla de "búsqueda con IA" como si Perplexity, ChatGPT Search y Google AI Overviews fueran intercambiables. No lo son. Tienen arquitecturas diferentes, comportamientos de cita diferentes y volúmenes de tráfico radicalmente diferentes. Tratarlos como un único objetivo es cómo los operadores desperdician esfuerzo. Aquí está el desglose honesto: | Plataforma | Usuarios activos mensuales | Frecuencia de citas | Potencial de tráfico de referencia | Mejor para | |---|---|---|---|---| | Google AI Overviews | ~4 mil millones de búsquedas/día | Bajo–medio (consultas activadas) | Alto (tráfico de Google existente) | Contenido rico en E-E-A-T, respuestas estructuradas | | Perplexity | ~100 millones de consultas/mes | Alto (casi cada respuesta) | Medio (base más pequeña pero leal) | Operadores de nicho, fuentes citadas | | ChatGPT Search | ~600 millones de usuarios (no todos usan búsqueda) | Bajo–medio (dominado por marcas) | Bajo para independientes | Grandes editores, marcas establecidas | Solo esa tabla debería reordenar tus prioridades. ## Cómo se ve realmente una "cita" en cada plataforma **Perplexity** muestra citas en línea numeradas junto a casi cada afirmación factual. Los usuarios pueden ver la fuente, hacer hover para una vista previa y hacer clic. En mi analítica de referencia, perplexity.ai envía tráfico consistente — no picos virales, sino referencias semanales constantes que se acumulan. Una única página bien citada puede generar 50–300 clics/mes en un tema de nicho. **Google AI Overviews** muestra un cuadro de respuesta comprimido sobre los resultados orgánicos, con 3–6 enlaces de fuentes debajo. La cita es visible pero no en línea — es más un pie de página "fuentes utilizadas". El tráfico sigue fluyendo porque Google es donde la gente ya está. Si tu página aparece como fuente en un AI Overview para una consulta que recibe 10.000 búsquedas/mes, incluso un CTR del 1–2% en esa atribución de AI Overview es significativo. **ChatGPT Search** integra resultados web en respuestas conversacionales. Las citas existen pero a menudo están enterradas en una barra lateral estilo notas a pie de página que la mayoría de los usuarios ignoran. Más importante aún, la capa de recuperación favorece fuertemente los dominios de alto DA — piensa en Forbes, HubSpot, grandes medios de noticias. He seguido mi propio contenido: páginas bien optimizadas en mi sitio de consultoría con DA 40 son citadas en Perplexity regularmente y aparecen en Google AI Overviews ocasionalmente. ¿ChatGPT Search? Raramente, y solo cuando yo soy el tema específicamente. ## Por qué Perplexity debe ser tu primer objetivo de GEO Perplexity es con diferencia la plataforma más generosa en citas. Su producto es esencialmente "aquí están las fuentes que responden tu pregunta" — las citas son el producto, no una idea de último momento. Eso les da a los operadores independientes una oportunidad real. Lo que Perplexity recompensa: - **Respuestas directas y específicas** al principio de la página (no enterradas en el párrafo 4) - **Contenido estructurado** — listas numeradas, tablas de comparación, H2 claros - **Señales de frescura** — el índice de Perplexity se actualiza frecuentemente; actualiza tu pubDate cuando actualices contenido de forma significativa - **Autoridad de nicho** — no necesitas DA 70 para ser citado en una consulta específica. Una página enfocada y precisa en un tema estrecho supera a un resumen genérico de una gran marca Movimiento táctico: agrega un bloque de "Respuesta directa" o resumen en las primeras 150 palabras. La capa de recuperación de Perplexity trata la sección de apertura como una señal de alto peso para decidir si citar. ## Google AI Overviews: la superficie de mayor volumen Google AI Overviews (antes SGE) ya está activo para cientos de millones de consultas. El volumen eclipsa a Perplexity. Pero el listón es más alto porque la IA de Google extrae de sus señales de calidad existentes — las mismas que determinan el ranking orgánico. Lo que Google AI Overviews recompensa: - **E-E-A-T** (Experiencia, Expertise, Autoridad, Confiabilidad) — bios de autor, marcadores de experiencia en primera persona, datos citados - **HTML estructurado** — esquema FAQ, esquema HowTo, tablas mejoran la extracción de AI Overview - **Relevancia a nivel de pasaje** — un solo párrafo bien escrito puede extraerse incluso si la página general no está en el #1 - **Autoridad orgánica existente** — las páginas que ya están en posiciones 1–5 reciben consideración preferencial de AI Overview La advertencia honesta: los AI Overviews de Google se activan de forma selectiva. No cada consulta muestra uno. Las consultas informacionales y de comparación ("mejor X para Y", "cómo funciona X") las muestran más. Las consultas transaccionales a menudo no. Audita tus palabras clave objetivo para ver cuáles ya activan AI Overviews antes de invertir esfuerzo de contenido. ## ChatGPT Search: real pero guardado por la marca ChatGPT Search es real y está creciendo. Pero para operadores sin autoridad de marca, es un juego a mediano plazo, no un juego de hoy. El sistema de recuperación de OpenAI usa el índice de Bing como columna vertebral. La alta autoridad en Bing se correlaciona con la frecuencia de citas de ChatGPT. Eso significa que los factores que te hacen visible en ChatGPT Search — antigüedad del dominio, perfil de backlinks, menciones de marca — son las mismas señales de construcción lenta que tardan 12–24 meses en moverse. He visto páginas bien optimizadas y citadas en Perplexity de mi sitio de consultoría obtener cero captación en ChatGPT Search para consultas idénticas. Mientras tanto, una respuesta de tres oraciones de una página de colaborador de Forbes de hace cinco años domina. El foso de marca es real. Una excepción: si la consulta es específicamente sobre ti o tu producto, ChatGPT Search te citará. Las consultas de marca funcionan. ¿Consultas informacionales genéricas sobre tu tema? Batalla cuesta arriba hasta que tu DA suba. ## El marco de priorización Así es como realmente secuencio el esfuerzo de GEO: **Fase 1 — Fundamento (ahora):** Optimizar para Perplexity y Google AI Overviews simultáneamente. Estos comparten la mayoría de las mismas señales de contenido — estructura clara, respuestas directas, tablas, autoridad del autor. Una inversión de contenido, dos superficies de cita. **Fase 2 — Acumulación (meses 3–6):** Construir señales E-E-A-T específicamente para Google — actualizar bios de autor, agregar llamadas de experiencia en primera persona ("Probé esto en mi propio despliegue…"), ganar menciones citadas de sitios de DA medio. Esto eleva las tasas de inclusión en Google AI Overview. **Fase 3 — Autoridad de marca (meses 6–18):** Perseguir citas de ChatGPT Search construyendo señales de backlinks legibles por Bing y aumentando la velocidad de mención de marca en toda la web. Posts de invitados, apariciones en podcasts, menciones de prensa — PR tradicional, esencialmente. La mayoría de los operadores nunca necesitan la Fase 3 para que la búsqueda con IA sea un canal de tráfico significativo. Las Fases 1 y 2 solas pueden generar cientos de sesiones mensuales referidas por IA antes de que hayas tocado la optimización específica de ChatGPT. ## Qué escribir realmente El formato de contenido que rinde bien en las tres plataformas ahora mismo: - **Posts de comparación** con declaraciones explícitas de ganador (no titubear — "X es mejor para Y porque Z") - **Guías de cómo hacerlo numeradas** donde cada paso es un pensamiento completo (no "paso 3: configurar ajustes" — detallar los ajustes) - **Casos de estudio en primera persona** con números reales (tráfico, costo, tiempo, resultado) - **Secciones de FAQ** al final de los posts, respondiendo verbalmente las 3–5 preguntas de seguimiento más comunes Evitar: introducciones largas y sinuosas, voz pasiva, contenido que cualquiera podría haber escrito. Los sistemas de recuperación de IA buscan patrones de autoridad y especificidad. Lo genérico se lee como poco confiable. ## La conclusión del operador Perplexity es tu camino más rápido a citas de búsqueda con IA hoy — optimiza para ello primero con respuestas directas y contenido estructurado. Google AI Overviews es la superficie de mayor volumen y recompensa las mismas señales, así que viene gratis. ChatGPT Search es real pero guardado por la marca; trátalo como un juego de acumulación de 12 meses, no un sprint. Gasta el 80% de tu esfuerzo de GEO en las Fases 1 y 2, publica el contenido y deja que las citas se acumulen. --- ## Schema Markup para Motores de IA: Los Tipos que Rinden Más Source: https://alejandrorioja.com/es/schema-markup-for-ai-engines-the-types-that-punch-above-their-weight/ Published: 2026-05-31 Updated: 2026-05-31 Tags: GEO, SEO TL;DR: FAQPage y HowTo schema ofrecen el mayor impulso GEO de citación por hora de trabajo porque los motores de IA los interpretan como preguntas ya respondidas y procedimientos paso a paso. Article/BlogPosting señala credibilidad de autoría. Person y Organization anclan tu grafo de entidades para que los modelos no te confundan con otro. Ignora los tipos oscuros — no mueven el marcador en 2026. ## Tabla de contenidos _Actualizado mayo 2026._ **TL;DR:** FAQPage y HowTo schema ofrecen el mayor impulso GEO de citación por hora de trabajo porque los motores de IA los interpretan como preguntas ya respondidas y procedimientos paso a paso. Article/BlogPosting señala credibilidad de autoría. Person y Organization anclan tu grafo de entidades para que los modelos no te confundan con otro. Ignora los tipos oscuros — no mueven el marcador en 2026. **[Lectura del operador]** Hago auditorías de schema en mis propios sitios y los de mis clientes regularmente. La brecha entre los tipos que los motores de IA realmente usan y los que simplemente están ahí sin hacer nada es más grande de lo que la mayoría de las guías admiten. ## Por qué los motores de IA leen el schema diferente a Google Los rastreadores tradicionales de Google usan el schema principalmente para resultados enriquecidos — esas valoraciones con estrellas y desplegables de FAQ en el SERP. Eso es una preocupación de renderizado. El schema califica para una función o no. Los motores de IA — ChatGPT, Perplexity, Gemini, Claude — usan el schema de forma diferente. No están renderizando un SERP. Están analizando tu página para extraer hechos discretos y citables. El schema markup es un atajo. En lugar de inferir qué significa un bloque de texto, el modelo puede leer el campo `@type` y saber: "esto es un par pregunta-respuesta", o "esto es un procedimiento estructurado", o "esto es el autor". Eso cambia qué tipos importan. Ganan los tipos que serializan tu contenido en unidades limpias y extraíbles. Los tipos que principalmente ayudan a Google a mostrar un resultado enriquecido son menos valiosos en el contexto GEO. Los rastreadores que alimentan los datos de entrenamiento de IA y la recuperación en tiempo real (Common Crawl, el índice de Bing, el rastreo de Google) procesan JSON-LD. Si el markup es válido y semánticamente preciso, se ingiere. Si está relleno de FAQs falsas o tipos mal emparejados, los modelos aprenden a desconfiar de él — o a ignorarlo. ## Article y BlogPosting: el ancla de autoría Cada artículo que publiques debe tener schema `Article` o `BlogPosting`. No es glamoroso pero es fundamental. Los dos campos que más importan para GEO son `author` y `dateModified`. Los motores de IA ponderan la frescura y la autoría nombrada cuando deciden si mostrar una cita. Una página sin autor declarado y con una fecha de publicación de hace dos años compite mal contra una página con un experto nombrado y una actualización reciente. ```json { "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Schema Markup para Motores de IA: Los Tipos que Rinden Más", "author": { "@type": "Person", "name": "Alejandro Rioja", "url": "https://alejandrorioja.com/about/" }, "datePublished": "2026-05-31", "dateModified": "2026-05-31", "publisher": { "@type": "Organization", "name": "Alejandro Rioja", "url": "https://alejandrorioja.com" }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://alejandrorioja.com/blog/schema-markup-for-ai-engines-the-types-that-punch-above-their-weight/" } } ``` Mantén `dateModified` preciso. He visto sitios que ponen una fecha falsa de "actualizado hoy" en cada página — los modelos detectan el patrón y lo descuentan. Actualiza la fecha cuando realmente actualices el contenido. ## FAQPage: el mayor impulso GEO por hora Si tuviera que elegir un tipo de schema para añadir a cada página informativa ahora mismo, sería `FAQPage`. La razón es estructural: los motores de IA ya quieren responder preguntas. FAQPage les entrega una pregunta etiquetada y una respuesta etiquetada en un solo nodo. No se requiere inferencia. El impulso también aparece en los fragmentos destacados, pero el efecto GEO es más fiable. Cuando un usuario le hace a Perplexity una pregunta que coincide con una de tus entradas de FAQ, el modelo puede citar tu respuesta casi literalmente porque ya la has formateado como cita. Reglas que sigo para el schema de FAQ que realmente funciona: 1. Cada pregunta debe reflejar cómo la formula un usuario real — no cómo la formularías tú como marketero. 2. Cada respuesta debe ser autocontenida. Si la respuesta solo tiene sentido después de leer el artículo, no se citará. 3. De tres a seis preguntas por página es el punto óptimo. Rellenar con diez preguntas débiles perjudica más que ayuda. ```json { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "¿Qué tipos de schema priorizan los motores de IA?", "acceptedAnswer": { "@type": "Answer", "text": "Los motores de IA priorizan FAQPage, HowTo, Article/BlogPosting, Person y Organization. Estos tipos serializan el contenido en unidades limpias y extraíbles que los modelos pueden citar directamente sin necesidad de analizar prosa." } }, { "@type": "Question", "name": "¿El schema markup sigue ayudando con el SEO en 2026?", "acceptedAnswer": { "@type": "Answer", "text": "Sí. El schema markup ayuda tanto a los rastreadores tradicionales (para resultados enriquecidos) como a los rastreadores de IA (para extracción de citas). FAQPage y HowTo ofrecen el mayor retorno por hora de trabajo de implementación." } }, { "@type": "Question", "name": "¿Cuántos elementos FAQ debo incluir por página?", "acceptedAnswer": { "@type": "Answer", "text": "De tres a seis pares de preguntas y respuestas autocontenidas es el punto óptimo. Más de seis diluye la calidad; menos de tres reduce la superficie de citación." } } ] } ``` ## HowTo: procedimientos que los motores de IA adoran citar El schema `HowTo` está infrautilizado. La mayoría lo implementa en contenido de tipo receta y lo deja ahí. Pero cualquier contenido procedimental — guías de configuración, auditorías, marcos de trabajo — es candidato. La razón por la que supera a la competencia para GEO: los motores de IA responden regularmente a consultas del tipo "¿cómo hago…?" listando pasos. Cuando tu página tiene schema `HowTo` con pasos nombrados, el modelo puede reproducir tu estructura casi exactamente. No te está resumiendo — está citando tu procedimiento. ```json { "@context": "https://schema.org", "@type": "HowTo", "name": "Cómo Añadir Schema FAQPage a una Entrada de Blog", "step": [ { "@type": "HowToStep", "position": 1, "name": "Identifica de tres a seis preguntas reales de usuarios", "text": "Extrae preguntas de las consultas de Google Search Console, hilos de Reddit y tus propios correos de clientes. Cada pregunta debe reflejar lenguaje natural, no lenguaje de marketero." }, { "@type": "HowToStep", "position": 2, "name": "Escribe respuestas autocontenidas", "text": "Cada respuesta debe tener sentido de forma aislada — sin referencias a 'como se mencionó arriba' o 'ver sección 3'. Apunta a 40–120 palabras por respuesta." }, { "@type": "HowToStep", "position": 3, "name": "Añade el bloque JSON-LD al head o body de tu página", "text": "Pega el JSON-LD de FAQPage en una etiqueta