SEO · GEO · AEO

Guía definitiva para optimizar el AEO de tu página web

El posicionamiento cambió de intermediario. Ya no es una lista de enlaces azules: es un modelo de lenguaje que lee, resume y decide a quién citar. Optimizar para ese modelo tiene su propia disciplina, y aquí está completa.

Esta guía se construyó a partir del programa real de optimización que Transgenia ejecutó sobre transgenia.org entre marzo y julio de 2026. Cada ejemplo es una medida que aplicamos y verificamos en producción, no teoría.

0. Qué es AEO (y por qué ya no basta el SEO)

SEO (Search Engine Optimization) optimiza para que un humano haga clic en un enlace azul dentro de una lista de resultados. AEO (Answer Engine Optimization) y su primo GEO (Generative Engine Optimization) optimizan para que un motor de respuestas (ChatGPT, Claude, Perplexity, Google AI Overviews, Bing Copilot) entienda, confíe y cite tu contenido cuando genera una respuesta.

El cambio de fondo es este: el intermediario ya no es una SERP, es un modelo de lenguaje. Ese modelo no "hace clic". Lee, resume, decide qué es una fuente confiable y a quién atribuir. Optimizar para AEO es hacer tu sitio legible por máquinas, estructurado como conocimiento y demostrablemente confiable.

La tesis de esta guía, y la apuesta de Transgenia como boutique de IA, es simple. La forma más potente de AEO no es describir lo que haces. Es hacer que tu propio sitio corra IA gobernada que los motores puedan observar y citar. El zapatero con buenos zapatos.

Pirámide AEO de cuatro niveles: fundamentos técnicos, contenido estructurado, entidad citeable y demostración de IA viva.
Meta-estructura Mermaid
flowchart TB
    subgraph N4["Nivel 4 · Demostración de IA viva (diferenciador)"]
        D["Conserje RAG con citas · gobernado · LFPDPPP"]
    end
    subgraph N3["Nivel 3 · Entidad citeable"]
        C["llms.txt · JSON-LD Organization/knowsAbout · FAQPage · consistencia es/en/zh"]
    end
    subgraph N2["Nivel 2 · Contenido estructurado"]
        B["Q&A / FAQ · fuente única faq.json · blog cornerstone · feeds"]
    end
    subgraph N1["Nivel 1 · Fundamentos técnicos"]
        A["Crawlability para bots de IA · rendimiento (LCP) · datos estructurados válidos"]
    end
    N1 --> N2 --> N3 --> N4
    style N4 fill:#E14228,color:#fff
    style N3 fill:#FB6C25,color:#fff
    style N2 fill:#FBA225,color:#101820
    style N1 fill:#22A088,color:#fff
Se construye de abajo hacia arriba: sin fundamentos técnicos, los niveles superiores no se leen; sin demostración de IA, te quedas igual que todos los que solo dicen que usan IA.

1. Nivel 1: fundamentos técnicos

Un motor de IA no puede citar lo que no puede rastrear, o lo que tarda tanto en cargar que su crawler abandona.

1.1 Crawlability para bots de IA (el paso que casi todos omiten)

robots.txt debe permitir explícitamente a los crawlers de IA, no solo a Googlebot. En Transgenia habilitamos, por nombre: GPTBot, OAI-SearchBot, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended, bingbot, además de los buscadores chinos (Baiduspider, Sogou, 360Spider, YisouSpider, Bytespider) para el mercado ZH.

Gotcha caro: en Cloudflare, el bloque "Managed Content Signals" del borde puede anular tus Allow de robots.txt y bloquear los bots de IA aunque tu archivo diga lo contrario. Si tu objetivo es ser citado, hay que desactivarlo en el dashboard. El archivo por sí solo no basta.

Dos reglas quirúrgicas que aplicamos: Disallow: /cdn-cgi/ (endpoint interno de Cloudflare que devolvía 4xx y ensuciaba Bing WMT) y Disallow: /assets/docs/ (avisos de privacidad .docx, que no deben gastar crawl budget). Todo lo demás, rastreable.

1.2 Rendimiento: si tarda, no te citan

Medimos el baseline real con PageSpeed Insights, no reportes ajenos: móvil Perf 56, LCP 20.8 s. La causa raíz era una sola. La fuente variable Material Symbols Rounded pesaba 5.2 MB (44 % del payload) y cargaba en ruta crítica en 36 páginas, cuando el sitio entero usa solo 3 iconos.

