{"url":"https://www.sorainen.com/et/","date":"2026-08-11","siteName":"Advokaadibüroo Sorainen","overall":52,"reasoning":"Site overall 52 is the mean of 10 pages. Scores range 42 (https://www.sorainen.com/darius-rauludaitis-former-prosecutor-general-joins-law-firm-sorainen) → 62 (https://www.sorainen.com/lithuanian-private-equity-and-venture-capital-association-awards-sorainen-lawyers-as-bees-of-the-year). Weakest page: Mobile performance is catastrophic (45/100) with LCP at 12.0s and 17.38 MB page weight, dragging the score heavily. Accessibility has 2 critical violations (button-name, image-alt) and 3 serious ones, failing WCAG standards. Security headers are weak (40/100) with CSP allowing unsafe-inline despite user-generated content signals. Desktop performance is strong (93) but mobile-first indexing penalizes the mobile experience. W3C validation shows 5 errors including nesting violations and missing alt attributes.","confidence":"medium","fixes":[{"priority":1,"category":"Performance","title":"Reduce page weight and defer third-party scripts","impact":"LCP, TBT, FCP, Mobile Performance Score","problem":"Page weight is 18.44 MB (15.6 MB media) with LCP 10.2s and TBT 2.98s; recaptcha and gtag scripts cause long tasks.","solution":"- Compress/convert media (15.6 MB is excessive for a text-heavy site).\n- Defer non-critical JS (gtag, recaptcha, fb) using `defer` or `async`.\n- Implement lazy loading for below-fold images.\n- Consider removing unused scripts (154 KB wasted recaptcha JS)."},{"priority":1,"category":"Accessibility","title":"Add alt text and button labels","impact":"WCAG 1.1.1, 4.1.2, Screen Reader Usability","problem":"12 images missing `alt` attributes; 4 buttons lack discernible text (axe critical violations).","solution":"- Add descriptive `alt` text to all 12 missing images.\n- Add `aria-label` or visible text to `.search-submit`, `.close`, and toggle buttons.\n- Ensure decorative images use `alt=\"\"`."},{"priority":1,"category":"Performance","title":"Reduce page weight and fix LCP","impact":"LCP 11.7 s, FCP 3.1 s, Total Weight 17.4 MB","problem":"Page weight is 17.4 MB with 15.6 MB media; LCP is 11.7 s on mobile, far exceeding the 2.5 s threshold.","solution":"- Compress or lazy-load the 15.6 MB media asset (likely the splash video).\n- Use `<video>` with `poster` attribute and `preload=\"metadata\"`.\n- Implement responsive images (`srcset`) for raster assets.\n- Defer non-critical scripts (18 render-blocking scripts found)."},{"priority":1,"category":"Accessibility","title":"Fix critical form and button accessibility","impact":"5 critical axe violations (button-name, label, select-name)","problem":"Buttons lack discernible text; search and filter forms lack labels; 3 select elements missing accessible names.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with inputs using `for`/`id`.\n- Ensure `<select>` elements have visible labels or `aria-label`."},{"priority":1,"category":"Security","title":"Harden CSP and HSTS for UGC","impact":"XSS risk, Transport security","problem":"Site has user-generated content signals; CSP allows `unsafe-inline`/`unsafe-eval`; HSTS missing `includeSubDomains` and `preload`.","solution":"- Update CSP to remove `unsafe-inline` and `unsafe-eval`; use nonces/hashes.\n- Update HSTS: `max-age=31536000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations and add H1","impact":"WCAG compliance, SEO structure","problem":"3 critical axe violations (button-name, label, select-name) and 0 h1 elements found; 18 form inputs lack labels.","solution":"- Add exactly one `<h1>` to the page (currently missing).\n- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Add `<label>` elements or `aria-label` to all form inputs (search, select, checkboxes).\n- Ensure `<select>` elements have associated labels."},{"priority":1,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT, LCP","problem":"18 render-blocking scripts in <head> delay FCP to 3.1 s and contribute to TBT 486 ms.","solution":"- Add `defer` or `async` to non-critical scripts in `<head>`.\n- Move analytics/tracking scripts (GTM, Facebook Pixel) to the footer or load via `defer`.\n- Example: `<script src=\"...\" defer></script>`"},{"priority":1,"category":"Performance","title":"Reduce page weight and defer non-critical scripts","impact":"LCP, TBT, FCP, Mobile Performance Score","problem":"Page weight is 17.4 MB (15.6 MB video) with 18 render-blocking scripts; LCP is 4.7 s and TBT is 2.98 s.","solution":"- Replace the 15.6 MB `splash.webm` with a lightweight poster image or lazy-load the video.\n- Add `defer` or `async` to the 18 render-blocking scripts (e.g., jQuery, GTM, Facebook Pixel).\n- Remove unused JavaScript (154 KB recaptcha, 71 KB gtag)."},{"priority":1,"category":"Accessibility","title":"Fix critical form and button accessibility issues","impact":"WCAG 2.1 Level A compliance, Screen Reader usability","problem":"3 critical axe violations: buttons lack discernible text, search/select forms lack labels.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with all form inputs (search, filters, newsletter).\n- Ensure `<select>` elements have accessible names."},{"priority":1,"category":"Performance","title":"Optimize Largest Contentful Paint (LCP)","impact":"LCP, FCP, TBT","problem":"Mobile LCP is 4.8s (heavy penalty) and FCP is 3.07s, driven by render-blocking scripts and heavy third-party JS (recaptcha, gtag).","solution":"- Defer non-critical scripts (e.g., GTM, Facebook Pixel) until after main content renders.\n- Preload LCP image if it is an image element.\n- Reduce TBT by splitting long tasks in third-party scripts or loading them asynchronously."},{"priority":1,"category":"Accessibility","title":"Fix Critical Form and Button Labels","impact":"WCAG 2.1.1, 4.1.2","problem":"3 critical axe violations: buttons lack discernible text, form elements (search, select) lack labels.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with all form inputs using `for` and `id` attributes.\n- Ensure `<select>` elements have accessible names."},{"priority":1,"category":"Performance","title":"Reduce page weight and optimize media","impact":"LCP, FCP, Total Page Weight","problem":"Browser runtime shows 17.38 MB total weight with 15.61 MB from media; LCP is 11.0 s on mobile.","solution":"- Compress and convert video assets (splash.webm failed to load).\n- Implement lazy loading for off-screen images.\n- Use modern formats (WebP/AVIF) and responsive `srcset`.\n- Consider a CDN for static assets."},{"priority":1,"category":"Accessibility","title":"Fix critical axe-core violations","impact":"WCAG 2.1 Compliance, Screen Reader Support","problem":"2 critical violations: `button-name` (search-submit) and `image-alt` (newsIntro) missing accessible names.","solution":"- Add `aria-label` or visible text to `.search-submit` button.\n- Add descriptive `alt` text to `.newsIntro__line--2` image.\n- Ensure all interactive elements have discernible names."},{"priority":1,"category":"Performance","title":"Reduce media weight and fix LCP","impact":"LCP, FCP, Page Weight","problem":"Mobile LCP is 12.0s and total page weight is 17.38 MB (15.61 MB media), causing severe load delays.","solution":"- Compress or lazy-load the 15.61 MB video asset (`splash.webm`).\n- Use `fetchpriority=\"high\"` on the LCP image.\n- Implement responsive images (`srcset`) to serve smaller files on mobile."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations","impact":"WCAG 2.1 Compliance","problem":"2 critical violations found: `button-name` (search-submit) and `image-alt` (content images missing text).","solution":"- Add `aria-label` or visible text to `.search-submit` button.\n- Add descriptive `alt` text to all `<img>` elements, especially `.newsIntro__line--2`."},{"priority":1,"category":"Security","title":"Harden Content Security Policy","impact":"XSS Defense","problem":"CSP allows `unsafe-inline` and `unsafe-eval` scripts, which defeats XSS protection despite UGC signals.","solution":"- Remove `'unsafe-inline'` and `'unsafe-eval'` from `script-src`.\n- Use nonces or hashes for allowed scripts (e.g., `script-src 'nonce-{random}'`).\n- Ensure `hello.myfonts.net` is whitelisted in `connect-src` to fix console errors."},{"priority":1,"category":"Performance","title":"Reduce media weight and optimize LCP","impact":"LCP, Page Weight, Mobile Performance","problem":"Browser Runtime shows 15.61 MB media weight (17.39 MB total); Mobile LCP is 11.0 s (Desktop 1.0 s).","solution":"- Compress video/images aggressively (target <5 MB total).\n- Use `fetchpriority=\"high\"` on the LCP image.\n- Implement responsive images (`srcset`) to serve smaller files to mobile.\n- Preload the LCP resource."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations (button, image)","impact":"WCAG 2.1 Compliance, Screen Reader Support","problem":"2 critical violations: `button-name` (search-submit) and `image-alt` (2 images missing alt).","solution":"- Add `aria-label` or visible text to `.search-submit`.\n- Add descriptive `alt` text to all content images (e.g., `alt=\"Karolina Sorainen\"`).\n- Ensure decorative images use `alt=\"\"`."},{"priority":1,"category":"Security","title":"Harden CSP and HSTS for UGC site","impact":"XSS Protection, Transport Security","problem":"CSP allows `unsafe-inline`/`unsafe-eval` (high risk with UGC signal); HSTS missing `includeSubDomains`/`preload`. Grade 40/100.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from CSP; use nonces/hashes.\n- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `X-Content-Type-Options: nosniff` (already present, verify strictness)."},{"priority":1,"category":"Accessibility","title":"Fix critical accessibility violations (alt text, button names)","impact":"WCAG compliance, screen reader usability","problem":"axe-core reports 2 critical violations: 2 images missing alt attributes and 2 buttons without discernible text.","solution":"- Add descriptive `alt` text to all content images (e.g., `<img src=\"...\" alt=\"Sorainen lawyers receiving award\">`).\n- Ensure all buttons have visible text or `aria-label` (e.g., `<button aria-label=\"Submit search\">`)."},{"priority":1,"category":"Performance","title":"Reduce media payload (15.61 MB video/images)","impact":"Page load time, data usage, LCP stability","problem":"Browser runtime shows 17.38 MB total weight, with 15.61 MB from a single media asset (likely video). This is excessive for a news article page.","solution":"- Compress video assets (use WebM/MP4 with lower bitrate) or serve poster images instead of autoplaying video.\n- Implement lazy loading for off-screen media (`loading=\"lazy\"`).\n- Consider using a CDN for video delivery."},{"priority":1,"category":"Security","title":"Harden Content Security Policy (remove unsafe-inline/eval)","impact":"XSS protection, data integrity","problem":"CSP allows `unsafe-inline` and `unsafe-eval`, negating XSS protection. Site signals indicate user-generated content ('post' anchor), raising XSS risk.","solution":"- Audit third-party scripts (GTM, Recaptcha, Facebook) to use nonces or hashes instead of `unsafe-inline`.\n- Implement a strict CSP with `'strict-dynamic'` and nonces for allowed scripts.\n- Example: `script-src 'nonce-{random}' 'strict-dynamic';`"},{"priority":1,"category":"Performance","title":"Reduce media weight and fix failed video request","impact":"LCP, TBT, Page Weight","problem":"Total page weight is 17.38 MB with 15.61 MB from media; LCP is 10.8 s on mobile. A video splash.webm request failed (net::ERR_ABORTED).","solution":"- Compress or lazy-load the video splash asset.\n- Use `<video>` with `preload=\"metadata\"` and poster image.\n- Ensure the video file exists at `/wp-content/themes/sorainen/build/video/splash.webm`."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations (buttons, images, contrast)","impact":"WCAG 2.1 A/AA Compliance","problem":"2 critical violations: buttons lack discernible text (`.search-submit`), images lack alt text (`.newsIntro__line--2`). 3 serious violations on color contrast.","solution":"- Add `aria-label` or visible text to `.search-submit` and `.col-tp-none`.\n- Add descriptive `alt` text to all content images.\n- Increase contrast ratio for menu links to ≥4.5:1."},{"priority":2,"category":"Security","title":"Harden Content Security Policy and HSTS","impact":"XSS Defense, Transport Security","problem":"CSP allows `unsafe-inline` and `unsafe-eval` (high risk); HSTS missing `includeSubDomains` and `preload`.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from CSP; use nonces/hashes for scripts.\n- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`."},{"priority":2,"category":"Accessibility","title":"Enable user zoom and fix viewport","impact":"WCAG 1.4.4, Mobile Usability","problem":"Viewport meta tag sets `user-scalable=no` and `maximum-scale=1.0`, blocking zoom.","solution":"- Update viewport meta tag: `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">`.\n- Ensure touch targets meet 44x44px minimum size."},{"priority":2,"category":"SEO","title":"Add H1 and Meta Description","impact":"Search visibility, Document outline","problem":"Document has 0 `<h1>` elements and no meta description; 10 W3C errors including duplicate IDs.","solution":"- Add a unique `<h1>` describing the page content.\n- Add `<meta name=\"description\" content=\"...\">`.\n- Fix duplicate IDs (e.g., `select-50-8002b801-adc4a003`) and invalid attributes (`stylr`)."},{"priority":2,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT","problem":"18 render-blocking scripts found; 4 in `<head>` blocking rendering.","solution":"- Add `defer` or `async` to non-critical scripts.\n- Move analytics and third-party tags to footer or use `type=\"module\"`.\n- Remove unused JS (164 KB wasted on reCAPTCHA, 71 KB on GTM)."},{"priority":2,"category":"Security","title":"Fix CSP to allow GTM and Fonts without unsafe-inline","impact":"XSS protection, resource loading","problem":"CSP blocks GTM images and fonts (console errors) while allowing `unsafe-inline` and `unsafe-eval`, defeating XSS protection.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from `script-src`.\n- Add specific nonces or hashes for allowed scripts.\n- Add `https://www.googletagmanager.com` and `https://fonts.gstatic.com` to `img-src` and `connect-src` to stop console errors."},{"priority":2,"category":"Performance","title":"Optimize video asset","impact":"Page weight, LCP","problem":"Media resource `splash.webm` is 15.6 MB, contributing to 17.4 MB total page weight and LCP 3.9 s.","solution":"- Compress video to <5 MB using H.264/VP9.\n- Serve via a CDN with adaptive bitrate streaming.\n- Use `poster` attribute for instant visual feedback before load."},{"priority":2,"category":"Security","title":"Strengthen HSTS and add missing headers","impact":"Transport security, privacy","problem":"HSTS missing `includeSubDomains` and `preload`; Referrer-Policy, COOP, CORP missing.","solution":"- Update HSTS: `max-age=31536000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`.\n- Add `Permissions-Policy` to disable unused features."},{"priority":2,"category":"SEO","title":"Fix HTML structure and W3C validation errors","impact":"Search ranking, Document outline, CLS","problem":"No `<h1>` element, 12 W3C errors (duplicate IDs, invalid attributes), 4 images missing dimensions.","solution":"- Add a single `<h1>` describing the page content.\n- Fix duplicate IDs (e.g., `select-50-8002b801-ae3c5c07`).\n- Add `width` and `height` attributes to all `<img>` tags to prevent CLS."},{"priority":2,"category":"Security","title":"Strengthen HSTS and CSP Headers","impact":"Transport security, XSS mitigation","problem":"HSTS missing `includeSubDomains` and `preload`; CSP allows `unsafe-inline` and `unsafe-eval`.","solution":"- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`\n- Refine CSP to remove `unsafe-inline`/`unsafe-eval` where possible, or use nonces for scripts."},{"priority":2,"category":"Security","title":"Harden Content Security Policy (CSP)","impact":"XSS Defense, Data Integrity","problem":"CSP allows `unsafe-inline` and `unsafe-eval`, negating XSS protection; UGC signal is present.","solution":"- Remove `'unsafe-inline'` and `'unsafe-eval'` from `script-src`.\n- Use nonces or hashes for allowed scripts.\n- Ensure `connect-src` includes `hello.myfonts.net` to stop console errors."},{"priority":2,"category":"Accessibility","title":"Fix contrast, viewport, and link names","impact":"WCAG 1.4.3, 1.4.4, 2.4.4","problem":"Serious violations: `color-contrast` (menu links), `meta-viewport` (user-scalable=no), `link-name` (social icons).","solution":"- Increase contrast ratio to ≥4.5:1 for menu links.\n- Remove `user-scalable=no` from viewport meta tag.\n- Add `aria-label` to icon-only links (e.g., `aria-label=\"Share on LinkedIn\"`)."},{"priority":2,"category":"Performance","title":"Reduce Total Blocking Time (TBT) by deferring scripts","impact":"Interactivity, TBT metric","problem":"TBT is 692 ms (warning threshold >600 ms) caused by long tasks from Google Tag Manager, Recaptcha, and Facebook Pixel.","solution":"- Defer non-critical scripts (analytics, pixels) until after `load` or `requestIdleCallback`.\n- Use `async` or `defer` attributes on script tags where possible.\n- Consider loading Recaptcha only on form interaction."},{"priority":2,"category":"Best Practices","title":"Fix W3C validation errors and missing landmarks","impact":"SEO, semantic structure, parser recovery","problem":"W3C reports 6 errors including missing alt, illegal href characters, and nesting violations. `main` landmark is missing.","solution":"- Wrap main content in `<main>` tag.\n- Fix nesting errors (e.g., `<a>` inside `<a>`).\n- Encode special characters in URLs (e.g., spaces in `href`)."},{"priority":2,"category":"Performance","title":"Defer render-blocking JavaScript","impact":"FCP, TBT","problem":"16 render-blocking scripts detected in `<head>`. 4 scripts specifically flagged in optimization checklist (jQuery, GTM, Facebook Pixel, CookieYes).","solution":"- Add `defer` or `async` to non-critical scripts.\n- Move analytics and tracking scripts to the footer.\n- Inline critical CSS and defer non-critical CSS."},{"priority":3,"category":"Best Practices","title":"Fix HTML validation errors and nesting","impact":"Maintainability, SEO Crawling","problem":"16 W3C errors including missing alt, bad href, and anchor nesting violations.","solution":"- Fix empty `href` attributes on `<link>` tags.\n- Resolve anchor nesting errors (e.g., `<a>` inside `<a>`).\n- Add `main` landmark and skip-to-content link."},{"priority":3,"category":"Best Practices","title":"Fix HTML Validation Errors","impact":"Maintainability, rendering consistency","problem":"12 W3C errors including duplicate IDs (e.g., `select-finansai-ir-draudimas`) and invalid attributes.","solution":"- Ensure all IDs are unique within the document.\n- Remove invalid attributes (e.g., `stylr` on `<a>`, `pause` on `<video>`).\n- Fix attribute spacing errors."},{"priority":3,"category":"SEO","title":"Add meta description and fix HTML errors","impact":"Search Snippets, Validation","problem":"Meta description missing; W3C reports 5 errors including illegal characters in href and nesting violations.","solution":"- Add `<meta name=\"description\" content=\"...\">`.\n- Fix `href` query strings (remove spaces).\n- Correct `<a>` tag nesting in the author section."},{"priority":3,"category":"SEO","title":"Add meta description and fix W3C errors","impact":"Search Snippets, Validation","problem":"Missing meta description; 20 W3C errors (unknown `o_p` elements, nesting issues).","solution":"- Write a 150-character meta description.\n- Remove custom `o_p` elements; use standard HTML.\n- Fix anchor nesting errors (line 311)."},{"priority":3,"category":"SEO","title":"Add meta description and fix HSTS directives","impact":"Search snippet, transport security","problem":"SEO audit shows missing meta description. HSTS header lacks `includeSubDomains` and `preload` directives.","solution":"- Add `<meta name=\"description\" content=\"...\">` summarizing the article.\n- Update HSTS header: `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`."},{"priority":3,"category":"SEO","title":"Fix HTML validation errors and meta description","impact":"SEO, Crawlability","problem":"W3C validator reports 5 errors (bad href, missing img alt, nesting). Meta description is not set.","solution":"- Add `meta name=\"description\"` with relevant text.\n- Fix `<a>` href query string spaces (URL encode).\n- Ensure `<img>` tags have `alt` and fix nesting violations."}],"coverage":{"pct":99,"missing":["PageSpeed Insights (mobile): PSI HTTP 500"]},"siteSummary":{"pagesAudited":10,"pagesAttempted":10,"urls":["https://www.sorainen.com/et","https://www.sorainen.com/newsroom","https://www.sorainen.com/et/uudised","https://www.sorainen.com/lv/zinas","https://www.sorainen.com/lt/naujienos","https://www.sorainen.com/law-firm-ratings-in-mergermarket-place-sorainen-as-a-leader-in-the-baltics-and-belarus","https://www.sorainen.com/darius-rauludaitis-former-prosecutor-general-joins-law-firm-sorainen","https://www.sorainen.com/sorainen-named-european-law-firm-of-the-year-at-the-lawyer-european-awards","https://www.sorainen.com/lithuanian-private-equity-and-venture-capital-association-awards-sorainen-lawyers-as-bees-of-the-year","https://www.sorainen.com/edvins-draba-joins-the-latvian-association-of-patent-attorneys"]},"psiSnapshot":{"rows":[{"pageUrl":"https://www.sorainen.com/et","perfMobile":32,"perfDesktop":67,"lcpMobileMs":10215.178791312803,"lcpDesktopMs":2100.5433825689647,"clsMobile":0,"clsDesktop":0.006810036342928977},{"pageUrl":"https://www.sorainen.com/newsroom","perfMobile":62,"perfDesktop":69,"lcpMobileMs":11661.50647479462,"lcpDesktopMs":1331.7989897807827,"clsMobile":0,"clsDesktop":0.0002728976569152294},{"pageUrl":"https://www.sorainen.com/et/uudised","perfMobile":67,"perfDesktop":96,"lcpMobileMs":3948.085864489717,"lcpDesktopMs":1242.4307510191793,"clsMobile":0,"clsDesktop":0.0002612135429117858},{"pageUrl":"https://www.sorainen.com/lv/zinas","perfMobile":41,"perfDesktop":75,"lcpMobileMs":4710.106905713985,"lcpDesktopMs":1062.3679065439678,"clsMobile":0,"clsDesktop":0.0005279003777103866},{"pageUrl":"https://www.sorainen.com/lt/naujienos","perfMobile":60,"perfDesktop":78,"lcpMobileMs":4818.463515436181,"lcpDesktopMs":1128.1180623052715,"clsMobile":0,"clsDesktop":0.004208795902086294},{"pageUrl":"https://www.sorainen.com/law-firm-ratings-in-mergermarket-place-sorainen-as-a-leader-in-the-baltics-and-belarus","perfMobile":67,"perfDesktop":74,"lcpMobileMs":10995.514826890098,"lcpDesktopMs":1399.701766427661,"clsMobile":0.004479044021099038,"clsDesktop":0.002750361951934932},{"pageUrl":"https://www.sorainen.com/darius-rauludaitis-former-prosecutor-general-joins-law-firm-sorainen","perfMobile":45,"perfDesktop":93,"lcpMobileMs":11970.8576338431,"lcpDesktopMs":1347.4542487314447,"clsMobile":0,"clsDesktop":0.0006175779707591186},{"pageUrl":"https://www.sorainen.com/sorainen-named-european-law-firm-of-the-year-at-the-lawyer-european-awards","perfMobile":64,"perfDesktop":64,"lcpMobileMs":11040.061001969229,"lcpDesktopMs":959.718676064165,"clsMobile":0.0009144714876410535,"clsDesktop":0.002177674750931405},{"pageUrl":"https://www.sorainen.com/lithuanian-private-equity-and-venture-capital-association-awards-sorainen-lawyers-as-bees-of-the-year","perfMobile":null,"perfDesktop":70,"lcpMobileMs":null,"lcpDesktopMs":941.2513491020029,"clsMobile":null,"clsDesktop":0.0019493344516461767},{"pageUrl":"https://www.sorainen.com/edvins-draba-joins-the-latvian-association-of-patent-attorneys","perfMobile":47,"perfDesktop":68,"lcpMobileMs":10836.906091726516,"lcpDesktopMs":2101.7923739726025,"clsMobile":0,"clsDesktop":0.0001901657860736475}]},"optimizationChecklist":{"items":[{"id":"caching","title":"Page caching plugin / CDN active","status":"pass","detail":"Caching plugin detected (WP Rocket)","evidence":["HTML markers: WP Rocket","generator: WPML ver:4.9.6 stt:1,15,32,33;"]},{"id":"lazyload","title":"Images lazy-loaded","status":"n/a","detail":"No raster <img> elements found (4 SVGs excluded).","evidence":[]},{"id":"heroEager","title":"Hero image eagerly loaded","status":"warn","detail":"Hero image has no explicit loading or fetchpriority (inferred from DOM order/size — Lighthouse LCP element unavailable). Browser default is eager but adding fetchpriority=\"high\" helps LCP.","evidence":["hero: …nen.com/UserFiles/content%20images/thumbs/__thumb_-2-Darius%20Raulusaitis.jpg","loading: (not set)","fetchpriority: (not set)"]},{"id":"heroBackground","title":"Hero is a real <img> (not a CSS background-image)","status":"warn","detail":"Hero element uses a CSS background-image (no image-set() variants), so the browser always loads the original asset regardless of viewport — there is no srcset equivalent. Move the hero to a real <img> with srcset/sizes (or <picture>) so smaller viewports can fetch a smaller file.","evidence":["selector: div.expertiseIntro__img.bg-cover","url: ….sorainen.com/wp-content/uploads/2026/05/eva-berlaus-sorainen-2026-scaled.jpg","box: 419×624px"]},{"id":"responsive","title":"Responsive images (srcset / <picture>)","status":"n/a","detail":"Only 0 raster images on the page (4 SVGs 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":"fail","detail":"4 render-blocking scripts in <head>. Move to footer or add defer/async.","evidence":["…tomi-google-tag-manager/dist/js/analytics-talk-content-tracking.js?ver=1.22.5","https://www.sorainen.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1","…om/wp-content/plugins/official-facebook-pixel/js/facebook_signal.js?ver=5.2.2","https://cdn-cookieyes.com/client_data/627e335d11f737396c21224f/script.js"]}],"summary":{"passed":1,"warned":2,"failed":1,"notApplicable":3},"priorities":[{"title":"JS scripts not blocking in <head>","severity":"high","detail":"4 render-blocking scripts in <head>. Move to footer or add defer/async."},{"title":"Hero is a real <img> (not a CSS background-image)","severity":"medium","detail":"Hero element uses a CSS background-image (no image-set() variants), so the browser always loads the original asset regardless of viewport — there is no srcset equivalent. Move the hero to a real <img> with srcset/sizes (or <picture>) so smaller viewports can fetch a smaller file."},{"title":"Hero image eagerly loaded","severity":"medium","detail":"Hero image has no explicit loading or fetchpriority (inferred from DOM order/size — Lighthouse LCP element unavailable). Browser default is eager but adding fetchpriority=\"high\" helps LCP."}]},"perPageOverall":[{"url":"https://www.sorainen.com/et","overall":46,"reasoning":"Mobile performance is catastrophic (32/100) with an LCP of 10.2s and 18.44 MB page weight, primarily driven by unoptimized media and heavy third-party scripts. Accessibility has critical failures (2 critical axe violations, 12 missing alt attributes) despite a 79/100 PSI score. Security headers are weak (40/100) with a permissive CSP allowing unsafe-inline and eval. SEO is strong (92/100) but cannot offset the core usability and performance failures. Confidence is high as all audit tools returned complete data.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce page weight and defer third-party scripts","impact":"LCP, TBT, FCP, Mobile Performance Score","problem":"Page weight is 18.44 MB (15.6 MB media) with LCP 10.2s and TBT 2.98s; recaptcha and gtag scripts cause long tasks.","solution":"- Compress/convert media (15.6 MB is excessive for a text-heavy site).\n- Defer non-critical JS (gtag, recaptcha, fb) using `defer` or `async`.\n- Implement lazy loading for below-fold images.\n- Consider removing unused scripts (154 KB wasted recaptcha JS)."},{"priority":1,"category":"Accessibility","title":"Add alt text and button labels","impact":"WCAG 1.1.1, 4.1.2, Screen Reader Usability","problem":"12 images missing `alt` attributes; 4 buttons lack discernible text (axe critical violations).","solution":"- Add descriptive `alt` text to all 12 missing images.\n- Add `aria-label` or visible text to `.search-submit`, `.close`, and toggle buttons.\n- Ensure decorative images use `alt=\"\"`."},{"priority":2,"category":"Security","title":"Harden Content Security Policy and HSTS","impact":"XSS Defense, Transport Security","problem":"CSP allows `unsafe-inline` and `unsafe-eval` (high risk); HSTS missing `includeSubDomains` and `preload`.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from CSP; use nonces/hashes for scripts.\n- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`."},{"priority":2,"category":"Accessibility","title":"Enable user zoom and fix viewport","impact":"WCAG 1.4.4, Mobile Usability","problem":"Viewport meta tag sets `user-scalable=no` and `maximum-scale=1.0`, blocking zoom.","solution":"- Update viewport meta tag: `<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">`.\n- Ensure touch targets meet 44x44px minimum size."},{"priority":3,"category":"Best Practices","title":"Fix HTML validation errors and nesting","impact":"Maintainability, SEO Crawling","problem":"16 W3C errors including missing alt, bad href, and anchor nesting violations.","solution":"- Fix empty `href` attributes on `<link>` tags.\n- Resolve anchor nesting errors (e.g., `<a>` inside `<a>`).\n- Add `main` landmark and skip-to-content link."}],"perfScore":32,"a11yScore":79,"bestPracticesScore":92,"seoScore":92,"securityScore":40},{"url":"https://www.sorainen.com/newsroom","overall":54,"reasoning":"Mobile performance 62 with LCP 11.7 s is catastrophic, driven by 17.4 MB page weight (15.6 MB media). Accessibility has 3 critical violations (buttons, labels) and 3 serious (contrast), failing WCAG compliance. Security headers grade 40/100; HSTS lacks includeSubDomains and CSP allows unsafe-inline/eval despite UGC signals. SEO lacks H1 and meta description, and W3C reports 10 errors. Confidence is high as all audit tools returned complete data.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce page weight and fix LCP","impact":"LCP 11.7 s, FCP 3.1 s, Total Weight 17.4 MB","problem":"Page weight is 17.4 MB with 15.6 MB media; LCP is 11.7 s on mobile, far exceeding the 2.5 s threshold.","solution":"- Compress or lazy-load the 15.6 MB media asset (likely the splash video).\n- Use `<video>` with `poster` attribute and `preload=\"metadata\"`.\n- Implement responsive images (`srcset`) for raster assets.\n- Defer non-critical scripts (18 render-blocking scripts found)."},{"priority":1,"category":"Accessibility","title":"Fix critical form and button accessibility","impact":"5 critical axe violations (button-name, label, select-name)","problem":"Buttons lack discernible text; search and filter forms lack labels; 3 select elements missing accessible names.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with inputs using `for`/`id`.\n- Ensure `<select>` elements have visible labels or `aria-label`."},{"priority":1,"category":"Security","title":"Harden CSP and HSTS for UGC","impact":"XSS risk, Transport security","problem":"Site has user-generated content signals; CSP allows `unsafe-inline`/`unsafe-eval`; HSTS missing `includeSubDomains` and `preload`.","solution":"- Update CSP to remove `unsafe-inline` and `unsafe-eval`; use nonces/hashes.\n- Update HSTS: `max-age=31536000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`."},{"priority":2,"category":"SEO","title":"Add H1 and Meta Description","impact":"Search visibility, Document outline","problem":"Document has 0 `<h1>` elements and no meta description; 10 W3C errors including duplicate IDs.","solution":"- Add a unique `<h1>` describing the page content.\n- Add `<meta name=\"description\" content=\"...\">`.\n- Fix duplicate IDs (e.g., `select-50-8002b801-adc4a003`) and invalid attributes (`stylr`)."},{"priority":2,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT","problem":"18 render-blocking scripts found; 4 in `<head>` blocking rendering.","solution":"- Add `defer` or `async` to non-critical scripts.\n- Move analytics and third-party tags to footer or use `type=\"module\"`.\n- Remove unused JS (164 KB wasted on reCAPTCHA, 71 KB on GTM)."}],"perfScore":62,"a11yScore":85,"bestPracticesScore":92,"seoScore":85,"securityScore":40},{"url":"https://www.sorainen.com/et/uudised","overall":62,"reasoning":"Mobile performance (67) is dragged down by a massive 15.6 MB video asset and 18 render-blocking scripts, resulting in LCP 3.9 s and TBT 486 ms. Accessibility shows 3 critical axe violations (buttons, labels, selects) and 0 h1 elements despite a 85 Lighthouse score. Security headers grade 40/100 with a CSP that blocks legitimate GTM resources while allowing unsafe-inline. W3C validation reports 8 errors including duplicate IDs and invalid attributes. Confidence is high as all audit tools returned complete data.","confidence":"high","fixes":[{"priority":1,"category":"Accessibility","title":"Fix critical axe violations and add H1","impact":"WCAG compliance, SEO structure","problem":"3 critical axe violations (button-name, label, select-name) and 0 h1 elements found; 18 form inputs lack labels.","solution":"- Add exactly one `<h1>` to the page (currently missing).\n- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Add `<label>` elements or `aria-label` to all form inputs (search, select, checkboxes).\n- Ensure `<select>` elements have associated labels."},{"priority":1,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT, LCP","problem":"18 render-blocking scripts in <head> delay FCP to 3.1 s and contribute to TBT 486 ms.","solution":"- Add `defer` or `async` to non-critical scripts in `<head>`.\n- Move analytics/tracking scripts (GTM, Facebook Pixel) to the footer or load via `defer`.\n- Example: `<script src=\"...\" defer></script>`"},{"priority":2,"category":"Security","title":"Fix CSP to allow GTM and Fonts without unsafe-inline","impact":"XSS protection, resource loading","problem":"CSP blocks GTM images and fonts (console errors) while allowing `unsafe-inline` and `unsafe-eval`, defeating XSS protection.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from `script-src`.\n- Add specific nonces or hashes for allowed scripts.\n- Add `https://www.googletagmanager.com` and `https://fonts.gstatic.com` to `img-src` and `connect-src` to stop console errors."},{"priority":2,"category":"Performance","title":"Optimize video asset","impact":"Page weight, LCP","problem":"Media resource `splash.webm` is 15.6 MB, contributing to 17.4 MB total page weight and LCP 3.9 s.","solution":"- Compress video to <5 MB using H.264/VP9.\n- Serve via a CDN with adaptive bitrate streaming.\n- Use `poster` attribute for instant visual feedback before load."},{"priority":2,"category":"Security","title":"Strengthen HSTS and add missing headers","impact":"Transport security, privacy","problem":"HSTS missing `includeSubDomains` and `preload`; Referrer-Policy, COOP, CORP missing.","solution":"- Update HSTS: `max-age=31536000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`.\n- Add `Permissions-Policy` to disable unused features."}],"perfScore":67,"a11yScore":85,"bestPracticesScore":92,"seoScore":92,"securityScore":40},{"url":"https://www.sorainen.com/lv/zinas","overall":48,"reasoning":"Mobile performance is critically low (41) due to a 17.4 MB page weight dominated by a 15.6 MB video asset, resulting in LCP of 4.7 s and TBT of 2.98 s. Accessibility has critical violations (buttons, labels, selects) despite a decent PSI score, requiring immediate remediation. Security headers are weak (CSP allows unsafe-inline, HSTS incomplete) with a grade of 40/100. HTML structure lacks an H1 and contains 12 W3C errors including duplicate IDs. Confidence is high as all audit tools returned complete data.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce page weight and defer non-critical scripts","impact":"LCP, TBT, FCP, Mobile Performance Score","problem":"Page weight is 17.4 MB (15.6 MB video) with 18 render-blocking scripts; LCP is 4.7 s and TBT is 2.98 s.","solution":"- Replace the 15.6 MB `splash.webm` with a lightweight poster image or lazy-load the video.\n- Add `defer` or `async` to the 18 render-blocking scripts (e.g., jQuery, GTM, Facebook Pixel).\n- Remove unused JavaScript (154 KB recaptcha, 71 KB gtag)."},{"priority":1,"category":"Accessibility","title":"Fix critical form and button accessibility issues","impact":"WCAG 2.1 Level A compliance, Screen Reader usability","problem":"3 critical axe violations: buttons lack discernible text, search/select forms lack labels.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with all form inputs (search, filters, newsletter).\n- Ensure `<select>` elements have accessible names."},{"priority":2,"category":"Security","title":"Harden Content Security Policy and HSTS","impact":"XSS protection, Transport security","problem":"CSP allows `unsafe-inline` and `unsafe-eval` (defeats XSS protection); HSTS missing `includeSubDomains` and `preload`.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from CSP; use nonces/hashes for scripts.\n- Update HSTS header: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `Referrer-Policy` and `Permissions-Policy` headers."},{"priority":2,"category":"SEO","title":"Fix HTML structure and W3C validation errors","impact":"Search ranking, Document outline, CLS","problem":"No `<h1>` element, 12 W3C errors (duplicate IDs, invalid attributes), 4 images missing dimensions.","solution":"- Add a single `<h1>` describing the page content.\n- Fix duplicate IDs (e.g., `select-50-8002b801-ae3c5c07`).\n- Add `width` and `height` attributes to all `<img>` tags to prevent CLS."}],"perfScore":41,"a11yScore":85,"bestPracticesScore":92,"seoScore":92,"securityScore":40},{"url":"https://www.sorainen.com/lt/naujienos","overall":55,"reasoning":"Mobile PSI score of 60 is dragged down by a critical LCP of 4.8s and FCP of 3.07s, both exceeding the 4s/3s heavy penalty thresholds. Accessibility has 3 critical violations (missing labels, button names) and lacks a proper H1 structure, which significantly impacts usability and SEO. Security headers score 40/100 with weak HSTS and CSP configurations, though the site lacks auth/payment signals. W3C validation shows 12 errors including duplicate IDs. Confidence is high as all audit tools returned complete data.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Optimize Largest Contentful Paint (LCP)","impact":"LCP, FCP, TBT","problem":"Mobile LCP is 4.8s (heavy penalty) and FCP is 3.07s, driven by render-blocking scripts and heavy third-party JS (recaptcha, gtag).","solution":"- Defer non-critical scripts (e.g., GTM, Facebook Pixel) until after main content renders.\n- Preload LCP image if it is an image element.\n- Reduce TBT by splitting long tasks in third-party scripts or loading them asynchronously."},{"priority":1,"category":"Accessibility","title":"Fix Critical Form and Button Labels","impact":"WCAG 2.1.1, 4.1.2","problem":"3 critical axe violations: buttons lack discernible text, form elements (search, select) lack labels.","solution":"- Add `aria-label` or visible text to all buttons (e.g., `.search-submit`).\n- Associate `<label>` elements with all form inputs using `for` and `id` attributes.\n- Ensure `<select>` elements have accessible names."},{"priority":2,"category":"Security","title":"Strengthen HSTS and CSP Headers","impact":"Transport security, XSS mitigation","problem":"HSTS missing `includeSubDomains` and `preload`; CSP allows `unsafe-inline` and `unsafe-eval`.","solution":"- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`\n- Refine CSP to remove `unsafe-inline`/`unsafe-eval` where possible, or use nonces for scripts."},{"priority":2,"category":"SEO","title":"Add H1 and Meta Description","impact":"Search ranking, document outline","problem":"Page has 0 H1 elements and no meta description, hurting SEO structure and snippet generation.","solution":"- Add a single `<h1>` tag reflecting the page topic (e.g., 'Naujienos').\n- Add a `<meta name=\"description\">` tag with a concise summary of the news page."},{"priority":3,"category":"Best Practices","title":"Fix HTML Validation Errors","impact":"Maintainability, rendering consistency","problem":"12 W3C errors including duplicate IDs (e.g., `select-finansai-ir-draudimas`) and invalid attributes.","solution":"- Ensure all IDs are unique within the document.\n- Remove invalid attributes (e.g., `stylr` on `<a>`, `pause` on `<video>`).\n- Fix attribute spacing errors."}],"perfScore":60,"a11yScore":85,"bestPracticesScore":92,"seoScore":92,"securityScore":40},{"url":"https://www.sorainen.com/law-firm-ratings-in-mergermarket-place-sorainen-as-a-leader-in-the-baltics-and-belarus","overall":52,"reasoning":"PSI mobile performance is critically low at 67 with an LCP of 11.0 s, driven by a massive 17.38 MB page weight (15.61 MB media). Accessibility is compromised by 7 axe violations including 2 critical issues (button-name, image-alt). Security headers are weak (40/100) with a permissive CSP allowing unsafe-inline despite a UGC signal. W3C validation shows 5 errors including nesting violations. The site is functional but requires urgent optimization for mobile users.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce page weight and optimize media","impact":"LCP, FCP, Total Page Weight","problem":"Browser runtime shows 17.38 MB total weight with 15.61 MB from media; LCP is 11.0 s on mobile.","solution":"- Compress and convert video assets (splash.webm failed to load).\n- Implement lazy loading for off-screen images.\n- Use modern formats (WebP/AVIF) and responsive `srcset`.\n- Consider a CDN for static assets."},{"priority":1,"category":"Accessibility","title":"Fix critical axe-core violations","impact":"WCAG 2.1 Compliance, Screen Reader Support","problem":"2 critical violations: `button-name` (search-submit) and `image-alt` (newsIntro) missing accessible names.","solution":"- Add `aria-label` or visible text to `.search-submit` button.\n- Add descriptive `alt` text to `.newsIntro__line--2` image.\n- Ensure all interactive elements have discernible names."},{"priority":2,"category":"Security","title":"Harden Content Security Policy (CSP)","impact":"XSS Defense, Data Integrity","problem":"CSP allows `unsafe-inline` and `unsafe-eval`, negating XSS protection; UGC signal is present.","solution":"- Remove `'unsafe-inline'` and `'unsafe-eval'` from `script-src`.\n- Use nonces or hashes for allowed scripts.\n- Ensure `connect-src` includes `hello.myfonts.net` to stop console errors."},{"priority":2,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT, Time to Interactive","problem":"16 render-blocking scripts found; 4 in `<head>` blocking initial render.","solution":"- Add `defer` or `async` to non-critical scripts (e.g., GTM, Facebook Pixel).\n- Move critical CSS inline and defer non-critical CSS.\n- Use `preload` for critical resources only."},{"priority":3,"category":"SEO","title":"Add meta description and fix HTML errors","impact":"Search Snippets, Validation","problem":"Meta description missing; W3C reports 5 errors including illegal characters in href and nesting violations.","solution":"- Add `<meta name=\"description\" content=\"...\">`.\n- Fix `href` query strings (remove spaces).\n- Correct `<a>` tag nesting in the author section."}],"perfScore":67,"a11yScore":81,"bestPracticesScore":92,"seoScore":77,"securityScore":40},{"url":"https://www.sorainen.com/darius-rauludaitis-former-prosecutor-general-joins-law-firm-sorainen","overall":42,"reasoning":"Mobile performance is catastrophic (45/100) with LCP at 12.0s and 17.38 MB page weight, dragging the score heavily. Accessibility has 2 critical violations (button-name, image-alt) and 3 serious ones, failing WCAG standards. Security headers are weak (40/100) with CSP allowing unsafe-inline despite user-generated content signals. Desktop performance is strong (93) but mobile-first indexing penalizes the mobile experience. W3C validation shows 5 errors including nesting violations and missing alt attributes.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce media weight and fix LCP","impact":"LCP, FCP, Page Weight","problem":"Mobile LCP is 12.0s and total page weight is 17.38 MB (15.61 MB media), causing severe load delays.","solution":"- Compress or lazy-load the 15.61 MB video asset (`splash.webm`).\n- Use `fetchpriority=\"high\"` on the LCP image.\n- Implement responsive images (`srcset`) to serve smaller files on mobile."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations","impact":"WCAG 2.1 Compliance","problem":"2 critical violations found: `button-name` (search-submit) and `image-alt` (content images missing text).","solution":"- Add `aria-label` or visible text to `.search-submit` button.\n- Add descriptive `alt` text to all `<img>` elements, especially `.newsIntro__line--2`."},{"priority":1,"category":"Security","title":"Harden Content Security Policy","impact":"XSS Defense","problem":"CSP allows `unsafe-inline` and `unsafe-eval` scripts, which defeats XSS protection despite UGC signals.","solution":"- Remove `'unsafe-inline'` and `'unsafe-eval'` from `script-src`.\n- Use nonces or hashes for allowed scripts (e.g., `script-src 'nonce-{random}'`).\n- Ensure `hello.myfonts.net` is whitelisted in `connect-src` to fix console errors."},{"priority":2,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT","problem":"16 render-blocking external scripts in `<head>` delay first paint (FCP 8.93s).","solution":"- Add `defer` or `async` to non-critical scripts (e.g., analytics, cookie consent).\n- Move footer scripts to the bottom of `<body>`.\n- Inline critical CSS and defer non-critical stylesheets."},{"priority":2,"category":"Security","title":"Strengthen HSTS and add missing headers","impact":"Transport Security","problem":"HSTS is missing `includeSubDomains` and `preload`; Referrer-Policy and COOP are missing.","solution":"- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`.\n- Add `Permissions-Policy` to disable unused features."}],"perfScore":45,"a11yScore":81,"bestPracticesScore":69,"seoScore":77,"securityScore":40},{"url":"https://www.sorainen.com/sorainen-named-european-law-firm-of-the-year-at-the-lawyer-european-awards","overall":54,"reasoning":"Mobile LCP 11.0 s and 15.6 MB media weight drive performance down despite a 64 PSI score, creating a severe mobile-first penalty. Accessibility has 2 critical violations (button, image) plus 20 W3C errors, dragging the score significantly. Security headers grade 40/100 with unsafe CSP despite UGC signals, requiring immediate hardening. Desktop is significantly faster (LCP 1.0 s) but mobile-first indexing penalizes the mobile experience heavily.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce media weight and optimize LCP","impact":"LCP, Page Weight, Mobile Performance","problem":"Browser Runtime shows 15.61 MB media weight (17.39 MB total); Mobile LCP is 11.0 s (Desktop 1.0 s).","solution":"- Compress video/images aggressively (target <5 MB total).\n- Use `fetchpriority=\"high\"` on the LCP image.\n- Implement responsive images (`srcset`) to serve smaller files to mobile.\n- Preload the LCP resource."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations (button, image)","impact":"WCAG 2.1 Compliance, Screen Reader Support","problem":"2 critical violations: `button-name` (search-submit) and `image-alt` (2 images missing alt).","solution":"- Add `aria-label` or visible text to `.search-submit`.\n- Add descriptive `alt` text to all content images (e.g., `alt=\"Karolina Sorainen\"`).\n- Ensure decorative images use `alt=\"\"`."},{"priority":1,"category":"Security","title":"Harden CSP and HSTS for UGC site","impact":"XSS Protection, Transport Security","problem":"CSP allows `unsafe-inline`/`unsafe-eval` (high risk with UGC signal); HSTS missing `includeSubDomains`/`preload`. Grade 40/100.","solution":"- Remove `unsafe-inline` and `unsafe-eval` from CSP; use nonces/hashes.\n- Update HSTS: `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload`.\n- Add `X-Content-Type-Options: nosniff` (already present, verify strictness)."},{"priority":2,"category":"Performance","title":"Defer render-blocking scripts","impact":"FCP, TBT, Time to Interactive","problem":"16 render-blocking scripts (HTML Inventory); 4 in `<head>` (Optimized-Web). FCP 3.03 s.","solution":"- Add `defer` or `async` to non-critical scripts (GTM, Analytics, CookieYes).\n- Move scripts to footer where possible.\n- Inline critical CSS only."},{"priority":2,"category":"Accessibility","title":"Fix contrast, viewport, and link names","impact":"WCAG 1.4.3, 1.4.4, 2.4.4","problem":"Serious violations: `color-contrast` (menu links), `meta-viewport` (user-scalable=no), `link-name` (social icons).","solution":"- Increase contrast ratio to ≥4.5:1 for menu links.\n- Remove `user-scalable=no` from viewport meta tag.\n- Add `aria-label` to icon-only links (e.g., `aria-label=\"Share on LinkedIn\"`)."},{"priority":3,"category":"SEO","title":"Add meta description and fix W3C errors","impact":"Search Snippets, Validation","problem":"Missing meta description; 20 W3C errors (unknown `o_p` elements, nesting issues).","solution":"- Write a 150-character meta description.\n- Remove custom `o_p` elements; use standard HTML.\n- Fix anchor nesting errors (line 311)."}],"perfScore":64,"a11yScore":78,"bestPracticesScore":88,"seoScore":77,"securityScore":40},{"url":"https://www.sorainen.com/lithuanian-private-equity-and-venture-capital-association-awards-sorainen-lawyers-as-bees-of-the-year","overall":62,"reasoning":"The site scores 62 due to critical accessibility violations (2 critical, 3 serious axe findings) and excessive page weight (17.38 MB total, 15.61 MB media). Performance is mixed: LCP is fast (0.9 s) but TBT is high (692 ms) due to third-party scripts, and mobile PSI data is unreliable (HTTP 500 error, desktop duplicated). Security headers are weak (40/100) with a permissive CSP that allows unsafe-inline, which is risky given the inferred user-generated content signal. HTML validity issues (6 W3C errors) and missing meta descriptions further reduce the score.","confidence":"medium","fixes":[{"priority":1,"category":"Accessibility","title":"Fix critical accessibility violations (alt text, button names)","impact":"WCAG compliance, screen reader usability","problem":"axe-core reports 2 critical violations: 2 images missing alt attributes and 2 buttons without discernible text.","solution":"- Add descriptive `alt` text to all content images (e.g., `<img src=\"...\" alt=\"Sorainen lawyers receiving award\">`).\n- Ensure all buttons have visible text or `aria-label` (e.g., `<button aria-label=\"Submit search\">`)."},{"priority":1,"category":"Performance","title":"Reduce media payload (15.61 MB video/images)","impact":"Page load time, data usage, LCP stability","problem":"Browser runtime shows 17.38 MB total weight, with 15.61 MB from a single media asset (likely video). This is excessive for a news article page.","solution":"- Compress video assets (use WebM/MP4 with lower bitrate) or serve poster images instead of autoplaying video.\n- Implement lazy loading for off-screen media (`loading=\"lazy\"`).\n- Consider using a CDN for video delivery."},{"priority":1,"category":"Security","title":"Harden Content Security Policy (remove unsafe-inline/eval)","impact":"XSS protection, data integrity","problem":"CSP allows `unsafe-inline` and `unsafe-eval`, negating XSS protection. Site signals indicate user-generated content ('post' anchor), raising XSS risk.","solution":"- Audit third-party scripts (GTM, Recaptcha, Facebook) to use nonces or hashes instead of `unsafe-inline`.\n- Implement a strict CSP with `'strict-dynamic'` and nonces for allowed scripts.\n- Example: `script-src 'nonce-{random}' 'strict-dynamic';`"},{"priority":2,"category":"Performance","title":"Reduce Total Blocking Time (TBT) by deferring scripts","impact":"Interactivity, TBT metric","problem":"TBT is 692 ms (warning threshold >600 ms) caused by long tasks from Google Tag Manager, Recaptcha, and Facebook Pixel.","solution":"- Defer non-critical scripts (analytics, pixels) until after `load` or `requestIdleCallback`.\n- Use `async` or `defer` attributes on script tags where possible.\n- Consider loading Recaptcha only on form interaction."},{"priority":2,"category":"Best Practices","title":"Fix W3C validation errors and missing landmarks","impact":"SEO, semantic structure, parser recovery","problem":"W3C reports 6 errors including missing alt, illegal href characters, and nesting violations. `main` landmark is missing.","solution":"- Wrap main content in `<main>` tag.\n- Fix nesting errors (e.g., `<a>` inside `<a>`).\n- Encode special characters in URLs (e.g., spaces in `href`)."},{"priority":3,"category":"SEO","title":"Add meta description and fix HSTS directives","impact":"Search snippet, transport security","problem":"SEO audit shows missing meta description. HSTS header lacks `includeSubDomains` and `preload` directives.","solution":"- Add `<meta name=\"description\" content=\"...\">` summarizing the article.\n- Update HSTS header: `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`."}],"perfScore":70,"a11yScore":81,"bestPracticesScore":92,"seoScore":77,"securityScore":40},{"url":"https://www.sorainen.com/edvins-draba-joins-the-latvian-association-of-patent-attorneys","overall":46,"reasoning":"Mobile performance is critically low (47) with an LCP of 10.8 s driven by 15.61 MB of media weight and render-blocking scripts. Accessibility has 2 critical axe violations (buttons, images) alongside serious contrast issues. Security headers are weak (grade 40/100) with a permissive CSP allowing unsafe-inline despite user-generated content signals. HTML validation shows 5 errors including parser recovery failure. Desktop performance (68) is better but mobile-first indexing penalizes the mobile experience heavily.","confidence":"high","fixes":[{"priority":1,"category":"Performance","title":"Reduce media weight and fix failed video request","impact":"LCP, TBT, Page Weight","problem":"Total page weight is 17.38 MB with 15.61 MB from media; LCP is 10.8 s on mobile. A video splash.webm request failed (net::ERR_ABORTED).","solution":"- Compress or lazy-load the video splash asset.\n- Use `<video>` with `preload=\"metadata\"` and poster image.\n- Ensure the video file exists at `/wp-content/themes/sorainen/build/video/splash.webm`."},{"priority":1,"category":"Accessibility","title":"Fix critical axe violations (buttons, images, contrast)","impact":"WCAG 2.1 A/AA Compliance","problem":"2 critical violations: buttons lack discernible text (`.search-submit`), images lack alt text (`.newsIntro__line--2`). 3 serious violations on color contrast.","solution":"- Add `aria-label` or visible text to `.search-submit` and `.col-tp-none`.\n- Add descriptive `alt` text to all content images.\n- Increase contrast ratio for menu links to ≥4.5:1."},{"priority":1,"category":"Security","title":"Harden Content Security Policy (remove unsafe-inline/eval)","impact":"XSS Defense","problem":"CSP allows `unsafe-inline` and `unsafe-eval` scripts. Site signals indicate User-Generated Content is present, increasing XSS risk.","solution":"- Migrate to nonce-based CSP: `script-src 'nonce-{random}' 'strict-dynamic'`.\n- Remove `'unsafe-inline'` and `'unsafe-eval'` from `script-src`.\n- Ensure all third-party scripts (GTM, Recaptcha) are whitelisted or loaded via nonce."},{"priority":2,"category":"Performance","title":"Defer render-blocking JavaScript","impact":"FCP, TBT","problem":"16 render-blocking scripts detected in `<head>`. 4 scripts specifically flagged in optimization checklist (jQuery, GTM, Facebook Pixel, CookieYes).","solution":"- Add `defer` or `async` to non-critical scripts.\n- Move analytics and tracking scripts to the footer.\n- Inline critical CSS and defer non-critical CSS."},{"priority":2,"category":"Security","title":"Strengthen HSTS and add missing headers","impact":"Transport Security, Privacy","problem":"HSTS missing `includeSubDomains` and `preload`. Missing Referrer-Policy, Permissions-Policy, COOP, CORP.","solution":"- Update HSTS: `max-age=31536000; includeSubDomains; preload`.\n- Add `Referrer-Policy: strict-origin-when-cross-origin`.\n- Add `Permissions-Policy` to disable unused features."},{"priority":3,"category":"SEO","title":"Fix HTML validation errors and meta description","impact":"SEO, Crawlability","problem":"W3C validator reports 5 errors (bad href, missing img alt, nesting). Meta description is not set.","solution":"- Add `meta name=\"description\"` with relevant text.\n- Fix `<a>` href query string spaces (URL encode).\n- Ensure `<img>` tags have `alt` and fix nesting violations."}],"perfScore":47,"a11yScore":81,"bestPracticesScore":92,"seoScore":77,"securityScore":40}]}