www.duolingo.com

Report from 9/21/2026, 11:58:43 AM https://www.duolingo.com
Latest run · lab, cold cache
0
9/21/2026
28-day score · p75 · the standard
0
31 runs
CRR0%latest
SSD63%latest
TC137 toklatest

Scored by v3 · source-of-truth hashes: score db860d6ac94e · thresholds e94f8b33e500 — verifiable against the canonical scorer.

The 28-day score is the p75 of nightly runs — the stable number to cite. Deterministic metrics (CRR/SSD/TC) show their latest value (they move only when the site changes); timing (TTFUT) and answer-fidelity (AF) are smoothed by 28-day p75 — the same lab-vs-field split Core Web Vitals uses. Synthetic daily measurement, not real-user field data.

Core Agent Vitals badge  Embed this badge

Show your agent-readiness score anywhere — it links back to this report.

[![Core Agent Vitals](https://agentvitals.dev/badge/duolingo.com.svg)](https://agentvitals.dev/results?url=https%3A%2F%2Fwww.duolingo.com)
<a href="https://agentvitals.dev/results?url=https%3A%2F%2Fwww.duolingo.com"><img src="https://agentvitals.dev/badge/duolingo.com.svg" alt="Core Agent Vitals" height="20"></a>
What AI tells your customers about youAgent confidence: LOW
🟡Business nameDuolingo · guessed from page text (no structured data)
Categorynot found
Pricenot applicable · not applicable to this page type
Locationnot applicable · not applicable to this page type
Hoursnot applicable · not applicable to this page type
Productsnot applicable · not applicable to this page type
🟡DescriptionDuolingo is the world's most popular way to learn a language. It's 100% free, fun and science-based. Practice online on duolingo.com or on the apps! · guessed from page text (no structured data)

An agent is likely to fabricate missing details rather than say “I don’t know”. 0/3 applicable facts come from machine-readable structured data.

An agent recovered no usable content from this page without executing JavaScript.
0
Overall score
weighted CAV (0–100)
FAIL
0–4950–8990–100

Metrics

0%
CRR Content Recovery Poor
0.63
SSD Semantic Signal Density Good
137 tok
TC Token Cost Good
TTFUT Time to First Useful Token N/A

Token Cost breakdown

Where the page's tokens go (≈4,227 across regions). 84% is non-content — chrome and boilerplate an agent pays for. Add landmark roles (main/nav/header/footer) so agents can skip it.

Content
15.8% · 668
Chrome (nav / header / footer)
84.2% · 3,559
Boilerplate (cookie / ad)
0% · 0
Other
0% · 0

Final screenshot

Final screenshot of https://www.duolingo.com

Diagnostics

high CRR Content is hidden behind JavaScript

pre-JS raw HTML

Evidence100% of content requires JS
ImpactA non-rendering agent never sees the JS-injected content.
Effort1–4 h

Fix: Server-render or statically generate the main content so a non-JS agent still receives it; make client rendering a progressive enhancement, not the source of truth.

high TC 84.2% of tokens are non-content (boilerplate/chrome)

agent representation — token decomposition

EvidenceToken decomposition: content 15.8%, chrome 84.2%, boilerplate 0%, other 0%. Only 15.799999999999997% of the agent's tokens are real content.
ImpactAn agent pays for boilerplate on every request and has less context left for the real content.
Effort30–90 min

Fix: Strip repeated nav/header/footer/cookie chrome from the agent-visible output; wrap content in <main>/<article> so the extractor keeps signal and drops boilerplate.

Rendered profile: headless

Agent Discoverability 71/100 · Needs Work

Access & discovery checks — separate from the gated CAV metrics above. Click an issue for business impact, what we measured, and how to fix. · Take the Agent Readiness course →

Agent files & endpoints

~ llms.txt Found at /llms.txt but missing H1/blockquote Learn →
robots.txt (AI bots) Major AI bots allowed Learn →
~ sitemap.xml Sitemap found but no <url>/<loc> entries Learn →
JSON-LD structured data No JSON-LD found Learn →
agents.json Found at /agents.json Learn →
WebMCP endpoint Found at /webmcp.json Learn →
OpenAPI / API docs Found at /openapi.json Learn →

Issues (4)

~ No content-blocking cookie wall medium impact Consent platform: optanon (verify it doesn't block content)

Business impact A consent wall that hides content until a click is invisible to agents — they cannot click 'Accept'.

What we measured We fingerprint OneTrust, Cookiebot, Usercentrics and similar managers and flag content-blocking ones.

How to fix Use an overlay banner that leaves content in the DOM, not a blocking interstitial.

Spec: https://gdpr.eu/cookies/

~ llms.txt present + valid high impact Found at /llms.txt but missing H1/blockquote

Business impact llms.txt is the robots.txt for AI: it tells agents what your site is, what matters, and where to find it. Without it AI guesses — and guessing means inaccurate recommendations and lost visibility.

What we measured We fetch /llms.txt and /.well-known/llms.txt and validate the spec (H1 title + a one-line blockquote summary). We also note /llms-full.txt (your full content as Markdown).

How to fix Create /llms.txt with a short summary + key pages; optionally /llms-full.txt with full content in Markdown.

Learn how to implement →

# Your Site
> One-line description for AI agents.

## Key pages
- /products — catalog
- /pricing — plans
- /docs — documentation

Spec: https://llmstxt.org

Structured data (JSON-LD) medium impact No JSON-LD found

Business impact Schema.org JSON-LD tells agents what a page IS (product, article, business) with typed fields (price, rating, hours). Without it agents extract less reliably.

What we measured We parse <script type=application/ld+json>, validate it, and check for populated @type fields.

How to fix Add JSON-LD: Organization/LocalBusiness on the homepage, Product on product pages, Article on posts.

Learn how to implement →

<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Your Co","url":"https://example.com"}</script>

Spec: https://schema.org/

~ XML sitemap present medium impact Sitemap found but no <url>/<loc> entries

Business impact A sitemap is your table of contents for AI crawlers. Without it agents follow homepage links and miss deep pages (products, docs, pricing) — shrinking what they can recommend.

What we measured We fetch /sitemap.xml (and /sitemap_index.xml), confirm valid XML with <loc> entries, and check <lastmod> freshness.

How to fix Generate an XML sitemap of all public pages with current lastmod dates and reference it in robots.txt.

Learn how to implement →

# robots.txt
Sitemap: https://example.com/sitemap.xml

Spec: https://www.sitemaps.org/

Passed audits (7)

✓ robots.txt allows AI bots✓ No CAPTCHA wall✓ No login wall on public content✓ Server response (TTFB)✓ agents.json discovery✓ WebMCP endpoint✓ API documentation

Transport & Trust (SEC 1.0.0)

HTTPS, HSTS, CSP, sniffing, referrer and CORS posture. Diagnostic only — this does not affect the CAV score. A security header does not make a page more legible to an agent, so scoring it would reward a CDN toggle that changes nothing an agent can recover. We measure it and say so.

37Transport posture (0–100, unscored)
1pass
1warn
3fail
Per-header findings (6)
HeaderEvidence
✅ HTTPSserved over HTTPS
❌ HSTSno strict-transport-security header
❌ Content-Security-Policyno content-security-policy header
❌ X-Content-Type-Optionsmissing nosniff
⚠️ Referrer-Policyno referrer-policy header (browser default applies)
➖ CORS exposureno CORS headers on the document (normal for an HTML page)
Full profile — how to improve · unused JS · network · timing

How to improve

highProfile reflects a block/challenge page — not your contenthighest leverage

whole profile

EvidenceMeasured against a block/challenge page (a bot-wall/CAPTCHA was served (www.gstatic.com)); every number here describes the wall, not your site.
ImpactAn AI agent hits the same wall and recovers none of your content — fix the block before optimizing anything else.
FixAllowlist legitimate agent user-agents / IP ranges in your WAF or bot-management and serve real content (not a challenge), then re-run.

Third-party impact

132 third-party requests · 3443 KiB (99.5% of transfer) · 280 ms main-thread — code an agent must also fetch/run before your content settles. Fewer, lazier third-parties = faster, cheaper agent reads.

Third-party domainReqsTransferMain-thread
cloudfront.net981969 KiB280 ms
googletagmanager.com4679 KiB
gstatic.com1347 KiB
facebook.net2165 KiB
cookielaw.org5152 KiB
google.com6100 KiB
google-analytics.com221 KiB
doubleclick.net43 KiB
tupsrv.com33 KiB
recaptcha.net22 KiB
googleadservices.com11 KiB
onetrust.com10 KiB

Wasted JavaScript (by bundle)

Transfer-accurate — each bundle's transfer size × its unused %, ranked by wasted bytes (the biggest code-splitting wins). Unused JS also inflates Token Cost (TC).

BundleTransferUnusedWasted
https://www.gstatic.com/recaptcha/releases/BnqMGSY_YP4cCmbNINHpJPkd/recaptcha__en.js 3P347 KiB68.1%237 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/app-31384267.js 3P317 KiB62.5%198 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/4779-84075585.js 3P238 KiB67%160 KiB
https://www.googletagmanager.com/gtm.js?id=GTM-TX6Z97C 3P178 KiB55.1%98 KiB
https://www.googletagmanager.com/gtag/js?id=G-CSFDVCPQ4F&cx=c&gtm=4e69f3 3P191 KiB49.2%94 KiB
https://accounts.google.com/gsi/client 3P99 KiB82.5%82 KiB
https://www.googletagmanager.com/gtag/destination?id=AW-397119219&cx=c&gtm=4e69f3 3P149 KiB54.7%82 KiB
https://www.googletagmanager.com/gtag/js?id=AW-728842606&cx=c&gtm=4e69f3 3P161 KiB49.2%79 KiB
https://cdn.cookielaw.org/scripttemplates/202404.1.0/otBannerSdk.js 3P109 KiB70.3%76 KiB
https://connect.facebook.net/en_US/fbevents.js 3P108 KiB44.7%48 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/5314-33cb86aa.js 3P46 KiB59%27 KiB
https://connect.facebook.net/signals/config/1735692093320310?v=2.9.401&r=stable&domain=www.duolingo.com&hme=2506fb1e365be93f3ccf36e3d92699c622e55613e451d1a2c96bc6095b3873de&ex_m=117%2C232%2C168%2C27%2C81%2C82%2C160%2C77%2C76%2C11%2C178%2C101%2C20%2C152%2C140%2C46%2C84%2C89%2C148%2C173%2C180%2C8%2C4%2C5%2C7%2C6%2C3%2C102%2C114%2C32%2C17%2C31%2C18%2C33%2C34%2C35%2C37%2C55%2C161%2C86%2C125%2C22%2C24%2C51%2C47%2C49%2C48%2C94%2C103%2C107%2C123%2C159%2C162%2C53%2C124%2C29%2C26%2C132%2C78%2C43%2C164%2C163%2C165%2C156%2C154%2C30%2C42%2C66%2C122%2C175%2C79%2C21%2C127%2C92%2C75%2C23%2C96%2C97%2C129%2C95%2C150%2C149%2C153%2C108%2C174%2C177%2C41%2C56%2C126%2C54%2C182%2C109%2C181%2C199%2C246%2C83%2C260%2C259%2C258%2C14%2C25%2C28%2C40%2C62%2C116%2C68%2C10%2C72%2C110%2C111%2C112%2C118%2C143%2C38%2C36%2C145%2C146%2C147%2C142%2C141%2C169%2C85%2C172%2C170%2C171%2C57%2C67%2C136%2C19%2C176%2C52%2C309%2C310%2C311%2C308%2C324%2C349%2C239%2C228%2C69%2C229%2C227%2C352%2C343%2C59%2C240%2C120%2C144%2C91%2C134%2C61%2C133%2C139%2C138%2C65%2C73%2C71%2C166%2C87%2C88%2C128%2C44%2C39%2C60%2C63%2C113%2C179%2C1%2C137%2C16%2C135%2C12%2C2%2C64%2C104%2C15%2C74%2C70%2C131%2C100%2C99%2C184%2C185%2C105%2C106%2C9%2C115%2C183%2C58%2C157%2C98%2C90%2C80%2C130%2C119%2C50%2C158%2C0%2C93%2C151%2C155%2C167%2C45%2C121%2C13%2C186 3P57 KiB42.5%24 KiB
https://www.google-analytics.com/analytics.js 3P21 KiB56.6%12 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/9078-363c7813.js 3P9 KiB74.3%7 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/7459-9ef3350b.js 3P7 KiB72.1%5 KiB

Network

157Requests
3462 KiBTransferred
35Scripts
99.5%3rd-party
2Long tasks
Script (35)
2173 KiB
Fetch (28)
698 KiB
Image (58)
355 KiB
Font (3)
165 KiB
Stylesheet (9)
43 KiB
Other (9)
16 KiB
XHR (11)
6 KiB
Document (2)
4 KiB
Manifest (1)
1 KiB
Ping (1)
1 KiB
Heaviest requests (30)
URLTypeStatusTransfer
https://www.gstatic.com/recaptcha/releases/BnqMGSY_YP4cCmbNINHpJPkd/recaptcha__en.jsScript200347 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/app-31384267.jsScript200317 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/4779-84075585.jsScript200238 KiB
https://www.googletagmanager.com/gtag/js?id=G-CSFDVCPQ4F&cx=c&gtm=4e69f3Script200191 KiB
https://www.googletagmanager.com/gtm.js?id=GTM-TX6Z97CScript200178 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/82f26795696242931a7b905b4918eb1e.jsonFetch200169 KiB
https://www.googletagmanager.com/gtag/js?id=AW-728842606&cx=c&gtm=4e69f3Script200161 KiB
https://www.googletagmanager.com/gtag/destination?id=AW-397119219&cx=c&gtm=4e69f3Script200149 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/e97b1cde32a58c629a0193eea36ddaab.jsonFetch200137 KiB
https://d35aaqx5ub95lt.cloudfront.net/images/splash/lottie/833a22b2834050d139f266a29899bb00.svgImage200122 KiB
https://cdn.cookielaw.org/scripttemplates/202404.1.0/otBannerSdk.jsScript200109 KiB
https://connect.facebook.net/en_US/fbevents.jsScript200108 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/50bda50231c0bce1584e982cebfe8f33.jsonFetch200107 KiB
https://accounts.google.com/gsi/clientScript20099 KiB
https://d35aaqx5ub95lt.cloudfront.net/vendor/f2331bbfd902cdf8971c4d3184a44283.woff2Font20075 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/9819-ec4b6703.jsScript20070 KiB
https://d35aaqx5ub95lt.cloudfront.net/vendor/3bbe299f41d8289a47d91773fee0cb6a.woff2Font20065 KiB
https://connect.facebook.net/signals/config/1735692093320310?v=2.9.401&r=stable&domain=www.duolingo.com&hme=2506fb1e365be93f3ccf36e3d92699c622e55613e451d1a2c96bc6095b3873de&ex_m=117%2C232%2C168%2C27%2C81%2C82%2C160%2C77%2C76%2C11%2C178%2C101%2C20%2C152%2C140%2C46%2C84%2C89%2C148%2C173%2C180%2C8%2C4%2C5%2C7%2C6%2C3%2C102%2C114%2C32%2C17%2C31%2C18%2C33%2C34%2C35%2C37%2C55%2C161%2C86%2C125%2C22%2C24%2C51%2C47%2C49%2C48%2C94%2C103%2C107%2C123%2C159%2C162%2C53%2C124%2C29%2C26%2C132%2C78%2C43%2C164%2C163%2C165%2C156%2C154%2C30%2C42%2C66%2C122%2C175%2C79%2C21%2C127%2C92%2C75%2C23%2C96%2C97%2C129%2C95%2C150%2C149%2C153%2C108%2C174%2C177%2C41%2C56%2C126%2C54%2C182%2C109%2C181%2C199%2C246%2C83%2C260%2C259%2C258%2C14%2C25%2C28%2C40%2C62%2C116%2C68%2C10%2C72%2C110%2C111%2C112%2C118%2C143%2C38%2C36%2C145%2C146%2C147%2C142%2C141%2C169%2C85%2C172%2C170%2C171%2C57%2C67%2C136%2C19%2C176%2C52%2C309%2C310%2C311%2C308%2C324%2C349%2C239%2C228%2C69%2C229%2C227%2C352%2C343%2C59%2C240%2C120%2C144%2C91%2C134%2C61%2C133%2C139%2C138%2C65%2C73%2C71%2C166%2C87%2C88%2C128%2C44%2C39%2C60%2C63%2C113%2C179%2C1%2C137%2C16%2C135%2C12%2C2%2C64%2C104%2C15%2C74%2C70%2C131%2C100%2C99%2C184%2C185%2C105%2C106%2C9%2C115%2C183%2C58%2C157%2C98%2C90%2C80%2C130%2C119%2C50%2C158%2C0%2C93%2C151%2C155%2C167%2C45%2C121%2C13%2C186Script20057 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/904f242fe2ab5477e3b97928d3e1cb89.jsonFetch20053 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/71b01cd301b53ec9879f2d06eb85f5db.jsonFetch20052 KiB
https://d35aaqx5ub95lt.cloudfront.net/js/5314-33cb86aa.jsScript20046 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/c16e90b93e35750c893be4b58720cef2.jsonFetch20044 KiB
https://d35aaqx5ub95lt.cloudfront.net/lottie/splash/aea5aff1143a9410b81448245ad7c839.jsonFetch20041 KiB
https://d35aaqx5ub95lt.cloudfront.net/images/splash/lottie/23ab11cb1e1a9aff54facdf57833373d.svgImage20040 KiB
https://d35aaqx5ub95lt.cloudfront.net/images/splash/lottie/08ec8d0260c55c054e1b97bcbc96ea0f.svgImage20040 KiB
https://d35aaqx5ub95lt.cloudfront.net/images/splash/lottie/9d3c2c99dd19996319a372f79b2ed3c1.svgImage20035 KiB
https://cdn.cookielaw.org/consent/55a7f100-001e-4085-87ec-1a6d522f7d67/018f30d2-10c8-771e-8439-98a6c95838b2/en.jsonFetch20027 KiB
https://d35aaqx5ub95lt.cloudfront.net/vendor/68d22534874c554b0c9ebabea379fc60.woff2Font20025 KiB
https://www.google-analytics.com/analytics.jsScript20021 KiB
https://d35aaqx5ub95lt.cloudfront.net/images/splash/lottie/890eb76de9a395b182c1c28322721405.svgImage20017 KiB

Long tasks (>50 ms)

StartDuration
332 ms209 ms
854 ms66 ms
Analyzing…
running mobile + desktop · ~30s