Primafonte

Cómo se calcula el Índice de Citabilidad

El Índice de Citabilidad es una puntuación de 0 a 100 que mide si una web puede ser leída, entendida y citada por un modelo generativo.

El Índice de Citabilidad se calcula con 28 comprobaciones agrupadas en cuatro capas ponderadas. Esta página documenta cada una: qué comprueba, cómo se comprueba, qué umbral se considera aprobado, qué peso tiene y por qué le importa a un modelo.

Versión

Versión 0.1.0-borrador, publicada el 2026-08-02. Los cambios de metodología se registran abajo y las puntuaciones anteriores no se recalculan: cada informe indica con qué versión se generó.

Las cuatro capas y sus pesos

Descubribilidad
25 · 7
Accesibilidad del contenido
30 · 7
Estructura semántica
30 · 9
Autoridad de entidad
15 · 5

Las 28 comprobaciones

Descubribilidad

robots.txt accesible y parseable

robots_exists

Qué comprueba
Comprueba que el fichero /robots.txt existe, responde 200 y contiene directivas reconocibles.
Cómo se comprueba
Se pide https://tudominio/robots.txt y se parsea buscando líneas con el formato campo: valor. Un 200 que devuelve HTML no cuenta como robots.txt.
Umbral de aprobado
Aprueba con 200 y al menos una directiva válida. Un 404, un error de servidor o un HTML servido con 200 suspenden.
Peso
2 (Descubribilidad)
Por qué le importa a un modelo
El robots.txt es el primer fichero que pide cualquier rastreador. Sin él, cada agente decide por su cuenta qué hacer con la web, y esa decisión no la controla quien la publica.

Reglas explícitas para los rastreadores de IA

robots_ai_rules

Qué comprueba
Comprueba si el robots.txt declara una regla propia para GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot y Bytespider.
Cómo se comprueba
Se busca un bloque User-agent con el nombre de cada agente. Vale tanto permitir como denegar: lo que se mide es que haya una decisión declarada, no cuál es.
Umbral de aprobado
Aprueba con los seis agentes declarados. Cumple a medias con uno o más, pero no todos. Suspende sin ninguno.
Peso
3 (Descubribilidad)
Por qué le importa a un modelo
Un Allow explícito comunica intención; la ausencia de regla comunica descuido. Varios operadores de rastreadores tratan de forma distinta a los sitios que los nombran, porque indica que alguien ha pensado en ellos.

No se bloquea a los rastreadores de IA sin querer

robots_not_blocking

Qué comprueba
Comprueba que ningún rastreador de IA tiene prohibida la raíz del sitio.
Cómo se comprueba
Se evalúa el robots.txt para cada agente aplicando la regla habitual: gana el patrón más largo y el empate lo gana Allow.
Umbral de aprobado
Aprueba si ningún agente de IA tiene bloqueada la ruta /. Bloquear a todos cumple a medias, porque puede ser una decisión consciente. Bloquear solo a algunos suspende.
Peso
3 (Descubribilidad)
Por qué le importa a un modelo
Un modelo no puede citar lo que no puede rastrear. Bloquear a un subconjunto de agentes casi siempre es una regla heredada que nadie revisó, no una decisión, y el efecto es desaparecer de esos motores.

Sitemap declarado y accesible

sitemap_declared

Qué comprueba
Comprueba que existe un sitemap XML válido y que el robots.txt lo anuncia.
Cómo se comprueba
Se lee la directiva Sitemap del robots.txt y, si no la hay, se prueba /sitemap.xml. El fichero tiene que responder 200 y contener un urlset o un sitemapindex.
Umbral de aprobado
Aprueba si el sitemap es válido y está declarado en el robots.txt. Cumple a medias si es accesible pero nadie lo anuncia. Suspende si no existe o no es XML válido.
Peso
2 (Descubribilidad)
Por qué le importa a un modelo
El sitemap es la lista completa de lo que una web considera importante. Sin él, un rastreador solo encuentra lo que esté enlazado desde donde entró, y las páginas profundas pueden no descubrirse nunca.

