Certificat AgentReady.md vérifié
Émis le sig: 86c3c5b656e454ae Vérifier →

URL analysée

https://www.spendstream.app

Analyser une autre URL

Score AI-Ready

75 / B

Bon

sur 100

Économie de tokens

Tokens HTML 18.888
Tokens Markdown 503
Économie 97%

Détail du score

HTML sémantique 89/100
Efficacité du contenu 70/100
Visibilité IA 37/100
Données structurées 100/100
Accessibilité 100/100

Protocoles émergents

0 sur 3 détectés

Endpoints well-known recherchés par les agents IA. Détecté signifie qu’un agent peut découvrir et se connecter automatiquement à votre service.

  • 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

Votre site n’a pas de fichier llms.txt. C’est le standard émergent pour aider les AI agents à comprendre la structure de votre site.

Comment implémenter

Créez un fichier /llms.txt en suivant la spécification de llmstxt.org. Incluez une description du site et des liens vers vos pages principales.

Votre page a un faible ratio de contenu réel par rapport au HTML total. Une grande partie du poids de la page est du balisage, des scripts ou des styles plutôt que du contenu.

Comment implémenter

Déplacez le CSS vers des feuilles de style externes, supprimez les styles en ligne, minimisez le JavaScript et assurez-vous que le HTML se concentre sur la structure du contenu.

Votre site ne supporte pas Markdown for Agents. Ce standard Cloudflare permet aux agents IA de demander du contenu en format markdown, réduisant l'utilisation de tokens de ~80%.

Comment implémenter

Implémentez un ou plusieurs : (1) Répondre à Accept: text/markdown avec du contenu markdown. (2) Servir des URLs .md (ex : /page.md). (3) Ajouter des balises <link rel="alternate" type="text/markdown">. (4) Ajouter des en-têtes HTTP Link pour la découverte 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# "}] }'>

Votre robots.txt bloque certains bots IA (GPTBot, ClaudeBot, PerplexityBot). Cela empêche les AI agents d’indexer votre contenu.

Comment implémenter

Mettez à jour votre robots.txt pour autoriser les bots IA. Ajoutez des règles Allow explicites pour GPTBot, ClaudeBot et PerplexityBot.

Votre page repose fortement sur les éléments <div>. Les éléments sémantiques comme <section>, <nav>, <header>, <footer> et <aside> fournissent une structure significative pour les AI agents.

Comment implémenter

Remplacez les conteneurs <div> génériques par les éléments sémantiques appropriés. Utilisez <section> pour les groupes thématiques, <nav> pour la navigation, <header>/<footer> pour les en-têtes et pieds de page ou de section.

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/)

Téléversez ce fichier sous /index.md sur votre serveur pour que les AI agents puissent accéder à une version propre de votre page. Vous pouvez également configurer la négociation de contenu Accept: text/markdown pour le servir automatiquement.

llms.txt généré pour cette page individuelle

Télécharger 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)

Le llms.txt complet nécessite une analyse de tout le domaine (bientôt disponible)

Téléversez ce fichier vers https://www.spendstream.app/llms.txt à la racine de votre domaine. Les AI agents comme ChatGPT, Claude et Perplexity consultent ce fichier pour comprendre la structure de votre site.

HTML sémantique

Utilise les éléments article ou main (100/100)

Has <main>

Hiérarchie de titres correcte (100/100)

Clean heading hierarchy

Utilise des éléments HTML sémantiques (47/100)

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

Textes alternatifs descriptifs pour les images (100/100)

1/1 images with meaningful alt text

Faible profondeur d’imbrication des divs (100/100)

Avg div depth: 2.8, max: 7

Efficacité du contenu

Bon ratio de réduction de tokens (100/100)

97% token reduction (HTML→Markdown)

Bon ratio contenu/bruit (0/100)

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

Styles en ligne minimaux (100/100)

1/294 elements with inline styles (0.3%)

Poids de page raisonnable (100/100)

HTML size: 59KB

Visibilité IA

Possède un fichier llms.txt (0/100)

No llms.txt found

Possède un fichier robots.txt (100/100)

robots.txt exists

robots.txt autorise les bots IA (34/100)

2/3 AI bots blocked: ClaudeBot, GPTBot

Possède un sitemap.xml (100/100)

Sitemap found

Support Markdown for Agents (0/100)
&#10007; Accept: text/markdown &#10007; .md URL &#10007; <link> tag &#10007; Link header
A Content-Signal (robots.txt ou en-têtes HTTP) (60/100)
&#10003; robots.txt &#10007; HTTP header &#10003; Policy

Données structurées

Possède Schema.org / JSON-LD (100/100)

JSON-LD found: FAQPage, SoftwareApplication, Organization

Possède des balises Open Graph (100/100)

All OG tags present

Possède une meta description (100/100)

Meta description: 113 chars

Possède une URL canonique (100/100)

Canonical URL present

Possède un attribut lang (100/100)

lang="en"

Accessibilité

Contenu disponible sans JavaScript (100/100)

Content available without JavaScript

Taille de page raisonnable (100/100)

Page size: 59KB

Le contenu apparaît tôt dans le 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\">"
        }
      ]
    }
  ]
}

Utilisez notre API pour obtenir ceci de manière programmatique (bientôt disponible)

Ce JSON est à usage interne — contrairement au Markdown et au llms.txt, il n’est pas destiné à être téléversé sur votre site. Conservez-le comme référence pour suivre l’évolution de votre score, partagez-le avec votre équipe de développement ou intégrez-le dans votre pipeline CI/CD.

Partagez vos résultats

Twitter LinkedIn

Intégrez votre badge

Ajoutez ce badge à votre site. Il se met à jour automatiquement lorsque votre score de préparation à l’IA change.

AgentReady.md score for www.spendstream.app
Script Recommandé
<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/fr/r/b4bc9209-7b9d-48d3-81c4-72accd86e6b7)

Bientôt : Analyse de domaine complet

Explorez l’ensemble de votre domaine, générez un llms.txt et surveillez votre score de préparation IA dans le temps. Rejoignez la liste d’attente pour être informé.

Vous êtes sur la liste ! Nous vous préviendrons lors du lancement.