🔍 Lighthouse Audit Report

generio.ai — Production Site Baseline
Generated: June 10, 2026

Executive Summary

generio.ai has critical performance issues on mobile (LCP 20.2s, 8× above the 2.5s threshold) and incomplete SEO/crawlability infrastructure. The site loads a 2.8MB 3D model immediately on the homepage, ships ~780KB of unused CSS and ~245KB of unused JS in a single bundle, has no valid robots.txt or structured data, and has 25 images without alt text. Desktop scores are moderate but mobile is in the danger zone for Core Web Vitals.

Score Overview

Key Metrics
Performance
SEO & Crawlability
Accessibility
Recommendations

📱 Mobile (Simulated Slow 4G, Moto G4)

🖥️ Desktop (Simulated)

How To Read These Numbers

These values are primarily Lighthouse lab measurements from a simulated environment. They are useful for diagnosing rendering and bundle problems, but they should be paired with PageSpeed Insights / CrUX field data if available before using them as the final performance baseline for business reporting.

Metric Reference

LCPGood: ≤ 2.5s

Largest Contentful Paint measures how long the main visible content takes to appear. For GenerIO, this is currently the most critical user-facing problem.

CLSGood: ≤ 0.1

Cumulative Layout Shift measures visual stability. A low score means content is not jumping around while the page loads.

FCPGood: ≤ 1.8s

First Contentful Paint measures when the first visible content appears. It gives a basic sense of whether the page feels blank for too long.

TBTGood: ≤ 200ms

Total Blocking Time is a lab metric showing how much JavaScript blocks the main thread. High TBT usually means the page feels sluggish before interaction is possible.

Speed IndexLower is better

Speed Index estimates how quickly visible content fills in. It is useful as a comparison metric, but less important than LCP for executive reporting.

TTILower is better

Time to Interactive estimates when the page becomes reliably usable. It helps explain why a page can look loaded but still feel slow.

For this report, the main reference values to focus on are LCP ≤ 2.5s, CLS ≤ 0.1, FCP ≤ 1.8s, and TBT ≤ 200ms. Against those thresholds, GenerIO is acceptable on CLS, borderline on some desktop metrics, and severely underperforming on mobile LCP and mobile responsiveness.

Main Thread Breakdown

Desktop — 1.9s total

Script Evaluation953ms (50%)
953ms
Other689ms (36%)
689ms
Style & Layout194ms (10%)
194ms
Rendering48ms
48ms

Mobile — 6.1s total ⚠️

Script Evaluation2,729ms (45%)
2,729ms
Other2,434ms (40%)
2,434ms
Style & Layout662ms (11%)
662ms
Rendering167ms
167ms

Loading Metrics

First Contentful PaintDesktop 1.5s / Mobile 8.2s ≤1.8s
Largest Contentful PaintDesktop 5.8s / Mobile 20.2s ≤2.5s
Total Blocking TimeDesktop 115ms / Mobile 621ms ≤200ms
Speed IndexDesktop 1.8s / Mobile 8.2s
Time to InteractiveDesktop 5.9s / Mobile 20.7s
Cumulative Layout Shift0.00 ✓

Largest Assets Loaded

AssetSize
teaser_couch.glb (3D model)2,801 KB
index-DC6_1AsX.css804 KB
index-B42U3Fo4.js478 KB
default.hdr (lighting)930 KB
2024-pioneers.jpg390 KB
2025-pioneers.jpg378 KB
evgeniykhavkin.png349 KB
couch_photo.png273 KB

Total page weight: ~7.5 MB across 37 requests. The 3D model alone is 37% of total weight.

Main Pain Points

CRITICAL 3D model blocks LCP

The 2.8MB GLB file loads on the homepage immediately, blocking the largest contentful paint. Mobile LCP is 20.2s — 8× the 2.5s threshold. Consider lazy-loading the 3D viewer and showing a static hero image first.

CRITICAL Massive unused CSS (780KB)