Fix: subset por &icon_names=auto_awesome,cloud_sync,inventory_2&display=block en las 3 páginas que los usan, y eliminar el <link> en las 33 que no. Resultado: 5.2 MB a 3.7 KB (99.9 %), verificado en navegador real (glifo de 18 px, no el texto fallback).

Lección AEO: la performance no es cosmética. Un LCP de 20 s bajo red lenta es un crawler que se rinde antes de leer tu contenido.

1.3 Datos estructurados válidos

JSON-LD Organization, WebSite, WebPage, Service, BreadcrumbList y, clave para AEO, FAQPage. Regla dura: el structured data debe coincidir con contenido visible en la página, o Google lo ignora (y puede penalizar). Por eso el FAQPage se generó junto a una sección FAQ visible, desde una fuente única (§2.3).

2. Nivel 2: contenido estructurado como conocimiento

2.1 llms.txt: el pitch directo a las máquinas

llms.txt es un archivo en la raíz pensado para que los LLM entiendan tu entidad de un vistazo. El de Transgenia te describía como "consultora de Industria 4.0, Odoo su práctica core", lo cual saboteaba el reposicionamiento y le decía a los motores algo distinto de lo que la empresa es hoy. Se reescribió liderando con "boutique tecnológica especializada en IA aplicada", reordenando los servicios (IA primero) y añadiendo una nota explícita para agentes de IA sobre el posicionamiento y dónde vive cada dato.

2.2 FAQPage donde de verdad importa

La página de IA (soluciones-ia.html) no tenía FAQPage, siendo la página donde más ayuda que un motor cite respuestas. Se añadió FAQ visible más FAQPage JSON-LD en es/en/zh, con Q&A aterrizadas en el contenido real (workflows Claude en producción, medición con observabilidad, piloto en 6 semanas, IA responsable más LFPDPPP, integración Odoo/WhatsApp). Cero fabricación.

2.3 Fuente única: faq.json

En vez de duplicar preguntas en HTML, JSON-LD e i18n (que se desincronizan), se creó assets/data/faq.json como fuente única que alimenta tanto el FAQPage como el índice RAG del conserje. Hoy son 5 secciones (IA, nosotros, clínicas, comercializadoras) con 54 puntos de conocimiento, todos verificados por grep contra las páginas reales.

El SEO clásico va de keywords a backlinks a posición a clic humano; el AEO/GEO va de entidades a contenido Q&A a confianza a cita en la respuesta de IA.
Meta-estructura Mermaid
flowchart LR
    subgraph SEO["SEO clásico"]
        K["Keywords"] --> L["Backlinks"] --> S["Posición en SERP"] --> Click["Clic humano"]
    end
    subgraph AEO["AEO / GEO"]
        E["Entidades y hechos"] --> Q["Contenido Q&A estructurado"] --> T["Confianza / evidencia"] --> Cita["Cita en la respuesta de IA"]
    end
    SEO -. evoluciona .-> AEO
    style SEO fill:#eef,stroke:#88a
    style AEO fill:#E14228,color:#fff
El SEO clásico persigue el clic; el AEO persigue la cita. Son objetivos distintos que se optimizan distinto.

3. Nivel 3: ser una entidad coherente y citeable

3.1 Consistencia de mensaje (humanos y máquinas leen lo mismo)

Se unificó la propuesta a "Tecnología más allá de la producción · Boutique tecnológica" en 45 superficies (hero, metas, og/twitter, nosotros/about, knowsAbout del JSON-LD) en es/en/zh. knowsAbout pasó a liderar con Inteligencia Artificial, IA generativa, RAG, Agentes de IA gobernados. Un motor que cruza tu home, tu about, tu llms.txt y tu schema debe leer la misma identidad en todos.

Gotcha trilingüe: en este sitio EN/ZH tienen el copy embebido en la página, mientras ES se sobre-escribe por i18n en runtime, así que hay que editar ambos lados o el cambio se revierte.

3.2 Higiene de indexación (GSC + Bing WMT)

Se curaron los hallazgos de Google Search Console y Bing Webmaster Tools: títulos de más de 70 caracteres acortados; títulos demasiado cortos extendidos a 50–60; H1 faltante añadido; el 4xx de /cdn-cgi/l/email-protection resuelto con Disallow. Distinguir señal de ruido importa. "Página con redirección" (canonicalización http a https, www a apex) no requiere acción; "descubierta sin indexar" se resuelve solicitando indexación, no tocando código.

