Certificado AgentReady.md verificado
Emitido el sig: 86c3c5b656e454ae Verificar →

URL analizada

https://www.spendstream.app

Analizar otra URL

Puntuación AI-Ready

75 / B

Bueno

de 100

Ahorro de tokens

Tokens HTML 18.888
Tokens Markdown 503
Ahorro 97%

Desglose de la puntuación

HTML semántico 89/100
Eficiencia del contenido 70/100
Visibilidad para IA 37/100
Datos estructurados 100/100
Accesibilidad 100/100

Protocolos emergentes

0 de 3 detectados

Endpoints well-known que los AI agents buscan. Detectados significa que un agente puede descubrir y conectar con tu servicio automáticamente.

  • 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

Tu sitio no tiene un archivo llms.txt. Este es el estándar emergente para ayudar a los AI agents a comprender la estructura de tu sitio.

Cómo implementarlo

Crea un archivo /llms.txt siguiendo la especificación de llmstxt.org. Incluye una descripción del sitio y enlaces a tus páginas principales.

Tu página tiene un bajo ratio de contenido real respecto al HTML total. Gran parte del peso de la página es marcado, scripts o estilos en lugar de contenido.

Cómo implementarlo

Mueve el CSS a hojas de estilo externas, elimina los estilos en línea, minimiza el JavaScript y asegúrate de que el HTML se centre en la estructura del contenido.

Tu sitio no soporta Markdown for Agents. Este estándar de Cloudflare permite a los agentes IA solicitar contenido en formato markdown, reduciendo el uso de tokens en ~80%.

Cómo implementarlo

Implementa uno o más: (1) Responder a Accept: text/markdown con contenido markdown. (2) Servir URLs .md (ej: /pagina.md). (3) Añadir etiquetas <link rel="alternate" type="text/markdown">. (4) Añadir cabeceras HTTP Link para descubrimiento markdown.

