{"url":"https://demo.playandnope.com/","date":"2026-07-13","siteName":"Tere tulemast Paws N' Play veebilehele! — gotoAndPlay Demo WordPress Base","overall":82,"reasoning":"PSI mobile 99 and desktop 99 indicate excellent performance with LCP 1.8 s and CLS 0.014. Accessibility is strong with 0 axe violations, though W3C reports 10 errors including invalid ARIA attributes and semantic issues. Security is the primary weakness: HTTP does not redirect to HTTPS and the Security Headers grade is 20/100 due to missing HSTS and weak CSP. Console errors indicate a broken third-party script (CookieYes). The overall score reflects high technical quality in rendering and a11y, penalized significantly for transport security configuration.","confidence":"high","fixes":[{"priority":1,"title":"Force HTTPS Redirect","impact":"Transport security, MITM protection","problem":"http://demo.playandnope.com/ does not redirect to HTTPS, leaving users vulnerable to interception on the initial request.","solution":"Configure the web server (Apache/Nginx) to return a 301 redirect for all HTTP traffic to HTTPS:\n```apache\nRewriteEngine On\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]\n```"},{"priority":1,"title":"Add HSTS Header","impact":"Security Headers grade, browser enforcement","problem":"strict-transport-security is missing; grade is 20/100. HSTS prevents protocol downgrade attacks.","solution":"Add the following header with max-age >= 1 year:\n```apache\nHeader always set Strict-Transport-Security \"max-age=63072000; includeSubDomains; preload\"\n```"},{"priority":2,"title":"Fix W3C Validation Errors","impact":"Accessibility, SEO, Standards compliance","problem":"10 errors found including invalid `aria-expanded` (empty value), `target` on `<span>`, and `script` defer misuse.","solution":"- Set `aria-expanded=\"true\"` or `\"false\"` (not empty) on buttons.\n- Remove `target` from `<span>`; move to `<a>` if needed.\n- Remove `defer` from `<script type=\"text/rocketlazyloadscript\">` or change type to valid MIME."},{"priority":2,"title":"Resolve Console Error (CookieYes)","impact":"Reliability, Third-party script execution","problem":"Console logs 403 error for `cdn-cookieyes.com/client_data/.../script.js` (net::ERR_ABORTED).","solution":"Verify CookieYes configuration or update the script ID in the WordPress plugin settings. If the script is no longer needed, remove the snippet from the theme or plugin."},{"priority":3,"title":"Optimize Hero Image Loading","impact":"LCP, Core Web Vitals","problem":"Optimization Checklist flags hero image has `loading=\"lazy\"`, which can delay LCP despite current 1.8 s score.","solution":"Remove `loading=\"lazy\"` from the LCP element (hero image) and add `fetchpriority=\"high\"`:\n```html\n<img src=\"hero.jpg\" alt=\"...\" fetchpriority=\"high\" width=\"...\" height=\"...\">\n```"},{"priority":3,"title":"Disambiguate Link Text","impact":"Accessibility, SEO","problem":"Vague link text repeated: \"loe rohkem\" (read more) ×3, \"koerte rühmatreeningud\" ×3.","solution":"Make link text unique per context or add `aria-label`:\n```html\n<a href=\"/dogs-training\" aria-label=\"Koerte rühmatreeningud\">Loe rohkem</a>\n```"}],"coverage":{"pct":100,"missing":[]},"psiSnapshot":{"rows":[{"pageUrl":null,"perfMobile":99,"perfDesktop":99,"lcpMobileMs":1817.6210527578378,"lcpDesktopMs":794.705069285685,"clsMobile":0.01383205852537251,"clsDesktop":0.002559571311917956}]},"optimizationChecklist":{"items":[{"id":"caching","title":"Page caching plugin / CDN active","status":"pass","detail":"Caching plugin detected (WP Rocket)","evidence":["HTML markers: WP Rocket","generator: WP Rocket 3.23"]},{"id":"lazyload","title":"Images lazy-loaded","status":"pass","detail":"All non-hero raster images use loading=\"lazy\".","evidence":[]},{"id":"heroEager","title":"Hero image eagerly loaded","status":"fail","detail":"Hero image has loading=\"lazy\", which delays LCP (inferred from DOM order/size — Lighthouse LCP element unavailable). Use loading=\"eager\" (or omit loading) and add fetchpriority=\"high\".","evidence":["hero: …ayandnope.com/wp-content/uploads/2024/06/6027eb05ed4efb000419981a-155x155.png","loading: lazy","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":"pass","detail":"20/20 raster images use srcset or <picture> (100%).","evidence":[]},{"id":"imageSizes","title":"Reasonable number of image sizes","status":"pass","detail":"48 distinct srcset widths.","evidence":["widths: 100, 116, 124, 150, 155, 200, 225, 233, 240, 242, 248, 280, 300, 310, 324, 400, 410, 483, 500, 510, 512, 560, 600, 626, 648, 667, 700, 768, 800, 840, 959, 972, 1024, 1120, 1152, 1284, 1296, 1400, 1440, 1472, 1536, 1680, 1920, 1944, 1960, 2048, 2240, 2560"]},{"id":"scriptsFooter","title":"JS scripts not blocking in <head>","status":"warn","detail":"1 render-blocking script in <head>. Move to footer or add defer/async.","evidence":["https://cdn-cookieyes.com/client_data/29b8e2e5821bed2234ee953c/script.js"]}],"summary":{"passed":4,"warned":1,"failed":1,"notApplicable":1},"priorities":[{"title":"Hero image eagerly loaded","severity":"high","detail":"Hero image has loading=\"lazy\", which delays LCP (inferred from DOM order/size — Lighthouse LCP element unavailable). Use loading=\"eager\" (or omit loading) and add fetchpriority=\"high\"."},{"title":"JS scripts not blocking in <head>","severity":"medium","detail":"1 render-blocking script in <head>. Move to footer or add defer/async."}]}}