Analyzed URL

https://polenmadrid.com/

Analyze another URL

AI-Ready Score

69 / C

Fair

out of 100

Token Savings

HTML tokens 8329
Markdown tokens 158
Savings 98%

Score Breakdown

Semantic HTML 86/100
Content Efficiency 63/100
AI Discoverability 35/100
Structured Data 85/100
Accessibility 100/100

Your site doesn't have an llms.txt file. This is the emerging standard for helping AI agents understand your site structure.

How to implement

Create an /llms.txt file following the llmstxt.org specification. Include a site description and links to your key pages.

Your page has a low ratio of actual content to total HTML. Much of the page weight is markup, scripts, or styles rather than content.

How to implement

Move CSS to external stylesheets, remove inline styles, minimize JavaScript, and ensure the HTML focuses on content structure.

Your site doesn't support Markdown for Agents. This Cloudflare standard lets AI agents request content in markdown format, reducing token usage by ~80%.

How to implement

Implement one or more: (1) Respond to Accept: text/markdown with markdown content. (2) Serve .md URLs (e.g., /page.md). (3) Add <link rel="alternate" type="text/markdown"> tags. (4) Add Link HTTP headers for markdown discovery.

No Content-Signal directives found. These tell AI agents how they may use your content (search indexing, AI input, training data). The recommended location is robots.txt.

How to implement

Add Content-Signal to your robots.txt: User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no. You can also add it as an HTTP header on markdown responses.

Your page relies heavily on <div> elements. Semantic elements like <section>, <nav>, <header>, <footer>, and <aside> provide meaningful structure for AI agents.

How to implement

Replace generic <div> containers with appropriate semantic elements. Use <section> for thematic groups, <nav> for navigation, <header>/<footer> for page/section headers and footers.

Many elements have inline style attributes. These add noise for AI agents extracting content.

How to implement

Move all inline styles to CSS classes in your stylesheet. Use utility CSS frameworks like Tailwind if you need many unique styles.

Markdown tokens: 158
Predicción

## Estimación de niveles de polen

Estimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.

### Temporada actual

Cupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●

**Otros alérgenos principales**

Olmos Muy alto 174 granos/m³ ●●●

Fresno Alto 90 granos/m³ ●●●

Populus Bajo 7 granos/m³ ●●○

Estas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.
Niveles de polen hoy — PolenMadrid

