Este artículo es largo y técnico a propósito. Documenta cada pieza del stack de Generative Engine Optimization que construí para shinobis.com con PHP, desde el archivo llms.txt hasta el Knowledge Graph automático en JSON-LD. No es teoría. Es código que está corriendo en producción ahora mismo.

Si buscas la filosofía detrás de GEO lee mis otros artículos. Si quieres implementarlo en tu propio sitio este es el artículo que necesitas.

La arquitectura GEO de shinobis.com

El stack tiene cuatro componentes que trabajan juntos. Primero llms.txt que funciona como carta de presentación para crawlers de IA. Segundo un sistema de JSON-LD semántico que genera un Knowledge Graph automático por cada post basado en su contenido real. Tercero una estructura de contenido que maximiza la citabilidad. Cuarto una red de crossposts distribuidos en plataformas de autoridad con canonical URLs.

Todo corre sobre PHP vanilla con MariaDB. Sin frameworks. Sin plugins. Sin dependencias externas. Cada línea de código la escribí con Claude como copiloto de desarrollo.

Componente 1: llms.txt

El archivo llms.txt vive en la raíz del dominio en shinobis.com/llms.txt. Es Markdown plano con una estructura específica propuesta por llmstxt.org. El H1 es solo el nombre del sitio. Debajo va un blockquote con la descripción. Después vienen secciones con H2 para Author, Topics Covered, Content Policy y Key Pages por idioma.

La parte técnica en Apache requiere dos cosas. Una regla en .htaccess que dice RewriteRule ^llms\.txt$ - [L] para que el archivo se sirva directamente sin pasar por el router de PHP. Y una directiva Files para servirlo como text/plain con charset UTF-8.

En robots.txt agrego la línea LLMs-Txt: https://shinobis.com/llms.txt al final. Eso sigue la convención propuesta por el estándar para que los crawlers sepan que el archivo existe.

Escribí todo en inglés porque los crawlers de IA procesan en inglés independientemente del idioma de tu contenido. Incluí enlaces a las páginas más importantes en los tres idiomas con descripciones que le dan contexto al modelo sobre qué contiene cada página.

Componente 2: Knowledge Graph automático con JSON-LD

Este es el componente más complejo y el que más impacto tiene. Cada post genera automáticamente un bloque de JSON-LD con schema.org que incluye tres capas de información semántica adicional al BlogPosting básico.

La primera capa es relatedLink. Cuando creo un post y lo conecto con otros posts relacionados desde el admin panel, el sistema lee la tabla post_connections de la base de datos y genera un array de URLs semánticamente relacionadas. El código consulta las conexiones, obtiene los slugs traducidos al idioma actual, y construye las URLs completas. Eso le dice a las IAs que mis artículos forman una red de conocimiento, no páginas aisladas.

La segunda capa es about. El sistema escanea el contenido del post buscando keywords predefinidas como midjourney, prompt, fintech, ux design, llms.txt y generative. Cuando detecta una keyword crea una entidad tipada como Thing con nombre y URL cuando corresponde. Eso le dice al modelo cuáles son los temas principales del artículo sin depender solo del título o los H2.

La tercera capa es mentions. Similar a about pero para herramientas específicas. Cuando el contenido menciona Claude, ChatGPT, Figma, Midjourney o Gemini, el sistema las agrega como entidades Thing con su nombre y URL. Usé Thing en vez de SoftwareApplication porque SoftwareApplication le dice a Google que tu página es una reseña de software y exige campos como offers, aggregateRating y operatingSystem que no corresponden cuando solo mencionas la herramienta.

Todo esto se genera dentro de la función generateBlogPostingSchema que ya existía para el SEO básico. No es un script separado. Es una extensión del schema que ya tenía.

Componente 3: estructura de contenido citable

No hay código para esto. Es disciplina de escritura. Pero documentarlo es importante porque es lo que hace que los otros componentes funcionen.

Cada párrafo de mis artículos está escrito para ser extraíble por sí solo. Si un LLM toma un párrafo de mi artículo y lo pone en una respuesta, ese párrafo debería tener sentido sin el contexto del resto del artículo. Eso significa escribir declaraciones directas con sujeto, verbo y objeto específico. No empezar con hay muchas formas de hacerlo sino con para implementar un Knowledge Graph automático en PHP necesitas una función que escanee el contenido del post, detecte keywords predefinidas, y genere un array de entidades tipadas en formato JSON-LD.

También uso Sentiment Mapping. Escribo con autoridad experiencial. Implementé esto y funcionó. Probé esto y falló. Después de meses de experimentar descubrí que. Ese tono le dice al LLM que estoy hablando desde experiencia real, no desde especulación. Y los modelos le dan más peso a la evidencia experiencial que a la opinión.

Componente 4: distribución con canonical URLs

Cada artículo se publica primero en shinobis.com como fuente canónica. Después se crosspostea en plataformas de autoridad alta como HackerNoon, Dev.to, Hashnode y Medium. Cada crosspost incluye una canonical URL que apunta al artículo original en mi sitio.

Para los LLMs esto crea una señal de autoridad distribuida. El mismo autor aparece en múltiples fuentes de alta reputación hablando de los mismos temas. Eso refuerza el perfil de autoridad que el modelo construye internamente.

Para Google los crossposts generan backlinks que suben el Domain Authority. Un artículo en HackerNoon con canonical a shinobis.com es un backlink dofollow desde un dominio DA 90+. Cada crosspost es una inversión de una hora que paga dividendos en ambos mundos.

Cómo medir si GEO funciona

No hay métricas directas. No existe un Google Analytics para respuestas de ChatGPT. Lo que puedo medir es tráfico indirecto de personas que llegaron a mi sitio después de ver una respuesta de IA que me mencionaba. También puedo probar directamente preguntándole a diferentes LLMs sobre mis temas y verificando si me citan.

Antes de implementar el stack GEO ningún LLM me citaba cuando preguntaba sobre diseñadores usando IA en fintech. Después de la implementación empecé a aparecer en respuestas de forma consistente. No tengo números exactos porque nadie los tiene. Pero la diferencia es observable.

Lo que sí puedo medir con Google Search Console es el impacto del Knowledge Graph en el SEO tradicional. Los posts con schema semántico completo tienen más impresiones que los que solo tienen el BlogPosting básico. Los rich snippets aparecen con más frecuencia. Y el CTR mejora porque Google entiende mejor de qué trata cada página.

Lo que implementaría si empezara hoy

Si tuviera que implementar GEO en un sitio nuevo desde cero lo haría en este orden. Primero la estructura de contenido citable porque no requiere código y es lo que más impacto tiene. Segundo llms.txt porque toma una tarde y el costo es cero. Tercero el Knowledge Graph con JSON-LD porque requiere desarrollo pero el retorno es alto. Cuarto la distribución en plataformas porque requiere tiempo constante pero cada crosspost acumula valor.

No necesitas PHP. Puedes hacer lo mismo con cualquier lenguaje o CMS. Lo importante son los conceptos: contenido citable, grafo semántico, presencia distribuida. La implementación es secundaria.

Todo el código que uso está en producción en shinobis.com. No es experimental. No es conceptual. Es real y funciona.