AvocadoScore audit · vercel.com
vercel.com
Real users are mostly fine — a focused round of fixes will get the site fully healthy.
Fix this firstUnblock the initial rendercritical · medium effort · 3 pagesThis verdict weights real-user data (Chrome UX Report). Cold lab first-visits shown below run slower.
- Mobile perfMedian Google Lighthouse Performance score across scanned pages, mobile viewport. 90+ excellent · 50–89 needs work · under 50 poor.
- 63/100Almost ripe
- SEO readyComposite of 12 SEO health checks on the homepage: HTTPS, title, meta description, structured data, Open Graph, canonical, H1, viewport, etc.
- 96/100Ripe
- AI readyComposite of 17 AI-readiness checks across three pillars. Access: robots.txt policies for 10 AI crawlers (citation vs training), CDN/firewall gates, snippet directives. Comprehension: llms.txt, validated structured data, server-rendered content, heading outline. Trust: author/organization provenance, content dates.
- 94/100Ripe
Scanned 11 days ago3 pagesNumber of pages successfully scanned. Free preview scans 3 pages; the paid Full audit covers up to 100.31 views
What you’re not seeing yet
Your 3 sampled pages averaged 63 on mobile performance — we don’t know which of the other 7,940 pages are dragging that median. The full audit scans up to 100 of your most important pages so you can find the templates costing you traffic.
Pages we found but didn’t scan
7-day refund · no questions
Overview
Key findings
The headline takeaways, in plain English.
- 1In cold lab tests, 3 of 3 scanned pages render in the "Unripe" band (the overall verdict above weights real-user data, which is faster).
- 2Median mobile LCP is 6.1 s — about 2.4× the 2.5 s target.
- 3The biggest opportunity: Unblock the initial render — affects 3 pages.
- 4The heaviest page ships 1.4 MB of JavaScript — a primary cause of slow loads.
- 5Strengths: accessibility, SEO and best practices score well — focus effort on performance.
AI & search visibility
Can AI answer engines find, read and cite your site?
More people now ask ChatGPT, Perplexity and Claude instead of Googling. This section answers whether those answer engines can reach your content, understand it, and cite you — the audit other tools skip.
AI agents can read your site; a few quick additions would make it easier to cite.
Fix next: declare a bot policy · add structured data — see the action plan for copy-paste fixes.
OG image qualityOpen Graph image is the thumbnail shown anywhere your page is shared — Slack, LinkedIn, iMessage, Discord. Many LLM answer interfaces use it too.
https://lishhsx6kmthaacj.public.blob.vercel-storage.com/og-home-not-x.png