Fechas de modificación en el sitemap

sitemap_fresh

Qué comprueba
Comprueba qué proporción de las URLs del sitemap declara una fecha lastmod reciente.
Cómo se comprueba
Se cuentan las etiquetas loc del sitemap y las lastmod parseables, y se calcula qué porcentaje tiene una fecha dentro de los últimos doce meses.
Umbral de aprobado
Aprueba con más del 50% de las URLs con lastmod reciente. Cumple a medias con alguna. Suspende sin ninguna fecha.
Peso
1 (Descubribilidad)
Por qué le importa a un modelo
Un rastreador con presupuesto limitado usa lastmod para decidir qué volver a leer. Un sitemap sin fechas obliga a tratarlo todo igual, y lo que cambió ayer se relee cuando toque, no cuando importa.

Fichero llms.txt

llms_txt

Qué comprueba
Comprueba si existe un /llms.txt en Markdown con un encabezado y enlaces.
Cómo se comprueba
Se pide https://tudominio/llms.txt y se verifica que no sea HTML, que tenga al menos un H1 en formato Markdown y al menos un enlace.
Umbral de aprobado
Aprueba con H1 y enlaces. Cumple a medias con solo uno de los dos. Suspende si no existe o devuelve una página HTML.
Peso
2 (Descubribilidad)
Por qué le importa a un modelo
El llms.txt es un índice en Markdown pensado para que un agente entienda de qué va la web y por dónde empezar, sin tener que deducirlo del menú de navegación. Es barato de mantener y todavía poco común.

Cabeceras Link de descubrimiento

link_headers

Qué comprueba
Comprueba si la home envía una cabecera HTTP Link con rel canonical o alternate.
Cómo se comprueba
Se inspecciona la cabecera Link de la respuesta de la home buscando rel="canonical" o rel="alternate".
Umbral de aprobado
Aprueba con cualquiera de las dos presente. Suspende si no hay cabecera Link.
Peso
1 (Descubribilidad)
Por qué le importa a un modelo
Un rastreador que solo lee cabeceras, sin parsear el HTML, obtiene la canónica y las versiones alternativas de la página antes de descargar el cuerpo. Para un agente que recorre miles de URLs, esa señal resuelve los duplicados sin gastar una petición extra.

Accesibilidad del contenido

Ratio de renderizado

render_ratio

Qué comprueba
Mide qué proporción del texto visible existe ya en el HTML inicial, antes de ejecutar JavaScript.
Cómo se comprueba
Se extrae el texto del HTML crudo y el texto tras cargar la página en un navegador real hasta networkidle, ambos normalizados quitando espacios, y se dividen.
Umbral de aprobado
Aprueba con un ratio de 0,80 o superior. Cumple a medias entre 0,50 y 0,79. Suspende por debajo de 0,50.
Peso
4 (Accesibilidad del contenido)
Por qué le importa a un modelo
La mayoría de rastreadores de IA no ejecutan JavaScript. Ven la página tal como llega del servidor, y si el contenido se inyecta después encuentran un documento casi vacío y no tienen nada que citar. Es la comprobación que más webs suspende.

Contenido principal sin JavaScript

main_content_in_html

Qué comprueba
Comprueba que el H1 y un párrafo con sustancia existen en el HTML crudo.
Cómo se comprueba
Se busca en el HTML descargado, sin ejecutar nada, un H1 con texto y al menos un párrafo de doce palabras o más.
Umbral de aprobado
Aprueba con H1 y párrafo. Cumple a medias con H1 pero sin párrafo. Suspende sin H1.
Peso
3 (Accesibilidad del contenido)
Por qué le importa a un modelo
El H1 y el primer párrafo son lo que un modelo usa para decidir de qué trata la página. Si llegan vacíos, el resto del contenido da igual: la página no entra en la respuesta porque no se sabe de qué habla.

