Verifiziertes AgentReady.md-Zertifikat
Ausgestellt am sig: 05127d6423e28e58 Verifizieren →

Analysierte URL

https://carrero.es

Weitere URL analysieren

KI-Ready Score

69 / C

Befriedigend

von 100

Token-Einsparung

HTML-Tokens 35.005
Markdown-Tokens 149
Einsparung 100%

Score-Aufschlüsselung

Semantisches HTML 72/100
Inhaltseffizienz 63/100
KI-Auffindbarkeit 55/100
Strukturierte Daten 92/100
Zugänglichkeit 78/100

Emerging Protocols

0 von 3 erkannt

Well-known-Endpunkte, nach denen KI-Agenten suchen. Erkannt bedeutet, dass ein Agent Ihren Dienst automatisch finden und verbinden kann.

  • OAuth Discovery RFC 8414
    /.well-known/oauth-authorization-server
  • MCP Server Card Anthropic
    /.well-known/mcp.json
  • A2A Agent Card Google
    /.well-known/agent.json

Ihre Seite hat ein niedriges Verhältnis von tatsächlichem Inhalt zum gesamten HTML. Ein Großteil des Seitengewichts besteht aus Markup, Skripten oder Styles statt Inhalt.

So implementieren Sie es

Verlagern Sie CSS in externe Stylesheets, entfernen Sie Inline-Styles, minimieren Sie JavaScript und stellen Sie sicher, dass sich das HTML auf die Inhaltsstruktur konzentriert.

Ihre Website unterstützt kein Markdown for Agents. Dieser Cloudflare-Standard ermöglicht KI-Agenten, Inhalte im Markdown-Format anzufordern und reduziert den Token-Verbrauch um ~80%.

So implementieren Sie es

Implementieren Sie eines oder mehrere: (1) Auf Accept: text/markdown mit Markdown-Inhalt antworten. (2) .md-URLs bereitstellen (z.B. /seite.md). (3) <link rel="alternate" type="text/markdown">-Tags hinzufügen. (4) Link-HTTP-Header für Markdown-Erkennung hinzufügen.

{\n res.setHeader('Vary', 'Accept');\n res.setHeader('Link', '; rel=\"alternate\"; type=\"text/markdown\"');\n if ((req.headers.accept || '').includes('text/markdown')) {\n res.type('text/markdown; charset=utf-8');\n return res.send(renderMarkdown('page'));\n }\n res.render('page');\n});"},{"id":"fastify","label":"Fastify","language":"javascript","filename":"server.js","code":"// Mechanisms 1 + 4: content negotiation + Link header\nfastify.get('/page', async (req, reply) => {\n reply.header('Vary', 'Accept');\n reply.header('Link', '; rel=\"alternate\"; type=\"text/markdown\"');\n if ((req.headers.accept || '').includes('text/markdown')) {\n return reply.type('text/markdown; charset=utf-8').send(renderMarkdown('page'));\n }\n return reply.view('/page.ejs');\n});"},{"id":"nextjs","label":"Next.js","language":"typescript","filename":"app/page/route.ts","code":"// Next.js App Router — Route Handler returning Markdown\nimport { NextRequest } from 'next/server';\nimport { renderMarkdown } from '@/lib/md';\nexport async function GET(req: NextRequest) {\n const accept = req.headers.get('accept') || '';\n if (accept.includes('text/markdown')) {\n return new Response(await renderMarkdown('page'), {\n headers: {\n 'Content-Type': 'text/markdown; charset=utf-8',\n 'Vary': 'Accept',\n },\n });\n }\n // Fall through to the page component\n return new Response(null, { status: 404 });\n}"},{"id":"wordpress","label":"WordPress","language":"php","filename":"functions.php","code":"post_content));\n exit;\n});"},{"id":"static","label":"Hugo / Jekyll / Astro","language":"txt","filename":"static/page.md","code":"# Mechanism 2: serve .md alongside .html\n# Hugo: place page.md in /static/ — built unchanged\n# Jekyll: drop page.md in /assets/ — copied as-is\n# Astro: src/pages/page.md.ts that exports a GET returning markdown\n\n# Then advertise with mechanism 3 in :\n# "}] }'>

Keine Content-Signal-Direktiven gefunden. Diese teilen KI-Agenten mit, wie sie Ihre Inhalte verwenden dürfen (Suchindexierung, KI-Eingabe, Trainingsdaten). Der empfohlene Ort ist robots.txt.

So implementieren Sie es

Fügen Sie Content-Signal zu Ihrer robots.txt hinzu: User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no. Sie können es auch als HTTP-Header bei Markdown-Antworten hinzufügen.

{\n res.setHeader('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n next();\n});\n\n// Fastify\nfastify.addHook('onSend', (request, reply, payload, done) => {\n reply.header('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n done();\n});"}] }'>

Ihre Seite stützt sich stark auf <div>-Elemente. Semantische Elemente wie <section>, <nav>, <header>, <footer> und <aside> bieten eine sinnvolle Struktur für KI-Agenten.