- ✓ReachableHTTP 200
- ✓Content-Typeimage/png
- ✓File size826.9 KB
Crawl-as-bot diffWe fetch your homepage twice — once with a regular browser UA, once claiming to be GPTBot — and compare the content each receives. Big drops mean LLM crawlers see a stripped page.
Homepage · GPTBot UA
GPTBot sees 3,329 chars · browser sees 3,329 chars
GPTBot sees 100% of the content a browser sees — essentially identical.
llms.txt contentllms.txt is the emerging standard (https://llmstxt.org) — a short markdown file at the site root that LLM answer engines pull as a 'site map for AI'.
1693 links · 21 sections
- ✓/llms.txt presentHTTP 200
- ✓Has main heading# Title found
- ✓Link coverage1693 markdown links
- ✓Sections21 `##` sections
- ✓/llms-full.txtHTTP 200 — richer LLM context
Robots.txt advisorrobots.txt tells crawlers (Google, GPTBot, ClaudeBot…) which paths they may visit and where to find your sitemap. Misconfigurations here invisibly tank crawling.
1 group · 1 sitemap ref
- ✓robots.txt present1 user-agent group
- ✓Allows crawlers`User-agent: *` permits standard crawling
- ✓Sitemap declared1 sitemap ref
- ✕AI bot policiesNo explicit policy for GPTBot, ClaudeBot, Google-Extended, etc. — decide and declare
- ✓Crawl-delayNo crawl-delay — crawlers use their own pacing
Schema.org coverageSchema.org types tell search engines and LLMs what kind of thing each page is — Article, Product, FAQPage, etc. Sites with rich schema get richer answer-engine treatment.
1/3 pages (33%)| Schema type | Pages | Coverage |
|---|---|---|
| SoftwareApplication | 1 | 33% |
Readiness
SEO & AI Readiness
Two scorecards derived from the homepage HTML, robots.txt and AI-specific well-known files. The differentiating analysis no other tool does.
Both scorecards are in good shape — the site is well-prepared for search and AI-era discovery.
SEO checklist
11/12 passing- !Meta description45 chars — aim for 70–160
▸ 11 passing checks — show all
- ✓HTTPSServed over HTTPS
- ✓Sitemapsitemap.xml present
- ✓robots.txtPresent
- ✓Title tag31 chars
- ✓Canonical URLhttps://vercel.com
- ✓Open GraphComplete (title, description, image)
- ✓Twitter Cardsummary_large_image
- ✓Structured data (JSON-LD)1 block
- ✓H1 headingExactly one H1
- ✓Language declaration<html lang="en">
- ✓Viewport metaSet
AI readiness — three pillars
15/17 passingCan AI crawlers fetch the site at all?
Once fetched, can they parse and chunk it?
Can they attribute and date the content?
Access — Can AI crawlers fetch the site at all?
5/5 passingAll 5 checks pass. Nothing to fix here.
▸ 5 passing checks — show all
- ✓AI answer-engine accessNo restrictions on any of the 5 search/citation crawlers (default-allowed)
- ✓Training-crawler stanceNo training opt-outs declared — content may be used for model training (5 tokens checked)
- ✓Search-index crawlers (AI surfaces)Googlebot and Bingbot can crawl — the indexes behind AI Overviews, ChatGPT search and Copilot can see the site
- ✓CDN / firewall gateGPTBot sees 100% of the content a browser sees — essentially identical.
- ✓Snippet directivesNo nosnippet / max-snippet / noai restrictions
Comprehension — Once fetched, can they parse and chunk it?
9/10 passing- !RSS/Atom feedNo feed advertised in <head> — several AI systems ingest feeds for freshness
▸ 9 passing checks — show all
- ✓/llms.txtPresent — AI-friendly content map
- ✓/llms-full.txtPresent — expanded LLM context
- ✓Structured data (validated)1 block, all required properties present (Offer, Organization, SoftwareApplication)
- ✓Server-rendered content8143 words in initial HTML
- ✓Semantic HTMLUses main, header, footer, nav
- ✓Heading outline30 headings in a clean hierarchy
- ✓Open Graph metadataComplete
- ✓Sitemap freshnesssitemap.xml carries <lastmod> dates — recrawl prioritization works
- ✓Consent wallNo consent-manager wall detected
Trust — Can they attribute and date the content?
1/2 passing- !Content datesNo datePublished/dateModified in structured data — answer engines can't judge freshness
▸ 1 passing check — show all
- ✓Author / Organization markupPerson/Organization schema present
AI bot policies (robots.txt)
10 bots tracked▸ Show all 10 bots
| Bot | Vendor | Role | Status |
|---|---|---|---|
| GPTBot | OpenAI | trainingModel-training opt-out token — blocking it protects IP and does NOT affect AI-search citations. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| OAI-SearchBot | OpenAI | citationLive retrieval/citation crawler — blocking it removes the site from AI answers. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| ChatGPT-User | OpenAI | citationLive retrieval/citation crawler — blocking it removes the site from AI answers. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| ClaudeBot | Anthropic | trainingModel-training opt-out token — blocking it protects IP and does NOT affect AI-search citations. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| Claude-User | Anthropic | citationLive retrieval/citation crawler — blocking it removes the site from AI answers. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| Google-Extended | trainingModel-training opt-out token — blocking it protects IP and does NOT affect AI-search citations. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. | |
| PerplexityBot | Perplexity | citationLive retrieval/citation crawler — blocking it removes the site from AI answers. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| Perplexity-User | Perplexity | citationLive retrieval/citation crawler — blocking it removes the site from AI answers. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| Applebot-Extended | Apple | trainingModel-training opt-out token — blocking it protects IP and does NOT affect AI-search citations. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
| CCBot | Common Crawl | trainingModel-training opt-out token — blocking it protects IP and does NOT affect AI-search citations. | Not specifiedYour robots.txt has no rule naming this bot. Most crawlers treat that as implicit allow, but the intent is unclear. |
Declare a policy either way so the intent is clear — see the action plan for a copy-paste robots.txt block.
Readiness is sampled on the site homepage; deeper pages may differ. AI bot policies follow the llms.txt proposal and the established robots.txt convention.
Deep dive
Performance analysis
Where this site stands against its peers, which viewport is the weak link, the slowest pages, and the issues that recur most.
Performance vs peersEstimated percentile rank of this site's average mobile performance score within its peer group, assuming a roughly normal spread. A rough positioning estimate, not a precise figure.
At 63/100, this site is above the Next.js site (peer median 55).
Mobile vs desktopAverage mobile vs desktop Lighthouse performance across scanned pages. Mobile almost always lags; a large gap means mobile users get a much worse experience than desktop testing suggests.
Mobile runs 34 points behind desktop — most of the slowness lives on phones.
- /about57 → 99 −42
- /pricing56 → 94 −38
- /76 → 97 −21
Slowest pagesThe scanned pages with the highest mobile Largest Contentful Paint — your slowest-loading pages, where optimization pays off most.
- 110.9 s/aboutperf 57/100
- 26.1 s/pricingperf 56/100
- 35.4 s/perf 76/100
Ranked by mobile LCP (Largest Contentful Paint).
Most frequent issuesHow often each issue recurs across the scanned pages. Fixing a high-frequency issue once at the template level often resolves it everywhere.
- Render-blocking requests3 pages · 100%
- `[user-scalable="no"]` is used in the `<meta name="viewport">` element or the `[maximum-scale]` attribute is less than 5.3 pages · 100%
- Browser errors were logged to the console3 pages · 100%
- Forced reflow3 pages · 100%
- Legacy JavaScript3 pages · 100%
- Network dependency tree3 pages · 100%
- Reduce unused CSS3 pages · 100%
- Reduce unused JavaScript3 pages · 100%
Core Web Vitals
How fast your site really is
Real-user experience from the Chrome UX Report (p75, 28-day window). Lab metrics below show cold first-visit timings.
Page Weight
Resource breakdown
Pages average 2.1 MB across 124 requests. Third-party scripts add 20 KB on top.
- JavaScript1.3 MB62%
- Images177 KB8%
- CSS147 KB7%
- Fonts226 KB11%
- Other258 KB12%
Heaviest page: /about at 2.5 MB over 155 requests.
Deep dive
Resource intelligence
Where time and bytes are going across your site — the specific vendors and code paths behind the totals.
Top third-party vendors
Site-wide totals| Vendor | Total bytes | BlockingTotal time this vendor's scripts blocked the main thread from responding to taps and clicks, summed across pages. | PagesHow many scanned pages load this vendor. |
|---|---|---|---|
| Sentry | 4 KB | 0 ms | 3 |
| vercel-storage.com | 57 KB | 0 ms | 1 |
Main-thread time
Average per page · 3.0 s- Script evaluation1.6 s51%
- Style + layout511 ms17%
- Script parse / compile422 ms14%
- Other379 ms12%
- Parse HTML66 ms2%
- Garbage collection61 ms2%
- Paint + composite34 ms1%
Image format breakdown
13% modern (WebP / AVIF)- png382 KB
- svg79 KB
- webp57 KB
- avif13 KB
Technology
Detected stack
What we recognised from the homepage HTML, response headers and DNS. Used to tailor stack-specific recommendations.
Site health
Security, compression and SEO hygiene
Headers, compression and cross-page duplicates checked on the homepage. These are the basics a professional site is expected to get right.
Security headersScore across 6 OWASP-baseline HTTP response headers on the homepage. 100 = all present with strong values; 0 = none set.
7 pass · 3 warn · 0 fail
- ✓Strict-Transport-SecurityHSTS — tells browsers "only use HTTPS for this domain." Without it, a man-in-the-middle can downgrade users to HTTP on first visit.max-age=31536000 · includeSubDomains · preload
- !Content-Security-PolicyCSP — first-line defence against XSS and data-injection. Defines which scripts/styles/images can load and from where.Present but uses 'unsafe-inline' or 'unsafe-eval' — weakens protection
- ✓X-Frame-OptionsPrevents your pages being embedded in <iframe> on someone else's site (clickjacking protection).DENY
- ✓X-Content-Type-OptionsStops browsers from MIME-sniffing — keeps untrusted uploads from being executed as scripts.nosniff
- ✓Referrer-PolicyControls how much of the referring URL leaks to third parties. Default leaks the full URL including paths and query.origin-when-cross-origin
- !Permissions-PolicyRestricts which browser features (camera, geolocation, payment) the page may use.Missing — no explicit restriction on browser features (camera, geo, etc.)
- ✓Exposed secretsNo live API keys or private keys found in the served HTML
- ✓Mixed contentNo insecure http:// subresources on the page
- ✓Outdated JS librariesNo known-vulnerable library versions detected in page scripts
- !Cookie security flagsHomepage cookie is missing HttpOnly — session cookies without these are exposed to theft / CSRF
Compression & cacheHow the homepage HTML is delivered: which compression encoding the server used (Brotli > gzip > none) and whether Cache-Control is set sensibly.
Action Plan
What to fix
Root-cause groupings, sequenced by effort. Each card opens a ready-to-paste task you can create in Jira or Linear with one click.
- 01Address accessibility gaps⚡ quick win
- 02Declare a policy for AI crawlers⚡ quick win
- 01Unblock the initial render
- 02Right-size and modernize images
- 03Add Schema.org structured data
- 01Cut and defer JavaScript
Unblock the initial render
CSS and JavaScript in the critical path delay first paint — visitors stare at a blank screen, and Largest Contentful Paint (a Google ranking signal) suffers.
Impact — Largest Contentful Paint is a Google ranking signal. Sites in the slowest quartile of their category see 30–50% less organic search traffic than faster peers.
- ·Render-blocking requests — Est savings of 1,380 ms
- ·Reduce unused CSS — Est savings of 38 KiB
▸ Steps (4)
- 1.Inline critical above-the-fold CSS and defer the rest.
- 2.Add async or defer to render-blocking scripts.
- 3.Preload the LCP image and key fonts so the browser discovers them early.
- 4.Remove unused CSS rules from above-the-fold stylesheets.
- For your stack
- 1.Use next/font so fonts do not block render.
- 2.Avoid importing large global CSS; prefer per-component styles.
Cut and defer JavaScript
Large scripts block the browser’s main thread, so the page looks loaded but does not respond to taps or clicks. This is the most common cause of a slow mobile experience and directly drives up bounce rate.
Impact — Heavy JavaScript is the #1 driver of slow mobile sites — 53% of mobile users abandon pages that take longer than 3 seconds to load (Google mobile-speed research).
- ·Reduce unused JavaScript — Est savings of 503 KiB
- ·Minimize main-thread work — 3.7 s
- ·Reduce JavaScript execution time — 1.9 s
- ·Legacy JavaScript — Est savings of 26 KiB
▸ Steps (4)
- 1.Audit the bundle to find the largest dependencies (a bundle analyzer or source-map-explorer).
- 2.Code-split so route- and below-the-fold code loads on demand instead of upfront.
- 3.Remove or replace heavy third-party scripts; load non-critical ones with async/defer or after first interaction.
- 4.Drop legacy polyfills and transpilation targets that modern browsers no longer need.
- For your stack
- 1.Use next/dynamic to lazy-load heavy components.
- 2.Run @next/bundle-analyzer to find oversized chunks.
- 3.Set a modern browserslist so Next.js stops shipping legacy transforms.
Address accessibility gaps
Accessibility issues exclude users of assistive technology and create legal exposure (ADA / European Accessibility Act). Many fixes also help SEO.
Impact — About 15% of users have a disability (WHO). Accessibility gaps both exclude these users and create ADA/EAA compliance risk in the US and EU.
▸ Steps (3)
- 1.Give interactive elements and dialogs accessible names (aria-label or visible text).
- 2.Ensure every meaningful image has descriptive alt text.
- 3.Check color contrast meets WCAG AA.
Declare a policy for AI crawlers
Answer engines like ChatGPT, Perplexity and Claude crawl with named bots (GPTBot, ClaudeBot, Google-Extended…). With no explicit robots.txt rule you have made no decision — you neither invited them in to be cited nor kept them out. Either choice is fine; silence isn’t.
Impact — AI answer engines are a fast-growing discovery channel. Sites they can’t identify a policy for are crawled on the bot’s terms, and sites that block them forfeit citations — both are decisions worth making deliberately.
- ·Unspecified: GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Google-Extended, PerplexityBot, Perplexity-User, Applebot-Extended, CCBot
# Allow AI answer engines to read and cite your content: User-agent: GPTBot Allow: / User-agent: OAI-SearchBot Allow: / User-agent: ChatGPT-User Allow: / User-agent: ClaudeBot Allow: / User-agent: Claude-User Allow: / User-agent: Google-Extended Allow: / User-agent: PerplexityBot Allow: / User-agent: Perplexity-User Allow: / User-agent: Applebot-Extended Allow: / User-agent: CCBot Allow: / # …or block them from training/crawling instead — pick one: # (replace "Allow: /" with "Disallow: /" above)
▸ Steps (4)
- 1.Decide whether you want AI answer engines to read and cite your content.
- 2.Add an explicit Allow or Disallow rule for each major AI bot in robots.txt.
- 3.If you allow them, make sure your key content is server-rendered so they can actually read it.
- 4.Re-run the readiness checker to confirm the policy is detected.
Right-size and modernize images
Oversized images waste bandwidth and slow the largest element on the page. On mobile connections this is often the single biggest load-time cost.
Impact — Images account for roughly 25% of an average mobile page (HTTP Archive). Every MB of unoptimized images adds 1–2 seconds of mobile load time.
- ·Improve image delivery — Est savings of 349 KiB
▸ Steps (4)
- 1.Serve images at the dimensions they are displayed, with srcset for different screen sizes.
- 2.Use modern formats (WebP/AVIF) with fallbacks.
- 3.Lazy-load below-the-fold images.
- 4.Compress images — aim well under 200 KB for most photos.
- For your stack
- 1.Use the next/image component — it handles sizing, modern formats and lazy-loading automatically.
Add Schema.org structured data
Schema.org JSON-LD tells search engines and answer engines what each page is — an Organization, an Article, a Product, an FAQ. Pages with structured data earn richer search results and are easier for LLMs to summarize and cite accurately.
Impact — Structured data is a low-risk SEO and AI-visibility win: it doesn’t change your design but materially improves how engines understand and present your pages.
- ·Present: SoftwareApplication (1)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "vercel.com",
"url": "https://vercel.com",
"logo": "https://vercel.com/logo.png",
"sameAs": [
"https://www.linkedin.com/company/your-company",
"https://twitter.com/your-handle"
]
}
</script>▸ Steps (4)
- 1.Add an Organization + WebSite schema to your homepage (identity for the whole site).
- 2.Add BreadcrumbList to section pages so engines understand your hierarchy.
- 3.Add page-type schema where it fits — Article/BlogPosting on posts, FAQPage on Q&A, Product on product pages.
- 4.Validate with Google’s Rich Results Test before shipping.
Shipped a fix? Open the task list or hit ↻ Re-scan in the header — the comparison shows what moved.
Detail
Per-page results
Mobile metrics shown. Click a row for the full per-page deep dive — LCP element, page weight breakdown, top failing checks.
| Page | PerfMobile Performance score (0–100). | LCPLargest Contentful Paint — when the biggest visible element finishes rendering. Lab value. Target ≤ 2.5 s. | CLSCumulative Layout Shift — total visual jank during load. Unitless. Target ≤ 0.1. | TBTTotal Blocking Time — total main-thread blocking time during load. Target ≤ 200 ms. | WeightTotal page transfer size — HTML + CSS + JS + images + fonts. |
|---|---|---|---|---|---|
| /about→ | 57 | 10.9 s | 0.000 | 457 ms | 2.5 MB |
| /pricing→ | 56 | 6.1 s | 0.000 | 679 ms | 1.8 MB |
| /→ | 76 | 5.4 s | 0.000 | 162 ms | 2.0 MB |
3 of 3 pages scanned successfully. Each row links to the full per-page report with mobile + desktop side by side.
Coverage
Scan coverage
Pages were discovered via sitemap and sampled across URL patterns. Issues found on a sampled page very likely affect the rest of its pattern group.
Discovery & sampling detail▸
Coverage
Scan coverage
Pages were discovered via sitemap and sampled across URL patterns. Issues found on a sampled page very likely affect the rest of its pattern group.
- Discovered
- 7943
- Sampled
- 3
- Scanned OK
- 3
- Failed
- 0
Methodology
How we measured this
Every page measured with Google PageSpeed Insights (1 run per page per viewport — quick scan). Real-user data, where shown, comes from the Chrome UX Report.
- ▸Lab data is a cold first visit from Google's US infrastructure; real users with warm caches and in other regions will differ.
- ▸Mobile is emulated on throttled slow-4G; desktop is unthrottled. Only public pages are scanned.
- ▸Quick scan (1 run/page) — upgrade to a paid scan for median-of-3 accuracy.
Full deep-dive on every check at /methodology.
Share
Embed this badge anywhere
A live SVG badge — embeds in your README, site footer, or blog post. Updates whenever you re-scan.
Public report URL
https://avocadoscore.io/r/509903f8-ee6d-4d7d-9c19-1e27de86fb0cMarkdown (for README)
[](https://avocadoscore.io/r/509903f8-ee6d-4d7d-9c19-1e27de86fb0c)HTML (for site footer)
<a href="https://avocadoscore.io/r/509903f8-ee6d-4d7d-9c19-1e27de86fb0c"><img src="https://avocadoscore.io/api/scans/509903f8-ee6d-4d7d-9c19-1e27de86fb0c/badge?metric=verdict" alt="AvocadoScore — overall verdict" /></a>Next Steps
Where to go from here
- 1Start this week. Knock out the 2 quick wins from the Action Plan — small effort, immediate gain.
- 2Re-scan after each round of fixes. Hit Re-scan in the header after each round — the comparison shows what moved and what didn’t.
Free preview · 3 of 7,943 pages
Want this depth on every page?
You've seen the format. The Full audit takes the same lens across 7,940 more pages you can't see yet — and ships the result as one ranked fix list your engineer can act on.
- Median of 3 PageSpeed runs per page (vs 1 in the preview) — stable numbers you can ship from
- Up to 100 pages — covers /pricing, /checkout, and every template that matters
- Per-page deep dives: LCP element, named offenders, third-party impact
- Plain-English fix list with effort estimates in dev-weeks
- 3 free re-runs included — re-scan after every release at no extra cost
- 7-day refund, no questions, no “please tell us why”
One-time · No subscription · 7-day refund