Web Quality Audit: Planet Paaduks

Website: https://www.planetpaaduks.in/ | Date: 2026-08-27 | Platform: Shopify (Motech/Minimog-style theme) | Industry: Sustainable / Vegan footwear D2C (India)

Context: audit supplements the exhaustive e-commerce business analysis (business-analysis.md) for the same brand. Mobile-first audience — 90.4% of traffic is phone, 9.6% desktop (CrUX form factors, 2026-07-26 → 2026-08-22).


Executive Summary

Planet Paaduks is a competent Shopify store with solid technical SEO fundamentals (single canonical, valid HTTPS, working sitemap of 332 URLs, good Best-Practices/SEO Lighthouse scores) but it is held back by two serious, business-critical problems:

  1. A site-wide age-verification modal ("Are you 18 years old or older?") overlays every page — including the homepage, collections, and product pages. For an open-footwear brand this is unjustified conversion friction that blocks first paint, interposes a dead-end ("No, I'm not") for a large share of visitors, and risks suppressing the LCP element. This is the single highest-impact issue in the audit.
  2. Catastrophic mobile Largest Contentful Paint — 18.7s in Lighthouse lab (vs. 2.5s "Good"), driven by a render-blocking, JS-injected, loading="lazy" hero/slider image and a heavy app/theme JS+CSS stack (212 scripts, 32 stylesheets on the homepage). Real-user CrUX LCP is "Needs Improvement" at 3,233ms.

The store also shows the classic Shopify SEO gaps: many collection/policy/blog-listing pages have no meta description and no og:image, and the hero image is served as JPEG rather than WebP/AVIF. None of these are fatal, but together they cap organic reach and social CTR.

CategoryMobile ScoreDesktop ScoreGrade
Performance6085🔴 / 🟡
Accessibility8484🟡
Best Practices8888🟡
SEO8585🟡
Overall (avg)7986🟡
Mobile vs desktop performance gap = 25 points (1.4×). The gap is driven entirely by LCP: desktop LCP 2.1s (Good) vs mobile 18.7s (lab). Real-user mobile LCP (3.2s) is far better than lab but still Needs Improvement.

1. Performance Audit

1.1 CrUX Real-World Field Data

Source: Chrome User Experience Report via CrUX Vis, origin https://www.planetpaaduks.in, as of 2026-08-22 (latest 28-day period, phones).

Core Web Vitals Assessment (mobile/phone): Needs Improvement. LCP is in "Needs Improvement"; INP and CLS are "Good."

MetricLatest ValueThreshold (Good / Poor)Rating
LCP3,233 ms≤2,500 / >4,000🟡 Needs Improvement
INP172 ms≤200 / >500🟢 Good
CLS0.05≤0.10 / >0.25🟢 Good

Trend (8-week, latest first): LCP improved from ~3,493ms (early June) to 3,038ms (mid-July) then drifted back to 3,233ms. INP is stable Good (~170–204ms). CLS is excellent (0.01–0.05) after a Q1 cleanup that removed large layout shifts. The mobile CWV assessment is "Loading Performance needs improvement but is regressing" per CrUX Vis — the LCP improvement seen in June–July is reversing.

Form factors (confirmed in business analysis): Phone 90.4% / Desktop 9.6% / Tablet 0.0%. Strongly mobile-first — all performance work must prioritize the phone experience.

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: PageSpeed Insights, report 2026-08-27 5:10 PM UTC, Lighthouse 13.4.1, emulated Moto G Power (mobile) / desktop.

MetricMobileRatingDesktopRating
First Contentful Paint (FCP)4.8 s🔴 Poor (>3.0s)0.9 s🟢 Good
Largest Contentful Paint (LCP)18.7 s🔴 Poor (>4.0s)2.1 s🟢 Good
Total Blocking Time (TBT)80 ms🟢 Good50 ms🟢 Good
Cumulative Layout Shift (CLS)0.00🟢 Good0.057🟢 Good
Speed Index (SI)6.5 s🔴 Poor (>5.8s)1.9 s🟢 Good
The 18.7s mobile LCP is the dominant issue. Lab is worse than field because Lighthouse throttles to Slow-4G and the hero image is both render-blocking and lazy-loaded. Desktop LCP (2.1s) is comfortably Good — confirming the problem is mobile-specific (render-blocking JS/CSS + unoptimized hero).

1.3 LCP Phase Breakdown (Mobile, inferred)