So implementieren Sie es

Ersetzen Sie generische <div>-Container durch passende semantische Elemente. Verwenden Sie <section> für thematische Gruppen, <nav> für Navigation, <header>/<footer> für Seiten-/Abschnittskopf und -fußzeilen.

Der Hauptinhalt erscheint spät im HTML-Dokument. KI-Agenten gewichten Inhalte, die früh erscheinen, möglicherweise höher.

So implementieren Sie es

Strukturieren Sie Ihr HTML so um, dass <main>- oder <article>-Inhalt vor Seitenleisten und ergänzenden Inhalten erscheint.

Ihre Überschriftenstruktur hat Probleme (übersprungene Ebenen oder mehrere h1-Tags). Eine saubere Hierarchie hilft KI-Agenten, die Inhaltsorganisation zu verstehen.

So implementieren Sie es

Stellen Sie sicher, dass Sie genau ein <h1> pro Seite haben und die Überschriften einer sequentiellen Reihenfolge folgen: h1 > h2 > h3. Überspringen Sie keine Ebenen (z.B. h1 direkt zu h3).

Fehlende oder unvollständige Open-Graph-Tags. OG-Tags helfen KI-Agenten (und sozialen Plattformen), Titel, Beschreibung und Bild Ihrer Seite zu verstehen.

So implementieren Sie es

Fügen Sie og:title, og:description und og:image Meta-Tags zum <head> Ihrer Seite hinzu.

post_content), 30);\n $image = get_the_post_thumbnail_url($post, 'large') ?: 'https://yoursite.com/og-image.jpg';\n $url = get_permalink($post);\n printf('' . \"\\n\", esc_attr($title));\n printf('' . \"\\n\", esc_attr($desc));\n printf('' . \"\\n\", esc_url($image));\n printf('' . \"\\n\", esc_url($url));\n echo '' . \"\\n\";\n}, 5);"},{"id":"nextjs","label":"Next.js","language":"typescript","filename":"app/page.tsx","code":"// Next.js App Router — Metadata API\nimport type { Metadata } from 'next';\n\nexport const metadata: Metadata = {\n title: \"Carrero.es es el sitio personal de David Carrero Fernández-Baillo\",\n description: \"Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\",\n openGraph: {\n title: \"Carrero.es es el sitio personal de David Carrero Fernández-Baillo\",\n description: \"Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\",\n url: \"https://carrero.es\",\n images: [\"https://yoursite.com/og-image.jpg\"],\n type: 'website',\n },\n};"}] }'>

Viele Elemente haben Inline-Style-Attribute. Diese erzeugen Rauschen für KI-Agenten bei der Inhaltsextraktion.

So implementieren Sie es

Verlagern Sie alle Inline-Styles in CSS-Klassen in Ihrem Stylesheet. Verwenden Sie Utility-CSS-Frameworks wie Tailwind, wenn Sie viele individuelle Styles benötigen.

Markdown-Tokens: 149
Último Artículo

## [La soberanía digital europea es un espejismo mientras sigamos fragmentados](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)

14 de abril de 2026

Hace más de un año, Benjamin Hermann, CEO de Zoi, publicó un artículo demoledor en LinkedIN titulado «Leave the Room». En él, sostenía que cualquiera que afirme tener una alternativa …