A single 804KB CSS bundle is shipped with ~97% unused on the homepage. Use code splitting, tree shaking, or extract critical CSS inline. This blocks rendering unnecessarily.

HIGH Large unused JavaScript (245KB)

The single 478KB JS bundle contains ~51% unused code on the homepage. Code-split by route and lazy-load non-critical components.

HIGH Unoptimized images

Award images (390KB, 378KB) and team photos (349KB) are served raw without responsive sizes or modern formats (WebP/AVIF). One image has incorrect aspect ratio.

HIGH HTTP/1.1 protocol

The server uses HTTP/1.1 instead of HTTP/2 or HTTP/3. This eliminates multiplexing and means each request blocks others. Upgrade your hosting/CDN to support modern HTTP.

MEDIUM Forced reflow detected

JavaScript is querying geometric properties (like offsetWidth) after style invalidation, causing expensive layout recalculations. Audit animation and measurement code.

Lighthouse SEO Score: 67 Needs Work

  • robots.txt is invalid — Returns SPA shell HTML instead of crawler directives (36 syntax errors)
  • 1 No canonical URL — Missing canonical tags on indexable marketing routes, which weakens preferred-URL and duplicate-content signals
  • 1 No structured data — No JSON-LD or schema markup detected, so the site has no rich-result eligibility baseline
  • 1 1 non-descriptive link — Link found without meaningful text
  • ✓ Meta description present
  • ✓ Valid hreflang
  • ✓ HTTP 200 status code

SEO Baseline Report Findings

Thin initial HTML

Homepage returns only ~2,250 chars of HTML — just metadata + <div id="app"></div>. No meaningful marketing content is server-rendered.

All routes serve same SPA shell

/pricing and other public routes return the same generic HTML with no route-specific content. Crawlers see identical pages.

robots.txt misconfigured

Returns text/html with SPA shell instead of plain-text crawler rules. Search engines cannot discover sitemap or crawling policy.

sitemap.xml missing

Returns SPA shell HTML. No XML sitemap exists for search engines to discover and prioritize pages.

⚠️

No structured data / JSON-LD

No schema.org markup (Organization, WebSite, FAQ, etc.) — missing rich result potential in search.

⚠️

Metadata exists but route-generic

Basic OG/twitter tags exist on homepage but route-level metadata is not server-rendered. Social previews are weak beyond the homepage.

Verified Production Evidence

  • E Homepage HTML is thin — production response is about 2,250 characters and contains mainly metadata plus <div id="app"></div>
  • E /pricing returns the SPA shell — server response uses the same generic title and shell HTML instead of route-specific content
  • E robots.txt returns HTML — HTTP 200, but Content-Type: text/html instead of plain text crawler directives
  • E sitemap.xml returns HTML — HTTP 200, but SPA shell HTML instead of XML sitemap content

SEO Priority Fixes (Low Regret, No Migration Required)

1 — Critical Serve a real robots.txt

Return plain text with User-agent: * and Sitemap: https://generio.ai/sitemap.xml. This is a server/CDN configuration fix — no code changes needed.

2 — Critical Serve a real sitemap.xml

Generate an XML sitemap listing all important public URLs (/pricing, /about, /contact, etc.). Can be static or generated at build time.

3 — High Add canonical URL tags

Each route should render its own <link rel="canonical"> to prevent duplicate content signals.

4 — High Add structured data (JSON-LD)

Implement Organization and WebSite schema at minimum. Add FAQ, Product, or Article schema where applicable to enable rich results.

5 — High Pre-render key public routes

Use vite-ssg or similar to pre-render /, /pricing, and legal pages with meaningful HTML content. Keep the 3D viewer client-only. This directly addresses the "thin HTML" problem.