Lighthouse lists Render-blocking requests — Est. savings 450ms and Use efficient cache lifetimes — Est. savings 1,446 KiB as the top insights. The homepage sends 14+ rel="preload" CSS links and 212 <script> tags (32 stylesheets). The hero slider image (slider_item_F3CXfk) is fetched with loading="lazy" — a contradiction that defers the LCP element until after onload, inflating LCP by seconds. The pre-resource-delay pattern is present: the LCP element cannot even be discovered until theme JS + Flickity + multiple app bundles execute.

1.4 Performance Issues by Impact

Critical (>1s savings)

  • Lazy-loaded LCP/hero image — The first <main> image uses loading="lazy" on the homepage AND collection pages. Never lazy-load the LCP element. Evidence: document.querySelector('main img').loading === "lazy"; PSI est. LCP impact. Fix: set loading="eager" + fetchpriority="high" + <link rel="preload" as="image"> on the hero. Savings: multi-second LCP reduction.
  • Render-blocking CSS/JS — 14 preload CSS links + 212 scripts; theme + 6+ Shopify apps (GoKwik, Releasit COD, Zipcode Restrictor, BlueCart upsell, WhatsApp Chat, Flickity). Evidence: PSI "Render-blocking requests — 450ms." Fix: inline critical CSS, defer non-critical app JS, use defer/async, collapse redundant preloads to ≤4.

High (200ms–1s)

  • Unoptimized hero/collection images (JPEG, no WebP/AVIF) — Hero served as .jpg (e.g. zen_banner.jpg?width=2000), no fm=webp. Evidence: hero src format .jpg; PSI "Improve image delivery — 327 KiB." Fix: serve AVIF/WebP via Shopify CDN (&fm=webp/&fm=avif), responsive srcset.
  • Inefficient cache lifetimes — PSI est. 1,446 KiB savable; many CDN assets lack long max-age. Fix: confirm Cache-Control on theme/app assets.
  • Third-party script bloat — GoKwik SSO SDK, WhatsApp chat, BlueCart progress bar, Zipcode restrictor, Flickity all inject CSS+JS. Fix: load below-the-fold / after interaction.

Medium/Low

  • Duplicated JavaScript — 12 KiB (PSI).
  • Forced reflow on render (PSI diagnostic).
  • maximum-scale=1.0, user-scalable=0 in viewport (see §2.1) — disables pinch-zoom, an accessibility + minor SEO signal.
  • Excessive preconnect — 6 preconnects (cdn.shopify.com ×2, unpkg, gokwik, cdnjs, cdnjs crossorigin); trim to the 2–3 that matter.

1.5 Resource Transfer Summary (homepage DOM)

  • Images: 66 <img> (60 loading="lazy" below fold — appropriate; 1 lazy hero — inappropriate).
  • Scripts: 212 <script> tags. Stylesheets: 32. iframes: 2 (likely WhatsApp chat / app embed).
  • Total DOM elements: 2,570 (acceptable; under the 1,500 "large DOM" soft cap is not met but not egregious).
  • Total page weight: large — PSI flags ~1.4 MiB of cacheable assets.

2. Accessibility Audit

2.1 Critical Issues

  • user-scalable=0 + maximum-scale=1.0 in viewport meta — Disables pinch-zoom for low-vision users. WCAG 1.4.4 (AA) failure. Evidence: viewport: width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0. Fix: remove maximum-scale/user-scalable.
  • Age-gate as a dead-end for "No" users — The "No, I'm not" button offers no path forward and fully blocks the store (see §6.2). A screen-reader/keyboard user hitting the modal first has no content behind it until they choose "Yes." This is an interaction barrier, not strictly a WCAG failure, but it intercepts all assistive-tech entry.
  • 3 homepage images missing alt entirely — the three banner <img> (zen_banner.jpg, Women_Sandals_Banner.jpg, Men_Slides_Banner.jpg) have no alt attribute. Evidence: img:not([alt]) = 3. Screen readers announce "image" with no context; these are content/marketing banners that should carry descriptive alt.