Negociación de contenido en Markdown

markdown_negotiation

Qué comprueba
Comprueba si el servidor devuelve Markdown cuando el cliente lo pide.
Cómo se comprueba
Se pide la home con la cabecera Accept: text/markdown y se mira si responde 200 con content-type text/markdown.
Umbral de aprobado
Aprueba con 200 y content-type text/markdown. Suspende en cualquier otro caso.
Peso
1 (Accesibilidad del contenido)
Por qué le importa a un modelo
Un agente que recibe Markdown se ahorra parsear HTML y no arrastra menús, pies ni avisos de cookies al fragmento que cita. Es una ventaja barata de implementar y todavía rara.

Cadena de redirecciones limpia

status_and_redirects

Qué comprueba
Comprueba que llegar a la home no exige recorrer varios saltos y que el destino final es https.
Cómo se comprueba
Se siguen las redirecciones una a una, registrando cada URL, y se detectan bucles comparando la cadena recorrida.
Umbral de aprobado
Aprueba con un salto o ninguno y destino https. Cumple a medias con dos saltos. Suspende con más de dos, con un bucle o si el destino no es https.
Peso
2 (Accesibilidad del contenido)
Por qué le importa a un modelo
Cada salto es una petición más y una oportunidad más de perder cabeceras, cookies o el propio rastreador. Algunos clientes dejan de seguir la cadena antes de llegar, y para ellos la web sencillamente no responde.

Tiempo hasta el primer byte

ttfb

Qué comprueba
Mide cuánto tarda el servidor en empezar a responder.
Cómo se comprueba
Se cronometra desde que se abre la petición hasta que llegan las primeras cabeceras de la respuesta de la home.
Umbral de aprobado
Aprueba por debajo de 800 ms. Cumple a medias entre 800 y 1600 ms. Suspende por encima de 1600 ms.
Peso
1 (Accesibilidad del contenido)
Por qué le importa a un modelo
El tiempo de respuesta condiciona cuántas páginas rastrea un agente por visita. Un servidor lento no impide que se cite una página, pero reduce cuántas llegan a leerse.

Mismo contenido para el bot y para una persona

bot_parity

Qué comprueba
Compara el texto que se sirve a un navegador con el que se sirve a un rastreador.
Cómo se comprueba
Se pide la home dos veces, una con user-agent de navegador y otra con el de PrimafonteBot, y se compara la longitud del texto visible extraído de cada respuesta.
Umbral de aprobado
Aprueba con menos del 10% de diferencia. Cumple a medias por debajo del 30%. Suspende por encima.
Peso
3 (Accesibilidad del contenido)
Por qué le importa a un modelo
Servir a un bot una versión distinta de la página es cloaking, lo sepa o no quien configuró la caché. El modelo indexa lo que recibe él, no lo que ve una persona, y la diferencia se convierte en citas equivocadas o en ninguna cita.

El rastreador no recibe un bloqueo

waf_block

Qué comprueba
Comprueba que la web no responde con un bloqueo ni con un captcha al user-agent de un bot.
Cómo se comprueba
Se pide la home con el user-agent de PrimafonteBot y se mira el código de estado y el texto de la respuesta, buscando avisos de verificación de navegador.
Umbral de aprobado
Aprueba con 200 y sin captcha. Cumple a medias con otro código que no sea de bloqueo. Suspende con 401, 403, 429 o con un captcha servido con 200.
Peso
3 (Accesibilidad del contenido)
Por qué le importa a un modelo
Un cortafuegos que bloquea a los bots por defecto deja fuera también a los rastreadores de IA. Un 200 que sirve un captcha bloquea igual que un 403, y además engaña a quien solo mira el código de estado.

Estructura semántica

Datos estructurados en la home

jsonld_present

