{"url":"https://kawiare.ee/","date":"2026-07-06","siteName":"Kawiare - Experience of Taste","overall":58,"reasoning":"Mobile performance is critically low (PSI 50) driven by a 10.0 s LCP and 11 render-blocking scripts, which severely impacts user experience on mobile devices. Security headers are incomplete (40/100) with missing CSP and weak HSTS, though the site lacks auth/payment signals. Accessibility is mostly strong (PSI 97) but contains one serious contrast violation and structural issues (3 H1s). Desktop performance is significantly better (68), highlighting a mobile-first optimization gap.","confidence":"high","fixes":[{"priority":1,"title":"Eliminate render-blocking JavaScript","impact":"LCP, FCP, TBT","problem":"11 render-blocking scripts delay first paint; FCP is 3.89 s and LCP is 10.0 s on mobile.","solution":"Add `defer` or `async` to non-critical scripts in `<head>`. Move scripts to footer where possible.\n```html\n<script src=\"...\" defer></script>\n```"},{"priority":1,"title":"Optimize Largest Contentful Paint (LCP) image","impact":"LCP, Page Weight","problem":"LCP is 10.0 s; hero image is 1.46 MB total page weight with 6 images missing lazy loading.","solution":"Compress hero image to WebP/AVIF. Add `fetchpriority=\"high\"` to LCP image. Ensure `loading=\"lazy\"` on below-fold images.\n```html\n<img src=\"hero.webp\" fetchpriority=\"high\" alt=\"...\">\n```"},{"priority":2,"title":"Fix heading structure and contrast","impact":"Accessibility, SEO","problem":"3 `<h1>` elements detected; 1 serious color-contrast violation on `#cookiescript_accept`.","solution":"Ensure exactly one `<h1>` per page. Increase contrast ratio on cookie button text to ≥4.5:1.\n```css\n#cookiescript_accept { color: #333; background: #fff; } /* Example */\n```"},{"priority":2,"title":"Strengthen HSTS and add baseline headers","impact":"Security, Transport","problem":"HSTS missing preload directive; Security Headers grade is 40/100.","solution":"Add `preload` to HSTS and ensure `X-Frame-Options` is consistent.\n```apache\nHeader always set Strict-Transport-Security \"max-age=63072000; includeSubDomains; preload\"\n```"},{"priority":3,"title":"Implement Content Security Policy (CSP)","impact":"XSS Defense","problem":"CSP is missing. Site signals indicate no auth/payments/UGC, so risk is lower but defense-in-depth is recommended.","solution":"Deploy a nonce-based CSP rather than a static allowlist.\n```apache\nHeader always set Content-Security-Policy \"default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic'\"\n```"}],"coverage":{"pct":100,"missing":[]},"psiSnapshot":{"rows":[{"pageUrl":null,"perfMobile":50,"perfDesktop":68,"lcpMobileMs":9968.589453433833,"lcpDesktopMs":1617.5435227642993,"clsMobile":0,"clsDesktop":0.637178}]},"optimizationChecklist":{"items":[{"id":"caching","title":"Page caching plugin / CDN active","status":"pass","detail":"Caching plugin detected (WP Rocket)","evidence":["HTML markers: WP Rocket","generator: WordPress 7.0"]},{"id":"lazyload","title":"Images lazy-loaded","status":"pass","detail":"All raster images use loading=\"lazy\".","evidence":[]},{"id":"heroEager","title":"Hero image eagerly loaded","status":"pass","detail":"Hero image is eagerly loaded (inferred from DOM order/size — Lighthouse LCP element unavailable).","evidence":["hero: https://kawiare.ee/wp-content/uploads/2026/06/Kawiare-tooted-1.png","loading: eager","fetchpriority: (not set)"]},{"id":"heroBackground","title":"Hero is a real <img> (not a CSS background-image)","status":"n/a","detail":"No CSS background-images detected on raster-image-eligible elements.","evidence":[]},{"id":"responsive","title":"Responsive images (srcset / <picture>)","status":"warn","detail":"Only 15/22 raster images use srcset or <picture> (68%).","evidence":["https://kawiare.ee/wp-content/uploads/2026/06/Kawiare-tooted-1.png","https://kawiare.ee/wp-content/uploads/2026/06/Kawiare-tooted-e1782658950478.png","…kawiare.ee/wp-content/uploads/2026/02/Kawiare_paisepildid_mob_2_1900x2560.jpg","https://kawiare.ee/wp-content/uploads/2026/02/pais2_uus_2595x1467-scaled.jpg","…kawiare.ee/wp-content/uploads/2026/02/Kawiare_paisepildid_mob_3_1900x2560.jpg"]},{"id":"imageSizes","title":"Reasonable number of image sizes","status":"pass","detail":"17 distinct srcset widths.","evidence":["widths: 100, 150, 200, 225, 300, 600, 683, 768, 800, 1024, 1080, 1152, 1365, 1536, 1707, 1920, 2000"]},{"id":"scriptsFooter","title":"JS scripts not blocking in <head>","status":"fail","detail":"5 render-blocking scripts in <head>. Move to footer or add defer/async.","evidence":["…e/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638","https://kawiare.ee/wp-includes/js/jquery/jquery.min.js?ver=3.7.1","https://kawiare.ee/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1","…oocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0","…/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0"]}],"summary":{"passed":4,"warned":1,"failed":1,"notApplicable":1},"priorities":[{"title":"JS scripts not blocking in <head>","severity":"high","detail":"5 render-blocking scripts in <head>. Move to footer or add defer/async."},{"title":"Responsive images (srcset / <picture>)","severity":"medium","detail":"Only 15/22 raster images use srcset or <picture> (68%)."}]}}