Secuencia: el bot de IA pide rastrear, robots.txt permite, lee llms.txt y la página con datos estructurados, indexa y cita transgenia.org como fuente.
Meta-estructura Mermaid
sequenceDiagram
    participant B as Bot de IA (GPTBot/ClaudeBot)
    participant R as robots.txt / Cloudflare edge
    participant P as Página (HTML + JSON-LD + FAQPage)
    participant L as llms.txt
    participant M as Motor de respuestas
    B->>R: ¿Puedo rastrear?
    R-->>B: Allow (bots IA habilitados, Managed Content OFF)
    B->>L: Lee entidad (quién es Transgenia)
    B->>P: Lee contenido + datos estructurados
    P-->>B: FAQPage Q&A + Service + Organization
    B->>M: Indexa entidad + hechos + fuentes
    Note over M: Usuario pregunta "¿quién hace Odoo+IA en LATAM?"
    M-->>M: Recupera hechos citeables
    M->>P: Cita transgenia.org como fuente
Descubrir, entender, citar. Cada eslabón depende del anterior: si el bot no puede rastrear, nada de lo demás ocurre.

4. Nivel 4: que tu sitio demuestre IA (el diferenciador)

Aquí está la jugada que separa a una boutique de IA de todos los que solo lo dicen: un conserje de IA en el propio sitio, con RAG sobre tu contenido, que responde citando fuentes, gobernado y respetuoso de la privacidad. Es tres cosas a la vez: una demo viva de tu capacidad, contenido conversacional que refuerza tu entidad y una máquina de captura de leads.

4.1 Arquitectura (la PII se queda en México, LFPDPPP)

Arquitectura: el visitante se registra contra PocketBase en el VPS de México (PII), recibe un JWT con sid opaco, y el chat va al Worker de Cloudflare que consulta Qdrant y OpenAI sin ver datos de contacto.
Meta-estructura Mermaid
flowchart TB
    U["Visitante (navegador)"]
    subgraph EDGE["Cloudflare (edge)"]
        W["Worker /api/concierge/*"]
        KV["(KV: límites, cuotas, bloqueos)"]
    end
    subgraph VPS["VPS México (LFPDPPP)"]
        PB["PocketBase · registro + leads (PII)"]
        NGINX["nginx /pb/*"]
    end
    subgraph CLOUD["Servicios"]
        QD["(Qdrant Cloud · vectores)"]
        OAI["OpenAI · embeddings + gpt-4.1-mini"]
    end
    U -- "registro (Turnstile)" --> NGINX --> PB
    PB -- "JWT de sesión (sid opaco)" --> U
    U -- "chat {sid, mensaje}" --> W
    W <--> KV
    W -- "embed + recupera" --> QD
    W -- "genera con citas" --> OAI
    W -- "log opaco (sin PII)" --> NGINX
    style VPS fill:#22A088,color:#fff
    style EDGE fill:#FB6C25,color:#fff
La PII solo vive en PocketBase, en el VPS en México. El Worker y OpenAI solo ven un id opaco y el texto de la consulta.

Decisión clave de privacidad: la PII (nombre, apellido, correo, teléfono) solo vive en PocketBase, en el VPS en México. El registro emite un JWT con un id opaco (sid); el Worker y OpenAI (EE. UU.) solo ven {sid, texto de la consulta}. Cero datos de contacto cruzan la frontera. Esto no es solo cumplimiento LFPDPPP. Es una señal de confianza que E-E-A-T y los motores premian.

4.2 El pipeline RAG (por qué las respuestas son citables y no inventadas)

Pipeline RAG: en build se indexan blog y faq.json en Qdrant; en runtime se embeba la consulta, se busca top-k, y si el score no supera 0.35 se responde 'no documentado' sin llamar al LLM; si lo supera, gpt-4.1-mini responde con citas.
Meta-estructura Mermaid
flowchart LR
    subgraph INGEST["Ingesta (build)"]
        SRC["blog-src/*.md + faq.json"] --> CH["Chunking ~1200c"] --> EM1["Embeddings text-embedding-3-small"] --> UP["Upsert → Qdrant (397 pts)"]
    end
    subgraph RUNTIME["Runtime (por consulta)"]
        Q["Consulta del usuario"] --> EM2["Embed consulta"] --> SR["Búsqueda top-k en Qdrant"]
        SR --> TH{"¿score ≥ 0.35?"}
        TH -- no --> NF["'No lo tengo documentado' + CTA (no llama al LLM)"]
        TH -- sí --> GEN["gpt-4.1-mini con contexto"] --> CIT["Respuesta en streaming + citas"]
    end
    UP -. índice .-> SR
    style NF fill:#FBA225,color:#101820
    style CIT fill:#22A088,color:#fff
