{
  "version": "1.0",
  "schema": "https://entitymap.org/spec/v1.0",
  "publisher": {
    "name": "Angel Cruz · Software Developer",
    "url": "https://www.angelcruz.dev",
    "sameAs": "https://github.com/abr4xas"
  },
  "generated": "2026-08-19T11:00:00Z",
  "profile": "core",
  "verificationStatus": "self-declared",
  "entities": [
    {
      "entityId": "e_org_angelcruz",
      "@type": "Organization",
      "name": "Angel Cruz · Software Developer",
      "description": "Estudio de una persona: desarrollo Laravel, WordPress, servidores MCP y SEO técnico, más un blog en español sobre agentes de IA y las herramientas que uso a diario.",
      "alternateName": [
        "angelcruz.dev",
        "@angelcruzdev"
      ],
      "relations": [
        {
          "predicate": "OFFERS",
          "targetId": "e_service_desarrollo_laravel",
          "targetName": "Desarrollo Laravel",
          "targetUri": "https://www.angelcruz.dev/servicios/desarrollo-laravel"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_service_desarrollo_wordpress",
          "targetName": "Desarrollo WordPress",
          "targetUri": "https://www.angelcruz.dev/servicios/desarrollo-wordpress"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_service_seo_tecnico",
          "targetName": "SEO Técnico",
          "targetUri": "https://www.angelcruz.dev/servicios/seo-tecnico"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_service_servidores_mcp",
          "targetName": "Servidores MCP",
          "targetUri": "https://www.angelcruz.dev/servicios/servidores-mcp"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_product_rebill_woocommerce",
          "targetName": "Rebill WooCommerce",
          "targetUri": "https://www.angelcruz.dev/producto/rebill-woocommerce"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_product_cloudsaver",
          "targetName": "CloudSaver",
          "targetUri": "https://www.angelcruz.dev/producto/cloudsaver"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_product_rebill_memberships",
          "targetName": "Rebill Memberships",
          "targetUri": "https://www.angelcruz.dev/producto/rebill-memberships"
        },
        {
          "predicate": "OFFERS",
          "targetId": "e_product_thatseoagent",
          "targetName": "ThatSEOAgent",
          "targetUri": "https://www.angelcruz.dev/producto/thatseoagent"
        },
        {
          "predicate": "DESCRIBED_BY",
          "targetId": "e_taxonomy_editorial",
          "targetName": "Taxonomía editorial de angelcruz.dev"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_org_1",
          "text": "Soy Angel Cruz. Desarrollador full stack con Laravel y Next.js. Escribo en español sobre las herramientas de IA que uso a diario: Claude Code, Cursor, MCP. Y sobre PHP y JavaScript, que es de lo que vivo.",
          "sourceUrl": "https://www.angelcruz.dev/",
          "pageTitle": "Angel Cruz · Software Developer",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_person_angel_cruz",
      "@type": "Person",
      "name": "Angel Cruz",
      "description": "Desarrollador full stack con más de diez años en Laravel, PHP, Next.js y WordPress. Autor de todo el contenido del sitio y de los paquetes open source que publica.",
      "alternateName": [
        "angelcruzdev",
        "abr4xas"
      ],
      "relations": [
        {
          "predicate": "AFFILIATED_WITH",
          "targetId": "e_org_angelcruz",
          "targetName": "Angel Cruz · Software Developer"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_person_1",
          "text": "Soy Angel Cruz. Construyo software que otra gente instala y escribo en español sobre las herramientas de IA. Backend en Laravel y PHP, front en Next.js y Astro. Publico paquetes en Composer, plugins de WordPress y herramientas que puedes abrir sin registrarte.",
          "sourceUrl": "https://www.angelcruz.dev/acerca-de-mi",
          "pageTitle": "Sobre Angel Cruz, desarrollador full stack",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_taxonomy_editorial",
      "@type": "Taxonomy",
      "name": "Taxonomía editorial de angelcruz.dev",
      "description": "El sistema con el que se clasifica todo lo que se publica aquí: las categorías del blog, que son su cara visible, y los temas que el sitio cubre de verdad. Cada artículo pertenece a una sola categoría, y el recuento de cada una es la mejor señal de dónde está la profundidad real.",
      "relations": [
        {
          "predicate": "AUTHORED_BY",
          "targetId": "e_person_angel_cruz",
          "targetName": "Angel Cruz"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_laravel",
          "targetName": "Laravel"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_php",
          "targetName": "PHP"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_openclaw",
          "targetName": "OpenClaw"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_wordpress",
          "targetName": "WordPress"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_javascript",
          "targetName": "JavaScript"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_nextjs",
          "targetName": "Next.js"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_mcp",
          "targetName": "Model Context Protocol"
        },
        {
          "predicate": "COVERS",
          "targetId": "e_topic_claude_code",
          "targetName": "Claude Code"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_taxonomy_1",
          "text": "Laravel: Tutoriales, guías y buenas prácticas sobre el framework PHP Laravel para desarrollo web. 48 artículos.",
          "sourceUrl": "https://www.angelcruz.dev/categorias/laravel",
          "pageTitle": "Laravel - artículos del blog",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_taxonomy_2",
          "text": "Inteligencia Artificial: IA aplicada al desarrollo de software: herramientas, modelos y casos de uso prácticos. 41 artículos.",
          "sourceUrl": "https://www.angelcruz.dev/categorias/inteligencia-artificial",
          "pageTitle": "Inteligencia Artificial - artículos del blog",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_taxonomy_3",
          "text": "PHP: El lenguaje de programación web más utilizado: patrones, rendimiento y mejores prácticas. 12 artículos.",
          "sourceUrl": "https://www.angelcruz.dev/categorias/php",
          "pageTitle": "PHP - artículos del blog",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_service_desarrollo_laravel",
      "@type": "Service",
      "name": "Desarrollo Laravel",
      "description": "Desarrollador Laravel senior: arquitectura de software, APIs RESTful de alto rendimiento y soluciones SaaS escalables. Sistemas que crecen con tu negocio.",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_laravel",
          "targetName": "Laravel"
        },
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_apis_restful",
          "targetName": "APIs RESTful"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_service_desarrollo-laravel_1",
          "text": "Arquitectura limpia y SOLID, pensada para evolucionar sin reescribir. APIs RESTful escalables y un código que tu equipo puede mantener cuando yo no esté.",
          "sourceUrl": "https://www.angelcruz.dev/servicios/desarrollo-laravel",
          "pageTitle": "Desarrollo Laravel",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_service_desarrollo_wordpress",
      "@type": "Service",
      "name": "Desarrollo WordPress",
      "description": "Desarrollador WordPress experto. Sitios corporativos rápidos, themes personalizados, e-commerce WooCommerce optimizado y soluciones Headless. Sin plantillas genéricas.",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_wordpress",
          "targetName": "WordPress"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_service_desarrollo-wordpress_1",
          "text": "WordPress hecho con criterio: themes a medida, WooCommerce y opción headless. Rápido y mantenible, sin el lastre de veinte plugins que nadie controla.",
          "sourceUrl": "https://www.angelcruz.dev/servicios/desarrollo-wordpress",
          "pageTitle": "Desarrollo WordPress",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_service_seo_tecnico",
      "@type": "Service",
      "name": "SEO Técnico",
      "description": "SEO técnico moderno: preparación para citaciones en LLMs (ChatGPT, Perplexity, Google AI Overviews), GEO scoring, llms.txt, Core Web Vitals y datos reales de GSC/GA4. Sin métricas infladas.",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_seo_tecnico",
          "targetName": "SEO técnico"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_service_seo-tecnico_1",
          "text": "Auditoría técnica con datos reales de GSC, GA4 y PageSpeed. Core Web Vitals, schema, GEO. Sin prometer rankings: son resultado, no insumo.",
          "sourceUrl": "https://www.angelcruz.dev/servicios/seo-tecnico",
          "pageTitle": "SEO Técnico",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_service_servidores_mcp",
      "@type": "Service",
      "name": "Servidores MCP",
      "description": "Diseño y construyo servidores MCP que conectan tus sistemas con Claude, Cursor y cualquier agente. Herramientas acotadas, permisos reales y mantenimiento frente a los cambios de la especificación.",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_mcp",
          "targetName": "Model Context Protocol"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_service_servidores-mcp_1",
          "text": "Conecto tus sistemas a Claude, Cursor o tu propio agente. Herramientas acotadas, permisos de verdad y construido contra la revisión vigente del protocolo.",
          "sourceUrl": "https://www.angelcruz.dev/servicios/servidores-mcp",
          "pageTitle": "Servidores MCP",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_product_rebill_woocommerce",
      "@type": "SoftwareProduct",
      "name": "Rebill WooCommerce",
      "description": "Plugin gratuito y de código abierto para WooCommerce con checkout alojado de Rebill",
      "relations": [
        {
          "predicate": "REQUIRES",
          "targetId": "e_topic_woocommerce",
          "targetName": "WooCommerce"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_product_rebill-woocommerce_1",
          "text": "Plugin gratuito y de código abierto para WooCommerce con checkout alojado de Rebill",
          "sourceUrl": "https://www.angelcruz.dev/producto/rebill-woocommerce",
          "pageTitle": "Rebill WooCommerce: plugin de pagos con checkout alojado",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_product_rebill-woocommerce_2",
          "text": "Plugin gratuito y de código abierto que integra Rebill en WooCommerce mediante checkout alojado seguro. Sin PCI compliance requerido.",
          "sourceUrl": "https://www.angelcruz.dev/producto/rebill-woocommerce",
          "pageTitle": "Rebill WooCommerce: plugin de pagos con checkout alojado",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_product_cloudsaver",
      "@type": "SoftwareProduct",
      "name": "CloudSaver",
      "description": "Encuentra ahorros ocultos en tu infraestructura de DigitalOcean en menos de 30 segundos.",
      "hasChunks": [
        {
          "chunkId": "c_product_cloudsaver_1",
          "text": "Encuentra ahorros ocultos en tu infraestructura de DigitalOcean en menos de 30 segundos.",
          "sourceUrl": "https://www.angelcruz.dev/producto/cloudsaver",
          "pageTitle": "CloudSaver: ahorra en tu infraestructura de DigitalOcean",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_product_cloudsaver_2",
          "text": "Herramienta gratuita que escanea tu cuenta de DigitalOcean y revela oportunidades de ahorro en costos en menos de 30 segundos. Solo lectura, sin registro.",
          "sourceUrl": "https://www.angelcruz.dev/producto/cloudsaver",
          "pageTitle": "CloudSaver: ahorra en tu infraestructura de DigitalOcean",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_product_rebill_memberships",
      "@type": "SoftwareProduct",
      "name": "Rebill Memberships",
      "description": "Plugin de membresías y contenido pago para WordPress, con Rebill como motor de cobro y sin necesidad de WooCommerce",
      "relations": [
        {
          "predicate": "REQUIRES",
          "targetId": "e_topic_woocommerce",
          "targetName": "WooCommerce"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_product_rebill-memberships_1",
          "text": "Plugin de membresías y contenido pago para WordPress, con Rebill como motor de cobro y sin necesidad de WooCommerce",
          "sourceUrl": "https://www.angelcruz.dev/producto/rebill-memberships",
          "pageTitle": "Rebill Memberships: plugin de membresías y suscripciones para WordPress",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_product_rebill-memberships_2",
          "text": "Membresías y contenido pago en WordPress con Rebill como motor de cobro. Checkout alojado, sin PCI, sin WooCommerce.",
          "sourceUrl": "https://www.angelcruz.dev/producto/rebill-memberships",
          "pageTitle": "Rebill Memberships: plugin de membresías y suscripciones para WordPress",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_product_thatseoagent",
      "@type": "SoftwareProduct",
      "name": "ThatSEOAgent",
      "description": "Plataforma agéntica de SEO conectada a Search Console, Analytics 4 y PageSpeed en tiempo real.",
      "relations": [
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_seo_tecnico",
          "targetName": "SEO técnico"
        },
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_mcp",
          "targetName": "Model Context Protocol"
        }
      ],
      "hasChunks": [
        {
          "chunkId": "c_product_thatseoagent_1",
          "text": "Plataforma agéntica de SEO conectada a Search Console, Analytics 4 y PageSpeed en tiempo real.",
          "sourceUrl": "https://www.angelcruz.dev/producto/thatseoagent",
          "pageTitle": "ThatSEOAgent",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "definition",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_product_thatseoagent_2",
          "text": "Un agente que decide qué herramientas de SEO correr, las ejecuta y sintetiza los resultados cruzando Search Console, Analytics 4 y PageSpeed en tiempo real.",
          "sourceUrl": "https://www.angelcruz.dev/producto/thatseoagent",
          "pageTitle": "ThatSEOAgent",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_topic_laravel",
      "@type": "SoftwareProduct",
      "name": "Laravel",
      "description": "Framework PHP para aplicaciones web. Es el tema con más cobertura del sitio: Eloquent, Artisan, colas, testing y arquitectura de APIs.",
      "hasChunks": [
        {
          "chunkId": "c_topic_laravel_1",
          "text": "Tu servidor necesita PHP 8.3 o superior y las extensiones que Laravel usa: Ctype, cURL, DOM, Fileinfo, Filter, Hash, Mbstring, OpenSSL, PCRE, PDO, Session, Tokenizer y XML. La mayoría vienen por defecto en una instalación estándar de PHP.",
          "sourceUrl": "https://www.angelcruz.dev/post/aprende-laravel-deploy",
          "pageTitle": "Aprende Laravel: Deploy a producción",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_laravel_2",
          "text": "Todos los starter kits usan Laravel Fortify por debajo: es el backend de autenticación que registra las rutas y la lógica. Las que trae de fábrica:",
          "sourceUrl": "https://www.angelcruz.dev/post/aprende-laravel-autenticacion",
          "pageTitle": "Aprende Laravel: Autenticación",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_laravel_3",
          "text": "Laravel Sail es el entorno Docker oficial de Laravel: un docker-compose con PHP, base de datos y los servicios que necesites, sin instalar nada en tu máquina más que Docker. Puedes arrancar un proyecto con Sail usando el one-liner de laravel.build, algo así:",
          "sourceUrl": "https://www.angelcruz.dev/post/laravel-charter",
          "pageTitle": "Laravel Charter: crea tu app Laravel con Sail sin memorizar comandos",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://es.wikipedia.org/wiki/Laravel",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_php",
          "targetName": "PHP"
        }
      ]
    },
    {
      "entityId": "e_topic_php",
      "@type": "Concept",
      "name": "PHP",
      "description": "Lenguaje de programación del lado del servidor sobre el que corren Laravel y WordPress. En el sitio se cubre el lenguaje en sí: versiones, rendimiento y gestión de memoria.",
      "hasChunks": [
        {
          "chunkId": "c_topic_php_1",
          "text": "Un operador en PHP es un símbolo que toma uno o más valores (los operandos) y produce otro. Sumar, comparar, asignar, concatenar texto: todo pasa por operadores. Esta guía los reúne todos por categoría, con ejemplos cortos y los detalles donde la mayoría tropieza. Para los temas con más tela —el operador ternario, por ejemplo— hay artículos dedicados enlazados desde cada sección.",
          "sourceUrl": "https://www.angelcruz.dev/post/operadores-php",
          "pageTitle": "Operadores en PHP: la guía completa",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_php_2",
          "text": "En PHP, == compara solo el valor (aplicando conversión de tipos), mientras que === compara valor y tipo. Por eso 5 == \"5\" es true, pero 5 === \"5\" es false. La regla práctica: usa === por defecto. Evita los bugs sutiles que provoca la conversión automática de tipos.",
          "sourceUrl": "https://www.angelcruz.dev/post/igual-vs-identico-php",
          "pageTitle": "== vs === en PHP: igualdad suelta vs estricta",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_php_3",
          "text": "El operador spaceship (<=>), o nave espacial, llegó con PHP 7 y compara dos valores devolviendo un entero: menor que cero si el izquierdo es menor, cero si son iguales, mayor que cero si el izquierdo es mayor (en la práctica, -1, 0 o 1). Su uso principal es ordenar arrays con usort en una sola línea.",
          "sourceUrl": "https://www.angelcruz.dev/post/operador-spaceship-php",
          "pageTitle": "Operador spaceship (<=>) en PHP",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://es.wikipedia.org/wiki/PHP"
    },
    {
      "entityId": "e_topic_wordpress",
      "@type": "Platform",
      "name": "WordPress",
      "description": "CMS en PHP. En el sitio se trata desde el desarrollo a medida: themes propios, plugins publicados y la variante headless.",
      "hasChunks": [
        {
          "chunkId": "c_topic_wordpress_1",
          "text": "La última versión añadió importación de ficheros de exportación de WordPress (WXR/.xml), y permite crear un sitio directamente desde una importación. Junto al comando /liberate, cierra el hueco de \"ya tengo un sitio en otro lado y quiero trabajarlo local\".",
          "sourceUrl": "https://www.angelcruz.dev/post/que-es-wordpress-studio",
          "pageTitle": "WordPress Studio: Guía Completa 2026",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_wordpress_2",
          "text": "Un plugin para migrar categorías, mensajes, etiquetas, imágenes y otros archivos multimedia de Joomla a WordPress. Se ha probado con las versiones de Joomla 1.5, 1.6, 1.7, 2.5, 3.0, 3.1, 3.2 y 3.3 y WordPress 4.0 en bases de datos grandes (000+ 72 mensajes). Es compatible con las instalaciones de múltiples sitios.",
          "sourceUrl": "https://www.angelcruz.dev/post/migrar-de-joomla-a-wordpress-y-no-morir-en-el-intento",
          "pageTitle": "Migrar de Joomla a WordPress y no morir en el intento",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_wordpress_3",
          "text": "To get JSON data (or any raw input), use php://input. lo cual no esta del todo mal pero ya que estamos usando WordPress podemos aprovechar el objeto request.",
          "sourceUrl": "https://www.angelcruz.dev/post/rest-api-en-wordpress",
          "pageTitle": "Rest API en WordPress",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://es.wikipedia.org/wiki/WordPress",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_php",
          "targetName": "PHP"
        }
      ]
    },
    {
      "entityId": "e_topic_woocommerce",
      "@type": "Platform",
      "name": "WooCommerce",
      "description": "Plugin de e-commerce para WordPress. Es la base sobre la que corren los dos plugins de pagos publicados en el sitio.",
      "hasChunks": [
        {
          "chunkId": "c_topic_woocommerce_1",
          "text": "En la ficha de Rebill WooCommerce tienes la lista completa de características, los requisitos y las APIs que usa, todo en una sola página por si prefieres revisarlo antes de instalar.",
          "sourceUrl": "https://www.angelcruz.dev/post/rebill-woocommerce-gateway-pagos-latam",
          "pageTitle": "Rebill para WooCommerce",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_woocommerce_2",
          "text": "El SKU (Stock-Keeping Unit) es el código interno con el que identificas cada producto en tu inventario. En WooCommerce se guarda en la metadata del producto bajo la clave _sku, y por defecto la tienda no ofrece ordenar por ese campo: solo por popularidad, precio, valoración, etc. Eso es lo que vamos a añadir.",
          "sourceUrl": "https://www.angelcruz.dev/post/ordenar-por-sku-con-woocommerce",
          "pageTitle": "Ordenar productos por SKU en WooCommerce",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_woocommerce_3",
          "text": "Otra alternativa es utilizar Laravel para integrar con plataformas de ecommerce ya existentes como WooCommerce, Magento o Shopify. Esto te permitirá beneficiarte de las características y funcionalidades de estas plataformas populares, al tiempo que utilizas Laravel para desarrollar características personalizadas según tus necesidades específicas.",
          "sourceUrl": "https://www.angelcruz.dev/post/mejores-plataformas-ecommerce-laravel",
          "pageTitle": "¿Cuál es la Mejor Plataforma de E-commerce para tu Negocio con Laravel?",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://en.wikipedia.org/wiki/WooCommerce",
      "relations": [
        {
          "predicate": "PART_OF",
          "targetId": "e_topic_wordpress",
          "targetName": "WordPress"
        }
      ]
    },
    {
      "entityId": "e_topic_javascript",
      "@type": "Concept",
      "name": "JavaScript",
      "description": "Lenguaje del navegador y, vía Node.js, también del servidor. En el sitio aparece sobre todo alrededor de TypeScript y del ecosistema de herramientas de desarrollo.",
      "hasChunks": [
        {
          "chunkId": "c_topic_javascript_1",
          "text": "JavaScript nos permite hacer manipulaciones matemáticas sobre el valor de las variables numéricas. Los operadores definidos son: suma (+), resta (-), multiplicación (*) y división (/).",
          "sourceUrl": "https://www.angelcruz.dev/post/operadores-en-javascript-segunda-parte-final",
          "pageTitle": "Operadores AND, OR y módulo en JavaScript",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_javascript_2",
          "text": "Cuando compilas una app de Next.js, todo el JavaScript y el CSS se sirven con un hash en la ruta, bajo /_next/static/. Tu HTML los referencia con etiquetas <script> y <link>, y ahí está el problema: Google sigue esos enlaces. Descubre las URLs de los assets, las rastrea y, como cualquier URL que encuentra, evalúa si las indexa.",
          "sourceUrl": "https://www.angelcruz.dev/post/noindex-next-static-google",
          "pageTitle": "Cómo evitar que Google indexe los archivos de /_next/ en Next.js",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_javascript_3",
          "text": "En este artículo te muestro cómo construir un sistema de partículas atmosféricas usando solo CSS: sin Canvas, sin loops de JavaScript en runtime, SSR-safe, configurable por palette de colores y dirección de movimiento. El resultado es performante, accesible, y se compone limpio con otros elementos de la página.",
          "sourceUrl": "https://www.angelcruz.dev/post/particulas-atmosfericas-nextjs-css-sin-canvas",
          "pageTitle": "Partículas atmosféricas en Next.js sin Canvas: performante con CSS puro",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://es.wikipedia.org/wiki/JavaScript"
    },
    {
      "entityId": "e_topic_nextjs",
      "@type": "SoftwareProduct",
      "name": "Next.js",
      "description": "Framework de React para aplicaciones renderizadas en servidor. Es la base sobre la que está construido este mismo sitio, incluidas sus superficies para agentes.",
      "hasChunks": [
        {
          "chunkId": "c_topic_nextjs_1",
          "text": "Cuando compilas una app de Next.js, todo el JavaScript y el CSS se sirven con un hash en la ruta, bajo /_next/static/. Tu HTML los referencia con etiquetas <script> y <link>, y ahí está el problema: Google sigue esos enlaces. Descubre las URLs de los assets, las rastrea y, como cualquier URL que encuentra, evalúa si las indexa.",
          "sourceUrl": "https://www.angelcruz.dev/post/noindex-next-static-google",
          "pageTitle": "Cómo evitar que Google indexe los archivos de /_next/ en Next.js",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_nextjs_2",
          "text": "Cuando trabajas con Next.js y aplicaciones que consumen datos de APIs externas, mantener el contenido actualizado se convierte en un desafío. Tienes contenido que cambia en tu backend, pero tu frontend sigue mostrando datos en caché que ya no son relevantes.",
          "sourceUrl": "https://www.angelcruz.dev/post/revalidacion-cache-nextjs",
          "pageTitle": "Revalidación On-Demand en Next.js: Invalidar Caché con revalidateTag y revalidatePath",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_nextjs_3",
          "text": "Next.js 16.3 salió recomendando TypeScript 7, que es el port nativo del compilador. Sus propios docs son escuetos sobre lo que hay que hacer:",
          "sourceUrl": "https://www.angelcruz.dev/post/typescript-7-sin-api-javascript-eslint",
          "pageTitle": "Instalé TypeScript 7 y ESLint dejó de arrancar: no hay versión que lo arregle",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://en.wikipedia.org/wiki/Next.js",
      "relations": [
        {
          "predicate": "DEPENDS_ON",
          "targetId": "e_topic_javascript",
          "targetName": "JavaScript"
        }
      ]
    },
    {
      "entityId": "e_topic_mcp",
      "@type": "Standard",
      "name": "Model Context Protocol",
      "description": "Estándar abierto que conecta modelos de lenguaje con herramientas y datos externos mediante servidores. El sitio mantiene una guía pilar sobre él y ofrece desarrollo de servidores a medida.",
      "hasChunks": [
        {
          "chunkId": "c_topic_mcp_1",
          "text": "Un servidor MCP le da a tu asistente de IA (Claude, Cursor, etc.) acceso a herramientas y datos externos a través del Model Context Protocol. Hay cientos, pero para programar de verdad solo necesitas un puñado. Aquí va una selección honesta: primero los oficiales de referencia, después los que usarías a diario.",
          "sourceUrl": "https://www.angelcruz.dev/post/mejores-servidores-mcp",
          "pageTitle": "Mejores servidores MCP para desarrolladores",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_mcp_2",
          "text": "MCP (Model Context Protocol) lo publicó Anthropic en noviembre de 2024 como un estándar abierto para conectar modelos de lenguaje a herramientas externas. La promesa era clara: un protocolo único que cualquier modelo podía implementar para hablar con cualquier herramienta.",
          "sourceUrl": "https://www.angelcruz.dev/post/han-muerto-los-mcp-por-culpa-de-skills",
          "pageTitle": "¿Han muerto los MCP por culpa de Skills?",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_mcp_3",
          "text": "La revisión 2026-07-28 del Model Context Protocol no es un bump de versión. Elimina el handshake de inicialización, borra las sesiones del transporte, retira las peticiones iniciadas por el servidor y deja a Roots, Sampling y Logging marcados para morir.",
          "sourceUrl": "https://www.angelcruz.dev/post/mcp-stateless-adios-sesiones-y-sampling",
          "pageTitle": "MCP se vuelve stateless: adiós a las sesiones y al Sampling",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "alternateName": [
        "MCP",
        "servidores MCP"
      ],
      "sameAs": "https://en.wikipedia.org/wiki/Model_Context_Protocol",
      "relations": [
        {
          "predicate": "ENABLES",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA"
        }
      ]
    },
    {
      "entityId": "e_topic_claude_code",
      "@type": "SoftwareProduct",
      "name": "Claude Code",
      "description": "Agente de código de Anthropic que corre en la terminal. El sitio mantiene una guía pilar sobre su configuración, hooks, skills y subagentes.",
      "hasChunks": [
        {
          "chunkId": "c_topic_claude_code_1",
          "text": "Cada uno nació en un lado (Claude Code en la terminal, Cursor en el editor), pero hoy se solapan: Claude Code también tiene extensiones para VS Code y JetBrains y una app web, y Cursor tiene su propio CLI. Aun así, el corazón de cada uno sigue marcando la experiencia.",
          "sourceUrl": "https://www.angelcruz.dev/post/claude-code-vs-cursor",
          "pageTitle": "Claude Code vs Cursor: ¿cuál elegir en 2026?",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_claude_code_2",
          "text": "Usar Claude Code en un proyecto Laravel no es solo \"pedirle cosas\": con un par de piezas configuradas, el agente escribe código Laravel idiomático, en la versión correcta y con tests, en vez de PHP genérico alucinado. Este es el flujo que uso, de principio a fin. Forma parte de la guía IA para desarrolladores Laravel.",
          "sourceUrl": "https://www.angelcruz.dev/post/claude-code-proyecto-laravel",
          "pageTitle": "Claude Code en un proyecto Laravel real: flujo completo",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_claude_code_3",
          "text": "En Claude Code, el costo escala con el tamaño del contexto: cuanto más texto procesa Claude en cada mensaje, más tokens gastas. La buena noticia es que casi todo se reduce a una idea: mantener el contexto pequeño. Aquí van las técnicas que de verdad mueven la aguja, ordenadas de mayor a menor impacto.",
          "sourceUrl": "https://www.angelcruz.dev/post/optimizar-claude-code-reducir-tokens",
          "pageTitle": "Cómo optimizar Claude Code y reducir tokens",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "relations": [
        {
          "predicate": "INSTANCE_OF",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA"
        },
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_mcp",
          "targetName": "Model Context Protocol"
        },
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_cursor",
          "targetName": "Cursor"
        }
      ]
    },
    {
      "entityId": "e_topic_openclaw",
      "@type": "SoftwareProduct",
      "name": "OpenClaw",
      "description": "Asistente de IA autónomo y de código abierto, antes llamado Clawdbot. El sitio mantiene una guía pilar de instalación por sistema operativo y de los errores comunes al montarlo.",
      "hasChunks": [
        {
          "chunkId": "c_topic_openclaw_1",
          "text": "Una Raspberry Pi es el lugar ideal para OpenClaw: un equipo de bajo consumo, siempre encendido, en tu propia red. El asistente queda corriendo como un servicio 24/7 sin que tengas que dejar la laptop prendida, y tus datos nunca salen de casa.",
          "sourceUrl": "https://www.angelcruz.dev/post/instalar-openclaw-en-raspberry-pi",
          "pageTitle": "Cómo instalar OpenClaw en una Raspberry Pi (4 y 5)",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_openclaw_2",
          "text": "Docker es la forma más limpia de correr OpenClaw cuando quieres aislarlo del resto del sistema: el agente vive en su propio contenedor, las actualizaciones son un comando, y el entorno es idéntico en cualquier máquina. La propia documentación lo describe como una opción pensada para entornos aislados o para validar el flujo antes de instalarlo nativo.",
          "sourceUrl": "https://www.angelcruz.dev/post/instalar-openclaw-con-docker-compose",
          "pageTitle": "Cómo instalar OpenClaw con Docker Compose",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_openclaw_3",
          "text": "Un aviso si eres de los que usa Bun para todo: Bun no puede ejecutar OpenClaw, porque no ofrece node:sqlite. Sirve como instalador de dependencias, no como runtime.",
          "sourceUrl": "https://www.angelcruz.dev/post/instalar-openclaw-en-ubuntu",
          "pageTitle": "Cómo instalar OpenClaw en Ubuntu (servidor 24/7)",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "alternateName": [
        "Clawdbot"
      ],
      "sameAs": "https://en.wikipedia.org/wiki/OpenClaw",
      "relations": [
        {
          "predicate": "INSTANCE_OF",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA"
        }
      ]
    },
    {
      "entityId": "e_topic_cursor",
      "@type": "SoftwareProduct",
      "name": "Cursor",
      "description": "Editor de código con IA integrada. En el sitio se cubre su configuración real: rules, skills y en qué se diferencian.",
      "hasChunks": [
        {
          "chunkId": "c_topic_cursor_1",
          "text": "Cursor usa un archivo JSON con una clave mcpServers. Para un proyecto, crea .cursor/mcp.json en la raíz del repo (o el global en ~/.cursor/mcp.json, que aplica en todo):",
          "sourceUrl": "https://www.angelcruz.dev/post/conectar-mcp-cursor-claude",
          "pageTitle": "Cómo conectar un servidor MCP a Cursor y Claude Code",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_cursor_2",
          "text": "Cada uno nació en un lado (Claude Code en la terminal, Cursor en el editor), pero hoy se solapan: Claude Code también tiene extensiones para VS Code y JetBrains y una app web, y Cursor tiene su propio CLI. Aun así, el corazón de cada uno sigue marcando la experiencia.",
          "sourceUrl": "https://www.angelcruz.dev/post/claude-code-vs-cursor",
          "pageTitle": "Claude Code vs Cursor: ¿cuál elegir en 2026?",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_cursor_3",
          "text": "Todos los precios vienen de la página oficial de Cursor y de su documentación de modelos y precios, no de blogs de terceros.",
          "sourceUrl": "https://www.angelcruz.dev/post/cursor-ide-precios-planes",
          "pageTitle": "Cursor Precios 2026: Planes y Costos Actualizados",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ]
    },
    {
      "entityId": "e_topic_agentes_ia",
      "@type": "Concept",
      "name": "Agentes de IA",
      "description": "Programas que usan un modelo de lenguaje para decidir y ejecutar acciones por su cuenta. Es el eje del sitio: qué pueden hacer, cómo se les da acceso a herramientas y cómo se les publica contenido.",
      "hasChunks": [
        {
          "chunkId": "c_topic_agentes_ia_1",
          "text": "Un gestor de skills para agentes de IA creado por Vercel Labs. Instala skills desde repositorios de GitHub en tu agente (Claude Code, Cursor y otros) con un comando, usando GitHub como registro en lugar de npm.",
          "sourceUrl": "https://www.angelcruz.dev/post/npx-skills",
          "pageTitle": "npx skills: instala y comparte skills para tu agente de IA",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_agentes_ia_2",
          "text": "Los agentes de IA ya no solo responden: actúan. Y cuando algo actúa solo con tus credenciales, la pregunta deja de ser \"¿tiene permiso?\" y pasa a ser \"¿tiene permiso para esta tarea, con estos límites, y quién responde si se pasa?\". MCP resolvió cómo darle herramientas a un agente; AAP intenta resolver cómo autorizarlo sin darle las llaves de todo. Encaja con el resto del ecosistema que cubro en la guía de Claude Code y con la orquestación de subagentes, donde la delegación controlada importa de verdad.",
          "sourceUrl": "https://www.angelcruz.dev/post/aap-oauth-agentes-de-ia",
          "pageTitle": "AAP: OAuth 2.0 para la era de los agentes de IA",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_agentes_ia_3",
          "text": "Cuando corres varios agentes de IA (Claude Code, Codex, Gemini CLI) junto a tu servidor, tus workers de colas y tu base de datos, terminas con un caos: muchas pestañas, avisos de crashes que se te escapan y agentes operando a ciegas, sin saber qué pasa con el resto del stack.",
          "sourceUrl": "https://www.angelcruz.dev/post/soloterm-workspace-agentes-ia",
          "pageTitle": "Solo (SoloTerm): el workspace para tus agentes de IA",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://es.wikipedia.org/wiki/Agente_inteligente"
    },
    {
      "entityId": "e_topic_llms_txt",
      "@type": "Methodology",
      "name": "llms.txt",
      "description": "Convención que publica en la raíz del dominio un índice en markdown pensado para modelos de lenguaje. Este sitio la sirve en /llms.txt junto a un corpus completo en /llms-full.txt.",
      "hasChunks": [
        {
          "chunkId": "c_topic_llms_txt_1",
          "text": "Es la pieza que falta en la capa de red de un ecosistema que ya conoces si leíste mi artículo sobre content negotiation para agentes de IA: mientras llms.txt y la negociación de contenido operan a nivel HTTP, DNS-AID quiere resolver el descubrimiento antes de la primera petición HTTP, en la resolución de nombres.",
          "sourceUrl": "https://www.angelcruz.dev/post/dns-aid-descubrimiento-agentes-ia-dns",
          "pageTitle": "DNS-AID: descubrimiento de agentes de IA a través de DNS",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "relations": [
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_content_negotiation",
          "targetName": "Content negotiation para agentes"
        },
        {
          "predicate": "SUITED_FOR",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA",
          "confidence": "declared"
        }
      ]
    },
    {
      "entityId": "e_topic_content_negotiation",
      "@type": "Methodology",
      "name": "Content negotiation para agentes",
      "description": "Servir la misma URL como HTML o como markdown según la cabecera Accept, o con sufijo .md, para que un agente lea el contenido sin el chrome de la página. Está implementado en todas las rutas de contenido del sitio.",
      "hasChunks": [
        {
          "chunkId": "c_topic_content_negotiation_1",
          "text": "La solución a este problema no es nueva. Se llama content negotiation (negociación de contenido) y es un estándar HTTP desde hace décadas.",
          "sourceUrl": "https://www.angelcruz.dev/post/content-negotiation-agentes-ia",
          "pageTitle": "Content Negotiation para Agentes de IA: De 316KB a 1.3KB (Reducción del 99.6%)",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_content_negotiation_2",
          "text": "Es la pieza que falta en la capa de red de un ecosistema que ya conoces si leíste mi artículo sobre content negotiation para agentes de IA: mientras llms.txt y la negociación de contenido operan a nivel HTTP, DNS-AID quiere resolver el descubrimiento antes de la primera petición HTTP, en la resolución de nombres.",
          "sourceUrl": "https://www.angelcruz.dev/post/dns-aid-descubrimiento-agentes-ia-dns",
          "pageTitle": "DNS-AID: descubrimiento de agentes de IA a través de DNS",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_content_negotiation_3",
          "text": "Eso no significa que servir contenido legible por máquina no sirva de nada, significa que Google no lo pide. Los agentes que leen fuera de Google sí lo agradecen, y ahí es donde entra servir markdown por content negotiation: un agente que pide tu página con Accept: text/markdown recibe el texto sin el ruido del HTML.",
          "sourceUrl": "https://www.angelcruz.dev/post/seo-tecnico-en-la-era-de-la-ia",
          "pageTitle": "SEO técnico en la era de la IA: de rankear a que la IA te cite",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "relations": [
        {
          "predicate": "SUITED_FOR",
          "targetId": "e_topic_agentes_ia",
          "targetName": "Agentes de IA",
          "confidence": "declared"
        }
      ]
    },
    {
      "entityId": "e_topic_geo",
      "@type": "Methodology",
      "name": "GEO (generative engine optimization)",
      "description": "Optimizar contenido para que los motores generativos y los asistentes lo citen, en vez de solo para el ranking de los diez enlaces azules. Cubre datos estructurados, atribución y superficies legibles por máquina.",
      "hasChunks": [
        {
          "chunkId": "c_topic_geo_1",
          "text": "Google dice que para sus AI Overviews no hacen falta: basta contenido útil, HTML semántico y E-E-A-T. El schema y los ficheros legibles por máquina ayudan sobre todo a los otros motores y a los agentes, y no perjudican.",
          "sourceUrl": "https://www.angelcruz.dev/post/seo-tecnico-en-la-era-de-la-ia",
          "pageTitle": "SEO técnico en la era de la IA: de rankear a que la IA te cite",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_geo_2",
          "text": "Los agentes de IA consumen mejor contenido en Markdown que HTML completo. El payload se reduce aproximadamente un 99.6%, lo que mejora la indexación en motores de búsqueda de IA como ChatGPT, Perplexity y Google AI Overviews.",
          "sourceUrl": "https://www.angelcruz.dev/post/laravel-semanal-16-23-febrero-2026",
          "pageTitle": "Laravel Semanal: 16-23 Febrero 2026",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "alternateName": [
        "generative engine optimization",
        "AEO",
        "answer engine optimization"
      ],
      "relations": [
        {
          "predicate": "RELATES_TO",
          "targetId": "e_topic_llms_txt",
          "targetName": "llms.txt"
        }
      ]
    },
    {
      "entityId": "e_topic_apis_restful",
      "@type": "Concept",
      "name": "APIs RESTful",
      "description": "Estilo de arquitectura para APIs sobre HTTP con recursos, verbos y respuestas cacheables. Es la forma en que se entregan la mayoría de los backends que construyo.",
      "hasChunks": [
        {
          "chunkId": "c_topic_apis_restful_1",
          "text": "Las rutas en web.php tienen estado (basadas en sesiones) y están pensadas para aplicaciones web tradicionales. Las rutas en api.php son sin estado (stateless), se prefijan automáticamente con /api/, y están diseñadas para APIs RESTful donde cada solicitud debe manejarse únicamente con la información que la acompaña.",
          "sourceUrl": "https://www.angelcruz.dev/post/aprende-laravel-rutas",
          "pageTitle": "Aprende Laravel: Rutas",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_apis_restful_2",
          "text": "Lo de Sampling es un retroceso conceptual, y vale la pena decirlo claro. Sampling era la idea de que un servidor pudiera pedir prestado el modelo del cliente: tú no necesitabas tu propia API key ni elegir proveedor, porque el host ya tenía uno y te lo prestaba. Era de las pocas cosas que MCP hacía y que no podías replicar con una API REST normal.",
          "sourceUrl": "https://www.angelcruz.dev/post/mcp-stateless-adios-sesiones-y-sampling",
          "pageTitle": "MCP se vuelve stateless: adiós a las sesiones y al Sampling",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "sameAs": "https://en.wikipedia.org/wiki/REST"
    },
    {
      "entityId": "e_topic_seo_tecnico",
      "@type": "Methodology",
      "name": "SEO técnico",
      "description": "La parte del posicionamiento que depende de cómo está construido el sitio: rastreo, indexación, Core Web Vitals, datos estructurados y sitemaps. Se cubre con datos reales de Search Console, no con estimaciones.",
      "hasChunks": [
        {
          "chunkId": "c_topic_seo_tecnico_1",
          "text": "El SEO técnico no murió con la IA: se volvió el cimiento de algo más grande. La base de siempre (rastreo, indexación, velocidad, semántica) ahora habilita un objetivo nuevo, ser citado y, con suerte, recomendado por los sistemas que cada vez más gente usa en lugar de la búsqueda tradicional. Es exactamente el trabajo que hago cuando alguien me contrata para SEO técnico: dejar la base impecable y organizar el sitio para que tanto Google como la IA puedan encontrarlo, entenderlo y citarlo.",
          "sourceUrl": "https://www.angelcruz.dev/post/seo-tecnico-en-la-era-de-la-ia",
          "pageTitle": "SEO técnico en la era de la IA: de rankear a que la IA te cite",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_seo_tecnico_2",
          "text": "Revisando el informe de cobertura de Google Search Console de este blog me encontré con decenas de URLs raras en la lista de \"Rastreada: actualmente sin indexar\": archivos como /next/static/chunks/4bd1b696-…js y hojas de estilo /next/static/css/…css. No son páginas, son los recursos estáticos que genera Next.js. Google los estaba descubriendo, rastreando e intentando indexar. Esto es lo que pasa y cómo lo resolví sin romper nada.",
          "sourceUrl": "https://www.angelcruz.dev/post/noindex-next-static-google",
          "pageTitle": "Cómo evitar que Google indexe los archivos de /_next/ en Next.js",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        },
        {
          "chunkId": "c_topic_seo_tecnico_3",
          "text": "Cuando el sistema no cuenta con una estrategia de revalidación, el frontend puede servir información obsoleta, lo que afecta directamente a la experiencia del usuario, al SEO técnico y a la coherencia del contenido.",
          "sourceUrl": "https://www.angelcruz.dev/post/revalidacion-cache-aplicaciones-hibridas",
          "pageTitle": "Sincronización de Caché en Arquitecturas Híbridas con Laravel",
          "publisher": "Angel Cruz · Software Developer",
          "contentType": "evidence",
          "retrieved": "2026-08-19T11:00:00Z"
        }
      ],
      "relations": [
        {
          "predicate": "IMPROVES",
          "targetId": "e_topic_geo",
          "targetName": "GEO (generative engine optimization)",
          "confidence": "declared",
          "context": {
            "condition": "cuando el sitio ya publica datos estructurados y superficies legibles por máquina",
            "reviewedBy": "Angel Cruz"
          }
        }
      ]
    }
  ]
}