{"url":"https://play.ee/","date":"2026-06-26","siteName":"Perfectly formed web development team - gotoAndPlay","overall":76,"reasoning":"Mobile performance is excellent at 94, but security configuration is critically weak with a 20/100 header grade and missing HTTP-to-HTTPS redirect. W3C validation reports 7 errors including malformed noscript tags, and accessibility has 2 moderate violations regarding landmarks and link text. The site is a web development agency with no auth or payment flows, lowering CSP priority but not baseline header requirements. Overall quality is dragged down by security and structural HTML issues despite strong Core Web Vitals.","confidence":"high","fixes":[{"priority":1,"title":"Enforce HTTPS Redirect","impact":"Transport security, downgrade attacks","problem":"http://play.ee/ does not redirect to HTTPS, allowing unencrypted connections despite HTTPS being available.","solution":"Configure the web server (Apache/Nginx) to return a 301 redirect for all HTTP requests to HTTPS:\n```apache\nRewriteEngine On\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]\n```"},{"priority":2,"title":"Add HSTS and X-Content-Type-Options","impact":"Security Headers grade, MIME sniffing protection","problem":"Security Headers grade is 20/100; HSTS and X-Content-Type-Options are missing.","solution":"Add these headers to the server response:\n```apache\nHeader always set Strict-Transport-Security \"max-age=63072000; includeSubDomains; preload\"\nHeader always set X-Content-Type-Options \"nosniff\"\n```"},{"priority":2,"title":"Fix W3C Validation Errors","impact":"HTML structure, rendering consistency","problem":"7 validation errors found, including 'Bad start tag in iframe in noscript in head' and stray end tags.","solution":"Move the Google Tag Manager `noscript` iframe outside the `<head>` section. It must be placed immediately after the opening `<body>` tag:\n```html\n<body>\n  <noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-K3P64XMJ\" ...></iframe></noscript>\n  <!-- rest of body -->\n</body>\n```"},{"priority":2,"title":"Improve Accessibility Landmarks and Links","impact":"Screen reader navigation, WCAG 2.4.1","problem":"Missing `main` landmark, no skip-to-content link, and 9 vague 'read more' links.","solution":"- Add `<main id=\"main-content\">` around primary content.\n- Add a skip link at the top: `<a href=\"#main-content\" class=\"skip-link\">Skip to content</a>`.\n- Disambiguate link text: change 'read more' to 'read more about [topic]'."},{"priority":3,"title":"Add Image Dimensions and Lazy Loading","impact":"CLS prevention, bandwidth usage","problem":"52 images lack explicit width/height attributes and loading=\"lazy\".","solution":"Add `width` and `height` attributes to all `<img>` tags to reserve space. Add `loading=\"lazy\"` to images below the fold:\n```html\n<img src=\"image.svg\" alt=\"...\" width=\"300\" height=\"200\" loading=\"lazy\">\n```"}],"coverage":{"pct":100,"missing":[]},"psiSnapshot":{"rows":[{"pageUrl":null,"perfMobile":94,"perfDesktop":100,"lcpMobileMs":2515,"lcpDesktopMs":598,"clsMobile":0,"clsDesktop":0.007793}]},"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.21.3"]},{"id":"lazyload","title":"Images lazy-loaded","status":"n/a","detail":"No raster <img> elements found (39 SVGs, 13 placeholders excluded).","evidence":[]},{"id":"heroEager","title":"Hero image eagerly loaded","status":"n/a","detail":"No raster <img> elements found (39 SVGs, 13 placeholders excluded).","evidence":[]},{"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":"n/a","detail":"Only 0 raster images on the page (39 SVGs, 13 placeholders excluded) — responsive-image rule does not apply.","evidence":[]},{"id":"imageSizes","title":"Reasonable number of image sizes","status":"n/a","detail":"Too few raster images to evaluate srcset width variety.","evidence":[]},{"id":"scriptsFooter","title":"JS scripts not blocking in <head>","status":"pass","detail":"No render-blocking scripts in <head>.","evidence":[]}],"summary":{"passed":2,"warned":0,"failed":0,"notApplicable":5},"priorities":[]}}