Lighthouse Accessibility Score: 76 Needs Work

  • 25 Images missing alt attributes — 25 <img> elements have no alt text. Screen readers cannot describe these images. Fix: add descriptive alt or alt="" for decorative images.
  • 4 Buttons without accessible names — Icon buttons (likely social media or UI controls) lack aria-labels. Fix: add aria-label to each icon button.
  • 1 ARIA tooltip without name — A tooltip element has no accessible name for screen readers.
  • 1 Form element without label — A form control has no associated <label> element. Fix: associate labels with inputs using for/id or wrapping.

Additional Issues

  • ! user-scalable="no" in viewport meta — Prevents zooming, which is critical for low-vision users. Remove user-scalable=no and maximum-scale restrictions.
  • ! Back/forward cache blocked — The page prevents bfcache restoration, degrading navigation UX. Audit event listeners and unload handlers.
  • ✓ Sufficient color contrast
  • ✓ Valid heading order
  • ✓ Viewport meta present, but accessibility-related zoom restrictions should be removed

Quick Wins (est. +14 points to Accessibility score)

These are low-effort fixes that will move the accessibility score from 76 → 85-90:

  • Add alt to all images: Run a script to add descriptive alt text to 25 images in the component templates
  • Label icon buttons: Add aria-label to the 4 unnamed icon buttons
  • Fix tooltip: Add aria-label to the unnamed ARIA tooltip
  • Label form controls: Associate the stray form element with a label
  • Enable zoom: Remove user-scalable=no from viewport meta

Priority Matrix — What to Fix and When

🔴 Immediate (Days 1-3)

Critical Fix robots.txt and sitemap.xml

Server config only. No code changes. Unblocks search engine discovery immediately.

Critical Lazy-load the 3D model / GLB viewer

Move the 2.8MB teaser_couch.glb to load on user interaction or after page is interactive. Show a fallback image for the hero/above-fold. This is the #1 LCP blocker.

🟠 Short-term (Week 1-2)

High Code-split CSS and JS bundles

Split the single 804KB CSS + 478KB JS into per-route chunks. Extract critical CSS inline in <head>. Use Vite's built-in code splitting. Expected savings: ~780KB unused CSS + ~245KB unused JS removed from initial load.

High Optimize all images for web

Convert award JPEGs and team PNGs to WebP with compression. Add srcset for responsive sizes. Fix aspect ratio of evgeniykhavkin.png (displayed 50×50, actual 512×563). Expected savings: ~800KB.

High Fix all accessibility issues

Add alt text to 25 images, aria-labels to 4 buttons and 1 tooltip, label the stray form control, remove user-scalable=no. Score should jump from 76 to 90+.

🟡 Medium-term (Month 1)

Medium Pre-render key routes with vite-ssg

Generate static HTML for /, /pricing, /about, /legal pages with full content. Keep 3D viewer client-only. Improves SEO score and crawlability dramatically.

Medium Upgrade to HTTP/2 or HTTP/3

Enable modern HTTP on your CDN/hosting. Adds multiplexing, header compression, and eliminates the head-of-line blocking currently happening with HTTP/1.1.

Medium Add structured data & canonical URLs

Implement JSON-LD Organization schema, per-route canonical URLs, and route-specific metadata. Enables rich results and fixes duplicate content signals.

🔵 Long-term (Month 2+)

Low Priority Fix bfcache compatibility

Audit page lifecycle handlers to allow back/forward cache, improving navigation speed for returning visitors.

Low Priority Add source maps for debugging

Enable source maps in production builds for the large first-party JS bundle to aid debugging. Consider using hidden source maps if security is a concern.

Low Priority Evaluate Nuxt migration

Only after immediate SEO hygiene and SSG proof of concept. Use evidence from vite-ssg spike to decide if full Nuxt migration is warranted.

Projected Score Improvements

Category Current (Mobile) After Immediate Fixes After Short-term Fixes Target
Performance41557090+
SEO67789290+
Accessibility76909590+
Best Practices969610090+

Targets based on internal benchmarks from the SEO baseline report. Mobile performance is the hardest category — expect incremental gains rather than an immediate jump to 90+.