Qué comprueba
Comprueba que la home incluye al menos un bloque JSON-LD que se pueda parsear.
Cómo se comprueba
Se cuentan los script de tipo application/ld+json del HTML y se intenta parsear cada uno.
Umbral de aprobado
Aprueba con al menos un bloque parseable. Suspende sin bloques o si ninguno parsea.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
Los datos estructurados son la única parte de una web escrita para ser leída por una máquina en lugar de interpretada. Sin ellos, un modelo tiene que deducir del texto quién publica la página y de qué trata.

Datos estructurados válidos

jsonld_valid

Qué comprueba
Comprueba que los bloques JSON-LD parsean y que los tipos declarados traen sus campos obligatorios.
Cómo se comprueba
Se parsea cada bloque, se aplanan los @graph y se verifica que cada tipo conocido tenga los campos sin los cuales no identifica nada, como name en Organization o headline en Article.
Umbral de aprobado
Aprueba sin bloques rotos ni campos obligatorios ausentes. Cumple a medias con una o dos carencias. Suspende con un bloque que no parsea o con más de dos carencias.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
Un bloque con una coma de más no existe para el modelo que lo lee: se descarta entero y en silencio, así que la web pierde la señal sin enterarse. Y un tipo declarado sin su nombre es marcado decorativo, porque omite justo el dato que justificaba declararlo.

Tipos de entidad y de negocio declarados

jsonld_entity_types

Qué comprueba
Comprueba que la web declara quién publica y qué ofrece.
Cómo se comprueba
Se busca entre los tipos declarados uno de entidad, como Organization o Person, y otro que describa la oferta, como SoftwareApplication, Product, Service o Article.
Umbral de aprobado
Aprueba con los dos presentes. Cumple a medias con solo uno. Suspende sin ninguno.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
Un modelo necesita resolver dos preguntas distintas: quién es esta gente y qué venden. Declarar solo una de las dos deja la mitad de la respuesta a la interpretación, y ahí es donde aparecen las descripciones equivocadas.

Jerarquía de encabezados

heading_hierarchy

Qué comprueba
Comprueba que hay un solo H1 y que no se salta ningún nivel.
Cómo se comprueba
Se extraen todos los encabezados en orden de aparición, se cuentan los H1 y se detectan los saltos, como pasar de H2 a H4 sin H3.
Umbral de aprobado
Aprueba con exactamente un H1 y sin saltos. Cumple a medias con dos H1 o con hasta dos saltos. Suspende sin H1, con más de dos, o con varios saltos.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
Los encabezados son el índice del documento. Un salto de nivel deja un bloque colgando de nada, y el troceado que hace un modelo para citar pasajes se apoya justo en esa estructura.

Respuestas directas tras cada encabezado

direct_answers

Qué comprueba
Comprueba si el primer párrafo que sigue a cada H2 responde a ese encabezado.
Cómo se comprueba
Por cada H2 se toma el primer párrafo posterior y se puntúa: la banda de 40 a 80 palabras vale un punto, la franja de 25 a 120 vale medio, y empezar por un conector que depende del párrafo anterior vale cero.
Umbral de aprobado
Aprueba con una puntuación media del 60% o más. Cumple a medias desde el 30%. Suspende por debajo.
Peso
3 (Estructura semántica)
Por qué le importa a un modelo
Un modelo no cita páginas, cita pasajes. Un encabezado seguido de un párrafo que lo responde produce un fragmento que se sostiene solo; seguido de una transición o de una imagen, no produce nada citable.

Párrafos que se sostienen fuera de contexto

chunk_independence

Qué comprueba
Comprueba qué proporción de los párrafos se entiende sin haber leído el anterior.
Cómo se comprueba
Se toman los párrafos de veinte palabras o más y se busca en su primera frase un pronombre o un deíctico sin antecedente, como lo, esto, aquí o el anterior.
Umbral de aprobado
Aprueba con el 50% o más de párrafos independientes. Cumple a medias desde el 25%. Suspende por debajo.
Peso
3 (Estructura semántica)
Por qué le importa a un modelo
Un pasaje se cita solo si se entiende suelto. Un párrafo que empieza por eso se arregla obliga al modelo a arrastrar el párrafo anterior, y en cuanto el fragmento se recorta pierde el sentido y deja de servir como fuente.