El detalle que hace la diferencia: si la recuperación no supera el umbral, el conserje no llama al modelo. No inventa servicios ni precios.

El principio que protege tu reputación es zero-fabrication. Si la recuperación no supera el umbral, el conserje no llama al modelo. Responde "no lo tengo documentado, agenda una llamada". Cita la página fuente en cada respuesta. Esa es exactamente la disciplina que los motores de IA valoran.

4.3 Gobernanza: límites, anti-abuso y presupuesto

Plano de control: cada petición pasa por IP bloqueada, JWT válido, prompt-injection, rate limit y presupuesto diario antes de llegar a RAG + generación.
Meta-estructura Mermaid
flowchart TB
    REQ["Petición de chat"] --> IPB{"¿IP bloqueada?"}
    IPB -- sí --> BLOCK["403 + pantalla notificar admin"]
    IPB -- no --> JWT{"¿JWT de sesión válido?"}
    JWT -- no --> R401["401"]
    JWT -- sí --> INJ{"¿prompt-injection?"}
    INJ -- sí --> RJ["422 + strike (3 → bloqueo IP)"]
    INJ -- no --> RLM{"≤ 3/min y ≤ 15/semana?"}
    RLM -- no --> R429["429 + CTA llamada"]
    RLM -- sí --> BUD{"¿presupuesto diario OK?"}
    BUD -- no --> R503["503 (kill-switch)"]
    BUD -- sí --> RAG["RAG + generación"]
    style BLOCK fill:#E14228,color:#fff
    style RAG fill:#22A088,color:#fff
Todo esto ocurre en el edge, antes de gastar un token de OpenAI. Protección de presupuesto contra crawlers y abuso.

La humanidad se garantiza con Turnstile en el registro; los criterios anti-abuso (registro-farming por teléfono/IP, correos desechables con chequeo MX, ráfagas, prompt-injection) viven donde corresponde cada uno.

4.4 Matriz de decisión: valor primero, orientado a venta

Matriz comercial: el conserje clasifica el mensaje, entrega valor citado, califica con BANT-lite y, según la intención, escala a humano o conduce al CTA correcto.
Meta-estructura Mermaid
flowchart TB
    IN["Mensaje del usuario"] --> CLASS["Clasifica: línea de servicio + vertical + etapa de compra"]
    CLASS --> VALUE["Da valor real, aterrizado y CITADO"]
    VALUE --> QUAL["Califica (BANT-lite: necesidad, urgencia, datos, fit)"]
    QUAL --> HIGH{"¿alta intención?"}
    HIGH -- sí --> HUMAN["Escala a humano (Calendly / cotización)"]
    HIGH -- no --> CTA["Conduce al CTA correcto (página / estimador / demo)"]
    style VALUE fill:#22A088,color:#fff
    style HUMAN fill:#E14228,color:#fff
El conserje no es un oráculo gratis ni un vendedor agresivo: resuelve de verdad y, en paralelo, conduce al siguiente paso comercial correcto.

4.5 Búsqueda web controlada (fallback)

Cuando el RAG propio no basta y el tema es on-topic, el conserje puede usar búsqueda web (la herramienta web_search del Responses API, misma API key, cero secretos nuevos) con gate determinista, caps (3/semana/sid, 15/día), anti-inyección (el contenido web es dato, nunca instrucción) y una regla dura: nunca responde sobre Transgenia con la web. Eso solo viene del contenido propio. Por defecto OFF, se activa por variable.

5. Nivel transversal: confianza y E-E-A-T para máquinas

AEO premia lo mismo que E-E-A-T pero legible por máquinas: evidencia, gobierno y honestidad. Lo que Transgenia hace observable:

6. Medición (no hay AEO sin evidencia)

Señal Herramienta Qué vigilar
Indexación / errores Google Search Console, Bing WMT cobertura, títulos, meta, H1, 4xx
Citas en motores de IA Ahrefs Brand Radar menciones y share-of-voice en respuestas de IA
Rendimiento PageSpeed / Lighthouse (multi-región) LCP, TBT, payload (3+ runs, no 1)
Conserje logs del Worker + digest semanal consultas, leads, tasa de "no documentado"

Regla de oro (Definición de GREEN): nunca declares algo "hecho" verificando el artefacto (el código, el commit). Solo cuenta el efecto observable: el curl a producción, el registro en el índice, el lead en la base.