[Leer más](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)
Carrero.es es el sitio personal de David Carrero Fernández-Baillo                                               [Saltar al contenido](https://carrero.es/#content "Saltar al contenido")

Último Artículo

## [La soberanía digital europea es un espejismo mientras sigamos fragmentados](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)

14 de abril de 2026

Hace más de un año, Benjamin Hermann, CEO de Zoi, publicó un artículo demoledor en LinkedIN titulado «Leave the Room». En él, sostenía que cualquiera que afirme tener una alternativa …

[Leer más](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)

### [¿Hay que rediseñar las CLI para agentes de IA? Una reflexión a partir de Justin Poehnelt](https://carrero.es/redisenar-cli-para-agentes-ia/)

18 de abril de 2026

[Ver artículo](https://carrero.es/redisenar-cli-para-agentes-ia/)

### [Ha llegado la hora de pensar a lo grande con la Inteligencia Artificial](https://carrero.es/ha-llegado-la-hora-de-pensar-a-lo-grande-con-la-inteligencia-artificial/)

18 de abril de 2026

[Ver artículo](https://carrero.es/ha-llegado-la-hora-de-pensar-a-lo-grande-con-la-inteligencia-artificial/)

### [Volver a programar después de décadas: cómo Claude Code y la Inteligencia Artificial han cambiado mi forma de construir](https://carrero.es/volver-a-programar-despues-decadas-claude-code/)

18 de abril de 2026

[Ver artículo](https://carrero.es/volver-a-programar-despues-decadas-claude-code/)

### [Cómo modernicé Bitadir.com: de PHP 4/5 a PHP 8.4 sin reescribirlo desde cero (y por qué merecía la pena)](https://carrero.es/como-modernice-bitadir-com-php-4-a-php-8-sin-reescribirlo-desde-cero/)

18 de abril de 2026

[Ver artículo](https://carrero.es/como-modernice-bitadir-com-php-4-a-php-8-sin-reescribirlo-desde-cero/)

### [Cuando la bandeja de entrada reescribe tu email: la Inteligencia Artificial y la nueva era de la “entregabilidad editorial”](https://carrero.es/cuando-bandeja-entrada-reescribe-tu-email/)

18 de abril de 2026

[Ver artículo](https://carrero.es/cuando-bandeja-entrada-reescribe-tu-email/)

### [Tim Cook y las últimas lecciones de Steve Jobs: foco, equipos pequeños y el arte de cambiar a tiempo](https://carrero.es/tim-cook-y-ultimas-lecciones-steve-jobs/)

18 de abril de 2026

[Ver artículo](https://carrero.es/tim-cook-y-ultimas-lecciones-steve-jobs/)

1[2](https://carrero.es/?query-22506824-page=2)[3](https://carrero.es/?query-22506824-page=3)…[519](https://carrero.es/?query-22506824-page=519) [Siguente](https://carrero.es/?query-22506824-page=2)

Buscar:

Laden Sie diese Datei als /index.md auf Ihren Server hoch, damit KI-Agenten auf eine saubere Version Ihrer Seite zugreifen können. Sie können auch die Accept: text/markdown-Inhaltsverhandlung konfigurieren, um sie automatisch auszuliefern.

Unsere Empfehlung

llms.txt herunterladen
# Carrero.es

> Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.

## Main
- [Carrero.es es el sitio personal de David Carrero Fernández-Baillo](https://carrero.es): Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emp…
- [Carrero](https://carrero.es/)
- [Mis inversiones BA](https://carrero.es/inversiones/)
- [Newsletter](https://carrero.es/boletin/)
- [Suscribete al RSS](https://carrero.es/feed)
- [Contacto](https://carrero.es/contactar/)

Vollständige llms.txt erfordert eine domainweite Analyse (kommt bald)

Laden Sie diese Datei als https://carrero.es/llms.txt im Stammverzeichnis Ihrer Domain hoch. KI-Agenten wie ChatGPT, Claude und Perplexity prüfen diese Datei, um Ihre Website-Struktur zu verstehen.

Diese Website hat bereits eine llms.txt-Datei.

Gültiges Format
# Carrero.es

> Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.

## Main
- [Carrero.es es el sitio personal de David Carrero Fernández-Baillo](https://carrero.es/): Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emp…
- [Mis inversiones BA](https://carrero.es/inversiones/)
- [Newsletter](https://carrero.es/boletin/)
- [Suscribete al RSS](https://carrero.es/feed)
- [Contacto](https://carrero.es/contactar/)

Semantisches HTML

Verwendet article- oder main-Element (100/100)

Has both <article> and <main>

Korrekte Überschriftenhierarchie (70/100)

no <h1>

Verwendet semantische HTML-Elemente (40/100)

11 semantic elements, 81 divs (ratio: 12%)

Aussagekräftige Bild-Alt-Texte (100/100)

No images found

Geringe div-Verschachtelungstiefe (59/100)

Avg div depth: 9.1, max: 14

Inhaltseffizienz

Gutes Token-Reduktionsverhältnis (100/100)

100% token reduction (HTML→Markdown)

Gutes Inhalt-zu-Rausch-Verhältnis (0/100)

Content ratio: 0.3% (323 content chars / 93049 HTML bytes)

Minimale Inline-Styles (50/100)

7/278 elements with inline styles (2.5%)

Angemessenes Seitengewicht (100/100)

HTML size: 91KB

KI-Auffindbarkeit

Hat llms.txt-Datei (100/100)

llms.txt exists and is valid

Hat robots.txt-Datei (100/100)

robots.txt exists

robots.txt erlaubt KI-Bots (100/100)

All major AI bots allowed

Hat sitemap.xml (100/100)

Sitemap found

Markdown for Agents Unterstützung (0/100)
&#10007; Accept: text/markdown &#10007; .md URL &#10007; <link> tag &#10007; Link header
Hat Content-Signal (robots.txt oder HTTP-Header) (0/100)
&#10003; robots.txt &#10003; HTTP header &#10007; Policy

Strukturierte Daten

Hat Schema.org / JSON-LD (100/100)

JSON-LD found: Person,Organization, WebSite, WebPage, Person, Article

Hat Open-Graph-Tags (67/100)

2/3 OG tags present

Hat Meta-Beschreibung (100/100)

Meta description: 155 chars

Hat kanonische URL (100/100)

Canonical URL present

Hat lang-Attribut (100/100)

lang="es"

Zugänglichkeit

Inhalt ohne JavaScript verfügbar (100/100)

Content available without JavaScript

Angemessene Seitengröße (100/100)

Page size: 91KB

Inhalt erscheint früh im HTML (25/100)

Main content starts at 76% of HTML

{
  "url": "https://carrero.es",
  "timestamp": 1776939227033,
  "fetch": {
    "mode": "simple",
    "timeMs": 141,
    "htmlSizeBytes": 93049,
    "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": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo",
    "excerpt": "Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.",
    "byline": null,
    "siteName": "Carrero.es",
    "lang": "es",
    "contentLength": 323,
    "metadata": {
      "description": "Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.",
      "ogTitle": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo",
      "ogDescription": "Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.",
      "ogImage": null,
      "ogType": "website",
      "canonical": "https://carrero.es/",
      "lang": "es",
      "schemas": [
        {
          "@type": [
            "Person",
            "Organization"
          ],
          "@id": "https://carrero.es/#person",
          "name": "David Carrero Fdez-Baillo",
          "sameAs": [
            "https://www.facebook.com/davidcarrero",
            "https://twitter.com/carrero"
          ]
        },
        {
          "@type": "WebSite",
          "@id": "https://carrero.es/#website",
          "url": "https://carrero.es",
          "name": "Carrero.es",
          "alternateName": "David Carrero",
          "publisher": {
            "@id": "https://carrero.es/#person"
          },
          "inLanguage": "es",
          "potentialAction": {
            "@type": "SearchAction",
            "target": "https://carrero.es/?s={search_term_string}",
            "query-input": "required name=search_term_string"
          }
        },
        {
          "@type": "WebPage",
          "@id": "https://carrero.es/#webpage",
          "url": "https://carrero.es/",
          "name": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo",
          "datePublished": "2019-11-18T11:53:13+01:00",
          "dateModified": "2024-01-25T22:37:40+01:00",
          "about": {
            "@id": "https://carrero.es/#person"
          },
          "isPartOf": {
            "@id": "https://carrero.es/#website"
          },
          "inLanguage": "es"
        },
        {
          "@type": "Person",
          "@id": "https://carrero.es/author/admin/",
          "name": "David Carrero Fdez-Baillo",
          "url": "https://carrero.es/author/admin/",
          "image": {
            "@type": "ImageObject",
            "@id": "https://secure.gravatar.com/avatar/bfdfaf65290a2ec03899e508f3d59765f61efaa84e7b7a4b3c06aaaa06aa0582?s=96&amp;d=mm&amp;r=g",
            "url": "https://secure.gravatar.com/avatar/bfdfaf65290a2ec03899e508f3d59765f61efaa84e7b7a4b3c06aaaa06aa0582?s=96&amp;d=mm&amp;r=g",
            "caption": "David Carrero Fdez-Baillo",
            "inLanguage": "es"
          },
          "sameAs": [
            "http://davidcarrero.com",
            "http://www.facebook.com/davidcarrero",
            "https://twitter.com/carrero"
          ]
        },
        {
          "@type": "Article",
          "headline": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo",
          "keywords": "Carrero",
          "datePublished": "2019-11-18T11:53:13+01:00",
          "dateModified": "2024-01-25T22:37:40+01:00",
          "author": {
            "@id": "https://carrero.es/author/admin/",
            "name": "David Carrero Fdez-Baillo"
          },
          "publisher": {
            "@id": "https://carrero.es/#person"
          },
          "description": "Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.",
          "name": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo",
          "@id": "https://carrero.es/#richSnippet",
          "isPartOf": {
            "@id": "https://carrero.es/#webpage"
          },
          "inLanguage": "es",
          "mainEntityOfPage": {
            "@id": "https://carrero.es/#webpage"
          }
        }
      ],
      "robotsMeta": "follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large",
      "author": null,
      "generator": null,
      "markdownAlternateHref": null
    }
  },
  "markdown": "Último Artículo\n\n## [La soberanía digital europea es un espejismo mientras sigamos fragmentados](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)\n\n14 de abril de 2026\n\nHace más de un año, Benjamin Hermann, CEO de Zoi, publicó un artículo demoledor en LinkedIN titulado «Leave the Room». En él, sostenía que cualquiera que afirme tener una alternativa …\n\n[Leer más](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)\n",
  "fullPageMarkdown": "Carrero.es es el sitio personal de David Carrero Fernández-Baillo                                               [Saltar al contenido](https://carrero.es/#content \"Saltar al contenido\")\n\nÚltimo Artículo\n\n## [La soberanía digital europea es un espejismo mientras sigamos fragmentados](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)\n\n14 de abril de 2026\n\nHace más de un año, Benjamin Hermann, CEO de Zoi, publicó un artículo demoledor en LinkedIN titulado «Leave the Room». En él, sostenía que cualquiera que afirme tener una alternativa …\n\n[Leer más](https://carrero.es/soberania-digital-europea-espejismo-mientras-sigamos-fragmentados/)\n\n### [¿Hay que rediseñar las CLI para agentes de IA? Una reflexión a partir de Justin Poehnelt](https://carrero.es/redisenar-cli-para-agentes-ia/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/redisenar-cli-para-agentes-ia/)\n\n### [Ha llegado la hora de pensar a lo grande con la Inteligencia Artificial](https://carrero.es/ha-llegado-la-hora-de-pensar-a-lo-grande-con-la-inteligencia-artificial/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/ha-llegado-la-hora-de-pensar-a-lo-grande-con-la-inteligencia-artificial/)\n\n### [Volver a programar después de décadas: cómo Claude Code y la Inteligencia Artificial han cambiado mi forma de construir](https://carrero.es/volver-a-programar-despues-decadas-claude-code/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/volver-a-programar-despues-decadas-claude-code/)\n\n### [Cómo modernicé Bitadir.com: de PHP 4/5 a PHP 8.4 sin reescribirlo desde cero (y por qué merecía la pena)](https://carrero.es/como-modernice-bitadir-com-php-4-a-php-8-sin-reescribirlo-desde-cero/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/como-modernice-bitadir-com-php-4-a-php-8-sin-reescribirlo-desde-cero/)\n\n### [Cuando la bandeja de entrada reescribe tu email: la Inteligencia Artificial y la nueva era de la “entregabilidad editorial”](https://carrero.es/cuando-bandeja-entrada-reescribe-tu-email/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/cuando-bandeja-entrada-reescribe-tu-email/)\n\n### [Tim Cook y las últimas lecciones de Steve Jobs: foco, equipos pequeños y el arte de cambiar a tiempo](https://carrero.es/tim-cook-y-ultimas-lecciones-steve-jobs/)\n\n18 de abril de 2026\n\n[Ver artículo](https://carrero.es/tim-cook-y-ultimas-lecciones-steve-jobs/)\n\n1[2](https://carrero.es/?query-22506824-page=2)[3](https://carrero.es/?query-22506824-page=3)…[519](https://carrero.es/?query-22506824-page=519) [Siguente](https://carrero.es/?query-22506824-page=2)\n\nBuscar:\n",
  "markdownStats": {
    "images": 0,
    "links": 2,
    "tables": 0,
    "codeBlocks": 0,
    "headings": 1
  },
  "tokens": {
    "htmlTokens": 35005,
    "markdownTokens": 149,
    "reduction": 34856,
    "reductionPercent": 100
  },
  "score": {
    "score": 69,
    "grade": "C",
    "dimensions": {
      "semanticHtml": {
        "score": 72,
        "weight": 20,
        "grade": "C",
        "checks": {
          "uses_article_or_main": {
            "score": 100,
            "weight": 20,
            "details": "Has both <article> and <main>"
          },
          "proper_heading_hierarchy": {
            "score": 70,
            "weight": 25,
            "details": "no <h1>"
          },
          "semantic_elements": {
            "score": 40,
            "weight": 20,
            "details": "11 semantic elements, 81 divs (ratio: 12%)"
          },
          "meaningful_alt_texts": {
            "score": 100,
            "weight": 15,
            "details": "No images found"
          },
          "low_div_nesting": {
            "score": 59,
            "weight": 20,
            "details": "Avg div depth: 9.1, max: 14"
          }
        }
      },
      "contentEfficiency": {
        "score": 63,
        "weight": 25,
        "grade": "C",
        "checks": {
          "token_reduction_ratio": {
            "score": 100,
            "weight": 40,
            "details": "100% token reduction (HTML→Markdown)"
          },
          "content_to_noise_ratio": {
            "score": 0,
            "weight": 30,
            "details": "Content ratio: 0.3% (323 content chars / 93049 HTML bytes)"
          },
          "minimal_inline_styles": {
            "score": 50,
            "weight": 15,
            "details": "7/278 elements with inline styles (2.5%)"
          },
          "reasonable_page_weight": {
            "score": 100,
            "weight": 15,
            "details": "HTML size: 91KB"
          }
        }
      },
      "aiDiscoverability": {
        "score": 55,
        "weight": 25,
        "grade": "D",
        "checks": {
          "has_llms_txt": {
            "score": 100,
            "weight": 20,
            "details": "llms.txt exists and is valid"
          },
          "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": 92,
        "weight": 15,
        "grade": "A",
        "checks": {
          "has_schema_org": {
            "score": 100,
            "weight": 30,
            "details": "JSON-LD found: Person,Organization, WebSite, WebPage, Person, Article"
          },
          "has_open_graph": {
            "score": 67,
            "weight": 25,
            "details": "2/3 OG tags present"
          },
          "has_meta_description": {
            "score": 100,
            "weight": 20,
            "details": "Meta description: 155 chars"
          },
          "has_canonical_url": {
            "score": 100,
            "weight": 15,
            "details": "Canonical URL present"
          },
          "has_lang_attribute": {
            "score": 100,
            "weight": 10,
            "details": "lang=\"es\""
          }
        }
      },
      "accessibility": {
        "score": 78,
        "weight": 15,
        "grade": "B",
        "checks": {
          "content_without_js": {
            "score": 100,
            "weight": 40,
            "details": "Content available without JavaScript"
          },
          "reasonable_page_size": {
            "score": 100,
            "weight": 30,
            "details": "Page size: 91KB"
          },
          "fast_content_position": {
            "score": 25,
            "weight": 30,
            "details": "Main content starts at 76% of HTML"
          }
        }
      }
    }
  },
  "recommendations": [
    {
      "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: 0.3% (323 content chars / 93049 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": 40,
      "checkDetails": "11 semantic elements, 81 divs (ratio: 12%)"
    },
    {
      "id": "move_content_earlier",
      "priority": "high",
      "category": "accessibility",
      "titleKey": "rec.move_content_earlier.title",
      "descriptionKey": "rec.move_content_earlier.description",
      "howToKey": "rec.move_content_earlier.howto",
      "effort": "moderate",
      "estimatedImpact": 4,
      "checkScore": 25,
      "checkDetails": "Main content starts at 76% of HTML"
    },
    {
      "id": "fix_heading_hierarchy",
      "priority": "medium",
      "category": "semanticHtml",
      "titleKey": "rec.fix_heading_hierarchy.title",
      "descriptionKey": "rec.fix_heading_hierarchy.description",
      "howToKey": "rec.fix_heading_hierarchy.howto",
      "effort": "quick-win",
      "estimatedImpact": 6,
      "checkScore": 70,
      "checkDetails": "no <h1>"
    },
    {
      "id": "add_open_graph",
      "priority": "medium",
      "category": "structuredData",
      "titleKey": "rec.add_open_graph.title",
      "descriptionKey": "rec.add_open_graph.description",
      "howToKey": "rec.add_open_graph.howto",
      "effort": "quick-win",
      "estimatedImpact": 4,
      "checkScore": 67,
      "checkDetails": "2/3 OG tags present"
    },
    {
      "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": "7/278 elements with inline styles (2.5%)"
    }
  ],
  "llmsTxtPreview": "# Carrero.es\n\n> Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\n\n## Main\n- [Carrero.es es el sitio personal de David Carrero Fernández-Baillo](https://carrero.es): Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emp…\n- [Carrero](https://carrero.es/)\n- [Mis inversiones BA](https://carrero.es/inversiones/)\n- [Newsletter](https://carrero.es/boletin/)\n- [Suscribete al RSS](https://carrero.es/feed)\n- [Contacto](https://carrero.es/contactar/)\n\n",
  "llmsTxtExisting": "# Carrero.es\n\n> Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\n\n## Main\n- [Carrero.es es el sitio personal de David Carrero Fernández-Baillo](https://carrero.es/): Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emp…\n- [Mis inversiones BA](https://carrero.es/inversiones/)\n- [Newsletter](https://carrero.es/boletin/)\n- [Suscribete al RSS](https://carrero.es/feed)\n- [Contacto](https://carrero.es/contactar/)",
  "emergingProtocols": {
    "oauthDiscovery": {
      "exists": false,
      "url": "https://carrero.es/.well-known/oauth-authorization-server"
    },
    "mcpServerCard": {
      "exists": false,
      "url": "https://carrero.es/.well-known/mcp.json"
    },
    "a2aAgentCard": {
      "exists": false,
      "url": "https://carrero.es/.well-known/agent.json"
    },
    "count": 0
  },
  "snippets": [
    {
      "id": "fix_heading_hierarchy",
      "title": "Fix heading hierarchy",
      "description": "Your page has no <h1>. Every page needs exactly one <h1> as the main heading. Add it inside your <main> or <article>.",
      "language": "html",
      "code": "<h1>Carrero.es es el sitio personal de David Carrero Fernández-Baillo</h1>",
      "filename": "<main> or <article>"
    },
    {
      "id": "add_open_graph",
      "title": "Add missing Open Graph tags",
      "description": "Open Graph tags control how your page looks when shared on social media and how AI platforms preview your URL in answers.",
      "language": "html",
      "code": "<meta property=\"og:image\" content=\"https://yoursite.com/og-image.jpg\">\n<meta property=\"og:url\" content=\"https://carrero.es\">\n<meta property=\"og:type\" content=\"website\">",
      "filename": "<head>",
      "stacks": [
        {
          "id": "html",
          "label": "HTML <head>",
          "language": "html",
          "filename": "<head>",
          "code": "<meta property=\"og:image\" content=\"https://yoursite.com/og-image.jpg\">\n<meta property=\"og:url\" content=\"https://carrero.es\">\n<meta property=\"og:type\" content=\"website\">"
        },
        {
          "id": "wordpress",
          "label": "WordPress",
          "language": "php",
          "filename": "functions.php",
          "code": "<?php\n// Quick Open Graph tags without a plugin (skip if Yoast / Rank Math is active)\nadd_action('wp_head', function () {\n    if (!is_singular()) return;\n    $post = get_queried_object();\n    $title = get_the_title($post);\n    $desc  = get_the_excerpt($post) ?: wp_trim_words(strip_tags($post->post_content), 30);\n    $image = get_the_post_thumbnail_url($post, 'large') ?: 'https://yoursite.com/og-image.jpg';\n    $url   = get_permalink($post);\n    printf('<meta property=\"og:title\" content=\"%s\">' . \"\\n\", esc_attr($title));\n    printf('<meta property=\"og:description\" content=\"%s\">' . \"\\n\", esc_attr($desc));\n    printf('<meta property=\"og:image\" content=\"%s\">' . \"\\n\", esc_url($image));\n    printf('<meta property=\"og:url\" content=\"%s\">' . \"\\n\", esc_url($url));\n    echo '<meta property=\"og:type\" content=\"article\">' . \"\\n\";\n}, 5);"
        },
        {
          "id": "nextjs",
          "label": "Next.js",
          "language": "typescript",
          "filename": "app/page.tsx",
          "code": "// Next.js App Router — Metadata API\nimport type { Metadata } from 'next';\n\nexport const metadata: Metadata = {\n  title: \"Carrero.es es el sitio personal de David Carrero Fernández-Baillo\",\n  description: \"Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\",\n  openGraph: {\n    title: \"Carrero.es es el sitio personal de David Carrero Fernández-Baillo\",\n    description: \"Carrero.es en un blog iniciado por David Carrero Fernández-Baillo. Todo sobre Internet, Tecnología y Negocios. BA y emprendediendo otra vez con Stackscale.\",\n    url: \"https://carrero.es\",\n    images: [\"https://yoursite.com/og-image.jpg\"],\n    type: 'website',\n  },\n};"
        }
      ]
    },
    {
      "id": "add_content_signals",
      "title": "Add Content-Signal directives",
      "description": "Content-Signal tells AI agents how they may use your content. The canonical location is robots.txt, but you can also expose it as an HTTP header from any stack.",
      "language": "txt",
      "code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no",
      "filename": "/robots.txt",
      "stacks": [
        {
          "id": "robots",
          "label": "robots.txt",
          "language": "txt",
          "filename": "/robots.txt",
          "code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no"
        },
        {
          "id": "nginx",
          "label": "Nginx",
          "language": "nginx",
          "filename": "server block",
          "code": "# Inside your server { } block:\nadd_header Content-Signal \"search=yes, ai-input=yes, ai-train=no\" always;"
        },
        {
          "id": "apache",
          "label": "Apache",
          "language": "apache",
          "filename": ".htaccess",
          "code": "# In .htaccess (or VirtualHost):\nHeader set Content-Signal \"search=yes, ai-input=yes, ai-train=no\""
        },
        {
          "id": "wordpress",
          "label": "WordPress",
          "language": "php",
          "filename": "functions.php",
          "code": "<?php\n// In your theme's functions.php or a small mu-plugin\nadd_action('send_headers', function () {\n    header('Content-Signal: search=yes, ai-input=yes, ai-train=no');\n});\n\n// Optional: also append the directive to the dynamic robots.txt\nadd_filter('robots_txt', function ($output) {\n    return $output . \"\\nContent-Signal: search=yes, ai-input=yes, ai-train=no\\n\";\n}, 10, 1);"
        },
        {
          "id": "nextjs",
          "label": "Next.js",
          "language": "typescript",
          "filename": "middleware.ts",
          "code": "// middleware.ts (Next.js 13+ App Router or Pages Router)\nimport { NextResponse } from 'next/server';\nexport function middleware() {\n  const res = NextResponse.next();\n  res.headers.set(\n    'Content-Signal',\n    'search=yes, ai-input=yes, ai-train=no'\n  );\n  return res;\n}\nexport const config = { matcher: '/:path*' };"
        },
        {
          "id": "cloudflare",
          "label": "Cloudflare Workers",
          "language": "javascript",
          "filename": "worker.js",
          "code": "// Cloudflare Worker that proxies your origin and adds the header\nexport default {\n  async fetch(request, env, ctx) {\n    const res = await fetch(request);\n    const newRes = new Response(res.body, res);\n    newRes.headers.set(\n      'Content-Signal',\n      'search=yes, ai-input=yes, ai-train=no'\n    );\n    return newRes;\n  },\n};"
        },
        {
          "id": "express",
          "label": "Express / Fastify",
          "language": "javascript",
          "filename": "server.js",
          "code": "// Express\napp.use((req, res, next) => {\n  res.setHeader('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n  next();\n});\n\n// Fastify\nfastify.addHook('onSend', (request, reply, payload, done) => {\n  reply.header('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n  done();\n});"
        }
      ]
    },
    {
      "id": "add_markdown_negotiation",
      "title": "Support Markdown for Agents",
      "description": "Let AI agents request a clean Markdown version of any page via content negotiation, .md alternate URLs, link tags or Link headers.",
      "language": "html",
      "code": "<!-- Mechanism 3: link tag advertising the .md alternate -->\n<link rel=\"alternate\" type=\"text/markdown\" href=\"/page.md\">",
      "filename": "<head>",
      "stacks": [
        {
          "id": "html",
          "label": "HTML <head>",
          "language": "html",
          "filename": "<head>",
          "code": "<!-- Mechanism 3: link tag advertising the .md alternate -->\n<link rel=\"alternate\" type=\"text/markdown\" href=\"/page.md\">"
        },
        {
          "id": "express",
          "label": "Express",
          "language": "javascript",
          "filename": "server.js",
          "code": "// Mechanisms 1 + 4: content negotiation + Link header\napp.get('/page', (req, res) => {\n  res.setHeader('Vary', 'Accept');\n  res.setHeader('Link', '</page.md>; rel=\"alternate\"; type=\"text/markdown\"');\n  if ((req.headers.accept || '').includes('text/markdown')) {\n    res.type('text/markdown; charset=utf-8');\n    return res.send(renderMarkdown('page'));\n  }\n  res.render('page');\n});"
        },
        {
          "id": "fastify",
          "label": "Fastify",
          "language": "javascript",
          "filename": "server.js",
          "code": "// Mechanisms 1 + 4: content negotiation + Link header\nfastify.get('/page', async (req, reply) => {\n  reply.header('Vary', 'Accept');\n  reply.header('Link', '</page.md>; rel=\"alternate\"; type=\"text/markdown\"');\n  if ((req.headers.accept || '').includes('text/markdown')) {\n    return reply.type('text/markdown; charset=utf-8').send(renderMarkdown('page'));\n  }\n  return reply.view('/page.ejs');\n});"
        },
        {
          "id": "nextjs",
          "label": "Next.js",
          "language": "typescript",
          "filename": "app/page/route.ts",
          "code": "// Next.js App Router — Route Handler returning Markdown\nimport { NextRequest } from 'next/server';\nimport { renderMarkdown } from '@/lib/md';\nexport async function GET(req: NextRequest) {\n  const accept = req.headers.get('accept') || '';\n  if (accept.includes('text/markdown')) {\n    return new Response(await renderMarkdown('page'), {\n      headers: {\n        'Content-Type': 'text/markdown; charset=utf-8',\n        'Vary': 'Accept',\n      },\n    });\n  }\n  // Fall through to the page component\n  return new Response(null, { status: 404 });\n}"
        },
        {
          "id": "wordpress",
          "label": "WordPress",
          "language": "php",
          "filename": "functions.php",
          "code": "<?php\n// Mechanism 1: respond to Accept: text/markdown on the same URL\nadd_action('template_redirect', function () {\n    if (!is_singular()) return;\n    $accept = $_SERVER['HTTP_ACCEPT'] ?? '';\n    if (strpos($accept, 'text/markdown') === false) return;\n    header('Content-Type: text/markdown; charset=utf-8');\n    header('Vary: Accept');\n    $post = get_queried_object();\n    echo \"# \" . get_the_title($post) . \"\\n\\n\";\n    echo wp_strip_all_tags(apply_filters('the_content', $post->post_content));\n    exit;\n});"
        },
        {
          "id": "static",
          "label": "Hugo / Jekyll / Astro",
          "language": "txt",
          "filename": "static/page.md",
          "code": "# Mechanism 2: serve .md alongside .html\n# Hugo: place page.md in /static/ — built unchanged\n# Jekyll: drop page.md in /assets/ — copied as-is\n# Astro: src/pages/page.md.ts that exports a GET returning markdown\n\n# Then advertise with mechanism 3 in <head>:\n#   <link rel=\"alternate\" type=\"text/markdown\" href=\"/page.md\">"
        }
      ]
    }
  ]
}

Nutzen Sie unsere API, um dies programmatisch abzurufen (kommt bald)

Dieses JSON ist für den internen Gebrauch bestimmt — im Gegensatz zu den Markdown- und llms.txt-Dateien soll es nicht auf Ihre Website hochgeladen werden. Speichern Sie es als Ausgangswert, um Ihren Score im Zeitverlauf zu verfolgen, teilen Sie es mit Ihrem Entwicklerteam oder integrieren Sie es in Ihre CI/CD-Pipeline.

Teilen Sie Ihre Ergebnisse

Twitter LinkedIn

Badge einbetten

Fügen Sie dieses Badge zu Ihrer Website hinzu. Es aktualisiert sich automatisch, wenn sich Ihr KI-Bereitschafts-Score ändert.

AgentReady.md score for carrero.es
Script Empfohlen
<script src="https://agentready.md/badge.js" data-id="38a7ff42-a572-40d9-b76c-18d183fd29f4" data-domain="carrero.es"></script>
Markdown
[![AgentReady.md score for carrero.es](https://agentready.md/badge/carrero.es.svg)](https://agentready.md/de/r/38a7ff42-a572-40d9-b76c-18d183fd29f4)

Demnächst: Vollständige Domain-Analyse

Crawlen Sie Ihre gesamte Domain, generieren Sie llms.txt und überwachen Sie Ihren KI-Bereitschaftswert im Zeitverlauf. Tragen Sie sich in die Warteliste ein.

Sie stehen auf der Liste! Wir benachrichtigen Sie, sobald es verfügbar ist.