Longitud del title y de la meta description

title_meta

Qué comprueba
Comprueba que el title y la meta description caben en el espacio que se les da.
Cómo se comprueba
Se mide la longitud en caracteres del title y del atributo content de la meta description de la home.
Umbral de aprobado
Aprueba con un title de 30 a 60 caracteres y una description de 110 a 160. Cumple a medias si solo uno está en rango. Suspende si ninguno lo está o si faltan.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
El title y la meta description son el resumen que la propia web hace de sí misma, y tanto los buscadores como los modelos los reutilizan tal cual al presentarla. Un title cortado o una description ausente dejan ese resumen en manos de quien lo lea.

Preguntas frecuentes marcadas

faq_markup

Qué comprueba
Comprueba que, si hay preguntas frecuentes visibles, están marcadas como FAQPage.
Cómo se comprueba
Se detectan encabezados con forma de pregunta y menciones a preguntas frecuentes en el texto, y se busca un bloque JSON-LD de tipo FAQPage.
Umbral de aprobado
Aprueba si hay FAQ visible y marcado. Suspende si hay FAQ visible sin marcar. Si no hay FAQ visible, la comprobación no aplica y no puntúa.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
El bloque de preguntas frecuentes es el más citado de una web, porque cada pregunta es ya un fragmento autocontenido. Marcarlo lo hace explícito en lugar de dejarlo a la deducción.

Texto ancla descriptivo

internal_links

Qué comprueba
Comprueba qué proporción de los enlaces internos usa un texto que no dice nada del destino.
Cómo se comprueba
Se recogen los enlaces internos de la home y se comparan sus textos con una lista de anclas genéricas como leer más, aquí o click here.
Umbral de aprobado
Aprueba con menos del 10% de anclas genéricas. Cumple a medias por debajo del 25%. Suspende por encima. Con menos de cinco enlaces internos no puntúa.
Peso
2 (Estructura semántica)
Por qué le importa a un modelo
El texto ancla es una de las señales que un modelo usa para entender de qué trata la página destino antes de visitarla. Un leer más no aporta ninguna, y desperdicia el enlace como señal.

Autoridad de entidad

Coherencia del nombre de marca

name_consistency

Qué comprueba
Comprueba que la marca se escribe igual en el JSON-LD, en Open Graph y en el title.
Cómo se comprueba
Se toma como referencia el nombre declarado en JSON-LD y se compara con og:site_name y con los segmentos del title, ignorando mayúsculas, tildes y puntuación.
Umbral de aprobado
Aprueba si todas las fuentes disponibles coinciden. Cumple a medias si discrepa una. Suspende si discrepan todas. Con una sola fuente no puntúa.
Peso
3 (Autoridad de entidad)
Por qué le importa a un modelo
Un modelo tiene que poder resolver la marca a una sola entidad. Tres variantes del nombre en la misma página producen tres candidatos, y la autoridad que debería acumularse en uno se reparte entre los tres.

Coherencia de la descripción

description_consistency

Qué comprueba
Comprueba que la meta description, la de Open Graph y la del JSON-LD dicen lo mismo.
Cómo se comprueba
Se comparan por pares con el coeficiente de Dice sobre palabras, ignorando mayúsculas y tildes, y manda el par que peor puntúa.
Umbral de aprobado
Aprueba con una similitud de 0,80 o superior. Cumple a medias desde 0,50. Suspende por debajo. Con una sola descripción no puntúa.
Peso
3 (Autoridad de entidad)
Por qué le importa a un modelo
La descripción es la frase con la que un modelo va a presentar la web cuando la cite. Dos versiones distintas obligan a elegir, y la elegida no siempre es la que interesa a quien publica.

Página identificable de empresa o autor

about_page