2.2 High Priority Issues

  • 23 images with empty alt="" (decorative — acceptable IF genuinely decorative, but verify these aren't product/content images that should be indexed). On a product-led store, confirm empty-alt images are truly decorative (icons, dividers), not products.
  • H1 is the logo imagedocument.querySelector('h1') resolves to the logo link <img alt="Planet Paaduks">. The homepage has a visible keyword heading only in slider/banner text, not a semantic H1 with the primary keyword ("vegan footwear"/"sustainable sandals"). Single H1 is good; making it keyword-bearing (or adding a visible H1) strengthens ranking.
  • No skip-to-content link detected (a[href="#main"] = 0). Minor AA gap given heavy nav.
  • Hero image loading="lazy" (also a perf issue) — delays first meaningful paint for AT users relying on visual load.

2.3 Positive Findings

  • html lang="en" present (server-driven content-language: en-IN). ✓
  • <meta name="viewport"> present. ✓
  • Logical heading hierarchy on product pages (single visible H1 = product name; proper H2/H3/h4 for features). ✓
  • Buttons have descriptive aria-label (e.g. "Decrease quantity of …", "Add to cart"). ✓
  • Color contrast acceptable (no flagged failures; Lighthouse a11y = 84).
  • Form inputs (size radios, quantity spinbutton) are labeled. ✓

3. SEO Audit

3.1 Technical SEO

CheckStatusEvidence
HTTPS enforcedstrict-transport-security: max-age=7889238; valid cert; no mixed content (CSP block-all-mixed-content)
robots.txtClean, includes Sitemap: directive, disallows cart/checkout/account, allows product/collection/page/blog
XML Sitemap332 URLs: products 93, collections 143, pages 28, blogs 67 (+ agentic-discovery). All indexable templates present
Canonical (self-ref)Homepage + collection + product all self-canonical
IndexationNo noindex on key templates; robots meta absent (default allow)
URL structureReadable, hyphenated, keyword-rich (/products/sko-cork-women, /collections/men)
Mobile-friendly⚠️Responsive + viewport present, BUT user-scalable=0 and slow mobile LCP hurt mobile-first indexing
Hreflang / i18n✅ N/ASingle locale (en-IN), .in domain, India-only. No multilingual needed

Security headers (relevant to SEO trust + best practices): x-frame-options: DENY, x-content-type-options: nosniff, content-security-policy: frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content, HSTS present. No CSP script-src (uses the permissive default) and no COOP — medium best-practices gap, not SEO-blocking.

3.2 On-Page SEO Issues

Meta descriptions — partial (P0):

  • ✅ Homepage (260 chars — slightly long, trim to ~155), product pages (present), blog posts, most policy pages.
  • Missing on collection pages (/collections/men — no description), and many content/policy pages: /pages/contact, /pages/conscience, /pages/b2b, /pages/bulk-gifting, /pages/allblog, /pages/reviews. These are crawlable, indexable templates with no SERP snippet — lost CTR.

Open Graph / Twitter:

  • ✅ Homepage, product, blog post have OG + Twitter Card.
  • og:image missing on collections, blog listing, and most /pages/* (verified: /collections/men, /blogs/all-blogs, /pages/contact, etc. have no og:image). Social shares render without a preview image — major CTR loss on Instagram/FB/WhatsApp (the brand's primary acquisition channels per the business analysis).

Title tags: Mostly good and keyword-bearing (homepage 63 chars "Planet Paaduks- Buy Premium Footwear Online for Men & Women"; products "Buy Sko Slingback Cork Sandals Women Brown Paaduks – Planet Paaduks"). A few thin: /pages/allblog → "AllBlog – Planet Paaduks", /pages/warranty → "Warranty Application Successful" (a thank-you page wrongly titled).

Headings: Homepage H1 = logo (keyword-less, see §2.2). Collection pages have no visible H1 — section headings ("NEW IN CORK - MEN") are H2. Add a keyword H1 per collection.

3.3 Schema Markup

TypePresentNotes
Organization✅ all pagesname "Planet Paaduks", sameAs socials
WebSite✅ homepage(SearchAction not verified — check potentialAction)
Product✅ product pageshas name, url, image, description, sku, brand "Paaduks", offers (price/currency/availability) — but NO aggregateRating and NO review despite visible 4.52★ star ratings + reviews on the page
BreadcrumbListNot present on collection/product pages (visual breadcrumbs also absent)
Article✅ blog postspresent
LocalBusinessNot present — missed opportunity (Mumbai HQ, phone, email exist)
FAQPageNot present

Key schema gaps:

  • No AggregateRating / Review on Product despite a visible 4.52★ rating and customer reviews → the brand is forfeiting star-rating rich results in SERPs. High impact (P2 in skill matrix, but high CTR value for a review-rich store).
  • No BreadcrumbList → no breadcrumb rich results; also no visible breadcrumbs on collection/product pages (UX + SEO wayfinding gap).
  • No LocalBusiness → local/entity signal missed (address, geo, hours available to add).

3.4 Image SEO

  • Descriptive filenames mostly present (e.g. zen_banner.jpg, Varsha_Black_Sandals_Women). ✅
  • Alt text: product images well-named; 3 banner images missing alt; 23 empty-alt to verify. ⚠️
  • Format: JPEG hero, no WebP/AVIF → compress + modern format (perf + image-search). ⚠️
  • Lazy-load below-fold ✅ (but hero must be eager — see §1.4).

3.5 Internal Linking

  • Nav is shallow (Designer's Edit / Men / Women / Thrift Store) — no blog↔collection cross-links visible in nav. Blog posts exist (67) but aren't surfaced to product collections. Medium: add "related collection" links from blog posts; add blog to footer/nav.
  • No broken internal links found in sampled templates. ✅

3.6 Keyword Targeting

  • Homepage targets "premium footwear online for men & women" — generic; missing the brand's differentiator keywords ("vegan footwear", "upcycled tyre sandals", "sustainable sandals India"). Recommend: weave sustainability/vegan keywords into H1/title/meta.
  • Collection titles are bare ("All Products Men") — no keyword (e.g. "Men's Vegan Sandals & Slides").

3.7 E-E-A-T Signals

  • Experience/Expertise: founder story (Amit Jain, Aparajit Sangotra), "Skilled Craftsmanship" section, material transparency. ✓ (but buried — not in a prominent About page linked from nav; /pages/conscience exists, under-used).
  • Authoritativeness: press mentions cited in business analysis (YourStory etc.); not surfaced on-site. ⚠️
  • Trustworthiness: phone + email + policies + reviews + 100-day warranty all visible on PDP. ✅ Strong for a D2C store.

4. International SEO

Not applicable. Single locale (en-IN), .in domain, India-only shipping, no hreflang, no localized content. No action needed. (If the brand later expands to the US/EU via marketplaces, revisit hreflang + en vs en-IN canonical strategy.)


5. Best Practices & Security

5.1 Security Headers

HeaderValueVerdict
HSTSmax-age=7889238 (~3m)✅ present, though includeSubDomains; preload not set
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
CSPframe-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content⚠️ no script-src (permissive); acceptable but not strict
COOP / COEPabsent⚠️ missing (low priority)
X-Permitted-Cross-Domainnone

5.2 Modern Standards

  • Valid HTML5 doctype, UTF-8 charset. ✅
  • No document.write. ✅
  • No mixed content (CSP enforces). ✅
  • Source maps: not exposed in sampled responses. ✅
  • No CSP script-src means third-party app JS (GoKwik, WhatsApp, BlueCart) is unrestricted — minor supply-chain risk, low priority.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • No AI-generated image fingerprints detected in sampled filenames (no Gemini_Generated_, ChatGPT_Image_, ai0_, unnamed_1). Product/banner photography uses real descriptive filenames (Varsha_Black_Sandals_Women, zen_banner.jpg). ✅ For a "handcrafted/ethical" brand, real photography is on-brand — maintain this.
  • Hero/collection banners are large JPEGs (width=2000) — should be AVIF/WebP for speed (see §1.4).
  • Product gallery well-shot (8 angles on the sampled PDP). ✅

6.2 UX Issues (Critical)

  • 🔴 Site-wide age-verification gate. Every page — homepage, collections, PDPs — renders a full-screen position:fixed; z-index:999999 modal: "Confirm your age — Are you 18 years old or older? [No, I'm not] [Yes, I am]". For open casual footwear (sandals/slides), an age gate is not legally required and is pure conversion friction:
    • Blocks first paint / LCP element discovery (interacts with the §1.4 LCP problem).
    • "No, I'm not" is a dead-end — a visitor who clicks it (or a bot/crawler that can't) sees only "Come back when you're older" and no store.
    • Adds a mandatory extra tap on a 90%-mobile audience where every tap costs conversion.
    • Recommend: remove it entirely (footwear is not age-restricted in India), or if retained for compliance, make "No" route to a graceful exit and ensure the gate never wraps the LCP image / is cookie-persisted and non-blocking.

6.3 Trust Signals

  • Phone, email, free-shipping, 7-day returns, 100-day warranty, "19 people viewing" social proof, reviews, secure-checkout badges all present on PDP. ✅ Strong.
  • Policies (shipping/returns/warranty/privacy/ToS) linked in footer. ✅
  • Missing: GST/business registration number, visible physical address (Mumbai HQ not stated on-site), founder credentials not surfaced in nav. ⚠️

6.4 Review / Social Proof

  • Visible star ratings + review counts on PDPs ✅ — but not marked up as AggregateRating/Review schema (see §3.3). Rich-result opportunity missed.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Remove the site-wide age-verification gate (or make non-blocking + cookie-persisted + graceful "No" exit)Recovers blocked LCP, removes dead-end, lifts mobile conversionLow–Med (theme setting)
2Fix lazy-loaded hero/LCP imageloading="eager" + fetchpriority="high" + preloadCuts mobile LCP from 18.7s(lab)/3.2s(field) toward GoodLow (theme/IMG tag)
3Add meta descriptions to all collection + /pages/ templates (men, women, contact, conscience, b2b, bulk-gifting, allblog, reviews)SERP CTR on indexable templatesLow (bulk edit)

🟡 Short-Term (This Month)

#IssueImpactEffort
4Add og:image to collections, blog listing, and all /pages/Social/WhatsApp share CTR (primary acquisition channel)Low (theme liquid)
5Defer/render-block fix app + theme JS/CSS (GoKwik, BlueCart, Zipcode, WhatsApp, Flickity)Mobile LCP/Speed IndexMed
6Serve hero/collection images as AVIF/WebP with srcsetImage weight, LCPLow–Med (Shopify CDN)
7Add Product AggregateRating + Review schema (ratings already on-page)Star-rich-results in SERPsMed (app/theme)
8Add BreadcrumbList schema + visible breadcrumbs on collection/PDPSERP breadcrumbs, UX wayfindingMed
9Remove user-scalable=0/maximum-scale from viewportWCAG 1.4.4 AA, mobile a11yLow
10Add alt to 3 banner images; audit 23 empty-altImage search, screen readersLow

🟢 Long-Term (This Quarter)

#IssueImpactEffort
11Keyword-rich H1/title/meta on homepage + collections ("vegan/upcycled/sustainable sandals India")Organic ranking for differentiator queriesMed
12Add LocalBusiness + WebSite SearchAction schema; surface founder/About story in navEntity + E-E-A-TMed
13Blog↔collection internal linking; add blog to nav/footerLink equity, discoveryMed
14Trim preconnects to 2–3; set strict CSP script-src; add COOPBest practices/securityLow
15Add FAQPage schema to top FAQ/content pagesFAQ rich resultsLow–Med

Summary Score Card

CategoryScoreGrade
Performance (Mobile)60/100🔴
Performance (Desktop)85/100🟡
Accessibility84/100🟡
Best Practices88/100🟡
SEO85/100🟡
Content Quality~80/100🟡 (real photography ✅; age-gate ❌; schema gaps)
UX~55/100🔴 (age-gate blocks all pages)
Overall~79/100🟡

Bottom line: Technically sound Shopify store with good hygiene (HTTPS, sitemap, canonical, schema on key pages) but two conversion-critical defects — a site-wide age gate and a lazy/render-blocked mobile hero — plus standard Shopify SEO omissions (meta descriptions + og:image on non-product templates, missing rating/breadcrumb schema). Fixing #1–#3 this week addresses the bulk of the business impact.


Sources (every data point cited)

  • CrUX field CWV + form factors: CrUX Vis, origin https://www.planetpaaduks.in, 2026-08-22 (also captured in business-analysis.md §5a). LCP 3,233ms / INP 172ms / CLS 0.05 (phone).
  • Lighthouse lab scores + metrics: PageSpeed Insights report 2026-08-27 17:10 UTC, Lighthouse 13.4.1. Mobile 60/84/88/85; Desktop 85/84/88/85. Mobile LCP 18.7s, FCP 4.8s, SI 6.5s, TBT 80ms, CLS 0.00; Desktop LCP 2.1s, FCP 0.9s, SI 1.9s, TBT 50ms, CLS 0.057. Insights: render-blocking 450ms, image delivery 327KiB, cache lifetimes 1,446KiB, duplicated JS 12KiB.
  • HTTP headers / security: curl -sI https://www.planetpaaduks.in/ (HSTS, XFO DENY, nosniff, CSP, preload links).
  • robots.txt / sitemap: curl of /robots.txt and /sitemap.xml (332 URLs: 93 products, 143 collections, 28 pages, 67 blogs).
  • Static HTML meta/OG/schema: Python parse of homepage, /collections/men, /products/sko-cork-women, blog post, and 10 /pages/* templates.
  • Live DOM a11y/perf: browser console on homepage, collection, PDP — 212 scripts, 32 stylesheets, 66 images (60 lazy), 3 missing-alt + 23 empty-alt, H1=logo, user-scalable=0 viewport, m-age-verifier modal active site-wide (position:fixed; z-index:999999), hero loading="lazy".
  • Product schema: static HTML parse of /products/sko-cork-women — Product type with name/url/image/description/sku/brand(Paaduks)/offers; no aggregateRating/review.