Ciclo GREEN: cambio, deploy, y si hay efecto observable (curl, índice, lead) se marca GREEN; si no, queda pendiente de verificación y vuelve al cambio.
Meta-estructura Mermaid
flowchart LR
    C["Cambio"] --> D["Deploy"] --> OBS{"¿efecto observable?"}
    OBS -- "sí (curl/índice/lead)" --> GREEN["GREEN ✓ (documentar + diario)"]
    OBS -- "no" --> PEND["PENDIENTE-DE-VERIFICACIÓN (qué falta, quién, deadline)"]
    PEND --> C
    style GREEN fill:#22A088,color:#fff
    style PEND fill:#FBA225,color:#101820
Un cambio "committeado pero no desplegado" no cuenta como hecho. Solo el efecto observable en producción cierra el ciclo.

7. El programa, en el tiempo (lo que Transgenia ejecutó)

Línea de tiempo del programa: fundamentos técnicos (17-18 jul), entidad y contenido (18-19 jul) y demostración de IA (19-21 jul).
Meta-estructura Mermaid
flowchart LR
    subgraph F["Fundamentos · 17-18 jul"]
      A1["Curado GSC / Bing + robots"] --> A2["Perf: Material Symbols 5.2MB→3.7KB"]
    end
    subgraph E["Entidad y contenido · 18-19 jul"]
      B1["Reposicionamiento es/en/zh"] --> B2["llms.txt + JSON-LD + feed"] --> B3["faq.json + FAQPage"]
    end
    subgraph D["Demostración de IA · 19-21 jul"]
      C1["Retiro chat Odoo"] --> C2["Conserje backend (Worker + RAG)"] --> C3["Widget + deploy + GREEN prod"] --> C4["Estimador IA + web search"]
    end
    F --> E --> D
    style F fill:#22A088,color:#fff
    style E fill:#FB6C25,color:#fff
    style D fill:#E14228,color:#fff
Tres bloques de trabajo encadenados, con fechas reales. Los fundamentos primero; la demostración de IA al final.

8. Playbook accionable (checklist)

Fundamentos

Entidad y contenido

Demostración de IA (avanzado)

Medición

Cómo se aplica a tu empresa

Nada de lo anterior es exclusivo de una boutique de IA. La misma disciplina sirve para cualquier empresa que decidió tomarse en serio su presencia ante los motores de respuesta en 2026: primero los fundamentos técnicos, luego una entidad coherente y citeable, y al final, si puedes, una demostración viva de lo que haces. En Transgenia aplicamos esto a nuestro propio sitio antes de proponérselo a nadie. Si quieres ver cómo se traduce a tu industria, la página de Soluciones de IA lo describe por sector.

Preguntas frecuentes

¿Qué diferencia hay entre SEO, GEO y AEO?
SEO optimiza para que aparezcas en la lista de resultados de un buscador y alguien haga clic. GEO (Generative Engine Optimization) trabaja para que un motor generativo como ChatGPT o Perplexity te cite como fuente. AEO (Answer Engine Optimization) va un paso más: busca que la respuesta del motor entregue directamente quién eres o qué haces, sin obligar al clic. En 2026 conviene optimizar los tres, porque el comprador consulta los tres.

¿Cómo permito que los bots de IA rastreen mi sitio?
En robots.txt, con reglas Allow explícitas por nombre de bot (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, entre otros). Ojo con Cloudflare: su bloque "Managed Content Signals" puede anular esas reglas desde el borde aunque tu archivo diga lo contrario. Hay que revisarlo en el dashboard, no solo en el archivo.

¿El structured data (JSON-LD) mejora mi AEO?
Ayuda, con una condición: el schema debe coincidir con contenido visible en la página. Un FAQPage sin una sección FAQ real puede ser ignorado o penalizado. Genera el JSON-LD desde una fuente única para que no se desincronice del texto que el usuario ve.

¿Qué es un llms.txt y para qué sirve?
Es un archivo en la raíz del sitio pensado para que un modelo de lenguaje entienda tu entidad de un vistazo: quién eres, qué haces, dónde vive cada dato. No reemplaza al contenido, pero le da a los motores un resumen limpio y liderado por tu diferenciador real.

¿Necesito un chatbot en mi sitio para hacer AEO?
No es obligatorio. Los niveles 1 a 3 (fundamentos técnicos, contenido estructurado y entidad citeable) ya mueven la aguja. Un asistente RAG que cita fuentes y admite lo que no sabe es el nivel 4: el diferenciador que demuestra la capacidad en vez de solo declararla. Es opcional, pero es donde una boutique de IA se separa del resto.

← Volver al Blog