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.
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.
Largest Contentful Paint measures how long the main visible content takes to appear. For GenerIO, this is currently the most critical user-facing problem.
Cumulative Layout Shift measures visual stability. A low score means content is not jumping around while the page loads.
First Contentful Paint measures when the first visible content appears. It gives a basic sense of whether the page feels blank for too long.
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 Index estimates how quickly visible content fills in. It is useful as a comparison metric, but less important than LCP for executive reporting.
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.
| Asset | Size |
|---|---|
| teaser_couch.glb (3D model) | 2,801 KB |
| index-DC6_1AsX.css | 804 KB |
| index-B42U3Fo4.js | 478 KB |
| default.hdr (lighting) | 930 KB |
| 2024-pioneers.jpg | 390 KB |
| 2025-pioneers.jpg | 378 KB |
| evgeniykhavkin.png | 349 KB |
| couch_photo.png | 273 KB |
Total page weight: ~7.5 MB across 37 requests. The 3D model alone is 37% of total weight.
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.
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.
The single 478KB JS bundle contains ~51% unused code on the homepage. Code-split by route and lazy-load non-critical components.
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.
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.
JavaScript is querying geometric properties (like offsetWidth) after style invalidation, causing expensive layout recalculations. Audit animation and measurement code.
Homepage returns only ~2,250 chars of HTML — just metadata + <div id="app"></div>. No meaningful marketing content is server-rendered.
/pricing and other public routes return the same generic HTML with no route-specific content. Crawlers see identical pages.
Returns text/html with SPA shell instead of plain-text crawler rules. Search engines cannot discover sitemap or crawling policy.
Returns SPA shell HTML. No XML sitemap exists for search engines to discover and prioritize pages.
No schema.org markup (Organization, WebSite, FAQ, etc.) — missing rich result potential in search.
Basic OG/twitter tags exist on homepage but route-level metadata is not server-rendered. Social previews are weak beyond the homepage.
<div id="app"></div>/pricing returns the SPA shell — server response uses the same generic title and shell HTML instead of route-specific contentrobots.txt returns HTML — HTTP 200, but Content-Type: text/html instead of plain text crawler directivessitemap.xml returns HTML — HTTP 200, but SPA shell HTML instead of XML sitemap contentReturn plain text with User-agent: * and Sitemap: https://generio.ai/sitemap.xml. This is a server/CDN configuration fix — no code changes needed.
Generate an XML sitemap listing all important public URLs (/pricing, /about, /contact, etc.). Can be static or generated at build time.
Each route should render its own <link rel="canonical"> to prevent duplicate content signals.
Implement Organization and WebSite schema at minimum. Add FAQ, Product, or Article schema where applicable to enable rich results.
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.
<img> elements have no alt text. Screen readers cannot describe these images. Fix: add descriptive alt or alt="" for decorative images.aria-label to each icon button.<label> element. Fix: associate labels with inputs using for/id or wrapping.user-scalable=no and maximum-scale restrictions.These are low-effort fixes that will move the accessibility score from 76 → 85-90:
aria-label to the 4 unnamed icon buttonsaria-label to the unnamed ARIA tooltipuser-scalable=no from viewport metaServer config only. No code changes. Unblocks search engine discovery immediately.
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.
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.
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.
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+.
Generate static HTML for /, /pricing, /about, /legal pages with full content. Keep 3D viewer client-only. Improves SEO score and crawlability dramatically.
Enable modern HTTP on your CDN/hosting. Adds multiplexing, header compression, and eliminates the head-of-line blocking currently happening with HTTP/1.1.
Implement JSON-LD Organization schema, per-route canonical URLs, and route-specific metadata. Enables rich results and fixes duplicate content signals.
Audit page lifecycle handlers to allow back/forward cache, improving navigation speed for returning visitors.
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.
Only after immediate SEO hygiene and SSG proof of concept. Use evidence from vite-ssg spike to decide if full Nuxt migration is warranted.
| Category | Current (Mobile) | After Immediate Fixes | After Short-term Fixes | Target |
|---|---|---|---|---|
| Performance | 41 | 55 | 70 | 90+ |
| SEO | 67 | 78 | 92 | 90+ |
| Accessibility | 76 | 90 | 95 | 90+ |
| Best Practices | 96 | 96 | 100 | 90+ |
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+.