{\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# "}] }'>

Tu robots.txt bloquea algunos bots de IA (GPTBot, ClaudeBot, PerplexityBot). Esto impide que los AI agents indexen tu contenido.

Cómo implementarlo

Actualiza tu robots.txt para permitir bots de IA. Añade reglas Allow explícitas para GPTBot, ClaudeBot y PerplexityBot.

Tu página depende en gran medida de elementos <div>. Los elementos semánticos como <section>, <nav>, <header>, <footer> y <aside> proporcionan una estructura significativa para los AI agents.

Cómo implementarlo

Reemplaza los contenedores <div> genéricos con los elementos semánticos apropiados. Usa <section> para grupos temáticos, <nav> para navegación, <header>/<footer> para cabeceras y pies de página o sección.

Tokens Markdown: 503
## The Xero workflow that wastes hours every month

It takes eight clicks to assign a transaction as a billable expense:

-   Open a transaction
-   Edit a transaction
-   Click assign expenses
-   Select the expense lines you need
-   Search for the client
-   Click assign
-   Accept the changes
-   Save the transaction

Even with bank rules, Xero still doesn't assign billable expenses to customers automatically. Hours disappear while you repeat these steps again and again.

## Use SpendStream to automate client expense assignment for Xero

Spend less time clicking, more time growing. Our tool plugs directly into your Xero organisation and:

-   Automatically assigns transactions to your clients based on your Xero rules.
-   Works with bank rules so expenses land in Xero ready with the reconciliation process.
-   Keeps your reports clean, accurate, and immediately invoicable.
-   Remove at least eight clicks per billable transaction from your end of month process.

## SpendStream will shave hours off your bookkeeping

Whether you’re managing multiple clients or running your own business:

-   Your bookkeeping workflows become predictable and fast.
-   Your profitability and project reporting becomes clear and reliable.
-   Your team has time back to focus on high-value work.

## Finally leave all the finicky admin behind

SpendStream will make all the end-of-month monotony go away. No more:

-   Clicking into every transaction
-   Building bank rules that only match accounts but don’t assign clients
-   Manual project tagging at month-end
-   Reconciling and then re-working expense assignments
-   Losing revenue because billable costs weren’t captured

## Frequently Asked Questions

## Pricing that pays for itself in your first week

### Free

$0/mo

Small businesses with simple needs

-   Up to 5 transactions/month

-   Unlimited assignment rules

-   Priority support

[Get started](https://dash.spendstream.app/)

### Efficiency

$19/mo

Organizations with more complex billing workflows

-   Unlimited expenses

-   Unlimited assignment rules

-   Dedicated support

[Get started](https://dash.spendstream.app/)

## Ready to shrink hours of boring bookkeeping into minutes?

Get started today and watch your Xero expenses auto-assign to clients and projects like it should have all along.

Accurate books. Faster invoicing. Less manual work.
Auto-assign billable expenses in Xero with SpendStream

# Automatically assign billable expenses to customers in Xero.

Remove hours of repetitive admin. Set rules once and let automation handle the rest. Never miss a billable expense again.

[Get started](https://dash.spendstream.app/)[See how it works](https://www.spendstream.app/how-it-works)

![SpendStream Expense Assignments page showing bank transactions automatically assigned to clients and projects.](https://www.spendstream.app/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhome-screenshot.e8cfcf71.png&w=3840&q=75)

## The Xero workflow that wastes hours every month

It takes eight clicks to assign a transaction as a billable expense:

-   Open a transaction
-   Edit a transaction
-   Click assign expenses
-   Select the expense lines you need
-   Search for the client
-   Click assign
-   Accept the changes
-   Save the transaction

Even with bank rules, Xero still doesn't assign billable expenses to customers automatically. Hours disappear while you repeat these steps again and again.

## Use SpendStream to automate client expense assignment for Xero

Spend less time clicking, more time growing. Our tool plugs directly into your Xero organisation and:

-   Automatically assigns transactions to your clients based on your Xero rules.
-   Works with bank rules so expenses land in Xero ready with the reconciliation process.
-   Keeps your reports clean, accurate, and immediately invoicable.
-   Remove at least eight clicks per billable transaction from your end of month process.

## SpendStream will shave hours off your bookkeeping

Whether you’re managing multiple clients or running your own business:

-   Your bookkeeping workflows become predictable and fast.
-   Your profitability and project reporting becomes clear and reliable.
-   Your team has time back to focus on high-value work.

## Finally leave all the finicky admin behind

SpendStream will make all the end-of-month monotony go away. No more:

-   Clicking into every transaction
-   Building bank rules that only match accounts but don’t assign clients
-   Manual project tagging at month-end
-   Reconciling and then re-working expense assignments
-   Losing revenue because billable costs weren’t captured

## Frequently Asked Questions

How does SpendStream integrate with Xero?

Can I customize the assignment rules?

Is there a limit to how many rules I can create?

## Pricing that pays for itself in your first week

### Free

$0/mo

Small businesses with simple needs

-   Up to 5 transactions/month

-   Unlimited assignment rules

-   Priority support

[Get started](https://dash.spendstream.app/)

### Efficiency

$19/mo

Organizations with more complex billing workflows

-   Unlimited expenses

-   Unlimited assignment rules

-   Dedicated support

[Get started](https://dash.spendstream.app/)

## Ready to shrink hours of boring bookkeeping into minutes?

Get started today and watch your Xero expenses auto-assign to clients and projects like it should have all along.

Accurate books. Faster invoicing. Less manual work.

[Get started](https://dash.spendstream.app/)

Sube este archivo como /index.md en tu servidor para que los AI agents puedan acceder a una versión limpia de tu página. También puedes configurar la negociación de contenido Accept: text/markdown para servirlo automáticamente.

llms.txt generado para esta página individual

Descargar llms.txt
# SpendStream

> Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.

## Documentation
- [Docs](https://www.spendstream.app/docs)

## Main
- [Auto-assign billable expenses in Xero with SpendStream](https://www.spendstream.app): Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.
- [Pricing](https://www.spendstream.app/pricing)
- [Docs](https://www.spendstream.app/docs)
- [SpendStream](https://www.spendstream.app/)
- [How it works](https://www.spendstream.app/how-it-works)
- [Security](https://www.spendstream.app/security)

## Legal
- [Privacy](https://www.spendstream.app/privacy)
- [Terms](https://www.spendstream.app/terms)

El llms.txt completo requiere un análisis de todo el dominio (próximamente)

Sube este archivo a https://www.spendstream.app/llms.txt en la raíz de tu dominio. Los AI agents como ChatGPT, Claude y Perplexity consultan este archivo para comprender la estructura de tu sitio.

HTML semántico

Usa elementos article o main (100/100)

Has <main>

Jerarquía de encabezados correcta (100/100)

Clean heading hierarchy

Usa elementos HTML semánticos (47/100)

13 semantic elements, 79 divs (ratio: 14%)

Textos alternativos descriptivos en imágenes (100/100)

1/1 images with meaningful alt text

Poca profundidad de anidamiento de divs (100/100)

Avg div depth: 2.8, max: 7

Eficiencia del contenido

Buen ratio de reducción de tokens (100/100)

97% token reduction (HTML→Markdown)

Buen ratio de contenido frente a ruido (0/100)

Content ratio: 3.5% (2101 content chars / 60599 HTML bytes)

Estilos en línea mínimos (100/100)

1/294 elements with inline styles (0.3%)

Peso de página razonable (100/100)

HTML size: 59KB

Visibilidad para IA

Tiene archivo llms.txt (0/100)

No llms.txt found

Tiene archivo robots.txt (100/100)

robots.txt exists

robots.txt permite bots de IA (34/100)

2/3 AI bots blocked: ClaudeBot, GPTBot

Tiene sitemap.xml (100/100)

Sitemap found

Soporte de Markdown for Agents (0/100)
&#10007; Accept: text/markdown &#10007; .md URL &#10007; <link> tag &#10007; Link header
Tiene Content-Signal (robots.txt o cabeceras HTTP) (60/100)
&#10003; robots.txt &#10007; HTTP header &#10003; Policy

Datos estructurados

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

JSON-LD found: FAQPage, SoftwareApplication, Organization

Tiene etiquetas Open Graph (100/100)

All OG tags present

Tiene meta description (100/100)

Meta description: 113 chars

Tiene URL canónica (100/100)

Canonical URL present

Tiene atributo lang (100/100)

lang="en"

Accesibilidad

Contenido disponible sin JavaScript (100/100)

Content available without JavaScript

Tamaño de página razonable (100/100)

Page size: 59KB

El contenido aparece temprano en el HTML (100/100)

Main content starts at 9% of HTML

{
  "url": "https://www.spendstream.app",
  "timestamp": 1778794433898,
  "fetch": {
    "mode": "simple",
    "timeMs": 358,
    "htmlSizeBytes": 60599,
    "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": "Auto-assign billable expenses in Xero with SpendStream",
    "excerpt": "Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.",
    "byline": null,
    "siteName": "SpendStream",
    "lang": "en",
    "contentLength": 2101,
    "metadata": {
      "description": "Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.",
      "ogTitle": "Auto-assign billable expenses in Xero with SpendStream",
      "ogDescription": "Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.",
      "ogImage": "https://www.spendstream.app/og.png",
      "ogType": "website",
      "canonical": "https://www.spendstream.app",
      "lang": "en",
      "schemas": [
        {
          "@context": "https://schema.org",
          "@type": "FAQPage",
          "mainEntity": [
            {
              "@type": "Question",
              "name": "How does SpendStream integrate with Xero?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "SpendStream connects directly to your Xero organization. Once connected, it can read your expense data and automatically apply assignment rules in real-time. Read more about how to connect to Xero here."
              }
            },
            {
              "@type": "Question",
              "name": "Can I customize the assignment rules?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Absolutely! You can create SpendStream rules using division or a custom tag applied through your Xero reconcilation rules."
              }
            },
            {
              "@type": "Question",
              "name": "Is there a limit to how many rules I can create?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "No, you can create unlimited assignment rules."
              }
            }
          ]
        },
        {
          "@context": "https://schema.org",
          "@type": "SoftwareApplication",
          "name": "SpendStream",
          "url": "https://www.spendstream.app",
          "applicationCategory": "BusinessApplication",
          "operatingSystem": "Web",
          "description": "Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.",
          "offers": [
            {
              "@type": "Offer",
              "name": "Free",
              "price": "0",
              "priceCurrency": "USD",
              "category": "Small businesses with simple needs"
            },
            {
              "@type": "Offer",
              "name": "Efficiency",
              "price": "19",
              "priceCurrency": "USD",
              "category": "Organizations with more complex billing workflows"
            }
          ]
        },
        {
          "@context": "https://schema.org",
          "@type": "Organization",
          "name": "SpendStream",
          "url": "https://www.spendstream.app",
          "logo": "https://www.spendstream.app/logo.png",
          "sameAs": [
            "https://www.linkedin.com/company/spendstreamapp"
          ]
        }
      ],
      "robotsMeta": null,
      "author": null,
      "generator": null,
      "markdownAlternateHref": null
    }
  },
  "markdown": "## The Xero workflow that wastes hours every month\n\nIt takes eight clicks to assign a transaction as a billable expense:\n\n-   Open a transaction\n-   Edit a transaction\n-   Click assign expenses\n-   Select the expense lines you need\n-   Search for the client\n-   Click assign\n-   Accept the changes\n-   Save the transaction\n\nEven with bank rules, Xero still doesn't assign billable expenses to customers automatically. Hours disappear while you repeat these steps again and again.\n\n## Use SpendStream to automate client expense assignment for Xero\n\nSpend less time clicking, more time growing. Our tool plugs directly into your Xero organisation and:\n\n-   Automatically assigns transactions to your clients based on your Xero rules.\n-   Works with bank rules so expenses land in Xero ready with the reconciliation process.\n-   Keeps your reports clean, accurate, and immediately invoicable.\n-   Remove at least eight clicks per billable transaction from your end of month process.\n\n## SpendStream will shave hours off your bookkeeping\n\nWhether you’re managing multiple clients or running your own business:\n\n-   Your bookkeeping workflows become predictable and fast.\n-   Your profitability and project reporting becomes clear and reliable.\n-   Your team has time back to focus on high-value work.\n\n## Finally leave all the finicky admin behind\n\nSpendStream will make all the end-of-month monotony go away. No more:\n\n-   Clicking into every transaction\n-   Building bank rules that only match accounts but don’t assign clients\n-   Manual project tagging at month-end\n-   Reconciling and then re-working expense assignments\n-   Losing revenue because billable costs weren’t captured\n\n## Frequently Asked Questions\n\n## Pricing that pays for itself in your first week\n\n### Free\n\n$0/mo\n\nSmall businesses with simple needs\n\n-   Up to 5 transactions/month\n\n-   Unlimited assignment rules\n\n-   Priority support\n\n[Get started](https://dash.spendstream.app/)\n\n### Efficiency\n\n$19/mo\n\nOrganizations with more complex billing workflows\n\n-   Unlimited expenses\n\n-   Unlimited assignment rules\n\n-   Dedicated support\n\n[Get started](https://dash.spendstream.app/)\n\n## Ready to shrink hours of boring bookkeeping into minutes?\n\nGet started today and watch your Xero expenses auto-assign to clients and projects like it should have all along.\n\nAccurate books. Faster invoicing. Less manual work.\n",
  "fullPageMarkdown": "Auto-assign billable expenses in Xero with SpendStream\n\n# Automatically assign billable expenses to customers in Xero.\n\nRemove hours of repetitive admin. Set rules once and let automation handle the rest. Never miss a billable expense again.\n\n[Get started](https://dash.spendstream.app/)[See how it works](https://www.spendstream.app/how-it-works)\n\n![SpendStream Expense Assignments page showing bank transactions automatically assigned to clients and projects.](https://www.spendstream.app/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhome-screenshot.e8cfcf71.png&w=3840&q=75)\n\n## The Xero workflow that wastes hours every month\n\nIt takes eight clicks to assign a transaction as a billable expense:\n\n-   Open a transaction\n-   Edit a transaction\n-   Click assign expenses\n-   Select the expense lines you need\n-   Search for the client\n-   Click assign\n-   Accept the changes\n-   Save the transaction\n\nEven with bank rules, Xero still doesn't assign billable expenses to customers automatically. Hours disappear while you repeat these steps again and again.\n\n## Use SpendStream to automate client expense assignment for Xero\n\nSpend less time clicking, more time growing. Our tool plugs directly into your Xero organisation and:\n\n-   Automatically assigns transactions to your clients based on your Xero rules.\n-   Works with bank rules so expenses land in Xero ready with the reconciliation process.\n-   Keeps your reports clean, accurate, and immediately invoicable.\n-   Remove at least eight clicks per billable transaction from your end of month process.\n\n## SpendStream will shave hours off your bookkeeping\n\nWhether you’re managing multiple clients or running your own business:\n\n-   Your bookkeeping workflows become predictable and fast.\n-   Your profitability and project reporting becomes clear and reliable.\n-   Your team has time back to focus on high-value work.\n\n## Finally leave all the finicky admin behind\n\nSpendStream will make all the end-of-month monotony go away. No more:\n\n-   Clicking into every transaction\n-   Building bank rules that only match accounts but don’t assign clients\n-   Manual project tagging at month-end\n-   Reconciling and then re-working expense assignments\n-   Losing revenue because billable costs weren’t captured\n\n## Frequently Asked Questions\n\nHow does SpendStream integrate with Xero?\n\nCan I customize the assignment rules?\n\nIs there a limit to how many rules I can create?\n\n## Pricing that pays for itself in your first week\n\n### Free\n\n$0/mo\n\nSmall businesses with simple needs\n\n-   Up to 5 transactions/month\n\n-   Unlimited assignment rules\n\n-   Priority support\n\n[Get started](https://dash.spendstream.app/)\n\n### Efficiency\n\n$19/mo\n\nOrganizations with more complex billing workflows\n\n-   Unlimited expenses\n\n-   Unlimited assignment rules\n\n-   Dedicated support\n\n[Get started](https://dash.spendstream.app/)\n\n## Ready to shrink hours of boring bookkeeping into minutes?\n\nGet started today and watch your Xero expenses auto-assign to clients and projects like it should have all along.\n\nAccurate books. Faster invoicing. Less manual work.\n\n[Get started](https://dash.spendstream.app/)\n",
  "markdownStats": {
    "images": 0,
    "links": 2,
    "tables": 0,
    "codeBlocks": 0,
    "headings": 9
  },
  "tokens": {
    "htmlTokens": 18888,
    "markdownTokens": 503,
    "reduction": 18385,
    "reductionPercent": 97
  },
  "score": {
    "score": 75,
    "grade": "B",
    "dimensions": {
      "semanticHtml": {
        "score": 89,
        "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": 47,
            "weight": 20,
            "details": "13 semantic elements, 79 divs (ratio: 14%)"
          },
          "meaningful_alt_texts": {
            "score": 100,
            "weight": 15,
            "details": "1/1 images with meaningful alt text"
          },
          "low_div_nesting": {
            "score": 100,
            "weight": 20,
            "details": "Avg div depth: 2.8, max: 7"
          }
        }
      },
      "contentEfficiency": {
        "score": 70,
        "weight": 25,
        "grade": "C",
        "checks": {
          "token_reduction_ratio": {
            "score": 100,
            "weight": 40,
            "details": "97% token reduction (HTML→Markdown)"
          },
          "content_to_noise_ratio": {
            "score": 0,
            "weight": 30,
            "details": "Content ratio: 3.5% (2101 content chars / 60599 HTML bytes)"
          },
          "minimal_inline_styles": {
            "score": 100,
            "weight": 15,
            "details": "1/294 elements with inline styles (0.3%)"
          },
          "reasonable_page_weight": {
            "score": 100,
            "weight": 15,
            "details": "HTML size: 59KB"
          }
        }
      },
      "aiDiscoverability": {
        "score": 37,
        "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": 34,
            "weight": 15,
            "details": "2/3 AI bots blocked: ClaudeBot, GPTBot"
          },
          "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": 60,
            "weight": 20,
            "details": "robots.txt: search=yes, ai-train=no | Policy included"
          }
        }
      },
      "structuredData": {
        "score": 100,
        "weight": 15,
        "grade": "A",
        "checks": {
          "has_schema_org": {
            "score": 100,
            "weight": 30,
            "details": "JSON-LD found: FAQPage, SoftwareApplication, Organization"
          },
          "has_open_graph": {
            "score": 100,
            "weight": 25,
            "details": "All OG tags present"
          },
          "has_meta_description": {
            "score": 100,
            "weight": 20,
            "details": "Meta description: 113 chars"
          },
          "has_canonical_url": {
            "score": 100,
            "weight": 15,
            "details": "Canonical URL present"
          },
          "has_lang_attribute": {
            "score": 100,
            "weight": 10,
            "details": "lang=\"en\""
          }
        }
      },
      "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: 59KB"
          },
          "fast_content_position": {
            "score": 100,
            "weight": 30,
            "details": "Main content starts at 9% 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: 3.5% (2101 content chars / 60599 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": "allow_ai_bots",
      "priority": "high",
      "category": "aiDiscoverability",
      "titleKey": "rec.allow_ai_bots.title",
      "descriptionKey": "rec.allow_ai_bots.description",
      "howToKey": "rec.allow_ai_bots.howto",
      "effort": "quick-win",
      "estimatedImpact": 7,
      "checkScore": 34,
      "checkDetails": "2/3 AI bots blocked: ClaudeBot, GPTBot"
    },
    {
      "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": 47,
      "checkDetails": "13 semantic elements, 79 divs (ratio: 14%)"
    }
  ],
  "llmsTxtPreview": "# SpendStream\n\n> Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.\n\n## Documentation\n- [Docs](https://www.spendstream.app/docs)\n\n## Main\n- [Auto-assign billable expenses in Xero with SpendStream](https://www.spendstream.app): Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.\n- [Pricing](https://www.spendstream.app/pricing)\n- [Docs](https://www.spendstream.app/docs)\n- [SpendStream](https://www.spendstream.app/)\n- [How it works](https://www.spendstream.app/how-it-works)\n- [Security](https://www.spendstream.app/security)\n\n## Legal\n- [Privacy](https://www.spendstream.app/privacy)\n- [Terms](https://www.spendstream.app/terms)\n\n",
  "llmsTxtExisting": null,
  "emergingProtocols": {
    "oauthDiscovery": {
      "exists": false,
      "url": "https://www.spendstream.app/.well-known/oauth-authorization-server"
    },
    "mcpServerCard": {
      "exists": false,
      "url": "https://www.spendstream.app/.well-known/mcp.json"
    },
    "a2aAgentCard": {
      "exists": false,
      "url": "https://www.spendstream.app/.well-known/agent.json"
    },
    "count": 0
  },
  "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": "# SpendStream\n\n> Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.\n\n## Documentation\n- [Docs](https://www.spendstream.app/docs)\n\n## Main\n- [Auto-assign billable expenses in Xero with SpendStream](https://www.spendstream.app): Automatically assign billable expenses to customers in Xero. Set rules once, and let SpendStream handle the rest.\n- [Pricing](https://www.spendstream.app/pricing)\n- [Docs](https://www.spendstream.app/docs)\n- [SpendStream](https://www.spendstream.app/)\n- [How it works](https://www.spendstream.app/how-it-works)\n- [Security](https://www.spendstream.app/security)\n\n## Legal\n- [Privacy](https://www.spendstream.app/privacy)\n- [Terms](https://www.spendstream.app/terms)\n\n",
      "filename": "/llms.txt"
    },
    {
      "id": "allow_ai_bots",
      "title": "Allow AI bots in robots.txt",
      "description": "Some AI bots are blocked in your robots.txt. Remove or modify these Disallow rules to let AI agents index your content.",
      "language": "txt",
      "code": "# Add to your robots.txt — explicitly allow AI bots:\nUser-agent: GPTBot\nAllow: /\n\nUser-agent: ClaudeBot\nAllow: /\n\nUser-agent: PerplexityBot\nAllow: /",
      "filename": "/robots.txt"
    },
    {
      "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\">"
        }
      ]
    }
  ]
}

Usa nuestra API para obtener esto de forma programática (próximamente)

Este JSON es para uso interno — a diferencia del Markdown y llms.txt, no está pensado para subirse a tu web. Guárdalo como referencia para seguir la evolución de tu puntuación, compártelo con tu equipo de desarrollo o intégralo en tu pipeline CI/CD.

Comparte tus resultados

Twitter LinkedIn

Incrusta tu badge

Añade este badge a tu sitio. Se actualiza automáticamente cuando cambie tu puntuación.

AgentReady.md score for www.spendstream.app
Script Recomendado
<script src="https://agentready.md/badge.js" data-id="b4bc9209-7b9d-48d3-81c4-72accd86e6b7" data-domain="www.spendstream.app"></script>
Markdown
[![AgentReady.md score for www.spendstream.app](https://agentready.md/badge/www.spendstream.app.svg)](https://agentready.md/es/r/b4bc9209-7b9d-48d3-81c4-72accd86e6b7)

Próximamente: Análisis de dominio completo

Rastrea todo tu dominio, genera llms.txt y monitoriza tu puntuación de preparación para IA a lo largo del tiempo. Únete a la lista de espera para recibir notificaciones.

¡Estás en la lista! Te avisaremos cuando se lance.