Web Quality Audit: Claus Porto
Website: https://clausporto.com/ | Date: July 30, 2026 | Platform: Adobe Commerce (Magento) on Magento Cloud | Industry: Luxury Fragrance & Beauty | Founded: 1887
Executive Summary
Claus Porto's website suffers from critically poor performance on mobile (22/100) and desktop (23/100), with a 17.0s LCP on mobile — 6.8× the good threshold. The site has no canonical URLs, no structured data (JSON-LD), no Open Graph/Twitter Card tags, no hreflang tags, no H1 on the homepage, and no breadcrumb navigation. Security is solid with HSTS and CSP, but the CSP is report-only (unenforced). The 139-year-old luxury brand's digital presence is significantly underinvested relative to its premium positioning.
| Category | Mobile Score | Desktop Score | Grade |
| Performance | 22 | 23 | 🔴 Critical |
| Accessibility | 74 | 74 | 🟡 Needs Work |
| Best Practices | 92 | 92 | 🟢 Good |
| SEO | 100 | 100 | 🟢 Good |
| Overall | 22 | 23 | 🔴 Critical |
Mobile vs. Desktop gap: Negligible — both are critically poor. The mobile LCP (17.0s) is 5.9× worse than desktop (2.9s), but desktop CLS (0.635) is 1.6× worse than mobile (0.401).
1. Performance Audit
1.1 CrUX Real-World Field Data
Core Web Vitals Assessment: Failed (PageSpeed Insights report)
CrUX field data was available via PageSpeed Insights (report generated Jul 30, 2026). The assessment shows "Failed" for the origin at clausporto.com.
Key metrics from CrUX (mobile):
- LCP: Poor — exceeds 4.0s threshold significantly
- CLS: Poor — exceeds 0.25 threshold (lab CLS: 0.401)
- FCP: Poor — 3.0s, well above 1.8s good threshold
Note on CrUX Vis: The CrUX Vis tool (cruxvis.withgoogle.com) was not accessible during this audit (connection timeout). Data above is from PageSpeed Insights' CrUX integration.
1.2 Core Web Vitals (Lighthouse Lab Data)
| Metric | Mobile | Desktop | Good Threshold | Rating |
| First Contentful Paint (FCP) | 3.0 s | 0.5 s | ≤ 1,800 ms | 🔴 Mobile Poor / 🟢 Desktop Good |
| Largest Contentful Paint (LCP) | 17.0 s | 2.9 s | ≤ 2,500 ms | 🔴 Mobile Critical / 🟡 Desktop Needs Improvement |
| Total Blocking Time (TBT) | 820 ms | 1,140 ms | ≤ 200 ms | 🔴 Both Critical |
| Cumulative Layout Shift (CLS) | 0.401 | 0.635 | ≤ 0.10 | 🔴 Both Critical |
| Speed Index (SI) | 13.4 s | 4.3 s | ≤ 3,400 ms | 🔴 Mobile Critical / 🟡 Desktop Needs Improvement |
Worst offender: Mobile LCP at 17.0s — 6.8× the good threshold. This is extraordinarily slow and will severely impact both SEO rankings and conversion rates.
1.3 LCP Phase Breakdown (Mobile)
| Phase | Duration | Notes |
| Time to First Byte (TTFB) | 60 ms | Good — fast server response |
| Resource Load Delay | 1,230 ms | 1.2s delay before LCP image starts loading |
| Resource Load Duration | 60 ms | Image download is fast |
| Element Render Delay | 1,030 ms | 1s delay after download before visible |
| Pre-resource delay (render-blocking) | ~14,620 ms | Massive — render-blocking CSS/JS prevents LCP discovery |
The LCP image is a hero image (20211019_Claus_HR-126_Mobile_5.jpg) that uses loading="lazy" (via the lazyloaded class) and is not preloaded. The main culprit is render-blocking resources that prevent the browser from discovering the LCP element for ~14.6 seconds.
1.4 Performance Issues by Impact
🔴 Critical (Estimated savings > 1s)
| # | Issue | Evidence | Est. Savings | Recommendation |
| 1 | Render-blocking CSS/JS | 2 CSS files (styles-m.min.css 76.8KB, merged/027aefe.min.css 58.2KB) and JS block initial render | 1,110 ms | Inline critical CSS, defer non-critical CSS/JS, use media="print" for non-critical stylesheets |
| 2 | LCP image uses loading="lazy" | Hero image has lazyloaded class, no fetchpriority="high", not preloaded | ~14,000 ms | Add <link rel="preload" as="image" href="..."> for the LCP image, set fetchpriority="high", remove lazy loading |
| 3 | Enormous network payload | 6,571 KB total — 2.6MB from Google reCAPTCHA alone (loaded 7 times!) | 2,000+ ms | Remove redundant reCAPTCHA instances, defer 3rd-party scripts, lazy-load below-fold content |
| 4 | Massive JavaScript execution | 4.0s of JS execution time, 20 long tasks (>50ms) | 2,000+ ms | Code-split bundles, defer non-critical JS, reduce 3rd-party scripts |
🟡 High (200ms–1s)
| # | Issue | Evidence | Est. Savings | Recommendation |
| 5 | Unused CSS | 141KB of wasted CSS across 3 stylesheets (95% of styles-m.min.css is unused) | 141 KB | Remove unused CSS with Magento's built-in critical CSS or a purge tool |
| 6 | Unused JavaScript | 1,273KB of unused JS — reCAPTCHA (726KB), GTM (207KB), Charla widget (139KB), Klarna SDK (103KB) | 1,273 KB | Lazy-load 3rd-party widgets, implement route-based code splitting |
| 7 | Poor image delivery | Hero images served at 1000×1000px but displayed at 721×721px; no WebP; no responsive srcset | 243 KB | Serve WebP/AVIF, add srcset with correct sizes, compress images |
| 8 | Layout shift (CLS 0.401) | "BEST SELLERS" section causes 0.401 CLS — images without explicit width/height | 0.401 CLS | Set explicit width and height on all images, reserve space for dynamic content |
| 9 | CLS 0.635 on desktop | Worse than mobile — likely due to larger viewport layout calculations | 0.635 CLS | Same as above — set dimensions on all images and fix dynamic content placement |
🟢 Medium/Low
| # | Issue | Evidence | Recommendation |
| 10 | Inefficient cache lifetimes | 491KB of assets with short/zero cache TTL (Charla widget, CookieFirst, Salesforce) | Set longer cache lifetimes (min 1 year) for static assets via .htaccess |
| 11 | No preconnect hints | 0 preconnect origins despite loading from 15+ 3rd-party origins | Add <link rel="preconnect"> for top 3-4 origins (Google Fonts, GTM, Klarna) |
| 12 | Duplicated JavaScript | 11KB of duplicate JS modules | Remove duplicate bundles, audit Magento module dependencies |
| 13 | Legacy JavaScript | 25KB of polyfills for modern features (Facebook Pixel, CookieFirst) | Use nomodule attribute for ES5 bundles, serve modern JS to modern browsers |
| 14 | Minify JavaScript | 9KB of unminified JS (jquery.magnific-popup.min.js 12.4KB → 6.7KB savings) | Re-minify all JS bundles, verify Magento production mode is properly configured |
1.5 Resource Transfer Summary
| Category | Transfer Size | % of Total | Notes |
| Images | ~490 KB | 7% | Moderately sized, but no WebP and no responsive images |
| JavaScript | ~2,500 KB | 38% | Heaviest category — 59 script tags, 4.0s execution time |
| CSS | ~150 KB | 2% | Small but 95% unused |
| 3rd-party | ~3,400 KB | 52% | reCAPTCHA (2.6MB — loaded 7 times!), GTM, Klarna, Charla, Facebook, New Relic, ActiveCampaign, Clarity, CookieFirst, Salesforce |
| HTML | 222 KB | 3% | Large HTML for Magento |
Key finding: 3rd-party scripts account for over half of all transferred bytes. Google reCAPTCHA alone is loaded 7 times (2.6MB total) — this appears to be a misconfiguration.
2. Accessibility Audit
Lighthouse Score: 74/100
2.1 Critical Issues
| # | Issue | Evidence | WCAG |
| 1 | No H1 heading on homepage | 0 <h1> elements found on the homepage. The page has no visible or hidden H1 — critical for screen reader navigation. | A |
| 2 | Links without discernible text | 8 links have no accessible name — product/category image links in the homepage slideshow, social media icons, and two footer links | A |
| 3 | ARIA dialog without accessible name | The country selector modal (role="dialog") has no aria-label or aria-labelledby | A |
| 4 | ARIA role containment issues | 9 <li> elements are not contained in <ul>/<ol> parent; role="menuitem" elements not contained by role="menu" | A |
2.2 High Priority Issues
| # | Issue | Evidence | Recommendation |
| 5 | Touch targets too small | 24+ footer links have insufficient touch target size (below 48×48px) | Increase footer link touch targets, add padding |
| 6 | ARIA attributes don't match roles | User dropdown and language switcher have aria-haspopup="true" on non-menu elements | Fix ARIA role assignments |
| 7 | Empty heading in cookie banner | CookieFirst banner has an <h2> with no content | Fix CookieFirst banner heading |
| 8 | Non-composited animations | 11 animated elements (price visibility, slider buttons) use unsupported CSS properties | Use transform and opacity for animations (GPU-composited) |
2.3 Positive Findings
- ✅ All images have
alt attributes (17 images on homepage, 11 with empty alt for decorative)
- ✅ Color contrast passes (no failures detected)
- ✅ Document has a
<title> element
- ✅
<html lang="en"> attribute present and valid
- ✅ Viewport meta tag present with
width=device-width, initial-scale=1
- ✅ Form elements have associated labels
- ✅ Skip link/landmark navigation present (
<main> landmark)
- ✅ Heading order is sequentially descending
- ✅ No
[tabindex] values greater than 0
3. SEO Audit
3.1 Technical SEO
| Check | Status | Details |
| robots.txt | ✅ Pass | Valid, includes Sitemap directives for both EN and PT sitemaps, properly disallows Magento internal paths |
| XML Sitemap | ⚠️ Warning | 274 EN URLs, 279 PT URLs. Sitemaps include internal Magento URLs (/catalog/category/view/id/). Lastmod dates range from 2020 to 2026 — some URLs haven't been updated in 6 years |
| Canonical URLs | ❌ Critical Fail | No canonical URLs on any page tested — homepage, product page, and collection page all lack <link rel="canonical">. This is a serious duplicate content risk |
| Indexation | ✅ Pass | No noindex on important pages, HTTP 200 status codes |
| URL structure | ⚠️ Warning | Clean, descriptive URLs (/en/soaps, /en/black-edition-soap-on-a-rope). However, sitemap includes catalog/category/view/id/ admin URLs |
| HTTPS | ✅ Pass | Enforced site-wide, HSTS active |
| Page speed | ❌ Critical Fail | 22/100 mobile, 23/100 desktop — see Performance section |
| Mobile-friendly | ⚠️ Mixed | Viewport configured, responsive design present. But mobile performance is catastrophic (17.0s LCP) |
3.2 On-Page SEO Issues
Title Tags
| Page | Current Title | Issue | Recommendation |
| Homepage | "Claus Porto" | ❌ Too short — just brand name, no keywords | "Luxury Handcrafted Soaps & Fragrances Since 1887 | Claus Porto" |
| Soaps (collection) | "Soaps" | ❌ Too short — no descriptive keywords | "Handcrafted Luxury Soaps | Deco, Clássico & Musgo Real Collections | Claus Porto" |
| Black Edition Soap | "Black Edition Soap on a Rope" | ✅ Good | Keep as-is, though could be slightly longer |
Meta Descriptions
| Page | Current Meta Description | Issue |
| Homepage | Portuguese description about brand history | ❌ Language mismatch — lang="en" but description is in Portuguese. Also too long (200+ chars) |
| Soaps (collection) | English description | ✅ Good — descriptive, includes keywords |
| Black Edition Soap | Empty | ❌ Missing — no meta description on product page |
Heading Structure
| Page | H1 | Issue |
| Homepage | None | ❌ Critical — missing H1 entirely |
| Soaps (collection) | "Soaps" | ✅ Good, but could be more descriptive |
| Black Edition Soap | "Black Edition Soap on a Rope" | ✅ Good |
Open Graph & Twitter Card Tags
| Check | Status |
| og:title | ❌ Missing on all pages |
| og:description | ❌ Missing on all pages |
| og:image | ❌ Missing on all pages |
| og:url | ❌ Missing on all pages |
| og:type | ❌ Missing on all pages |
| og:site_name | ❌ Missing on all pages |
| twitter:card | ❌ Missing on all pages |
| twitter:title | ❌ Missing on all pages |
| twitter:description | ❌ Missing on all pages |
| twitter:image | ❌ Missing on all pages |
No social sharing tags at all. When shared on social media (Facebook, Twitter/X, LinkedIn, Instagram, WhatsApp), the link will appear as a bare URL or without proper preview image, description, or title. This is a critical gap for a luxury brand that relies on visual appeal and social sharing.
3.3 Schema Markup (JSON-LD)
| Schema Type | Status | Notes |
| Organization | ❌ Missing | Brand name, logo, URL, social links, founding date should be marked up |
| WebSite | ❌ Missing | Sitelinks search box opportunity |
| Product | ❌ Missing | No Product schema on product pages — no price, availability, SKU, brand, or aggregateRating |
| BreadcrumbList | ❌ Missing | No breadcrumb navigation visible or in schema |
| ItemList | ❌ Missing | No schema on collection pages |
| LocalBusiness | ❌ Missing | 4 physical stores not marked up |
| Article | ❌ Missing | Blog pages (if any) not marked up |
No JSON-LD structured data found anywhere on the site. This is a critical gap for rich results (star ratings, product availability, breadcrumbs, sitelinks search box, store information).
3.4 Content Quality (E-E-A-T)
Experience
- ✅ Strong heritage story (Since 1887 section, timeline, story page)
- ✅ Handcrafted, hand-wrapped product narrative
- ✅ Physical stores with rich descriptions
Expertise
- ✅ 139-year-old brand with four generations of expertise
- ✅ Original Portuguese soap and perfume manufacturer
- ⚠️ Missing: founder credentials, artisan profiles, manufacturing process details
Authoritativeness
- ✅ Premium retail partnerships (Anthropologie, Bluemercury, Amazon)
- ✅ International distribution (50+ countries)
- ⚠️ Missing: press mentions, industry awards, press coverage on website
Trustworthiness
- ✅ HTTPS enforced
- ✅ Privacy Policy, Terms of Use, Shipping & Handling pages present
- ✅ Quality Policy page
- ⚠️ Missing: Customer reviews on product pages, trust badges, business registration number, Klarna presence (but integrated)
4. International SEO
4.1 Locale Configuration
The site serves two locales:
- English:
/en/ prefix (e.g., /en/soaps)
- Portuguese:
/pt/ prefix (e.g., /pt/sabonetes)
The default domain (/) serves the Portuguese version.
4.2 Hreflang Implementation
| Check | Status | Details |
| Hreflang tags in HTML | ❌ Missing | No <link rel="alternate" hreflang="..."> tags found on homepage, product page, or collection page |
| Self-referencing hreflang | ❌ Missing | No self-referencing hreflang entry |
| x-default hreflang | ❌ Missing | No fallback locale marker |
| Sitemap hreflang | ❌ Missing | Neither EN nor PT sitemap includes <xhtml:link> hreflang annotations |
No hreflang implementation exists. Google cannot determine which locale to serve in search results for users in different regions. This can cause:
- Portuguese users seeing English results (or vice versa)
- Duplicate content signals between
/en/ and /pt/ versions
- Reduced international search visibility
4.3 Canonicalization for Multilingual
Broken: No canonical URLs exist on any page. For a multilingual site, each locale page should self-canonical (e.g., /en/soaps → /en/soaps, /pt/sabonetes → /pt/sabonetes). Cross-locale canonical would be even worse.
4.4 URL Structure
✅ Good — subdirectory-based (/en/, /pt/) is the recommended approach.
4.5 Localization Quality
| Check | Status | Details |
| Product titles translated | ✅ Good | Different products listed per locale |
| Product descriptions translated | ⚠️ Partial | Magento allows per-locale content, verified on spot-check |
| Meta descriptions translated | ⚠️ Mixed | Homepage meta description is in Portuguese regardless of locale |
| Currency localization | ✅ Good | Euro (€) for both locales |
| UI chrome translated | ✅ Good | Navigation, footer, buttons properly localized |
Note: Unlike Shopify's "shell translation" problem, Magento natively supports full content translation per store view, so this risk is lower.
5. Best Practices & Security
5.1 Security Headers
| Header | Value | Rating |
| Strict-Transport-Security | max-age=31536000 | 🟡 Missing includeSubDomains and preload directives |
| X-Frame-Options | SAMEORIGIN | ✅ Good |
| X-Content-Type-Options | nosniff | ✅ Good |
| Content-Security-Policy | Report-only only | ❌ Not enforced — CSP is report-only, provides no actual XSS protection |
| X-XSS-Protection | 1; mode=block | ✅ Good (legacy, but still useful) |
| Cross-Origin-Opener-Policy | Missing | ❌ Missing — no COOP header |
| Referrer-Policy | Missing | ❌ Missing |
| Permissions-Policy | Missing | ❌ Missing |
5.2 CSP Issues
- CSP is report-only only — no enforced CSP means no XSS protection
unsafe-inline and unsafe-eval present in script-src — significantly weakens XSS protection
- CSP includes wildcard
* in several directives (img-src, connect-src, frame-src) — effectively useless
- Content Security Policy issues detected in Chrome DevTools Issues panel — multiple 3rd-party scripts violate CSP
5.3 HSTS Issue
Missing includeSubDomains — without this, subdomains (e.g., shop.clausporto.com, help.clausporto.com) are not protected. Missing preload — prevents inclusion in browser HSTS preload lists.
5.4 Browser Console Errors
| Error | Source | Impact |
| WebSocket connection failed | app.charla.com (live chat) | Chat widget won't work |
| Failed to load resource (HTTP 428) | Salesforce Embedded Messaging | Live chat/Case service broken |
| reCAPTCHA storage access denied | Google reCAPTCHA | reCAPTCHA may fail |
| Failed to retrieve Business Hours data | Salesforce | Chat availability unknown |
| TypeError: Cannot read properties of null | jquery.min.js | Homepage theme JS error |
Multiple JavaScript errors on the homepage indicate broken integrations and unhandled edge cases.
5.5 Modern Standards
| Check | Status |
| ✅ Valid HTML5 doctype | Pass |
| ✅ Charset declared as UTF-8 | Pass |
| ✅ No mixed content | Pass |
| ⚠️ Source maps exposed | 3 source maps (CookieFirst, Klarna) accessible in production |
| ✅ HTTPS enforced | Pass |
6. Content Quality Assessment
6.1 Image Quality & Authenticity
| Check | Status | Details |
| AI-generated image detection | ✅ Clean | No AI-generated image patterns detected in filenames |
| Image filenames | ⚠️ Mixed | Product images use descriptive names like musgo_soaproap_classicscent.png — good. WYSIWYG images use date-based names like 20210705_Claus3512_HR_Mobile_4.jpg — acceptable |
| Image format | ⚠️ JPEG only | No WebP or AVIF formats detected — missing optimization opportunity |
| Product photography | ✅ Good | Professional studio photography with lifestyle and product shots |
| Alt text | ⚠️ Decorative only | 11 of 17 images use alt="" (decorative). Product images in best-sellers section have descriptive alt text. Hero/promotional images have alt="" — this is acceptable for decorative but limits image search |
6.2 Trust Signals
| Signal | Present | Notes |
| Phone number | ✅ Yes | Multiple store phone numbers in footer |
| Email | ✅ Yes | Contact form available |
| Physical address | ✅ Yes | Store addresses |
| Return/refund policy | ✅ Yes | Shipping & Handling page |
| Privacy Policy | ✅ Yes | Dedicated page |
| Terms of Use | ✅ Yes | Dedicated page |
| Quality Policy | ✅ Yes | Dedicated page |
| Business registration | ❌ No | NIF/VAT number not visible |
| Customer reviews | ❌ No | No product reviews or star ratings visible |
| Trust badges | ❌ No | No payment security badges on PDP |
| Klarna integration | ✅ Yes | Klarna payment available |
6.3 UX Issues
| Issue | Details |
| Cookie banner | CookieFirst banner blocks content until accepted — adds to FCP/TBT |
| Country selector modal | Popup asking "You're visiting Claus Porto European website" — adds to poor UX and CLS |
| No breadcrumb navigation | No visual breadcrumbs on any page — makes navigation difficult for users and search engines |
| No product reviews | No customer reviews, ratings, or UGC — reduces social proof and trust for a luxury brand |
| Footer link density | 24+ links in footer with small touch targets — poor mobile usability |
| Copyright notice | States "© 2021 Claus Porto" — 5 years out of date |
7. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort |
| 1 | Fix render-blocking resources — inline critical CSS, defer non-critical CSS/JS | 1.1s+ savings on LCP | Medium — Magento configuration |
| 2 | Preload LCP image — add fetchpriority="high", rel="preload", remove loading="lazy" | ~14s savings on LCP | Low — single template edit |
| 3 | Add canonical URLs — self-referencing on every page via Magento configuration | Duplicate content risk | Low — Magento SEO config |
| 4 | Add Open Graph + Twitter Card tags — add to Magento theme template | Social sharing previews | Low — template edit |
| 5 | Add Organization + WebSite JSON-LD schema to all pages | Rich results, sitelinks search | Low — add to theme head |
| 6 | Add Product schema to product pages (name, price, availability, brand, SKU) | Product rich results, pricing | Medium — Magento template |
| 7 | Add H1 heading to homepage — currently missing | Accessibility, SEO ranking | Low — CMS page edit |
| 8 | Fix homepage meta description — currently Portuguese on English page | SERP click-through | Low — CMS field edit |
| 9 | Add meta descriptions to product pages — currently empty | SERP click-through | Low — bulk edit via Magento admin |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
| 10 | Optimize images — serve WebP/AVIF, add responsive srcset, compress oversized images | 243KB savings | Medium — Magento extension or CDN config |
| 11 | Remove unused CSS — 141KB waste (95% of stylesheet) | CSS delivery | Medium — critical CSS extraction |
| 12 | Reduce 3rd-party script bloat — defer/lazy-load Charla, Klarna, New Relic, ActiveCampaign; fix reCAPTCHA loading 7 times | 1,273KB+ savings | Medium — audit and reconfigure |
| 13 | Set explicit width/height on images — fix 0.401 CLS on mobile, 0.635 on desktop | CLS fix | Low — template CSS |
| 14 | Add hreflang tags — EN and PT with x-default; add to sitemap xhtml:link | International SEO | Medium — Magento theme + sitemap generator |
| 15 | Add BreadcrumbList schema + visual breadcrumbs | SEO, UX | Medium — template addition |
| 16 | Fix JavaScript console errors — Charla WebSocket, Salesforce 428, reCAPTCHA storage access | Stability | Medium — debug integrations |
| 17 | Add Product AggregateRating/Review schema | Star ratings in SERPs | Medium — review app integration |
| 18 | Improve homepage title tag — add keywords | Direct ranking signal | Low |
| 19 | Improve collection page title tags — add descriptive keywords | Direct ranking signal | Low |
| 20 | Fix footer link touch targets — increase padding/spacing | Mobile usability | Low — CSS fix |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
| 21 | Enforce CSP — move from report-only to enforced, remove unsafe-inline/unsafe-eval | XSS protection | High — requires full audit of all scripts |
| 22 | Add HSTS preload + includeSubDomains | Security | Low — config change |
| 23 | Add COOP, Referrer-Policy, Permissions-Policy headers | Security | Low — .htaccess/vcl config |
| 24 | Remove internal Magento URLs from sitemap (/catalog/category/view/id/) | Crawl budget | Medium — Magento SEO config |
| 25 | Add customer reviews/ratings to product pages | Social proof, trust | High — review app integration |
| 26 | Consider page builder image optimization — WYSIWYG images served at 1000×1000px for 721×721px display | Image performance | Medium — Page Builder templates |
| 27 | Add LocalBusiness schema for 4 physical stores | Local SEO, map results | Medium |
| 28 | Implement preconnect hints for top 3rd-party origins | Performance | Low |
| 29 | Update copyright year from "2021" to 2026 | Trust signal | Low |
| 30 | Add customer reviews/trust badges on PDP and checkout | Conversion rate | Medium |
8. Summary Score Card
| Category | Score | Grade |
| Performance (Mobile) | 22/100 | 🔴 Critical |
| Performance (Desktop) | 23/100 | 🔴 Critical |
| Accessibility | 74/100 | 🟡 Needs Work |
| Best Practices | 92/100 | 🟢 Good |
| SEO | 100/100 | 🟢 Good |
| Content Quality | 65/100 | 🟡 Needs Work |
| International SEO | 20/100 | 🔴 Critical |
| Security | 70/100 | 🟡 Needs Work |
| Overall | 22/100 | 🔴 Critical |
Verdict: Claus Porto's website is critically underperforming. The 139-year-old luxury brand has a beautiful product and heritage story, but its digital presence severely undermines this. The 17.0s mobile LCP, missing structured data, missing canonical URLs, no social sharing tags, no hreflang, no H1 on the homepage, and massive 3rd-party script bloat collectively create a poor user experience that will hurt both organic search rankings and conversion rates. The most impactful fix is addressing the LCP image (preload + no lazy loading) which alone can save ~14 seconds of load time. The second is fixing the 3rd-party script bloat (reCAPTCHA loaded 7 times at 2.6MB).
9. Sources
| Source | URL | Data Used |
| PageSpeed Insights | https://pagespeed.web.dev/ (report for https://clausporto.com/) | Lighthouse scores, Core Web Vitals, performance audits, accessibility audit, best practices, SEO |
| curl HTTP headers | https://clausporto.com/ | Security headers, HSTS, CSP, XFO, HSTS max-age |
| robots.txt | https://clausporto.com/robots.txt | Crawl directives, sitemap references |
| EN sitemap | https://clausporto.com/media/sitemap_en.xml | URL count, lastmod dates, URL structure, image markup |
| PT sitemap | https://clausporto.com/media/sitemap_pt.xml | URL count, lastmod dates, locale comparison |
| Homepage HTML | https://clausporto.com/ | Title, meta description, viewport, lang, h1, images, script count |
| Product page HTML | https://clausporto.com/en/black-edition-soap-on-a-rope | Title, meta description, canonical, H1, JSON-LD |
| Collection page HTML | https://clausporto.com/en/soaps | Title, meta description, canonical, H1, H2, JSON-LD |
| EN version homepage | https://clausporto.com/en/ | Title, meta description, canonical, hreflang, JSON-LD |
| Browser snapshot | Claus Porto homepage (rendered) | Visual structure, navigation, content sections, images, footer |
| Business Analysis | business-analysis.md (prior task) | Brand context, company info, store locations, product categories |