20260714T114542Z-cfc2
- Audited URL
- https://kawiare.ee/
- Timestamp
- 2026-07-14T11:55:27.124Z
- Kind
- site
- Pages
- 10
Weighted audit summary
Site overall 61 is the mean of 10 pages. Scores range 52 (https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta) → 71 (https://kawiare.ee/lumekrabi). Weakest page: Mobile performance is critically low (58) with an LCP of 8.5 s, driven by 11 render-blocking scripts and unused JavaScript. Security posture is weak due to missing HTTP-to-HTTPS redirects and absent CSP, despite the primary URL using HTTPS. Accessibility has a serious contrast violation and missing skip link, though core structure is mostly intact. Desktop performance is excellent (96), highlighting a severe mobile-specific bottleneck. Confidence is high as all audit tools returned complete data.
Audit Report: Kawiare - Experience of Taste
Website: https://kawiare.ee/
Date: 2026-07-14
Overall Score: 61 / 100
Status: 🟡 Needs Improvement
Confidence: high
Audit Coverage: 100% — all sources returned data
Pages Audited (10 of 10):
- https://kawiare.ee/
- https://kawiare.ee/artiklid
- https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja
- https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta
- https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga
- https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari
- https://kawiare.ee/kammkarp
- https://kawiare.ee/ahven-ja-koha
- https://kawiare.ee/lumekrabi
- https://kawiare.ee/kaaviar-tanapaeval
Summary
Site overall 61 is the mean of 10 pages. Scores range 52 (https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta) → 71 (https://kawiare.ee/lumekrabi). Weakest page: Mobile performance is critically low (58) with an LCP of 8.5 s, driven by 11 render-blocking scripts and unused JavaScript. Security posture is weak due to missing HTTP-to-HTTPS redirects and absent CSP, despite the primary URL using HTTPS. Accessibility has a serious contrast violation and missing skip link, though core structure is mostly intact. Desktop performance is excellent (96), highlighting a severe mobile-specific bottleneck. Confidence is high as all audit tools returned complete data.
Per-Page Scores
| Page | Score | Status | Confidence |
|---|---|---|---|
| https://kawiare.ee/ | 62 | 🟡 Needs Improvement | high |
| https://kawiare.ee/artiklid | 58 | 🟠 Poor | high |
| https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja | 66 | 🟡 Needs Improvement | high |
| https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta | 52 | 🟠 Poor | high |
| https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga | 55 | 🟠 Poor | high |
| https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari | 65 | 🟡 Needs Improvement | high |
| https://kawiare.ee/kammkarp | 65 | 🟡 Needs Improvement | high |
| https://kawiare.ee/ahven-ja-koha | 55 | 🟠 Poor | high |
| https://kawiare.ee/lumekrabi | 71 | 🟡 Needs Improvement | high |
| https://kawiare.ee/kaaviar-tanapaeval | 62 | 🟡 Needs Improvement | high |
PageSpeed Insights — Mobile vs Desktop
Lower is worse for Performance; higher is worse for LCP and CLS. Worse value is bolded.
| URL | Performance (M / D) | LCP (M / D) | CLS (M / D) |
|---|---|---|---|
| https://kawiare.ee/ | 56 / 69 | 10.08 s / 1.83 s | 0.000 / 0.637 |
| https://kawiare.ee/artiklid | 68 / 89 | 9.35 s / 1.87 s | 0.001 / 0.001 |
| https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja | 58 / 92 | 8.53 s / 1.79 s | 0.000 / 0.000 |
| https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta | 58 / 96 | 8.52 s / 1.41 s | 0.000 / 0.000 |
| https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga | 69 / 87 | 8.91 s / 1.86 s | 0.000 / 0.000 |
| https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari | 74 / 96 | 5.39 s / 1.18 s | 0.000 / 0.000 |
| https://kawiare.ee/kammkarp | 61 / 95 | 8.50 s / 1.48 s | 0.000 / 0.000 |
| https://kawiare.ee/ahven-ja-koha | 41 / 96 | 9.18 s / 1.33 s | 0.000 / 0.000 |
| https://kawiare.ee/lumekrabi | 74 / 97 | 5.28 s / 1.19 s | 0.000 / 0.000 |
| https://kawiare.ee/kaaviar-tanapaeval | 67 / 93 | 8.36 s / 1.53 s | 0.000 / 0.000 |
Optimization Checklist
4 of 7 passing — 4 pass · 2 warn · 1 fail
| Item | Status | Detail |
|---|---|---|
| Page caching plugin / CDN active | Pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | Pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | Pass | Hero image is eagerly loaded (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | Warn | 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. |
| Responsive images (srcset / <picture>) | Warn | Only 15/22 raster images use srcset or <picture> (68%). |
| Reasonable number of image sizes | Pass | 17 distinct srcset widths. |
| JS scripts not blocking in <head> | Fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
Fixes
Priority 1: Critical
Immediate action — impacts user experience, search rankings, or site safety.
1A. Eliminate render-blocking JavaScript
- Impact: LCP, FCP, Performance Score
- Problem: 11 render-blocking scripts (including jQuery and WooCommerce) delay first paint; LCP is 10.1s on mobile.
- Solution:
Add
deferorasyncto non-critical scripts in<head>. Move WooCommerce and theme JS to footer or usetype="module".<script src="..." defer></script>
1B. Optimize hero and above-fold images
- Impact: LCP, Page Weight
- Problem: Images total 1.45 MB; 6 images lack
loading="lazy"; hero image is eagerly loaded but heavy. - Solution:
Convert PNG/JPEG to WebP/AVIF. Add
fetchpriority="high"to LCP image. Ensureloading="lazy"on below-fold images.<img src="hero.webp" fetchpriority="high" alt="...">
1C. Force HTTPS redirect
- Impact: Security, Transport encryption
- Problem: http://kawiare.ee/artiklid does not redirect to HTTPS, leaving users on unencrypted connections.
- Solution:
Configure the web server (Apache/Nginx) to return a 301 redirect for all HTTP requests to HTTPS:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1D. Fix LCP by optimizing hero image and scripts
- Impact: LCP, FCP, Performance Score
- Problem: LCP is 9.4 s on mobile; hero uses CSS background-image (no srcset) and 16 scripts are render-blocking.
- Solution:
- Replace CSS background hero with a real
<img>or<picture>element withfetchpriority="high". - Add
deferorasyncto non-critical scripts in<head>. - Inline critical CSS and remove unused JS (224 KB wasted).
- Replace CSS background hero with a real
1E. Enforce HTTPS redirect for all HTTP traffic
- Impact: Security, Transport encryption
- Problem: Security Headers audit reports: 'http://kawiare.ee... does not redirect to HTTPS'. This exposes users to MITM attacks on initial connection.
- Solution:
Configure the web server (Apache/Nginx) to return a 301 redirect from HTTP to HTTPS for all requests.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1F. Eliminate render-blocking JavaScript to fix LCP
- Impact: LCP (8.5 s), FCP (4.7 s), Mobile Performance (58)
- Problem: 11 render-blocking scripts found in HTML Inventory; PSI identifies 224 KB unused JS and long tasks delaying main thread.
- Solution:
Add
deferorasyncto non-critical scripts in<head>. Inline critical CSS and move non-critical JS to the footer.<!-- Change this --> <script src="main.js"></script> <!-- To this --> <script src="main.js" defer></script>
1G. Force HTTPS redirect for all HTTP traffic
- Impact: Security, Data Integrity
- Problem: Security Headers audit found 'http://kawiare.ee... does not redirect to HTTPS', leaving users vulnerable to downgrade attacks.
- Solution:
Configure the web server (Apache/Nginx) to return a 301 redirect from HTTP to HTTPS for all requests.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1H. Enforce HTTPS Redirect
- Impact: Security, Trust
- Problem: http://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari does not redirect to HTTPS, leaving HTTP traffic unencrypted.
- Solution:
Configure server (Apache/Nginx) to return a 301 redirect from HTTP to HTTPS for all requests.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
1I. Defer Render-Blocking JavaScript
- Impact: LCP, FCP, Performance
- Problem: 11 render-blocking scripts contribute to a 5.4s LCP on mobile; 224 KB of unused JS identified.
- Solution:
Add
deferorasyncto non-critical scripts in<head>.
Move critical CSS inline and defer non-critical CSS.<script src="main.js" defer></script>
1J. Optimize Largest Contentful Paint (LCP)
- Impact: Performance, Mobile UX
- Problem: Mobile LCP is 8.5 s (target ≤2.5 s) caused by render-blocking scripts and unoptimized hero image.
- Solution:
- Defer non-critical JavaScript (11 render-blocking scripts found).
- Preload the hero image (
<link rel="preload" as="image" href="...">). - Convert hero image to WebP/AVIF and serve responsive sizes.
Priority 2: Important
Essential for compliance, user reach, and search visibility.
2A. Strengthen security headers
- Impact: Security Headers Score, XSS/Clickjacking Defense
- Problem: Security Headers grade 40/100; CSP missing, HSTS lacks preload directive.
- Solution:
Add CSP with nonce/hash (not just allowlist). Update HSTS to include
preload.Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic'" Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
2B. Fix color contrast on cookie banner
- Impact: Accessibility (WCAG 1.4.3)
- Problem: axe-core reports 1 serious violation on
#cookiescript_acceptbutton. - Solution: Increase contrast ratio to ≥4.5:1 for text on the cookie accept button. Test with a contrast checker tool.
2C. Fix accessibility violations and landmarks
- Impact: WCAG 1.4.3, 2.4.1, 2.4.6
- Problem: Serious color-contrast on
#cookiescript_accept; heading order skips H2; missing skip-to-content link; form inputs lack labels. - Solution:
- Increase contrast on
#cookiescript_acceptto ≥4.5:1. - Insert
<h2>betweenh1andh3or changeh3toh2. - Add
<a href="#main" class="skip-link">Skip to content</a>. - Add
<label>oraria-labelto all form inputs.
- Increase contrast on
2D. Fix accessibility violations (contrast and landmarks)
- Impact: WCAG 1.4.3, 1.3.1, Screen Reader usability
- Problem: axe-core reports 1 serious color-contrast violation (#cookiescript_accept) and 3 moderate landmark issues (duplicate main, missing skip link).
- Solution:
- Increase contrast on
.cookiescript_acceptto ≥4.5:1. - Add
<a href="#main" class="skip-link">Skip to content</a>before the header. - Ensure only one
<main>element exists and it is not nested inside another landmark.
- Increase contrast on
2E. Fix serious accessibility violations and landmarks
- Impact: WCAG Compliance, Usability
- Problem: axe-core found 1 serious color-contrast violation (#cookiescript_accept) and 3 moderate landmark issues (duplicate main, missing skip link).
- Solution:
- Increase contrast on
#cookiescript_acceptto ≥4.5:1. - Add a skip link:
<a href="#main" class="skip-link">Skip to content</a>. - Ensure only one
<main>element exists and it is not nested inside another landmark.
- Increase contrast on
2F. Fix color contrast and add skip-to-content link
- Impact: Accessibility (WCAG 1.4.3, 2.4.1)
- Problem: axe-core found 1 serious contrast violation on
#cookiescript_acceptand HTML Inventory notes missing skip-to-content link. - Solution:
- Increase contrast on the cookie accept button to ≥4.5:1.
- Add a visible skip link at the top of the DOM:
<a href="#main" class="skip-link">Otse sisule</a>
2G. Implement Content Security Policy (CSP)
- Impact: XSS Defense, Security Headers Grade
- Problem: CSP is missing. WooCommerce scripts are present, indicating potential cart functionality despite 'no ecommerce' signals.
- Solution:
Deploy a strict CSP with nonces for scripts:
Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic';"
2H. Fix Cookie Banner Contrast
- Impact: WCAG 1.4.3 (Contrast)
- Problem: axe-core reports a serious color-contrast violation on
#cookiescript_accept. - Solution:
Increase contrast ratio to at least 4.5:1 for text on the cookie banner.
#cookiescript_accept { color: #333333; background: #ffffff; }
2I. Add Meta Description
- Impact: SEO
- Problem: HTML Inventory and PSI SEO audit show
Description: not set. - Solution:
Add a unique meta description tag in the
<head>.<meta name="description" content="20 punkti, kuidas eristada kvaliteetset kaaviari...">
2J. Fix Accessibility Violations
- Impact: WCAG Compliance, Usability
- Problem: 1 serious color-contrast violation (#cookiescript_accept) and 3 moderate landmark issues (duplicate main, missing skip link).
- Solution:
- Increase contrast on
#cookiescript_acceptto ≥4.5:1. - Add
<a class="skip-link" href="#main">Skip to content</a>. - Ensure only one
<main>element exists and remove duplicaterole="main".
- Increase contrast on
2K. Fix Color Contrast Violation
- Impact: Accessibility (WCAG 1.4.3)
- Problem: axe-core reports 1 serious violation on
#cookiescript_acceptwhere foreground/background contrast is insufficient. - Solution:
Increase contrast ratio to at least 4.5:1 for normal text. Adjust CSS for the cookie accept button:
#cookiescript_accept { color: #333; background: #fff; }
2L. Resolve Landmark Duplication
- Impact: Accessibility (WCAG 1.3.1)
- Problem: axe-core reports duplicate
mainlandmarks (#mainand#primary) andmainnested inside another landmark. - Solution:
Ensure only one
<main>element exists per page. Removerole="main"from<div id="primary">if it wraps the main content, or change it to<section>.
2M. Fix accessibility contrast and landmarks
- Impact: WCAG 1.4.3, 1.3.1, Screen Reader Navigation
- Problem: 1 serious color-contrast violation on #cookiescript_accept and 3 moderate landmark issues (duplicate main, nested main).
- Solution:
- Increase contrast on the cookie accept button to ≥4.5:1.
- Remove duplicate
role="main"attributes; ensure only one<main>element exists. - Add a skip-to-content link at the top of the page for keyboard users.
2N. Add Content Security Policy (CSP)
- Impact: XSS Defense-in-Depth
- Problem: CSP is missing. While signals indicate no auth/payments on this page, WooCommerce plugins are present, increasing potential attack surface.
- Solution:
Implement a strict CSP with nonce/hash for scripts:
Ensure all inline scripts use the nonce.Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic'; object-src 'none'; base-uri 'none';"
Priority 3: Best Practice
Recommended for long-term maintainability.
3A. Correct HTML structure and H1 usage
- Impact: SEO, Accessibility
- Problem: W3C reports 1 error (style in div); HTML Inventory shows 3
<h1>elements. - Solution:
Ensure only one
<h1>per page. Move inline<style>blocks to external CSS or<head>. Add a skip-to-content link.
3B. Add Content Security Policy and Meta Description
- Impact: XSS defense, SEO snippet
- Problem: CSP is missing (low risk per signals); SEO meta description not set.
- Solution:
- Add a nonce-based CSP:
Content-Security-Policy: script-src 'nonce-{random}' 'strict-dynamic'; - Add
<meta name="description" content="...">summarizing the article content.
- Add a nonce-based CSP:
3C. Add Content-Security-Policy (CSP)
- Impact: XSS defense-in-depth
- Problem: CSP is missing. Site signals indicate no auth/payments/UGC, so risk is lower than P1, but still recommended for defense-in-depth.
- Solution:
Implement a strict CSP with nonce/hash for scripts.
Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic';"
3D. Add meta description for SEO
- Impact: Search snippet quality, CTR
- Problem: W3C/SEO audit notes: 'Document does not have a meta description'.
- Solution:
Add a unique description tag (150-160 chars) in
<head>.<meta name="description" content="Learn how to identify quality red fish roe with our expert guide on taste, smell, and texture.">
3E. Implement Content-Security-Policy (CSP)
- Impact: XSS Defense-in-Depth
- Problem: CSP is missing. Site signals indicate no auth/payments/UGC, so risk is lower than P1, but still recommended for defense-in-depth.
- Solution:
Start with a report-only policy to identify violations, then enforce:
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com;"
3F. Add meta description and fix W3C errors
- Impact: SEO, Code Quality
- Problem: SEO audit flagged missing meta description; W3C validator reported 2 errors (invalid style in div, unescaped character).
- Solution:
- Add
<meta name="description" content="...">summarizing the article. - Move inline
<style>blocks out of<div>tags and escape<characters in text content.
- Add
3G. Add meta description and optimize hero image
- Impact: SEO, LCP
- Problem: HTML Inventory shows 'Description: not set' and hero image is a 2000×560 PNG without srcset.
- Solution:
- Add
<meta name="description" content="...">. - Convert hero PNG to WebP/AVIF and add
srcsetfor responsive loading.
- Add
3H. Implement Content Security Policy
- Impact: XSS Defense-in-Depth
- Problem: CSP is missing; site signals indicate no auth/payments on this page, lowering priority to P3.
- Solution:
Deploy a nonce-based CSP to mitigate XSS risks.
Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic'"
3I. Implement Content Security Policy (CSP)
- Impact: XSS Protection
- Problem: CSP is missing. Site signals show no auth/payments/UGC, so risk is lower but still recommended for defense-in-depth.
- Solution:
Deploy a strict CSP with nonces for scripts:
Ensure all inline scripts use the nonce.Header always set Content-Security-Policy "default-src 'self'; script-src 'nonce-{RANDOM}' 'strict-dynamic';"
3J. Add Content Security Policy
- Impact: Security (XSS Defense)
- Problem: CSP is missing. While site signals indicate no auth/payments, a CSP provides defense-in-depth against injected scripts.
- Solution:
Implement a strict CSP with nonce/hash for scripts:
Header set Content-Security-Policy "default-src 'self'; script-src 'nonce-{random}' 'strict-dynamic';"
3K. Add Meta Description
- Impact: SEO
- Problem: W3C and PSI report missing meta description, reducing click-through potential in search results.
- Solution:
Add a unique description tag in
<head>:<meta name="description" content="Lumekrabi on tervislik ja jätkusuutlik delikatess. Loe, kuidas eristada kvaliteetset kaaviari.">
3L. Add meta description and lazy load below-fold images
- Impact: SEO, Page Weight
- Problem: Meta description is missing (SEO audit fail); 2 images below the fold lack loading="lazy".
- Solution:
- Add a unique meta description tag in
<head>. - Ensure all images below the fold have
loading="lazy"attribute:
<img src="..." alt="..." loading="lazy" width="..." height="..."> - Add a unique meta description tag in
▸Raw Markdown sent to the LLM
# Site Audit — https://kawiare.ee/
Run: 2026-07-14T11:45:42.651Z
Audited **10** of 10 discovered pages.
Average per-page audit coverage: **100%**
Pages audited:
- https://kawiare.ee/
- https://kawiare.ee/artiklid
- https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja
- https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta
- https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga
- https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari
- https://kawiare.ee/kammkarp
- https://kawiare.ee/ahven-ja-koha
- https://kawiare.ee/lumekrabi
- https://kawiare.ee/kaaviar-tanapaeval
---
# Page 1 of 10 — https://kawiare.ee/
Run: 2026-07-14T11:45:43.746Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 24211 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **56** | 69 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **10.1 s** | 1.8 s |
| CLS | 0.000 | **0.637** |
| TBT | **266 ms** | 15 ms |
| FCP | **3.80 s** | 425 ms |
| Speed Index | **6.69 s** | 738 ms |
| TTFB | **5 ms** | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 10.1 s
2. **first-contentful-paint** (high) — 3.8 s
3. **speed-index** (high) — 6.7 s
4. **total-blocking-time** (low) — 270 ms
5. **forced-reflow-insight** (high)
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 162 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 282 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 145 ms
- https://kawiare.ee/wp-includes/js/jquery/jquery.min.js?ver=3.7.1 — 73 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 65 ms
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 60 ms
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js — 51 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.00, weight 25) — Largest Contentful Paint — 10.1 s
- `first-contentful-paint` (performance, score 0.27, weight 10) — First Contentful Paint — 3.8 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `speed-index` (performance, score 0.36, weight 10) — Speed Index — 6.7 s
- `total-blocking-time` (performance, score 0.82, weight 30) — Total Blocking Time — 270 ms
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.26, weight 0) — Time to Interactive — 10.1 s
- `max-potential-fid` (performance, score 0.40, weight 0) — Max Potential First Input Delay — 280 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 195 ms._
**Transport:**
- Final URL: https://kawiare.ee/
- Status: 200
- Redirected: false
- HTTPS redirect: HTTP → HTTPS ✓
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 11:28:19 GMT
- expires: Tue, 14 Jul 2026 11:45:43 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32494
- Decoded body: 147.6 KB
- Compression ratio: 0.215
### Priority fixes
1. **strict-transport-security weak** (high) — missing preload directive
2. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
3. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
4. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
5. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
6. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
7. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Keep-Alive
content-encoding: gzip
content-length: 32494
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:45:43 GMT
expires: Tue, 14 Jul 2026 11:45:43 GMT
keep-alive: timeout=5, max=95
last-modified: Tue, 14 Jul 2026 11:28:19 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 825 ms._
**Scoring:** 1 errors · 6 warnings · 70 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 174
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 174 `te">
<style>
/`
- (×1) [warning] Section lacks heading. Consider using “h2”-“h6” elements to add identifying headings to all sections, or else use a “div” element instead for any cases where no heading is needed. — first at line 394 `</script>
<section class="relative">
<div`
- (×1) [warning] This document has heading elements but none of them has a computed heading level of 1. — first at line 401 `<h2 class="text-center">MAITSE`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 3044 ms._
**Scoring:** 1 violations · 54 passes · critical 0 · serious 1 · moderate 0 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 74 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 3063 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 53 network requests · 1.83 MB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 21 | 1.45 MB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 1 | 31.7 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 419 ms, 215 B
- https://kawiare.ee/wp-content/uploads/2026/02/pais2_2595x1467-scaled.jpg (image) — 389 ms, 134.7 KB
- https://kawiare.ee/wp-content/uploads/2026/02/pais2_uus_2595x1467-scaled.jpg (image) — 388 ms, 330.7 KB
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 373 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 300 ms, 22 B
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029543880&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1111083923.1784029545&frm=0&pscdl=denied&rcb=8&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118395335~118826209~118897920~118897930~119027224&sid=1784029544&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2F&dt=Kawiare%20-%20Experience%20of%20Taste&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1376 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029543880&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1111083923.1784029545&frm=0&pscdl=denied&rcb=8&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118395335~118826209~118897920~118897930~119027224&sid=1784029544&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2F&dt=Kawiare%20-%20Experience%20of%20Taste&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1376 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 3063 ms._
**Document:**
- Lang: et
- Title: Kawiare - Experience of Taste
- Canonical: https://kawiare.ee/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 258731
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 1
- hreflang:
- en → https://kawiare.eu/
- et → https://kawiare.ee/
- lv → https://kawiare.lv/
- x-default → https://kawiare.ee/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×3, h2 ×5, h3 ×15, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: MAITSE, MILLEL ON TÄHENDUS
- h1: HEA MAITSE ALGAB PÄRITOLUST
- h1: KUS MAITSE KOHTUB TEADMISEGA
- h2: MAITSE SÜNNIBTEADLIKEST VALIKUTEST
- h2: Tutvu valikuga
- h3: Lumekrabi liha
- h3: Siberian, 100g
- h3: Forellimari, 100g
- h3: Kohafilee
- h2: TUTVU MEREANDIDE MAAILMAGA
- h3: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h3: Kuidas ära tunda tõeliselt head kaheksajalga
- h3: Kammkarp – lihtne fast food, mis ei vaja keerulisi tehnikaid
- h2: Kulinaarne inspiratsioon
- h3: Krabiliha “Crab Roll”
- h3: Külm roheline karri röstitud kammkarpidega
- h3: Kammkarbi crudo kirevilja ponzuga
- h2: Liitu meie kogukonnaga
- h3: POOD
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 46 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 22 total — **0 without alt**, **0 without width/height**, 6 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| //kawiare.ee/wp-content/uploads/2026/06/Kawiare-tooted-1.png | MAITSE, MILLEL ON TÄHENDUS | 2560×1900 | eager | ✗ |
| wp-content/uploads/2026/06/Kawiare-tooted-e1782658950478.png | MAITSE, MILLEL ON TÄHENDUS | 1900×2560 | eager | ✗ |
| tent/uploads/2026/02/Kawiare_paisepildid_mob_2_1900x2560.jpg | HEA MAITSE ALGAB PÄRITOLUST | 2560×1900 | lazy | ✗ |
| ee/wp-content/uploads/2026/02/pais2_uus_2595x1467-scaled.jpg | HEA MAITSE ALGAB PÄRITOLUST | 1900×2560 | lazy | ✗ |
| tent/uploads/2026/02/Kawiare_paisepildid_mob_3_1900x2560.jpg | KUS MAITSE KOHTUB TEADMISEGA | 2560×1900 | lazy | ✗ |
| are.ee/wp-content/uploads/2026/02/pais2_2595x1467-scaled.jpg | KUS MAITSE KOHTUB TEADMISEGA | 1900×2560 | lazy | ✗ |
| nt/uploads/2026/01/Kawiare_crab_legs_500g_2000px-300x300.png | _(empty)_ | 300×300 | _n/a_ | ✓ |
| 026/01/828829589-kawiare_crab_legs_hover1_2000px-300x300.jpg | Lumekrabi liha | 300×300 | lazy | ✓ |
| ads/2026/01/Kawiare_caviar_siberian_big_2000px_2-300x300.png | _(empty)_ | 300×300 | _n/a_ | ✓ |
| //kawiare.ee/wp-content/uploads/2026/01/Siberian-300x300.jpg | Siberian, 100g | 300×300 | lazy | ✓ |
| p-content/uploads/2026/01/Kawiare_trout_2000px_2-300x300.png | _(empty)_ | 300×300 | _n/a_ | ✓ |
| ds/2026/01/828829653-kawiare_trout_hover1_2000px-300x300.jpg | Forellimari, 100g | 300×300 | lazy | ✓ |
| t/uploads/2026/01/Kawiare_pike-uerch_500g_2000px-300x300.png | _(empty)_ | 300×300 | lazy | ✓ |
| s/2026/01/WhatsApp-Image-2026-07-10-at-06.09.48-300x300.jpeg | Kohafilee | 300×300 | lazy | ✓ |
| t/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
**Links:** 59 anchors — 5 external, 1 preconnect, 2 preload.
Vague repeated link text:
- "artiklid" ×6
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "meie valik" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Document has 3 <h1> elements** (medium) — A page should have exactly one h1; multiple h1s break document outline
2. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
3. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 15/22 raster images use srcset or <picture> (68%). |
| Reasonable number of image sizes | ✓ pass | 17 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: https://kawiare.ee/wp-content/uploads/2026/06/Kawiare-tooted-1.png`
- `loading: eager`
- `fetchpriority: (not set)`
- Responsive images (srcset / <picture>):
- `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`
- Reasonable number of image sizes:
- `widths: 100, 150, 200, 225, 300, 600, 683, 768, 800, 1024, 1080, 1152, 1365, 1536, 1707, 1920, 2000`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 15/22 raster images use srcset or <picture> (68%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 2 of 10 — https://kawiare.ee/artiklid
Run: 2026-07-14T11:45:43.749Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 20935 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **68** | 89 |
| Accessibility | 96 | 96 |
| Best Practices | 100 | 100 |
| SEO | 85 | 85 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **9.4 s** | 1.9 s |
| CLS | 0.001 | **0.001** |
| TBT | **145 ms** | 139 ms |
| FCP | **2.80 s** | 649 ms |
| Speed Index | **3.69 s** | 1.05 s |
| TTFB | **6 ms** | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 9.4 s
2. **first-contentful-paint** (medium) — 2.8 s
3. **speed-index** (low) — 3.7 s
4. **document-latency-insight** (high) — Est savings of 370 ms
5. **forced-reflow-insight** (high)
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Layout-shift sources
- section.relative > div.pt-24 > div.mx-auto > h1.mb-4 — shift 0.001
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 106 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 52 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 9.4 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `first-contentful-paint` (performance, score 0.56, weight 10) — First Contentful Paint — 2.8 s
- `heading-order` (accessibility, score 0.00, weight 3) — Heading elements are not in a sequentially-descending order
- `speed-index` (performance, score 0.85, weight 10) — Speed Index — 3.7 s
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `crawlable-anchors` (seo, score 0.00, weight 1) — Links are not crawlable
- `interactive` (performance, score 0.27, weight 0) — Time to Interactive — 9.9 s
- `max-potential-fid` (performance, score 0.58, weight 0) — Max Potential First Input Delay — 220 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 386 ms._
**Transport:**
- Final URL: https://kawiare.ee/artiklid/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/artiklid does not redirect to HTTPS (target: http://kawiare.ee/artiklid/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:27:02 GMT
- expires: Tue, 14 Jul 2026 11:45:43 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 31632
- Decoded body: 141.7 KB
- Compression ratio: 0.218
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/artiklid does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Keep-Alive
content-encoding: gzip
content-length: 31632
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:45:43 GMT
expires: Tue, 14 Jul 2026 11:45:43 GMT
keep-alive: timeout=5, max=94
last-modified: Tue, 14 Jul 2026 06:27:02 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 922 ms._
**Scoring:** 2 errors · 5 warnings · 63 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 170
2. **The heading “h3” (with computed level 3) follows the heading “h1” (with computed level 1), skipping 1 heading level.** (medium) — x1, first at line 476
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 170 `te">
<style>
/`
- (×1) [warning] Text run is not in Unicode Normalization Form C. Should instead be “
Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta ”. (Copy and paste that into your source document to replace the un-normalized text.) — first at line 717 `px] mt-8">
Kaaviar kui looduslik toidulisand ehk kaaviar ilma mu`
- (×1) [error] The heading “h3” (with computed level 3) follows the heading “h1” (with computed level 1), skipping 1 heading level. — first at line 476 `<h3 class="text-[24px] leading-[100%] text-white mb-[20px] mt-8">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 3357 ms._
**Scoring:** 2 violations · 54 passes · critical 0 · serious 1 · moderate 1 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **heading-order** (medium) — Heading levels should only increase by one
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `heading-order` (moderate)
[Heading levels should only increase by one](https://dequeuniversity.com/rules/axe/4.11/heading-order?application=playwright)
- `.product__item.group.justify-between:nth-child(1) > div:nth-child(1) > .lg\:px-6.px-4 > .text-\[24px\].mb-\[20px\].mt-8`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 65 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 3369 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 51 network requests · 1.26 MB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 11 | 867.2 KB |
| script | 24 | 270.0 KB |
| font | 2 | 58.9 KB |
| stylesheet | 9 | 58.6 KB |
| document | 2 | 30.9 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 946 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 801 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 324 ms, 22 B
- https://kawiare.ee/artiklid (document) — 202 ms, 0 B
- https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1h1v9244324978za200zd9244324978&_p=1784029544065&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=553345233.1784029546&frm=0&ngs=1&pscdl=denied&rcb=17&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118826210~118897920~118897930~119027224&sid=1784029545&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fartiklid%2F&dt=Artiklid%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1704 (fetch) — 61 ms, 0 B
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1h1v9244324978za200zd9244324978&_p=1784029544065&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=553345233.1784029546&frm=0&ngs=1&pscdl=denied&rcb=17&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118826210~118897920~118897930~119027224&sid=1784029545&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fartiklid%2F&dt=Artiklid%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1704 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1h1v9244324978za200zd9244324978&_p=1784029544065&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=553345233.1784029546&frm=0&ngs=1&pscdl=denied&rcb=17&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118826210~118897920~118897930~119027224&sid=1784029545&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fartiklid%2F&dt=Artiklid%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1704 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 3369 ms._
**Document:**
- Lang: et
- Title: Artiklid - Kawiare
- Canonical: https://kawiare.ee/artiklid/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 248647
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 9 (og:locale, og:type, og:title, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 1
- hreflang:
- en → https://kawiare.eu/insights/
- et → https://kawiare.ee/artiklid/
- lv → https://kawiare.lv/zurnals/
- x-default → https://kawiare.ee/artiklid/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×1, h3 ×12, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: MEREANDIDE MAAILM
- h3: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h3: Kuidas ära tunda tõeliselt head kaheksajalga
- h3: Kammkarp – lihtne fast food, mis ei vaja keerulisi tehnikaid
- h3: Ahven ja koha – kaks Balti järvede kala, mille väärtus vajab uuesti mõtestamist
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h3: Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta
- h3: Lumekrabi on tervislik, jätkusuutlik ja peene maitsega delikatess
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
- Skips:
- h1 → h3 after "MEREANDIDE MAAILM"
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 51 total — 6 defer, 2 async, 16 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3
**Stylesheets:** 9 external, 17 inline (68.3 KB)
**Images:** 9 total — **0 without alt**, **0 without width/height**, 4 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| t/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg | _(empty)_ | 800×450 | _n/a_ | ✓ |
| content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_thumb.jpg | _(empty)_ | 800×450 | _n/a_ | ✓ |
| .ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_thumb.jpg | _(empty)_ | 800×450 | _n/a_ | ✓ |
| are.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| e/wp-content/uploads/2026/01/Kawiare_ahven-ja-koha_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| oads/2026/01/Kawiare_kaaviar-looduslik-toidulisand_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| re.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 54 anchors — 6 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Heading level skips** (medium) — h1→h3 after "MEREANDIDE MAAILM"
2. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
3. **16 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 5 pass · 1 warn · 1 fail
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | ! warn | 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. |
| Responsive images (srcset / <picture>) | ✓ pass | 8/9 raster images use srcset or <picture> (89%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …iare.ee/wp-content/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg`
- `loading: (not set)`
- `fetchpriority: high`
- Hero is a real <img> (not a CSS background-image):
- `selector: div.pt-24.pb-16`
- `url: …e.ee/wp-content/uploads/2026/01/823960696-teadmuskeskus_2592x726_b-scaled.jpg`
- `box: 1280×464px`
- Responsive images (srcset / <picture>):
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Hero is a real <img> (not a CSS background-image)** (medium) — 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.
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 3 of 10 — https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja
Run: 2026-07-14T11:46:11.642Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 17961 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **58** | 92 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **8.5 s** | 1.8 s |
| CLS | 0.000 | **0.000** |
| TBT | **164 ms** | 63 ms |
| FCP | **4.65 s** | 623 ms |
| Speed Index | **6.93 s** | 1.28 s |
| TTFB | 3 ms | 3 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 8.5 s
2. **first-contentful-paint** (high) — 4.7 s
3. **speed-index** (high) — 6.9 s
4. **document-latency-insight** (high) — Est savings of 230 ms
5. **forced-reflow-insight** (high)
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 176 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 88 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 8.5 s
- `first-contentful-paint` (performance, score 0.13, weight 10) — First Contentful Paint — 4.7 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `speed-index` (performance, score 0.33, weight 10) — Speed Index — 6.9 s
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `lcp-breakdown-insight` (performance, score 0.00, weight 0) — LCP breakdown
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.38, weight 0) — Time to Interactive — 8.5 s
- `max-potential-fid` (performance, score 0.75, weight 0) — Max Potential First Input Delay — 180 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 378 ms._
**Transport:**
- Final URL: https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja does not redirect to HTTPS (target: http://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:27:03 GMT
- expires: Tue, 14 Jul 2026 11:46:11 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32044
- Decoded body: 130.7 KB
- Compression ratio: 0.239
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 32044
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:46:11 GMT
expires: Tue, 14 Jul 2026 11:46:11 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:27:03 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 806 ms._
**Scoring:** 2 errors · 5 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2343 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 83 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2353 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 1.01 MB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 644.9 KB |
| script | 19 | 249.8 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.3 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.3 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 462 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 296 ms, 22 B
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 286 ms, 159.3 KB
- https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja (document) — 185 ms, 0 B
- https://kawiare.ee/wp-content/themes/kawiare/assets/Josefin_Sans/static/JosefinSans-Regular.ttf (font) — 71 ms, 29.5 KB
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67d0h2v9244324978za200zd9244324978&_p=1784029571893&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1425299304.1784029573&frm=0&pscdl=denied&rcb=1&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938469~118826209~118897920~118897930~119027224~119527019~119724322&sid=1784029572&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-eristada-kvaliteetset-punast-kalamarja%2F&dt=Kuidas%20eristada%20kvaliteetset%20punast%20kalamarja%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1031 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67d0h2v9244324978za200zd9244324978&_p=1784029571893&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1425299304.1784029573&frm=0&pscdl=denied&rcb=1&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938469~118826209~118897920~118897930~119027224~119527019~119724322&sid=1784029572&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-eristada-kvaliteetset-punast-kalamarja%2F&dt=Kuidas%20eristada%20kvaliteetset%20punast%20kalamarja%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1031 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2353 ms._
**Document:**
- Lang: et
- Title: Kuidas eristada kvaliteetset punast kalamarja - Kawiare
- Canonical: https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 237250
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/how-to-identify-quality-red-fish-roe/
- et → https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja/
- lv → https://kawiare.lv/ka-atskirt-kvalitativus-sarkanos-zivju-ikrus/
- x-default → https://kawiare.ee/kuidas-eristada-kvaliteetset-punast-kalamarja/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×8, h3 ×7, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Kuidas eristada kvaliteetset punast kalamarja
- h2: Välimus ja tera ühtlus
- h2: Lõhn
- h2: Maitse ja tekstuur
- h2: Soolasus
- h2: Koostis ja lisandid
- h2: Päritolu ja jälgitavus
- h2: Soovid rohkem teada saada?
- h3: Kuidas ära tunda tõeliselt head kaheksajalga
- h3: Ahven ja koha – kaks Balti järvede kala, mille väärtus vajab uuesti mõtestamist
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| nt/uploads/2026/01/Kawiare_punane-kalamari_header-scaled.jpg | Kuidas eristada kvaliteetset punast kala | 2560×717 | eager | ✗ |
| .ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| e/wp-content/uploads/2026/01/Kawiare_ahven-ja-koha_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …wiare.ee/wp-content/uploads/2026/01/Kawiare_punane-kalamari_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…wiare.ee/wp-content/uploads/2026/01/Kawiare_punane-kalamari_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 4 of 10 — https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta
Run: 2026-07-14T11:46:19.384Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 18117 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **58** | 96 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **8.5 s** | 1.4 s |
| CLS | 0.000 | **0.000** |
| TBT | **257 ms** | 32 ms |
| FCP | **3.76 s** | 614 ms |
| Speed Index | **5.99 s** | 815 ms |
| TTFB | **4 ms** | 3 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 8.5 s
2. **first-contentful-paint** (high) — 3.8 s
3. **speed-index** (high) — 6.0 s
4. **total-blocking-time** (low) — 260 ms
5. **document-latency-insight** (high) — Est savings of 230 ms
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 217 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 126 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 8.5 s
- `first-contentful-paint` (performance, score 0.28, weight 10) — First Contentful Paint — 3.8 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `speed-index` (performance, score 0.46, weight 10) — Speed Index — 6.0 s
- `total-blocking-time` (performance, score 0.83, weight 30) — Total Blocking Time — 260 ms
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `lcp-breakdown-insight` (performance, score 0.00, weight 0) — LCP breakdown
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.38, weight 0) — Time to Interactive — 8.5 s
- `max-potential-fid` (performance, score 0.60, weight 0) — Max Potential First Input Delay — 220 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 404 ms._
**Transport:**
- Final URL: https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta does not redirect to HTTPS (target: http://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:27:05 GMT
- expires: Tue, 14 Jul 2026 11:46:19 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32564
- Decoded body: 132.6 KB
- Compression ratio: 0.24
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 32564
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:46:19 GMT
expires: Tue, 14 Jul 2026 11:46:19 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:27:05 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 803 ms._
**Scoring:** 2 errors · 10 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [warning] Text run is not in Unicode Normalization Form C. Should instead be “Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta - Kawiar”. (Copy and paste that into your source document to replace the un-normalized text.) — first at line 43 `>
<title>Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta - Kawia`
- (×1) [warning] The value of attribute “content” on element “meta” from namespace “http://www.w3.org/1999/xhtml” is not in Unicode Normalization Form C. — first at line 47 `icle" />
<meta property="og:title" content="Kaaviar kui looduslik toidulisand e`
- (×1) [warning] Text run is not in Unicode Normalization Form C. Should instead be “{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kawiare.ee\/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta\/#article","isPartOf":{"@id":"https:\/\/kawiare.ee\/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta\/"},"author":{"name":"artur","@id":"https:\/\/kawiare.ee\/#\/schema\/person\/03967b4e81b1b99ca46d262a3463ac35"},"headline":"Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta","datePublished":"2026-01-14T12:37:14+00:00","dateModified":"2026-03-02T17:57:24+00:00","mainEntityOfPage":{"@id":"https:\/\/kawiare.ee\/kaaviar-kui-l”. (Copy and paste that into your source document to replace the un-normalized text.) — first at line 63 `ma-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":`
- (×1) [warning] The value of attribute “title” on element “link” from namespace “http://www.w3.org/1999/xhtml” is not in Unicode Normalization Form C. — first at line 69 `.com' />
<link rel="alternate" type="application/rss+xml" title="Kawiare »`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
- (×1) [warning] The value of attribute “alt” on element “img” from namespace “http://www.w3.org/1999/xhtml” is not in Unicode Normalization Form C. — first at line 418 `<img fetchpriority="high" width="2560" height="717" class="mb-8 w-full h-auto" s`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2464 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 79 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2475 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 938.7 KB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 551.3 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.8 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 328 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 308 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 300 ms, 22 B
- https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta (document) — 187 ms, 0 B
- https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029579638&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=330213805.1784029581&frm=0&pscdl=denied&rcb=12&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616985~115938465~115938469~118826209~118897920~118897930~119027224&sid=1784029580&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta%2F&dt=Kaaviar%20kui%20looduslik%20toidulisand%20ehk%20kaaviar%20ilma%20mu%CC%88u%CC%88tideta%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&gap.plf=4.5.3&tfd=1154 (fetch) — 69 ms, 0 B
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029579638&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=330213805.1784029581&frm=0&pscdl=denied&rcb=12&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616985~115938465~115938469~118826209~118897920~118897930~119027224&sid=1784029580&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta%2F&dt=Kaaviar%20kui%20looduslik%20toidulisand%20ehk%20kaaviar%20ilma%20mu%CC%88u%CC%88tideta%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&gap.plf=4.5.3&tfd=1154 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029579638&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=330213805.1784029581&frm=0&pscdl=denied&rcb=12&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616985~115938465~115938469~118826209~118897920~118897930~119027224&sid=1784029580&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta%2F&dt=Kaaviar%20kui%20looduslik%20toidulisand%20ehk%20kaaviar%20ilma%20mu%CC%88u%CC%88tideta%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&gap.plf=4.5.3&tfd=1154 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2475 ms._
**Document:**
- Lang: et
- Title: Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta - Kawiare
- Canonical: https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 239147
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/caviar-without-the-myths/
- et → https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta/
- lv → https://kawiare.lv/kaviars-ka-dabisks-uztura-bagatinatajs-jeb-kaviars-bez-mitiem/
- x-default → https://kawiare.ee/kaaviar-kui-looduslik-toidulisand-ehk-kaaviar-ilma-muutideta/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×5, h3 ×11, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Kaaviar kui looduslik toidulisand
- h2: Kaaviar enne pidulauda
- h2: Kaaviar kui kontsentreeritud toit
- h3: Väike kogus, reaalne mõju
- h3: Omega-3 rasvhapped ilma kapslita
- h3: Miks kaaviar ei ole “liiga rasvane”
- h3: Kaaviar ja aju
- h2: Lugu, mida kaaviar ei vaja
- h2: Soovid rohkem teada saada?
- h3: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| 6/01/Kawiare_kaaviar-looduslik-toidulisand_header-scaled.jpg | Kaaviar kui looduslik toidulisand ehk ka | 2560×717 | eager | ✗ |
| t/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …ntent/uploads/2026/01/Kawiare_kaaviar-looduslik-toidulisand_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…ntent/uploads/2026/01/Kawiare_kaaviar-looduslik-toidulisand_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 5 of 10 — https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga
Run: 2026-07-14T11:46:43.258Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 18601 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **69** | 87 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **8.9 s** | 1.9 s |
| CLS | 0.000 | **0.000** |
| TBT | 54 ms | **172 ms** |
| FCP | **2.61 s** | 626 ms |
| Speed Index | **4.20 s** | 1.13 s |
| TTFB | 2 ms | **3 ms** |
### Priority fixes
1. **largest-contentful-paint** (high) — 8.9 s
2. **first-contentful-paint** (medium) — 2.6 s
3. **speed-index** (low) — 4.2 s
4. **document-latency-insight** (high) — Est savings of 200 ms
5. **image-delivery-insight** (high) — Est savings of 264 KiB
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 93 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 61 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 8.9 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `first-contentful-paint` (performance, score 0.63, weight 10) — First Contentful Paint — 2.6 s
- `speed-index` (performance, score 0.77, weight 10) — Speed Index — 4.2 s
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.34, weight 0) — Time to Interactive — 8.9 s
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 410 ms._
**Transport:**
- Final URL: https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga does not redirect to HTTPS (target: http://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:27:07 GMT
- expires: Tue, 14 Jul 2026 11:46:43 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32042
- Decoded body: 130.8 KB
- Compression ratio: 0.239
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 32042
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:46:43 GMT
expires: Tue, 14 Jul 2026 11:46:43 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:27:07 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 913 ms._
**Scoring:** 2 errors · 5 warnings · 66 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2614 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 78 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2624 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 1.02 MB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 655.4 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.3 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 402 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 307 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 301 ms, 22 B
- https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga (document) — 191 ms, 0 B
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 (script) — 61 ms, 0 B
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029603514&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=800395582.1784029604&frm=0&pscdl=denied&rcb=9&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118395333~118826209~118897920~118897930~119027224&sid=1784029603&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-ara-tunda-toeliselt-head-kaheksajalga%2F&dt=Kuidas%20%C3%A4ra%20tunda%20t%C3%B5eliselt%20head%20kaheksajalga%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1205 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029603514&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=800395582.1784029604&frm=0&pscdl=denied&rcb=9&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118395333~118826209~118897920~118897930~119027224&sid=1784029603&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-ara-tunda-toeliselt-head-kaheksajalga%2F&dt=Kuidas%20%C3%A4ra%20tunda%20t%C3%B5eliselt%20head%20kaheksajalga%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1205 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2624 ms._
**Document:**
- Lang: et
- Title: Kuidas ära tunda tõeliselt head kaheksajalga - Kawiare
- Canonical: https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 237347
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/how-to-identify-high-quality-octopus/
- et → https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga/
- lv → https://kawiare.lv/ka-atpazit-patiesi-labu-astonkaji-astonkaja-kvalitates-anatomija/
- x-default → https://kawiare.ee/kuidas-ara-tunda-toeliselt-head-kaheksajalga/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×8, h3 ×8, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Kuidas ära tunda tõeliselt head kaheksajalga
- h2: Miks kõik kaheksajalad ei ole samad
- h2: Kasvukeskkond määrab kvaliteedi
- h2: Tekstuur: mis vahe on heal ja kehval kaheksajalal
- h3: Töötlemine, millest poeriiulil ei räägita
- h2: Mida tähendab naturaalselt küpsetatud kaheksajalg
- h2: Miks valmis küpsetatud kaheksajalg võib olla parem kui toores
- h2: Kuidas tunda ära õige kaheksajalg
- h2: Soovid rohkem teada saada?
- h3: Kammkarp – lihtne fast food, mis ei vaja keerulisi tehnikaid
- h3: Lumekrabi on tervislik, jätkusuutlik ja peene maitsega delikatess
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| p-content/uploads/2026/01/Kawiare_kaheksajalg_header-1-1.png | Kuidas ära tunda tõeliselt head kaheksaj | 2000×560 | eager | ✗ |
| are.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| re.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_header-1-1.png`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_header-1-1.png`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 6 of 10 — https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari
Run: 2026-07-14T11:46:44.429Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 16406 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **74** | 96 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **5.4 s** | 1.2 s |
| CLS | 0.000 | **0.000** |
| TBT | **97 ms** | 85 ms |
| FCP | **2.53 s** | 658 ms |
| Speed Index | **3.81 s** | 981 ms |
| TTFB | 4 ms | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 5.4 s
2. **first-contentful-paint** (medium) — 2.5 s
3. **speed-index** (low) — 3.8 s
4. **document-latency-insight** (high) — Est savings of 340 ms
5. **forced-reflow-insight** (high)
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 204 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 90 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.20, weight 25) — Largest Contentful Paint — 5.4 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `first-contentful-paint` (performance, score 0.66, weight 10) — First Contentful Paint — 2.5 s
- `speed-index` (performance, score 0.84, weight 10) — Speed Index — 3.8 s
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.46, weight 0) — Time to Interactive — 7.6 s
- `max-potential-fid` (performance, score 0.65, weight 0) — Max Potential First Input Delay — 200 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 371 ms._
**Transport:**
- Final URL: https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari does not redirect to HTTPS (target: http://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:27:08 GMT
- expires: Tue, 14 Jul 2026 11:46:44 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 31579
- Decoded body: 129.8 KB
- Compression ratio: 0.238
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Keep-Alive
content-encoding: gzip
content-length: 31579
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:46:44 GMT
expires: Tue, 14 Jul 2026 11:46:44 GMT
keep-alive: timeout=5, max=99
last-modified: Tue, 14 Jul 2026 06:27:08 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 568 ms._
**Scoring:** 2 errors · 6 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
- (×1) [warning] Text run is not in Unicode Normalization Form C. Should instead be “
Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta ”. (Copy and paste that into your source document to replace the un-normalized text.) — first at line 523 `px] mt-8">
Kaaviar kui looduslik toidulisand ehk kaaviar ilma mu`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2599 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 90 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2609 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 936.8 KB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 550.3 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 30.8 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 530 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 338 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 315 ms, 22 B
- https://kawiare.ee/wp-content/themes/kawiare/assets/Josefin_Sans/static/JosefinSans-Regular.ttf (font) — 242 ms, 29.5 KB
- https://kawiare.ee/wp-content/themes/kawiare/assets/Josefin_Sans/static/JosefinSans-SemiBold.ttf (font) — 242 ms, 29.3 KB
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029604686&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1995928802.1784029606&frm=0&ngs=1&pscdl=denied&rcb=0&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118826210~118897920~118897930~119027224&sid=1784029605&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-eristada-kvaliteetset-kaaviari%2F&dt=20%20punkti%2C%20kuidas%20eristada%20kvaliteetset%20kaaviari%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1291 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029604686&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1995928802.1784029606&frm=0&ngs=1&pscdl=denied&rcb=0&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118826210~118897920~118897930~119027224&sid=1784029605&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkuidas-eristada-kvaliteetset-kaaviari%2F&dt=20%20punkti%2C%20kuidas%20eristada%20kvaliteetset%20kaaviari%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1291 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2609 ms._
**Document:**
- Lang: et
- Title: 20 punkti, kuidas eristada kvaliteetset kaaviari - Kawiare
- Canonical: https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 236424
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/20-points-on-how-to-identify-high-quality-caviar/
- et → https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari/
- lv → https://kawiare.lv/20-punkti-ka-atskirt-kvalitativu-kaviaru/
- x-default → https://kawiare.ee/kuidas-eristada-kvaliteetset-kaaviari/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×2, h3 ×7, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h2: Soovid rohkem teada saada?
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h3: Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| s/2026/01/Kawiare_kuidas-eristada-kaaviari_header-scaled.jpg | 20 punkti, kuidas eristada kvaliteetset | 2560×717 | eager | ✗ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| oads/2026/01/Kawiare_kaaviar-looduslik-toidulisand_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 1 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …wp-content/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…wp-content/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 7 of 10 — https://kawiare.ee/kammkarp
Run: 2026-07-14T11:47:15.055Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 15140 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **61** | 95 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **8.5 s** | 1.5 s |
| CLS | 0.000 | **0.000** |
| TBT | **54 ms** | 12 ms |
| FCP | **4.57 s** | 642 ms |
| Speed Index | **6.44 s** | 967 ms |
| TTFB | 4 ms | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 8.5 s
2. **first-contentful-paint** (high) — 4.6 s
3. **speed-index** (high) — 6.4 s
4. **document-latency-insight** (high) — Est savings of 230 ms
5. **image-delivery-insight** (high) — Est savings of 195 KiB
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 104 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 50 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 8.5 s
- `first-contentful-paint` (performance, score 0.14, weight 10) — First Contentful Paint — 4.6 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `speed-index` (performance, score 0.40, weight 10) — Speed Index — 6.4 s
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.38, weight 0) — Time to Interactive — 8.5 s
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 411 ms._
**Transport:**
- Final URL: https://kawiare.ee/kammkarp/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kammkarp does not redirect to HTTPS (target: http://kawiare.ee/kammkarp/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:28:02 GMT
- expires: Tue, 14 Jul 2026 11:47:15 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 31749
- Decoded body: 129.5 KB
- Compression ratio: 0.239
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kammkarp does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 31749
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:47:15 GMT
expires: Tue, 14 Jul 2026 11:47:15 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:28:02 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 794 ms._
**Scoring:** 2 errors · 5 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2686 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 90 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2699 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 1000.5 KB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 613.9 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.0 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 587 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 306 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 303 ms, 22 B
- https://kawiare.ee/kammkarp (document) — 190 ms, 0 B
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 (script) — 68 ms, 0 B
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029635322&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1021003147.1784029636&frm=0&ngs=1&pscdl=denied&rcb=15&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118826210~118897920~118897930~119027224&sid=1784029635&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkammkarp%2F&dt=Kammkarp%20%E2%80%93%20lihtne%20fast%20food%2C%20mis%20ei%20vaja%20keerulisi%20tehnikaid%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1337 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029635322&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1021003147.1784029636&frm=0&ngs=1&pscdl=denied&rcb=15&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118826210~118897920~118897930~119027224&sid=1784029635&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkammkarp%2F&dt=Kammkarp%20%E2%80%93%20lihtne%20fast%20food%2C%20mis%20ei%20vaja%20keerulisi%20tehnikaid%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1337 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2699 ms._
**Document:**
- Lang: et
- Title: Kammkarp – lihtne fast food, mis ei vaja keerulisi tehnikaid - Kawiare
- Canonical: https://kawiare.ee/kammkarp/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 235994
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/scallop/
- et → https://kawiare.ee/kammkarp/
- lv → https://kawiare.lv/kemmisgliemene-vienkarss-fast-food-kam-nav-vajadzigas-sarezgitas-tehnikas/
- x-default → https://kawiare.ee/kammkarp/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×8, h3 ×8, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Kammkarp
- h2: Mis on kammkarp ja miks teda hinnatakse
- h2: Päritolu ja hooajalisus
- h2: Miks kammkarp on kiire ja lihtne toit
- h3: Kammkarp koorel – miks see on praktiline
- h2: Lihtsad serveerimisviisid
- h2: Kammkarp ja tervislik toitumine
- h2: Kammkarp igapäevases köögis
- h2: Soovid rohkem teada saada?
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h3: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi
- h3: Ahven ja koha – kaks Balti järvede kala, mille väärtus vajab uuesti mõtestamist
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| p-content/uploads/2026/01/Kawiare_kammkarp_header-scaled.jpg | Kammkarp – lihtne <em>fast food</em>, mi | 2560×717 | eager | ✗ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| e/wp-content/uploads/2026/01/Kawiare_ahven-ja-koha_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 0 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: (not set)`
- Responsive images (srcset / <picture>):
- `https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 8 of 10 — https://kawiare.ee/ahven-ja-koha
Run: 2026-07-14T11:47:17.502Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 28921 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **41** | 96 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **9.2 s** | 1.3 s |
| CLS | 0.000 | **0.000** |
| TBT | **1.30 s** | 81 ms |
| FCP | **2.78 s** | 646 ms |
| Speed Index | **5.92 s** | 1.01 s |
| TTFB | 3 ms | **5 ms** |
### Priority fixes
1. **largest-contentful-paint** (high) — 9.2 s
2. **total-blocking-time** (high) — 1,300 ms
3. **speed-index** (high) — 5.9 s
4. **first-contentful-paint** (medium) — 2.8 s
5. **document-latency-insight** (high) — Est savings of 270 ms
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 833 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 308 ms
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638 — 280 ms
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js — 247 ms
- https://kawiare.ee/ahven-ja-koha/ — 233 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 205 ms
- https://kawiare.ee/wp-includes/js/jquery/jquery.min.js?ver=3.7.1 — 200 ms
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638 — 142 ms
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638 — 114 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 75 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.01, weight 25) — Largest Contentful Paint — 9.2 s
- `total-blocking-time` (performance, score 0.18, weight 30) — Total Blocking Time — 1,300 ms
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `speed-index` (performance, score 0.48, weight 10) — Speed Index — 5.9 s
- `first-contentful-paint` (performance, score 0.57, weight 10) — First Contentful Paint — 2.8 s
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `max-potential-fid` (performance, score 0.00, weight 0) — Max Potential First Input Delay — 830 ms
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.29, weight 0) — Time to Interactive — 9.7 s
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 425 ms._
**Transport:**
- Final URL: https://kawiare.ee/ahven-ja-koha/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/ahven-ja-koha does not redirect to HTTPS (target: http://kawiare.ee/ahven-ja-koha/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:28:03 GMT
- expires: Tue, 14 Jul 2026 11:47:17 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 31567
- Decoded body: 129.2 KB
- Compression ratio: 0.239
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/ahven-ja-koha does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Keep-Alive
content-encoding: gzip
content-length: 31567
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:47:17 GMT
expires: Tue, 14 Jul 2026 11:47:17 GMT
keep-alive: timeout=5, max=99
last-modified: Tue, 14 Jul 2026 06:28:03 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 1025 ms._
**Scoring:** 2 errors · 5 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2518 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 64 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2528 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 1.09 MB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 725.6 KB |
| script | 19 | 249.8 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 30.8 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.3 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 471 ms, 215 B
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 459 ms, 159.3 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 445 ms, 22 B
- https://kawiare.ee/ahven-ja-koha (document) — 220 ms, 0 B
- https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_thumb-600x338.jpg (image) — 67 ms, 12.6 KB
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67d0h2v9244324978za200zd9244324978&_p=1784029637788&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1859285314.1784029639&frm=0&ngs=1&pscdl=denied&rcb=0&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616986~115938466~115938469~118395334~118826210~118897920~118897930~119027224&sid=1784029638&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fahven-ja-koha%2F&dt=Ahven%20ja%20koha%20%E2%80%93%20kaks%20Balti%20j%C3%A4rvede%20kala%2C%20mille%20v%C3%A4%C3%A4rtus%20vajab%20uuesti%20m%C3%B5testamist%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1244 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67d0h2v9244324978za200zd9244324978&_p=1784029637788&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1859285314.1784029639&frm=0&ngs=1&pscdl=denied&rcb=0&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616986~115938466~115938469~118395334~118826210~118897920~118897930~119027224&sid=1784029638&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fahven-ja-koha%2F&dt=Ahven%20ja%20koha%20%E2%80%93%20kaks%20Balti%20j%C3%A4rvede%20kala%2C%20mille%20v%C3%A4%C3%A4rtus%20vajab%20uuesti%20m%C3%B5testamist%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1244 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2528 ms._
**Document:**
- Lang: et
- Title: Ahven ja koha – kaks Balti järvede kala, mille väärtus vajab uuesti mõtestamist - Kawiare
- Canonical: https://kawiare.ee/ahven-ja-koha/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 235666
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/perch-and-pike-perch/
- et → https://kawiare.ee/ahven-ja-koha/
- lv → https://kawiare.lv/asaris-un-zandarts-divas-baltijas-ezeru-zivis/
- x-default → https://kawiare.ee/ahven-ja-koha/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×6, h3 ×7, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Ahven ja koha
- h2: Päritolu ja keskkond
- h2: Ahven – delikaatne ja kiire
- h2: Koha – kindel ja universaalne
- h2: Miks need kalad on väärtuslikud täna
- h2: Soovid rohkem teada saada?
- h3: Lumekrabi on tervislik, jätkusuutlik ja peene maitsega delikatess
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h3: Kammkarp – lihtne fast food, mis ei vaja keerulisi tehnikaid
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| tent/uploads/2026/01/Kawiare_ahven-ja-koha_header-scaled.jpg | Ahven ja koha – kaks Balti järvede kala, | 2560×717 | eager | ✗ |
| re.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| are.ee/wp-content/uploads/2026/01/Kawiare_kammkarp_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …kawiare.ee/wp-content/uploads/2026/01/Kawiare_ahven-ja-koha_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…kawiare.ee/wp-content/uploads/2026/01/Kawiare_ahven-ja-koha_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 9 of 10 — https://kawiare.ee/lumekrabi
Run: 2026-07-14T11:47:42.501Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 19522 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **74** | 97 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **5.3 s** | 1.2 s |
| CLS | 0.000 | **0.000** |
| TBT | **144 ms** | 72 ms |
| FCP | **2.62 s** | 571 ms |
| Speed Index | **3.61 s** | 1.06 s |
| TTFB | 4 ms | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 5.3 s
2. **first-contentful-paint** (medium) — 2.6 s
3. **speed-index** (low) — 3.6 s
4. **document-latency-insight** (high) — Est savings of 330 ms
5. **forced-reflow-insight** (high)
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 190 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 117 ms
- https://kawiare.ee/wp-includes/js/jquery/jquery.min.js?ver=3.7.1 — 57 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.22, weight 25) — Largest Contentful Paint — 5.3 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `first-contentful-paint` (performance, score 0.63, weight 10) — First Contentful Paint — 2.6 s
- `speed-index` (performance, score 0.87, weight 10) — Speed Index — 3.6 s
- `forced-reflow-insight` (performance, score 0.00, weight 0) — Forced reflow
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.50, weight 0) — Time to Interactive — 7.2 s
- `max-potential-fid` (performance, score 0.70, weight 0) — Max Potential First Input Delay — 190 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 377 ms._
**Transport:**
- Final URL: https://kawiare.ee/lumekrabi/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/lumekrabi does not redirect to HTTPS (target: http://kawiare.ee/lumekrabi/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:28:05 GMT
- expires: Tue, 14 Jul 2026 11:47:42 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32491
- Decoded body: 131.1 KB
- Compression ratio: 0.242
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/lumekrabi does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 32491
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:47:42 GMT
expires: Tue, 14 Jul 2026 11:47:42 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:28:05 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 811 ms._
**Scoring:** 2 errors · 6 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
- (×1) [warning] Text run is not in Unicode Normalization Form C. Should instead be “
Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta ”. (Copy and paste that into your source document to replace the un-normalized text.) — first at line 500 `px] mt-8">
Kaaviar kui looduslik toidulisand ehk kaaviar ilma mu`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2951 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 84 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2963 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 39 network requests · 946.6 KB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 6 | 559.3 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.7 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 1 request, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 793 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 329 ms, 215 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 299 ms, 22 B
- https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb-600x338.jpg (image) — 250 ms, 13.0 KB
- https://kawiare.ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_thumb-600x338.jpg (image) — 250 ms, 33.8 KB
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029662760&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1870490511.1784029664&frm=0&pscdl=denied&rcb=16&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616985~115938466~115938468~118395334~118826209~118897920~118897930~119027224&sid=1784029663&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Flumekrabi%2F&dt=Lumekrabi%20on%20tervislik%2C%20j%C3%A4tkusuutlik%20ja%20peene%20maitsega%20delikatess%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&gap.plf=4.5.3&tfd=1543 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1v9244324978za200zd9244324978&_p=1784029662760&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1870490511.1784029664&frm=0&pscdl=denied&rcb=16&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115616985~115938466~115938468~118395334~118826209~118897920~118897930~119027224&sid=1784029663&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Flumekrabi%2F&dt=Lumekrabi%20on%20tervislik%2C%20j%C3%A4tkusuutlik%20ja%20peene%20maitsega%20delikatess%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&gap.plf=4.5.3&tfd=1543 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2962 ms._
**Document:**
- Lang: et
- Title: Lumekrabi on tervislik, jätkusuutlik ja peene maitsega delikatess - Kawiare
- Canonical: https://kawiare.ee/lumekrabi/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 237601
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/snow-crab/
- et → https://kawiare.ee/lumekrabi/
- lv → https://kawiare.lv/sniega-krabis-veseliga-ilgtspejiga-un-izsmalcinatas-garsas-delikatese/
- x-default → https://kawiare.ee/lumekrabi/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×7, h3 ×12, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Lumekrabi
- h2: Mis on lumekrabi ja kust see pärineb?
- h2: Kuidas eristada kvaliteetset lumekrabi?
- h3: Külmutatud vs värske lumekrabi – mis vahe neil on?
- h2: Kas lumekrabi on jätkusuutlik valik?
- h3: Milliseid vastutustundlikke valikuid tarbijad saavad teha?
- h2: Miks lumekrabi on ideaalne valik terviseteadlikule inimesele?
- h3: Madala kalorsuse ja kõrge valgusisaldusega supertoit
- h3: Omega-3 rasvhapped ja nende mõju ajule ja südamele
- h3: Kuidas lumekrabi sobib fitness-toitumisega
- h2: Lumekrabi igapäevases köögis
- h2: Soovid rohkem teada saada?
- h3: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h3: Kaaviar kui looduslik toidulisand ehk kaaviar ilma müütideta
- h3: Kuidas ära tunda tõeliselt head kaheksajalga
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| -content/uploads/2026/01/Kawiare_lumekrabi_header-scaled.jpg | Lumekrabi on tervislik, jätkusuutlik ja | 2560×717 | eager | ✗ |
| t/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| oads/2026/01/Kawiare_kaaviar-looduslik-toidulisand_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| .ee/wp-content/uploads/2026/01/Kawiare_kaheksajalg_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 42 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …s://kawiare.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…s://kawiare.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).
---
# Page 10 of 10 — https://kawiare.ee/kaaviar-tanapaeval
Run: 2026-07-14T11:47:58.453Z
## Audit Coverage
**100%** of audit sources returned data.
_All sources OK._
## Methodology
Each tool below contributes data to a single overall 0–100 site quality score. Performance dominates the weighting (~40%), followed by accessibility (~30%), image assets (~15%), and SEO/security (~15%). These weights are informative — the score is judged holistically, not from a fixed formula.
Severity scale in `priorities[]`:
- **high** — blocking issue / vulnerability / fail.
- **medium** — significant degradation.
- **low** — minor improvement.
Each tool section below lists: scores → priority fixes → findings → manual checks the tool cannot verify.
## Site Signals (inferred)
Heuristic site-shape signals derived from the audit data. Use these to calibrate the priority of security-header recommendations (see system rubric). Override when the evidence is clearly wrong.
- Auth surface: no
- Payments: no
- User-generated content: no
- E-commerce: no
## PageSpeed Insights
_Captured in 16485 ms (mobile + desktop in parallel)._
**Lighthouse scores (mobile vs desktop; worse value bolded):**
| Category | Mobile | Desktop |
| --- | --- | --- |
| Performance | **67** | 93 |
| Accessibility | 97 | 97 |
| Best Practices | 100 | 100 |
| SEO | 92 | 92 |
**Core Web Vitals — lab (Lighthouse) / field (CrUX p75); worse lab value bolded:**
| Metric | Mobile | Desktop |
| --- | --- | --- |
| LCP | **8.4 s** | 1.5 s |
| CLS | 0.000 | **0.000** |
| TBT | **176 ms** | 83 ms |
| FCP | **2.64 s** | 652 ms |
| Speed Index | **4.18 s** | 1.12 s |
| TTFB | 4 ms | 4 ms |
### Priority fixes
1. **largest-contentful-paint** (high) — 8.4 s
2. **first-contentful-paint** (medium) — 2.6 s
3. **speed-index** (low) — 4.2 s
4. **document-latency-insight** (high) — Est savings of 200 ms
5. **image-delivery-insight** (high) — Est savings of 186 KiB
### Findings (mobile)
#### Unused JavaScript
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638 — 224 KB wasted
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 64 KB wasted
#### Long tasks
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0 — 186 ms
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL — 90 ms
#### DOM size
- Total nodes: 0
#### Failing modeled audits
- SEO: `metaDescription`
- SEO: `tapTargets`
- SEO: `structuredData`
#### All failing PSI audits (sorted by weight × failure margin)
- `largest-contentful-paint` (performance, score 0.02, weight 25) — Largest Contentful Paint — 8.4 s
- `color-contrast` (accessibility, score 0.00, weight 7) — Background and foreground colors do not have a sufficient contrast ratio.
- `first-contentful-paint` (performance, score 0.62, weight 10) — First Contentful Paint — 2.6 s
- `speed-index` (performance, score 0.78, weight 10) — Speed Index — 4.2 s
- `network-dependency-tree-insight` (performance, score 0.00, weight 0) — Network dependency tree
- `valid-source-maps` (best-practices, score 0.00, weight 0) — Missing source maps for large first-party JavaScript
- `meta-description` (seo, score 0.00, weight 1) — Document does not have a meta description
- `interactive` (performance, score 0.39, weight 0) — Time to Interactive — 8.4 s
- `max-potential-fid` (performance, score 0.71, weight 0) — Max Potential First Input Delay — 190 ms
### Manual checks
- Real-device behavior on slow 3G / low-tier mobile hardware (Lighthouse is throttled simulation).
- Sustained INP under typical user interaction, not just initial load.
- CrUX data interpretation if site is low-traffic and field data falls back to origin or is missing.
## Security Headers & HTTP
_Captured in 406 ms._
**Transport:**
- Final URL: https://kawiare.ee/kaaviar-tanapaeval/
- Status: 200
- Redirected: false
- HTTPS redirect: ✗ http://kawiare.ee/kaaviar-tanapaeval does not redirect to HTTPS (target: http://kawiare.ee/kaaviar-tanapaeval/)
**Caching:**
- cache-control: `max-age=0`
- etag: n/a
- last-modified: Tue, 14 Jul 2026 06:28:07 GMT
- expires: Tue, 14 Jul 2026 11:47:58 GMT
- pragma: n/a
- vary: Accept-Encoding
**Compression:**
- content-encoding: gzip
- content-length: 32022
- Decoded body: 130.8 KB
- Compression ratio: 0.239
### Priority fixes
1. **HTTP does not redirect to HTTPS** (high) — http://kawiare.ee/kaaviar-tanapaeval does not redirect to HTTPS
2. **strict-transport-security weak** (high) — missing preload directive
3. **content-security-policy missing** (high) — Add a CSP with default-src and script-src restrictions
4. **permissions-policy missing** (low) — Declare Permissions-Policy to disable unused features
5. **cross-origin-opener-policy missing** (low) — Set COOP to same-origin to isolate browsing context
6. **cross-origin-resource-policy missing** (low) — Set CORP to same-origin or same-site to prevent cross-origin reads
7. **x-permitted-cross-domain-policies missing** (low) — Set to none to prevent Flash/PDF cross-domain requests
8. **server header discloses technology** (low) — Server: Apache
### Findings
#### Tracked headers
- **strict-transport-security** (weak, high) `max-age=31536000; includeSubDomains` — missing preload directive
- **content-security-policy** (missing, high)
- **x-frame-options** (present, medium) `SAMEORIGIN`
- **x-content-type-options** (present, medium) `nosniff`
- **referrer-policy** (present, low) `strict-origin-when-cross-origin`
- **permissions-policy** (missing, low)
- **cross-origin-opener-policy** (missing, low)
- **cross-origin-resource-policy** (missing, low)
- **x-permitted-cross-domain-policies** (missing, low)
#### Info disclosure
- Server: `Apache`
#### All response headers
```
cache-control: max-age=0
connection: Upgrade, Keep-Alive
content-encoding: gzip
content-length: 32022
content-type: text/html; charset=UTF-8
date: Tue, 14 Jul 2026 11:47:58 GMT
expires: Tue, 14 Jul 2026 11:47:58 GMT
keep-alive: timeout=5, max=100
last-modified: Tue, 14 Jul 2026 06:28:07 GMT
referrer-policy: strict-origin-when-cross-origin
server: Apache
strict-transport-security: max-age=31536000; includeSubDomains
upgrade: h2,h2c
vary: Accept-Encoding
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
```
### Manual checks
- Cookie attributes set via JavaScript (not visible in HTTP response).
- CORS preflight behavior under non-GET methods (only GET response headers checked).
- HSTS preload list inclusion (check hstspreload.org).
- WAF / DDoS posture beyond what static headers reveal.
## W3C HTML Validator
_Captured in 765 ms._
**Scoring:** 2 errors · 5 warnings · 64 cosmetic (suppressed)
### Priority fixes
1. **Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.)** (medium) — x1, first at line 180
2. **Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”.** (medium) — x1, first at line 401
### Issue groups
- (×1) [warning] The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment. — first at line 8 `stylesheet"> --->
<style>`
- (×1) [warning] The “charset” attribute on the “script” element is obsolete. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×2) [warning] The “type” attribute is unnecessary for JavaScript resources. — first at line 41 `</script>
<script data-minify="1" type="text/javascript" charset="UTF-8" data-cs`
- (×1) [error] Element “style” not allowed as child of element “div” in this context. (Suppressing further errors from this subtree.) — first at line 180 `te">
<style>
/`
- (×1) [error] Bad character “ ” after “<”. Probable cause: Unescaped “<”. Try escaping it as “<”. — first at line 401 `< Tagasi artikli`
- (×1) [warning] A document should not include more than one visible element with “role=main”. — first at line 404 `<div id="primary" class="site-main relative" role="main">`
### Manual checks
- Whether each `<section>` / `<article>` wraps semantically meaningful content.
- Language tag accuracy for multi-language pages or quoted content.
- Whether structural choices align with the document outline algorithm in screen readers.
## axe-core (Accessibility)
_Captured in 2893 ms._
**Scoring:** 4 violations · 53 passes · critical 0 · serious 1 · moderate 3 · minor 0
### Priority fixes
1. **color-contrast** (high) — Elements must meet minimum color contrast ratio thresholds
2. **landmark-main-is-top-level** (medium) — Main landmark should not be contained in another landmark
3. **landmark-no-duplicate-main** (medium) — Document should not have more than one main landmark
4. **landmark-unique** (medium) — Landmarks should have a unique role or role/label/title (i.e. accessible name) combination
### Findings
#### `color-contrast` (serious) — WCAG: wcag2aa, wcag143
[Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright)
- `#cookiescript_accept`
#### `landmark-main-is-top-level` (moderate)
[Main landmark should not be contained in another landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-main-is-top-level?application=playwright)
- `#primary`
#### `landmark-no-duplicate-main` (moderate)
[Document should not have more than one main landmark](https://dequeuniversity.com/rules/axe/4.11/landmark-no-duplicate-main?application=playwright)
- `#main`
#### `landmark-unique` (moderate)
[Landmarks should have a unique role or role/label/title (i.e. accessible name) combination](https://dequeuniversity.com/rules/axe/4.11/landmark-unique?application=playwright)
- `#main`
### Incomplete (axe could not determine)
- [Elements must meet minimum color contrast ratio thresholds](https://dequeuniversity.com/rules/axe/4.11/color-contrast?application=playwright) — 80 nodes
- [Links must be distinguishable without relying on color](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block?application=playwright) — 1 node
### Manual checks
- Keyboard-only navigation flow + visible focus indicators on every interactive element.
- Screen reader output (NVDA, VoiceOver) for actual auditory experience.
- Modal focus trapping and restoration on close.
- Touch target sizes (44×44 px minimum per WCAG 2.5.8).
- Color contrast for elements with alpha-transparency or gradients (axe skips these).
## Browser Runtime
_Captured in 2903 ms._
**Capture summary:** 0 console events · 0 mixed-content requests · 40 network requests · 954.7 KB total
**Network bytes by resource type:**
| Type | Count | Bytes |
| --- | --- | --- |
| image | 7 | 567.9 KB |
| script | 19 | 249.5 KB |
| font | 2 | 58.9 KB |
| stylesheet | 7 | 47.0 KB |
| document | 2 | 31.3 KB |
| fetch | 3 | 237 B |
**Third-party origins (by bytes):**
- https://www.googletagmanager.com — 2 requests, 159.0 KB
- https://region1.google-analytics.com — 1 request, 0 B
**Slowest requests (top 5):**
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (script) — 325 ms, 159.0 KB
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/refill (fetch) — 307 ms, 22 B
- https://kawiare.ee/wp-json/contact-form-7/v1/contact-forms/208/feedback/schema (fetch) — 302 ms, 215 B
- https://kawiare.ee/wp-content/themes/kawiare/assets/Josefin_Sans/static/JosefinSans-SemiBold.ttf (font) — 256 ms, 29.3 KB
- https://kawiare.ee/wp-content/themes/kawiare/assets/Josefin_Sans/static/JosefinSans-Regular.ttf (font) — 256 ms, 29.5 KB
### Priority fixes
1. **failed request** (medium) — fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1h1v9244324978za200zd9244324978&_p=1784029678710&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1618466905.1784029680&frm=0&pscdl=denied&rcb=5&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118826209~118897920~118897930~119027224~119773331&sid=1784029679&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkaaviar-tanapaeval%2F&dt=Kaaviar%20t%C3%A4nap%C3%A4eval%3A%20miks%20kasvukeskkond%20m%C3%A4%C3%A4rab%20kvaliteedi%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1535 — net::ERR_ABORTED
### Findings
#### Failed requests
- fetch: https://region1.google-analytics.com/g/collect?v=2&tid=G-KXTV1DHQZ6>m=45Pe67a1h1v9244324978za200zd9244324978&_p=1784029678710&gcs=G100&gcd=13p3p3p2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMmY1Mm.dZTNiMT&are=1&cid=1618466905.1784029680&frm=0&pscdl=denied&rcb=5&sr=1280x720&uaa=x86&uab=64&uafvl=Chromium%3B148.0.7778.96%7CHeadlessChrome%3B148.0.7778.96%7CNot%252FA)Brand%3B99.0.0.0&uam=&uamb=0&uap=Linux&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938468~118826209~118897920~118897930~119027224~119773331&sid=1784029679&sct=1&seg=0&dl=https%3A%2F%2Fkawiare.ee%2Fkaaviar-tanapaeval%2F&dt=Kaaviar%20t%C3%A4nap%C3%A4eval%3A%20miks%20kasvukeskkond%20m%C3%A4%C3%A4rab%20kvaliteedi%20-%20Kawiare&_tu=CA&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1535 — net::ERR_ABORTED
### Manual checks
- Console output during user interaction (load-only capture).
- Behavior on slow networks and constrained devices.
- WebGL / canvas FPS profiling via DevTools Layers panel.
- Service worker / cache behavior on repeat visits.
## HTML Inventory
_Captured in 2903 ms._
**Document:**
- Lang: et
- Title: Kaaviar tänapäeval: miks kasvukeskkond määrab kvaliteedi - Kawiare
- Canonical: https://kawiare.ee/kaaviar-tanapaeval/
- Viewport: width=device-width, initial-scale=1
- Charset: UTF-8
- HTML bytes: 237346
**Meta tags:**
- Description: not set
- Robots: index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1
- Theme color: not set
- Open Graph tags: 10 (og:locale, og:type, og:title, og:description, og:url, og:site_name, og:image, og:image:width, og:image:height, og:image:type)
- Twitter tags: 5
- hreflang:
- en → https://kawiare.eu/caviar-today/
- et → https://kawiare.ee/kaaviar-tanapaeval/
- lv → https://kawiare.lv/kaviars-musdienas-kapec-audzesanas-vide-nosaka-kvalitati/
- x-default → https://kawiare.ee/kaaviar-tanapaeval/
- JSON-LD: 1 blocks (1 valid) — types: Unknown
**Heading outline:**
- Counts: h1 ×1, h2 ×7, h3 ×8, h4 ×0, h5 ×0, h6 ×0
- Sequence (first 20):
- h1: Kaaviar tänapäeval
- h2: Miks kasvukeskkond on kaaviari kvaliteedi alus
- h3: Itaalia kasvukeskkond ja vee loogika
- h2: Traditsiooniline tootmisviis ja käsitöö
- h2: Vastutus ja repopulatsioon
- h2: Kaaviari tüübid ja nende iseloom
- h2: Kuidas eristada kvaliteetset kaaviari
- h2: Soovid rohkem teada saada?
- h3: 20 punkti, kuidas eristada kvaliteetset kaaviari
- h3: Lumekrabi on tervislik, jätkusuutlik ja peene maitsega delikatess
- h3: Kuidas eristada kvaliteetset punast kalamarja
- h2: Liitu meie kogukonnaga
- h3: POOD
- h3: LOE
- h3: TUGI
- h3: KAWIARE
**Landmarks:**
- nav: present
- main: present
- header: present
- footer: present
- Skip-to-content link: **missing**
**Scripts:** 45 total — 6 defer, 2 async, 11 render-blocking. Speculation rules: yes.
External scripts (first 15):
- https://kawiare.ee/wp-content/cache/min/1/s/5a3a40d9610db7fdf5d70791b1214ed3.js?ver=1783022638
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/cookies/language-cookie.js?ver=1783022638 (defer)
- 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
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.10.7.0
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=10.7.0 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.10.7.0
- https://www.googletagmanager.com/gtag/js?id=GT-TBZJWDHL (async)
- https://kawiare.ee/wp-content/cache/min/1/wp-content/plugins/sitepress-multilingual-cms/res/js/xdomain-data.js?ver=1783022638 (defer)
- https://kawiare.ee/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=10.7.0
- https://kawiare.ee/wp-content/cache/min/1/wp-content/themes/kawiare/assets/dist/js/main.js?ver=1783022638
- https://kawiare.ee/wp-content/plugins/woocommerce-multilingual/res/js/cart_widget.min.js?ver=5.5.5 (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-08e8756782316cb65854.js (defer)
- https://kawiare.ee/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-woocommerce-a5f72561d6cdf416147d.js (defer)
- https://kawiare.ee/wp-includes/js/dist/hooks.min.js?ver=7496969728ca0f95732d
**Stylesheets:** 7 external, 18 inline (68.4 KB)
**Images:** 5 total — **0 without alt**, **0 without width/height**, 2 without loading="lazy"
Image inventory (first 15):
| src | alt | w×h | loading | srcset |
| --- | --- | --- | --- | --- |
| uploads/2026/01/Kawiare_kaaviar-tanapaeval_header-scaled.jpg | Kaaviar tänapäeval: miks kasvukeskkond m | 2560×717 | eager | ✗ |
| t/uploads/2026/01/Kawiare_kuidas-eristada-kaaviari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| re.ee/wp-content/uploads/2026/01/Kawiare_lumekrabi_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| wp-content/uploads/2026/01/Kawiare_punane-kalamari_thumb.jpg | _(empty)_ | 800×450 | lazy | ✓ |
| s://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png | Kawiare | 1428×244 | _n/a_ | ✗ |
**Links:** 43 anchors — 5 external, 1 preconnect, 1 preload.
Vague repeated link text:
- "artiklid" ×3
- "retseptid" ×3
- "meie lugu" ×3
- "võta ühendust" ×3
- "avaleht" ×2
- "tooted" ×2
- "privaatsuspoliitika" ×2
**Forms:**
Form 1:
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- hidden — **no label**
- email — **no label**
- submit — **no label**
### Priority fixes
1. **Missing skip-to-content link** (medium) — No anchor link with "skip" / "otse sisu" text found
2. **11 render-blocking external scripts** (medium) — Only 6 defer, 2 async; add defer/async to non-critical scripts
### Manual checks
- Visual rendering of detected mojibake (browser may auto-correct for display).
- Whether decorative images correctly use empty `alt=""` (vs. content images missing it).
- Whether headings reflect actual document hierarchy semantically.
- Whether vague link text is disambiguated by `aria-label` or surrounding context.
## Optimized-Web Checklist
_Captured in 0 ms._
**Summary:** 4 pass · 1 warn · 1 fail · 1 n/a
**Checklist:**
| Item | Status | Detail |
| --- | --- | --- |
| Page caching plugin / CDN active | ✓ pass | Caching plugin detected (WP Rocket) |
| Images lazy-loaded | ✓ pass | All raster images use loading="lazy". |
| Hero image eagerly loaded | ✓ pass | Hero image is eagerly loaded with fetchpriority="high" (inferred from DOM order/size — Lighthouse LCP element unavailable). |
| Hero is a real <img> (not a CSS background-image) | – n/a | No CSS background-images detected on raster-image-eligible elements. |
| Responsive images (srcset / <picture>) | ! warn | Only 3/5 raster images use srcset or <picture> (60%). |
| Reasonable number of image sizes | ✓ pass | 4 distinct srcset widths. |
| JS scripts not blocking in <head> | ✗ fail | 5 render-blocking scripts in <head>. Move to footer or add defer/async. |
**Evidence:**
- Page caching plugin / CDN active:
- `HTML markers: WP Rocket`
- `generator: WordPress 7.0.1`
- Hero image eagerly loaded:
- `hero: …re.ee/wp-content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_header-scaled.jpg`
- `loading: eager`
- `fetchpriority: high`
- Responsive images (srcset / <picture>):
- `…re.ee/wp-content/uploads/2026/01/Kawiare_kaaviar-tanapaeval_header-scaled.jpg`
- `https://kawiare.ee/wp-content/uploads/2026/01/kawiare-footer.png`
- Reasonable number of image sizes:
- `widths: 300, 600, 768, 800`
- JS scripts not blocking in <head>:
- `…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`
### Priority fixes
1. **JS scripts not blocking in <head>** (high) — 5 render-blocking scripts in <head>. Move to footer or add defer/async.
2. **Responsive images (srcset / <picture>)** (medium) — Only 3/5 raster images use srcset or <picture> (60%).
### Manual checks
- Cart / checkout / logged-in pages must bypass the page cache or load dynamic regions via AJAX.
- Verify the cache is warmed for the canonical URL on initial deploy (first visitor should not pay the cold-start cost).
- Inspect "hero" image visually — heuristic above picks the first/largest <img>, which may not match the actual LCP element on JS-heavy pages.
- Confirm scripts marked as defer/async actually tolerate deferred execution (some legacy snippets break when reordered).