Qué comprueba
Comprueba que existe una página que explica quién está detrás de la web.
Cómo se comprueba
Se buscan enlaces cuyo destino o texto apunte a una página de tipo quiénes somos, nosotros, about o equipo, y en su defecto una entidad declarada en JSON-LD con url o @id.
Umbral de aprobado
Aprueba con un enlace a la página. Cumple a medias si solo hay entidad declarada en JSON-LD. Suspende sin ninguna de las dos.
Peso
2 (Autoridad de entidad)
Por qué le importa a un modelo
La página de quiénes somos es donde un modelo confirma que detrás de la web hay una entidad real. Su ausencia no impide citar, pero rebaja la confianza en un contenido que no se puede atribuir a nadie.

Datos de contacto legibles

contact_verifiable

Qué comprueba
Comprueba que hay un correo o un teléfono que una máquina pueda leer.
Cómo se comprueba
Se busca un correo o un teléfono en el texto visible y en los enlaces mailto y tel, y en su defecto en los campos email y telephone del JSON-LD.
Umbral de aprobado
Aprueba con contacto en el texto visible o en un enlace. Cumple a medias si solo está declarado en JSON-LD o si el teléfono aparece sin enlace. Suspende sin ninguno.
Peso
2 (Autoridad de entidad)
Por qué le importa a un modelo
Un modelo no rellena formularios. Un contacto que solo existe tras un formulario, dentro de una imagen o ofuscado en JavaScript no puede citarse ni verificarse, y es una de las señales que distinguen a una empresa real.

Perfiles externos declarados con sameAs

sameas_links

Qué comprueba
Comprueba cuántos perfiles externos declara la web con la propiedad sameAs.
Cómo se comprueba
Se recogen todos los valores de sameAs de los bloques JSON-LD. Si no hay ninguno, se mira si al menos existen enlaces a perfiles conocidos en el HTML.
Umbral de aprobado
Aprueba con dos o más sameAs. Cumple a medias con uno, o con dos perfiles enlazados pero sin declarar. Suspende sin ninguno.
Peso
3 (Autoridad de entidad)
Por qué le importa a un modelo
El sameAs es lo que permite a un modelo unir la web con el resto de rastros de la misma entidad: LinkedIn, GitHub, un registro mercantil. Sin esa unión, cada rastro se resuelve como una entidad distinta y ninguna acumula señal suficiente para que la citen.

Qué no mide este índice

El Índice de Citabilidad no mide la calidad de tu contenido, tu reputación, tus enlaces entrantes ni si un modelo te menciona hoy. Mide si existe la posibilidad técnica y estructural de que te cite.

Limitaciones conocidas

  • Los motores generativos no publican los pesos internos con los que seleccionan sus fuentes. El Índice de Citabilidad mide señales observables y razonadas, no una fórmula reproducida de ningún modelo concreto.
  • El resultado varía entre motores. Una web puede ser perfectamente legible para un rastreador y quedar fuera de las respuestas de otro por criterios de selección que no son técnicos.
  • Varios de los estándares que se comprueban están todavía en definición. El caso más claro es llms.txt: hay convención de facto, no especificación cerrada, y su peso puede cambiar.
  • Las comprobaciones se hacen sobre la página de inicio y los recursos que declara. Una web puede tener secciones internas con un comportamiento distinto al de su portada.
  • El ratio de renderizado se mide con un navegador que sí ejecuta JavaScript, mientras que cada rastreador de IA decide por su cuenta si lo ejecuta y hasta qué punto. El ratio indica riesgo, no el comportamiento exacto de un motor concreto.

Historial de cambios

  1. 0.1.0-borrador · 2026-08-02

    Primera versión pública de la metodología. Los umbrales son provisionales y se congelarán en la versión 1.0, tras calibrarlos contra una muestra de 200 webs. Hasta entonces las puntuaciones pueden variar entre escaneos.

Metodología del Índice de Citabilidad — Primafonte