[🌼 PolenMadrid](https://polenmadrid.com/)

Español English Français Italiano

# Niveles de polen en Madrid

Último dato oficial: Lunes, 16 de febrero de 2026 Última estimación: Miércoles, 18 de febrero de 2026

Predicción## Estimación de niveles de polen

Estimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.

### Temporada actual

Cupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●

**Otros alérgenos principales**

Olmos Muy alto 174 granos/m³ ●●●

Fresno Alto 90 granos/m³ ●●●

Populus Bajo 7 granos/m³ ●●○

Estas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.

## Temporada actual

Estos alérgenos están en temporada alta ahora mismo, una media de todas las estaciones:

[Cupresáceas/Taxáceas Muy alto 2.659 granos/m³](https://polenmadrid.com/tipo/cupresaceas-taxaceas)

**Otros alérgenos principales**

[Olmos Muy alto 288 granos/m³](https://polenmadrid.com/tipo/olmos) [Fresno Muy alto 121 granos/m³](https://polenmadrid.com/tipo/fresno) [Moreras Medio 23 granos/m³](https://polenmadrid.com/tipo/moreras)

Valor máximo entre todas las estaciones del último día con datos oficiales.

## Estaciones de detección

[

Alcalá de Henares Muy alto

Este

Cupresáceas/Taxáceas 2.659 ↑

Olmos 288 ↑

Fresno 39 ↑

](https://polenmadrid.com/estacion/alca)[

Alcobendas Medio

Norte

Fresno 32 ↑

Olmos 31 ↑

Cupresáceas/Taxáceas 8 ↑

](https://polenmadrid.com/estacion/alco)[

Aranjuez Muy alto

Sur

Olmos 112 ↑

Cupresáceas/Taxáceas 99 ↑

Urticáceas 11 ↑

](https://polenmadrid.com/estacion/aran)[

Collado Villalba Muy alto

Sierra

Fresno 121 ↑

Cupresáceas/Taxáceas 2 ↑

PNI 1 \=

](https://polenmadrid.com/estacion/vill)[

Coslada Muy alto

Este

Cupresáceas/Taxáceas 298 ↑

Olmos 79 ↑

Fresno 25 ↑

](https://polenmadrid.com/estacion/cosl)[

Getafe Muy alto

Sur

Cupresáceas/Taxáceas 303 ↑

Olmos 22 ↑

Fresno 14 ↑

](https://polenmadrid.com/estacion/geta)[

Las Rozas Alto

Oeste

Cupresáceas/Taxáceas 156 ↑

Fresno 32 ↑

Olmos 10 ↑

](https://polenmadrid.com/estacion/roza)[

Leganés Medio

Sur

Moreras 23 ↑

Pinos 15 ↑

Quercus 14 ↑

](https://polenmadrid.com/estacion/lega)[

Madrid-Arganzuela Muy alto

Capital

Cupresáceas/Taxáceas 1.069 ↑

Olmos 162 ↑

Fresno 44 ↑

](https://polenmadrid.com/estacion/aytm)[

Madrid-Barrio Salamanca Alto

Capital

Cupresáceas/Taxáceas 97 ↑

Fresno 70 ↑

Olmos 41 ↑

](https://polenmadrid.com/estacion/aler)[

Madrid-Ciudad Universitaria Muy alto

Capital

Cupresáceas/Taxáceas 590 ↑

Olmos 111 ↑

Fresno 45 ↑

](https://polenmadrid.com/estacion/facf)

↑ sube · ↓ baja · = sin cambios — respecto al día anterior

Upload this file as /index.md on your server so AI agents can access a clean version of your page. You can also configure Accept: text/markdown content negotiation to serve it automatically.

Generated llms.txt for this single page

Download llms.txt
# PolenMadrid

> Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).

## Main
- [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red…
- [Mapa](https://polenmadrid.com/mapa)
- [Histórico](https://polenmadrid.com/historico)
- [Calendario](https://polenmadrid.com/calendario)
- [Alertas](https://polenmadrid.com/alertas)
- [Acerca de](https://polenmadrid.com/acerca)
- [Ayuda](https://polenmadrid.com/ayuda)

## Legal
- [Aviso legal y privacidad](https://polenmadrid.com/legal)

Full llms.txt requires domain-wide analysis (coming soon)

Upload this file to https://polenmadrid.com/llms.txt at the root of your domain. AI agents like ChatGPT, Claude, and Perplexity check this file to understand your site structure.

Semantic HTML

Uses article or main element (100/100)

Has <main>

Proper heading hierarchy (100/100)

Clean heading hierarchy

Uses semantic HTML elements (28/100)

8 semantic elements, 88 divs (ratio: 8%)

Meaningful image alt texts (100/100)

No images found

Low div nesting depth (100/100)

Avg div depth: 1.6, max: 3

Content Efficiency

Good token reduction ratio (100/100)

98% token reduction (HTML→Markdown)

Good content-to-noise ratio (0/100)

Content ratio: 1.7% (482 content chars / 27899 HTML bytes)

Minimal inline styles (50/100)

11/458 elements with inline styles (2.4%)

Reasonable page weight (100/100)

HTML size: 27KB

AI Discoverability

Has llms.txt file (0/100)

No llms.txt found

Has robots.txt file (100/100)

robots.txt exists

Robots.txt allows AI bots (100/100)

All major AI bots allowed

Has sitemap.xml (100/100)

Sitemap found

Markdown for Agents support (0/100)
&#10007; Accept: text/markdown &#10007; .md URL &#10007; <link> tag &#10007; Link header
Has Content-Signal (robots.txt or HTTP headers) (0/100)
&#10003; robots.txt &#10003; HTTP header &#10007; Policy

Structured Data

Has Schema.org / JSON-LD (50/100)

JSON-LD found but basic types: WebSite

Has Open Graph tags (100/100)

All OG tags present

Has meta description (100/100)

Meta description: 130 chars

Has canonical URL (100/100)

Canonical URL present

Has lang attribute (100/100)

lang="es"

Accessibility

Content available without JavaScript (100/100)

Content available without JavaScript

Reasonable page size (100/100)

Page size: 27KB

Content appears early in HTML (100/100)

Main content starts at 18% of HTML

{
  "url": "https://polenmadrid.com/",
  "timestamp": 1771446419335,
  "fetch": {
    "mode": "simple",
    "timeMs": 123,
    "htmlSizeBytes": 27899,
    "supportsMarkdown": false,
    "markdownAgents": {
      "contentNegotiation": false,
      "mdUrl": {
        "found": false,
        "url": null
      },
      "linkTag": {
        "found": false,
        "url": null
      },
      "linkHeader": {
        "found": false,
        "url": null
      },
      "responseHeaders": {
        "contentSignal": null,
        "xMarkdownTokens": null,
        "vary": null
      },
      "frontmatter": {
        "present": false,
        "fields": [],
        "level": "none"
      },
      "level": "none"
    },
    "statusCode": 200
  },
  "extraction": {
    "title": "Niveles de polen hoy — PolenMadrid",
    "excerpt": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
    "byline": null,
    "siteName": "PolenMadrid",
    "lang": "es",
    "contentLength": 482,
    "metadata": {
      "description": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
      "ogTitle": "Niveles de polen hoy — PolenMadrid",
      "ogDescription": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
      "ogImage": "https://polenmadrid.com/assets/img/og-image.png",
      "ogType": "website",
      "canonical": "https://polenmadrid.com/",
      "lang": "es",
      "schemas": [
        {
          "@context": "https://schema.org",
          "@type": "WebSite",
          "name": "PolenMadrid",
          "url": "https://polenmadrid.com/",
          "description": "Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).",
          "inLanguage": [
            "es",
            "en",
            "fr",
            "it"
          ]
        }
      ],
      "robotsMeta": null,
      "author": null,
      "generator": null,
      "markdownAlternateHref": null
    }
  },
  "markdown": "Predicción\n\n## Estimación de niveles de polen\n\nEstimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.\n\n### Temporada actual\n\nCupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●\n\n**Otros alérgenos principales**\n\nOlmos Muy alto 174 granos/m³ ●●●\n\nFresno Alto 90 granos/m³ ●●●\n\nPopulus Bajo 7 granos/m³ ●●○\n\nEstas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.\n",
  "fullPageMarkdown": "Niveles de polen hoy — PolenMadrid\n\n[🌼 PolenMadrid](https://polenmadrid.com/)\n\nEspañol English Français Italiano\n\n# Niveles de polen en Madrid\n\nÚltimo dato oficial: Lunes, 16 de febrero de 2026 Última estimación: Miércoles, 18 de febrero de 2026\n\nPredicción## Estimación de niveles de polen\n\nEstimaciones para el Miércoles, 18 de febrero de 2026 basadas en datos históricos de los últimos 5 años y tendencia reciente.\n\n### Temporada actual\n\nCupresáceas/Taxáceas Muy alto 2.516 granos/m³ ●●●\n\n**Otros alérgenos principales**\n\nOlmos Muy alto 174 granos/m³ ●●●\n\nFresno Alto 90 granos/m³ ●●●\n\nPopulus Bajo 7 granos/m³ ●●○\n\nEstas estimaciones son orientativas y se actualizarán automáticamente cuando lleguen los datos oficiales.\n\n## Temporada actual\n\nEstos alérgenos están en temporada alta ahora mismo, una media de todas las estaciones:\n\n[Cupresáceas/Taxáceas Muy alto 2.659 granos/m³](https://polenmadrid.com/tipo/cupresaceas-taxaceas)\n\n**Otros alérgenos principales**\n\n[Olmos Muy alto 288 granos/m³](https://polenmadrid.com/tipo/olmos) [Fresno Muy alto 121 granos/m³](https://polenmadrid.com/tipo/fresno) [Moreras Medio 23 granos/m³](https://polenmadrid.com/tipo/moreras)\n\nValor máximo entre todas las estaciones del último día con datos oficiales.\n\n## Estaciones de detección\n\n[\n\nAlcalá de Henares Muy alto\n\nEste\n\nCupresáceas/Taxáceas 2.659 ↑\n\nOlmos 288 ↑\n\nFresno 39 ↑\n\n](https://polenmadrid.com/estacion/alca)[\n\nAlcobendas Medio\n\nNorte\n\nFresno 32 ↑\n\nOlmos 31 ↑\n\nCupresáceas/Taxáceas 8 ↑\n\n](https://polenmadrid.com/estacion/alco)[\n\nAranjuez Muy alto\n\nSur\n\nOlmos 112 ↑\n\nCupresáceas/Taxáceas 99 ↑\n\nUrticáceas 11 ↑\n\n](https://polenmadrid.com/estacion/aran)[\n\nCollado Villalba Muy alto\n\nSierra\n\nFresno 121 ↑\n\nCupresáceas/Taxáceas 2 ↑\n\nPNI 1 \\=\n\n](https://polenmadrid.com/estacion/vill)[\n\nCoslada Muy alto\n\nEste\n\nCupresáceas/Taxáceas 298 ↑\n\nOlmos 79 ↑\n\nFresno 25 ↑\n\n](https://polenmadrid.com/estacion/cosl)[\n\nGetafe Muy alto\n\nSur\n\nCupresáceas/Taxáceas 303 ↑\n\nOlmos 22 ↑\n\nFresno 14 ↑\n\n](https://polenmadrid.com/estacion/geta)[\n\nLas Rozas Alto\n\nOeste\n\nCupresáceas/Taxáceas 156 ↑\n\nFresno 32 ↑\n\nOlmos 10 ↑\n\n](https://polenmadrid.com/estacion/roza)[\n\nLeganés Medio\n\nSur\n\nMoreras 23 ↑\n\nPinos 15 ↑\n\nQuercus 14 ↑\n\n](https://polenmadrid.com/estacion/lega)[\n\nMadrid-Arganzuela Muy alto\n\nCapital\n\nCupresáceas/Taxáceas 1.069 ↑\n\nOlmos 162 ↑\n\nFresno 44 ↑\n\n](https://polenmadrid.com/estacion/aytm)[\n\nMadrid-Barrio Salamanca Alto\n\nCapital\n\nCupresáceas/Taxáceas 97 ↑\n\nFresno 70 ↑\n\nOlmos 41 ↑\n\n](https://polenmadrid.com/estacion/aler)[\n\nMadrid-Ciudad Universitaria Muy alto\n\nCapital\n\nCupresáceas/Taxáceas 590 ↑\n\nOlmos 111 ↑\n\nFresno 45 ↑\n\n](https://polenmadrid.com/estacion/facf)\n\n↑ sube · ↓ baja · = sin cambios — respecto al día anterior\n",
  "markdownStats": {
    "images": 0,
    "links": 0,
    "tables": 0,
    "codeBlocks": 0,
    "headings": 2
  },
  "tokens": {
    "htmlTokens": 8329,
    "markdownTokens": 158,
    "reduction": 8171,
    "reductionPercent": 98
  },
  "score": {
    "score": 69,
    "grade": "C",
    "dimensions": {
      "semanticHtml": {
        "score": 86,
        "weight": 20,
        "grade": "B",
        "checks": {
          "uses_article_or_main": {
            "score": 100,
            "weight": 20,
            "details": "Has <main>"
          },
          "proper_heading_hierarchy": {
            "score": 100,
            "weight": 25,
            "details": "Clean heading hierarchy"
          },
          "semantic_elements": {
            "score": 28,
            "weight": 20,
            "details": "8 semantic elements, 88 divs (ratio: 8%)"
          },
          "meaningful_alt_texts": {
            "score": 100,
            "weight": 15,
            "details": "No images found"
          },
          "low_div_nesting": {
            "score": 100,
            "weight": 20,
            "details": "Avg div depth: 1.6, max: 3"
          }
        }
      },
      "contentEfficiency": {
        "score": 63,
        "weight": 25,
        "grade": "C",
        "checks": {
          "token_reduction_ratio": {
            "score": 100,
            "weight": 40,
            "details": "98% token reduction (HTML→Markdown)"
          },
          "content_to_noise_ratio": {
            "score": 0,
            "weight": 30,
            "details": "Content ratio: 1.7% (482 content chars / 27899 HTML bytes)"
          },
          "minimal_inline_styles": {
            "score": 50,
            "weight": 15,
            "details": "11/458 elements with inline styles (2.4%)"
          },
          "reasonable_page_weight": {
            "score": 100,
            "weight": 15,
            "details": "HTML size: 27KB"
          }
        }
      },
      "aiDiscoverability": {
        "score": 35,
        "weight": 25,
        "grade": "F",
        "checks": {
          "has_llms_txt": {
            "score": 0,
            "weight": 20,
            "details": "No llms.txt found"
          },
          "has_robots_txt": {
            "score": 100,
            "weight": 10,
            "details": "robots.txt exists"
          },
          "robots_allows_ai_bots": {
            "score": 100,
            "weight": 15,
            "details": "All major AI bots allowed"
          },
          "has_sitemap": {
            "score": 100,
            "weight": 10,
            "details": "Sitemap found"
          },
          "supports_markdown_negotiation": {
            "score": 0,
            "weight": 25,
            "details": "No Markdown for Agents support detected"
          },
          "has_content_signals": {
            "score": 0,
            "weight": 20,
            "details": "No Content-Signal found (robots.txt or HTTP headers)"
          }
        }
      },
      "structuredData": {
        "score": 85,
        "weight": 15,
        "grade": "B",
        "checks": {
          "has_schema_org": {
            "score": 50,
            "weight": 30,
            "details": "JSON-LD found but basic types: WebSite"
          },
          "has_open_graph": {
            "score": 100,
            "weight": 25,
            "details": "All OG tags present"
          },
          "has_meta_description": {
            "score": 100,
            "weight": 20,
            "details": "Meta description: 130 chars"
          },
          "has_canonical_url": {
            "score": 100,
            "weight": 15,
            "details": "Canonical URL present"
          },
          "has_lang_attribute": {
            "score": 100,
            "weight": 10,
            "details": "lang=\"es\""
          }
        }
      },
      "accessibility": {
        "score": 100,
        "weight": 15,
        "grade": "A",
        "checks": {
          "content_without_js": {
            "score": 100,
            "weight": 40,
            "details": "Content available without JavaScript"
          },
          "reasonable_page_size": {
            "score": 100,
            "weight": 30,
            "details": "Page size: 27KB"
          },
          "fast_content_position": {
            "score": 100,
            "weight": 30,
            "details": "Main content starts at 18% of HTML"
          }
        }
      }
    }
  },
  "recommendations": [
    {
      "id": "add_llms_txt",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_llms_txt.title",
      "descriptionKey": "rec.add_llms_txt.description",
      "howToKey": "rec.add_llms_txt.howto",
      "effort": "quick-win",
      "estimatedImpact": 10,
      "checkScore": 0,
      "checkDetails": "No llms.txt found"
    },
    {
      "id": "improve_content_ratio",
      "priority": "critical",
      "category": "contentEfficiency",
      "titleKey": "rec.improve_content_ratio.title",
      "descriptionKey": "rec.improve_content_ratio.description",
      "howToKey": "rec.improve_content_ratio.howto",
      "effort": "moderate",
      "estimatedImpact": 6,
      "checkScore": 0,
      "checkDetails": "Content ratio: 1.7% (482 content chars / 27899 HTML bytes)"
    },
    {
      "id": "add_markdown_negotiation",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_markdown_negotiation.title",
      "descriptionKey": "rec.add_markdown_negotiation.description",
      "howToKey": "rec.add_markdown_negotiation.howto",
      "effort": "significant",
      "estimatedImpact": 6,
      "checkScore": 0,
      "checkDetails": "No Markdown for Agents support detected"
    },
    {
      "id": "add_content_signals",
      "priority": "critical",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_content_signals.title",
      "descriptionKey": "rec.add_content_signals.description",
      "howToKey": "rec.add_content_signals.howto",
      "effort": "quick-win",
      "estimatedImpact": 5,
      "checkScore": 0,
      "checkDetails": "No Content-Signal found (robots.txt or HTTP headers)"
    },
    {
      "id": "add_semantic_elements",
      "priority": "high",
      "category": "semanticHtml",
      "titleKey": "rec.add_semantic_elements.title",
      "descriptionKey": "rec.add_semantic_elements.description",
      "howToKey": "rec.add_semantic_elements.howto",
      "effort": "moderate",
      "estimatedImpact": 5,
      "checkScore": 28,
      "checkDetails": "8 semantic elements, 88 divs (ratio: 8%)"
    },
    {
      "id": "remove_inline_styles",
      "priority": "medium",
      "category": "contentEfficiency",
      "titleKey": "rec.remove_inline_styles.title",
      "descriptionKey": "rec.remove_inline_styles.description",
      "howToKey": "rec.remove_inline_styles.howto",
      "effort": "moderate",
      "estimatedImpact": 3,
      "checkScore": 50,
      "checkDetails": "11/458 elements with inline styles (2.4%)"
    }
  ],
  "llmsTxtPreview": "# PolenMadrid\n\n> Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).\n\n## Main\n- [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red…\n- [Mapa](https://polenmadrid.com/mapa)\n- [Histórico](https://polenmadrid.com/historico)\n- [Calendario](https://polenmadrid.com/calendario)\n- [Alertas](https://polenmadrid.com/alertas)\n- [Acerca de](https://polenmadrid.com/acerca)\n- [Ayuda](https://polenmadrid.com/ayuda)\n\n## Legal\n- [Aviso legal y privacidad](https://polenmadrid.com/legal)\n\n",
  "llmsTxtExisting": null,
  "snippets": [
    {
      "id": "add_llms_txt",
      "title": "Create /llms.txt",
      "description": "Upload this file to your web root. It tells AI agents what your site is about and which pages matter.",
      "language": "markdown",
      "code": "# PolenMadrid\n\n> Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red Palinocam).\n\n## Main\n- [Niveles de polen hoy — PolenMadrid](https://polenmadrid.com/): Información actualizada sobre niveles de polen y alergias en la Comunidad de Madrid. Datos de la Red Palinológica (Red…\n- [Mapa](https://polenmadrid.com/mapa)\n- [Histórico](https://polenmadrid.com/historico)\n- [Calendario](https://polenmadrid.com/calendario)\n- [Alertas](https://polenmadrid.com/alertas)\n- [Acerca de](https://polenmadrid.com/acerca)\n- [Ayuda](https://polenmadrid.com/ayuda)\n\n## Legal\n- [Aviso legal y privacidad](https://polenmadrid.com/legal)\n\n",
      "filename": "/llms.txt"
    },
    {
      "id": "add_content_signals",
      "title": "Add Content-Signal directives",
      "description": "Content-Signal tells AI agents how they may use your content. The recommended location is robots.txt, but you can also add it as an HTTP header.",
      "language": "txt",
      "code": "# robots.txt (recommended, canonical location):\nUser-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no\n\n# Nginx — add to server block (optional, for HTTP header):\n# add_header Content-Signal \"search=yes, ai-input=yes, ai-train=no\" always;\n\n# Apache — add to .htaccess (optional, for HTTP header):\n# Header set Content-Signal \"search=yes, ai-input=yes, ai-train=no\"",
      "filename": "/robots.txt"
    },
    {
      "id": "add_markdown_negotiation",
      "title": "Support Markdown for Agents",
      "description": "Implement one or more of the 4 Markdown for Agents mechanisms to let AI agents request content in markdown format.",
      "language": "html",
      "code": "<!-- 1. Content negotiation: respond to Accept: text/markdown -->\n<!-- In your server/framework, check the Accept header and return markdown -->\n<!-- with Content-Type: text/markdown -->\n\n<!-- 2. Serve .md URLs (e.g., /about.md alongside /about) -->\n<!-- Generate static .md files or handle .md routes in your app -->\n\n<!-- 3. Add <link> tag in your HTML <head>: -->\n<link rel=\"alternate\" type=\"text/markdown\" href=\"/page.md\">\n\n<!-- 4. Add Link HTTP header on HTML responses: -->\n<!-- Link: </page.md>; rel=\"alternate\"; type=\"text/markdown\" -->\n\n<!-- Best practice: include Vary: Accept and X-Markdown-Tokens headers -->\n<!-- on markdown responses -->",
      "filename": "<head> + server config"
    }
  ]
}

Use our API to get this programmatically (coming soon)

This JSON is for internal use — unlike the Markdown and llms.txt files, it's not meant to be uploaded to your site. Save it as a baseline to track your score over time, share it with your dev team, or integrate it into your CI/CD pipeline.

Share your results

Twitter LinkedIn

Coming soon: Full Domain Analysis

Crawl your entire domain, generate llms.txt, and monitor your AI-readiness score over time. Join the waitlist to be notified.

You're on the list! We'll notify you when it launches.