Generative Engine Optimization para sitios pequeños, para que Perplexity y ChatGPT-Search te citen
Sitio personal, sitio de servicios o portafolio. Quieres que los asistentes de IA te encuentren y te citen cuando alguien pregunta por tu tema. Diez pasos desde el inventario hasta el seguimiento de citas.
El SEO clásico fue durante diez años la pregunta "cómo posiciono en Google para la keyword". Eso sigue funcionando, pero junto a él ha surgido una segunda disciplina igual de importante y que casi nadie atiende de forma limpia: Generative Engine Optimization. O sea, la pregunta "cómo me citan Perplexity, ChatGPT-Search, Gemini-Mode y Claude-Web cuando alguien pregunta por mi tema".
Esto lo he sacado adelante para tres sitios que mantengo activamente. Un sitio de servicios (studiomeyer.io), la Academy (studiomeyer.academy) y un sitio de workshops recién estrenado (aifinca.es). Lo que noté: la búsqueda de IA es distinta de Google. No se trata de construir una página de keyword que posicione. Se trata de construir un sitio que sea lo bastante legible por máquina como para que un crawler haga siquiera una afirmación sobre ti. Si no te entiende, no te cita.
Aquí está el orden que llevo desde entonces. Diez pasos, una pasada completa es una hora escasa de trabajo, después tienes una base desde la que medir.
Paso 1, hacer un inventario de las discovery surfaces
Antes de optimizar nada tienes que saber qué hay ya. Mira en tu repo y busca los sospechosos habituales:
find . -maxdepth 3 \( \
-name "robots.txt" -o \
-name "llms.txt" -o \
-name "sitemap.xml" -o \
-name "humans.txt" \
\) -not -path "*/node_modules/*"
Si usas Next.js u otro framework SSR estos archivos probablemente estén generados. En Next.js viven como app/robots.ts, app/sitemap.ts, app/llms.txt/route.ts. Apunta qué tienes y qué falta. En mi caso los tres sitios tenían robots.txt y sitemap.xml al principio. Nadie tenía llms.txt. Ese es el estado por defecto para sitios pequeños en 2026.
Paso 2, robots.txt con bots de IA permitidos explícitamente
El default suele ser User-agent: * y eso es basura porque muchos sitios bloquean sin saberlo a los bots de IA vía Cloudflare o un bloqueador de crawlers. Quieres permitir explícitamente estos bots si quieres que te citen:
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: ChatGPT-User
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: anthropic-ai
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
Sitemap: https://example.com/sitemap.xml
GPTBot es el crawl de entrenamiento, OAI-SearchBot es el crawler de retrieval en vivo detrás de ChatGPT-Search, ChatGPT-User es lo que pasa cuando un usuario hace clic en un enlace dentro de ChatGPT. La fuente es la documentación oficial de OpenAI en developers.openai.com/api/docs/bots. Si excluyes a cualquiera de ellos, excluyes una fuente de citas concreta.
Un error frecuente: el Bot-Fight-Mode de Cloudflare está en "block all bots" y eso bloquea también OAI-SearchBot por defecto. Revisa las reglas WAF. Si tienes cf_managed_rulesets activos y bloquean explícitamente a los crawlers de IA, entonces tu robots.txt da igual porque Cloudflare corta antes.
Paso 3, escribir un llms.txt que un humano pueda leer
llms.txt es un archivo Markdown en /llms.txt que da a los crawlers una visión rápida. La spec está en llmstxt.org. El formato es simple:
# StudioMeyer Academy
> Lern-Plattform fuer AI-Praxis. Kostenlose Lessons, Playbooks und Recipes ueber Claude Code, MCP, Memory-Setups und Agent-Building.
## Levels
- [Level 1, Grundlagen](https://studiomeyer.academy/levels/1): Was ist AI, Halluzinationen, Prompting-Basics
- [Level 4, Memory und MCP](https://studiomeyer.academy/levels/4): MCP-Server verstehen, Memory einrichten
## Playbooks
- [Erster MCP-Server in 90 Minuten](https://studiomeyer.academy/playbooks/erster-mcp-server-in-90-minuten)
## Wer
StudioMeyer, gefuehrt von Matthias Meyer. Standort Mallorca. Fokus auf praktische AI-Werkzeuge fuer Solo-Founder und Career-Changer.
Mantenlo corto. Como máximo una página A4. Lo que escribes ahí es básicamente el pitch de "si no quieres crawlearme, al menos lee esto". No escribas nada ahí que no esté también en el sitio web. La deriva en llms.txt es la fuente más frecuente de alucinaciones en las citas de IA sobre ti.
Paso 4, schema JSON-LD en cada página relevante
Schema.org es el segundo truco. JSON-LD en el <head> de cada página le dice al crawler exactamente qué es la página. Para un sitio de servicios necesitas al menos tres tipos de schema:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "StudioMeyer",
"url": "https://studiomeyer.io",
"logo": "https://studiomeyer.io/logo.png",
"founder": {
"@type": "Person",
"name": "Matthias Meyer"
},
"sameAs": [
"https://github.com/studiomeyer-io",
"https://www.linkedin.com/in/matthiasmeyer"
]
}
</script>
En posts de blog y lessons pones @type: Article con headline, datePublished, author, mainEntityOfPage. En páginas de FAQ o secciones con preguntas va @type: FAQPage con mainEntity como un array de Question/Answer. El markup de schema ayuda a Perplexity y a Google AI Overviews a construir snippets de respuesta estructurados directamente. Si falta tu schema, el crawler construye su propia síntesis y eso a menudo sale mal.
Herramienta de test: validator.schema.org. Pega la URL, mira qué reconoce. En mi caso, en el sitio de servicios el titular del hero no se reconocía como headline porque había un div wrapper en medio. Media hora de trabajo, después cada página era legible por máquina.
Paso 5, schema FAQ para las top 3 preguntas por página
A los crawlers les encantan las estructuras de pregunta-respuesta porque pueden reutilizarse directamente como bloque de cita. Elige tus tres páginas más importantes y escribe por página de tres a cinco preguntas que un usuario tecleraría en Perplexity. La respuesta viene de la propia página, acortada a dos o tres frases.
Ejemplo en una página de servicios "Asesoría de IA Mallorca":
{
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Was kostet eine AI-Beratung bei StudioMeyer?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Pricing variiert je Format. Solo-Workshops ab 2.990 EUR pro Person, Inhouse-Team-Workshops zwischen 18.000 und 25.000 EUR pauschal."
}
}]
}
Importante: lo que está en el schema FAQ tiene que estar visible en el DOM de la página. Los crawlers comparan el JSON-LD con el DOM renderizado, y el schema que no tiene nada que ver con la página se ignora o se valora como manipulación.
Paso 6, ramificar los perfiles de autor con sameAs
Los asistentes de IA ponderan las citas según la autoridad del autor. Si solo tienes un logo y ningún autor, eres una marca anónima. Si hay un autor concreto detrás del contenido, que tiene un LinkedIn, un GitHub, una entrada en Wikipedia, otro sitio, entonces sube la probabilidad de que te citen como fuente.
Por página de autor un bloque de schema Person con un array sameAs a todos los perfiles. Creé mis propias páginas de autor para cada área (/about en el sitio de servicios, /team en la Academy). En las primeras dos semanas eso subió de forma medible la probabilidad de aparecer como fuente en respuestas de Perplexity.
Paso 7, sitemap.xml y setup de IndexNow
Un sitemap.xml completo es obligatorio. Si usas Next.js, deja que se genere en app/sitemap.ts. Importante: cada entrada necesita lastModified, si no el crawler cree que el sitio es estático.
Además IndexNow. IndexNow es un protocolo de push de Microsoft con el que notificas directamente a Bing y Yandex cuando algo cambia. Bing a su vez es la fuente para ChatGPT-Search y Copilot. Si no tienes IndexNow corriendo, puede tardar días hasta que Bing tenga tu página nueva.
curl "https://api.indexnow.org/IndexNow?url=https://example.com/blog/new-post&key=YOUR_KEY"
La key es un UUID aleatorio que alojas como archivo en https://example.com/YOUR_KEY.txt. Un cron job que pingea las URLs nuevas en cada deploy. Listo. Pusheo cada post nuevo de la Academy automáticamente desde mediados de abril y desde entonces la latencia de indexación en Bing está por debajo de dos horas.
Paso 8, medir las citas en lugar de adivinar
Sin medición no sabes si tu trabajo de GEO sirve de algo. Tres puntos de medición que necesitas:
Primero, los logs del servidor. Filtra por los strings de user-agent GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, anthropic-ai. Si estos no aparecen para nada, no eres crawleable en absoluto (Cloudflare bloquea, robots.txt bloquea, o el sitio devuelve 404).
Segundo, las búsquedas de marca. Una vez por semana tecleas tus búsquedas principales en Perplexity, ChatGPT-Search y Gemini y miras si apareces listado como fuente en la respuesta. Queries de ejemplo: "AI Workshops Mallorca", "Claude Code Lernpfad", "MCP Server Tutorial DE". Si después de tres semanas de trabajo de GEO no apareces en al menos una respuesta, algo está roto.
Tercero, el tráfico de referrer. En Umami, GA o Plausible filtras los referrers por perplexity.ai, chatgpt.com, gemini.google.com, bing.com, claude.ai. Esos son clics de usuarios reales desde respuestas de IA. En mi caso, actualmente entre el 4 y el 8 por ciento del tráfico total viene de referrers de IA. Tendencia al alza.
Paso 9, formato de contenido que la IA cita con gusto
Lo que a los crawlers no les gusta citar: páginas con solo un hero, mucha imagen, poco texto. Páginas con bloques largos de marketing sin densidad de hechos. Páginas en formato listicle pero sin afirmaciones claras.
Lo que a los crawlers les gusta citar: páginas que responden una pregunta concreta en las primeras 200 palabras, con números, con nombres, con fecha. Páginas con headings claros (H2/H3) que contienen en sí mismos una afirmación ("Rango de precios para workshops inhouse" en lugar de "Nuestros precios"). Páginas que firmas con tu nombre como autor.
Repasa tus diez páginas más importantes y reescribe el primer párrafo de modo que la afirmación principal esté en las dos primeras frases. En mi caso, en la home de la Academy el párrafo uno era un bloque de marketing sin hechos. Lo reemplacé por dos frases que dicen: "47 lessons en seis niveles. Todas gratis. Foco en Claude Code, MCP y setups de memory." En dos semanas justo esa frase apareció en una respuesta de Perplexity. El crawler había leído el hero y lo citó tal cual.
Paso 10, qué sigue
Tres cosas que ahora hago con regularidad y que pertenecen a un ritmo mensual: una vez al mes repetir las búsquedas de marca y registrar quién es citado dónde (o no). Una vez por trimestre repasar el llms.txt para comprobar que todo sigue correcto. Y antes de cada pivot o rebrand más grande: peinar todos los discovery files a la vez, porque si no la bio vieja se queda atascada en algún JSON-LD y después de tres semanas reaparece en una cita de Grok.
Si quieres mantener los discovery files consistentes, lee el playbook Discovery-Files konsistent halten. Si quieres trackear qué hacen los crawlers de IA en tu sitio y detectar la deriva automáticamente, mira el recipe bundle GEO-Crew Hook Bundle. Si primero quieres entender siquiera qué son las discovery surfaces y los MCP marketplaces, lee antes Level 4 Lesson 6, MCP Discovery und Marketplaces.
Source
- Documentación de crawlers de OpenAI: https://developers.openai.com/api/docs/bots
- Spec de llms.txt: https://llmstxt.org
- Tipo Article de Schema.org: https://schema.org/Article
- API de IndexNow: https://www.indexnow.org/documentation
- Documentación de crawler de Anthropic: https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler