Web Quality Audit: Project Skin (theprojectskin.com)

Website: https://theprojectskin.com Date: 25 August 2026 Platform: Shopify (theme 193763770739, Online Store 2.0) + Cloudflare CDN, INR pricing, Judge.me reviews, Tailwind (CDN), Swiper 11, DM Sans / Inter Tight / Lexend fonts Industry: Beauty & Personal Care — D2C acne skincare (flagship of Nureya Beauty and Wellness Pvt Ltd) Context: Early-stage brand (incorporated Sep 2025), 7 SKUs + 1 kit, India-only, no marketplace presence, 0 reviews live. Business analysis: business-analysis.md.


Executive Summary

Project Skin is built on a modern, well-structured Shopify foundation: SEO's automated crawl checks pass cleanly (Lighthouse SEO = 100), HTTPS/HSTS are enforced, canonicals are self-referencing, and the sitemap is correctly declared. The brand also publishes a solid trust layer (money-back guarantee, corporate policy, payment policy, contact + WhatsApp).

However, three areas drag real quality down:

  1. Performance is Poor in lab and fragile in the field. Lighthouse scores 40 (mobile) / 48 (desktop). The root cause is a runtime-compiled Tailwind CDN, a heavy preconnect fan-out (~5+ origins), Swiper + Judge.me third-party JS, and render-blocking CSS — driving desktop Total Blocking Time to 1,220 ms. CrUX field LCP is still "good" (2.4 s at p75) but regressing month-over-month (2.18 s → 2.42 s), a warning sign for a brand scaling paid acquisition.
  2. Best Practices fails (54) on both platforms. The Content-Security-Policy has no script-src/object-src directive (so it cannot mitigate XSS), HSTS max-age is only ~91 days (no includeSubDomains, no preload), and COOP/COEP are absent.
  3. On-page SEO and structured data are inconsistent. Meta descriptions are missing on every non-home, non-product page (about, FAQ, contact, money-back, blog, collection), inner-page title tags are keyword-less (the collection page literally titles itself "Home page – Project Skin"), and schema is thin — product pages emit brand.name: "My Store" (the Shopify default instead of "Project Skin"), and there is no BreadcrumbList, FAQPage, Article, or LocalBusiness markup anywhere.

Accessibility is the strongest non-SEO dimension (80/82) but still has real defects: the homepage carries 6 <h1> elements (slider + logo), collection/contact/blog pages have 0 <h1>, and ~12 images per page ship without alt text.

Overall verdict: a technically competent but not-yet-production-hardened storefront. None of the issues are architectural; most are template-level fixes a Shopify dev can clear in 1–2 sprints. Priorities: fix the meta-description/title/H1/schema template gaps (cheap, high SEO + CTR impact), replace the Tailwind CDN with a compiled stylesheet, and tighten the security headers.

CategoryMobile ScoreDesktop ScoreGrade
Performance4048🔴 Poor
Accessibility8082🟡 Needs work
Best Practices5454🔴 Poor
SEO100100🟢 Good (automated; content gaps below)
Content Quality / E-E-A-T🟡 Needs work
Overall🟡 Mixed

1. Performance Audit

1.1 CrUX Real-World Field Data

Source: CrUX Vis, origin theprojectskin.com, "as of 2026-08-22."

Core Web Vitals Assessment: Needs Improvement on Loading (LCP) — regressing; Good on Visual Stability (CLS); Not assessed on Interactivity (INP missing data — insufficient sample at this origin's traffic level).

MetricValue (p75, latest period 2026-07-26 → 2026-08-22)Threshold (Good / Poor)Rating
LCP2,421 ms (was 2,180 ms prior period)≤ 2,500 / > 4,000 ms🟡 Good but regressing
CLS0.00≤ 0.10 / > 0.25🟢 Good and stable
INPNot available (insufficient sample)≤ 200 / > 500 ms⚪ Not assessed

Form-factor (device) split is unavailable for this origin (below CrUX reporting threshold). Given a likely mobile-first Indian D2C audience, the LCP regression is the most important signal here: field LCP is creeping toward the 2.5 s "Good" boundary and will breach it if the trend continues.

1.2 Core Web Vitals (Lighthouse Lab Data)

Source: PageSpeed Insights, Lighthouse 13.4.1. (PSI REST API returned HTTP 429 / quota 0 — lab data captured via the PSI browser UI only, per environment constraint.)

MetricMobile (Moto G Power, Slow 4G)DesktopGood / Poor
FCP5.5 s0.9 s🔴 / 🟢
LCP18.2 s ⚠️2.4 s🔴 / 🟢
TBT630 ms1,220 ms🔴 / 🔴
CLS0.000.004🟢 / 🟢
SI11.3 s4.3 s🔴 / 🔴
Performance score40 (Poor)48 (Poor)🔴
Interpretation note: The mobile LCP of 18.2 s is an artifact of Lighthouse's Slow-4G + CPU throttling on a JS-heavy page; it should not be read as the real-user number (CrUX field LCP = 2.4 s). The trustworthy, throttle-independent signal is TBT = 1,220 ms on desktop — that is a genuine main-thread-blocking problem regardless of network, and it is what's pulling the score into the red.

1.3 LCP Phase Breakdown (Mobile)

Lighthouse lists the mobile LCP as render-blocking-request-bound. The two expanded "Insights" groups most relevant:

  • Render-blocking requests — Est. savings 2,530 ms (mobile) / 360 ms (desktop).
  • LCP request discovery and LCP breakdown groups are present (content collapsed in the AX tree).

The dominant pattern: the browser must download and parse a large JS/CSS chain before the hero renders. With Tailwind delivered via the Play CDN (https://cdn.tailwindcss.com, preloaded as="script"), the browser compiles the entire utility CSS at runtime on every page load — a well-known performance killer that also inflates TBT.

1.4 Performance Issues by Impact

Critical (>1 s est. savings — mobile lab)

IssueEvidenceEst. savingsRecommendation
Render-blocking CSS/JS chain103/200 headers emit 14 rel=preload/CSS + multiple rel=preconnect; Lighthouse "Render-blocking requests" = 2,530 ms (mobile)2.5 s (mobile) / 360 ms (desktop)Inline critical CSS; defer/async non-critical theme JS; collapse preloads to real LCP path only
Tailwind compiled at runtime via CDNlink rel=preload as=script https://cdn.tailwindcss.com; Play CDN JIT compiles in-browserMajor TBT contributorReplace with a built, purged Tailwind stylesheet served from Shopify assets (no CDN)
Third-party JS bloatSwiper 11 (jsDelivr), Judge.me, Shopify Monorail, fontsAdds to TBT 630–1,220 msDefer Swiper; lazy-load Judge.me widget; self-host fonts or use font-display: swap with preconnect only to fonts.gstatic (not googleapis CSS host where avoidable)

High (200 ms–1 s)

IssueEvidenceRecommendation
Excessive preconnect fan-outHeaders show 5 preconnects (Shopify CDN ×2, fonts.googleapis, jsDelivr, Tailwind CDN); Lighthouse warns ">4 preconnect connections found"Trim to 2–3 highest-value origins (Shopify CDN, font host)
Inefficient cache lifetimesLighthouse "Use efficient cache lifetimes" = 287 KiB (mobile) / 384 KiB (desktop) est.Ensure static assets carry long Cache-Control (Shopify CDN usually does; verify theme assets)
Unoptimized image delivery"Improve image delivery" = 93 KiB est. (desktop); hero/collection PNGs served full-sizeServe WebP/AVIF, add srcset, right-size hero images

Medium / Low

  • Legacy JavaScript = 36 KiB est. (desktop) — polyfill/transpile cleanup.
  • No COOP/COEP headers (neutral for perf, see §5).

1.5 Resource Transfer Summary (qualitative)

CategoryNotes
ImagesHero + product PNGs (some full-size, e.g. Screenshot_2026-07-23_014448.png); image:image in product sitemap present
JSTailwind Play CDN (runtime compile), Swiper 11 bundle (jsDelivr), Judge.me, Shopify theme + Monorail
CSS14 component-*.css preloaded; Tailwind runtime
3rd-partyShopify CDN, Google Fonts, jsDelivr, Tailwind CDN, Judge.me CDN, Cloudflare

2. Accessibility Audit

2.1 Critical Issues

  • Multiple <h1> on the homepage (6). Live DOM shows H1s for each of the 5 hero-carousel slides ("Where Dermatology Meets Daily Care", "India's First Multi-Action Encapsulated Boba Cream", "It's Not Only Niacinamide…", "Because Every Percentage Matters.", "Track Your Skin's Daily Needs!") plus the logo link. Screen readers and Google treat this as ambiguous document structure.
  • Zero <h1> on collection, contact, and blog pages (verified via server-rendered HTML: collection/contact/blog each return H1 count: 0). A page with no top-level heading fails WCAG 2.4.6 and weakens topical signal.

2.2 High Priority Issues

  • ~12 images per page missing alt (consistent across home, product, collection, about, FAQ, contact, money-back, blog). The recurring offenders are the mega-menu flyout graphics shop_menu_slider.png / _2 / _3 (rendered 3–4× each). Decorative icons should use alt=""; content/logo images need real alt.
  • One logo image ships alt="" (LOGO_PNG.jpg) — acceptable only if truly decorative; the footer/header logo should carry alt="Project Skin".
  • <html lang="en"> is set (good), but the store is content-language: en-IN — consider lang="en-IN" for correct regional pronunciation/segmentation.

2.3 Positive Findings

  • Skip-to-content link present (top of DOM: "Skip to content").
  • Viewport meta present; HTTPS enforced.
  • Color-contrast not flagged by Lighthouse; tap targets generally adequate.
  • Headings otherwise use a logical H2/H3 hierarchy for content sections (product names, value props, FAQ-style blocks).

3. SEO Audit

3.1 Technical SEO

CheckStatusEvidence
robots.txtCrawlable; Sitemap: directive present; disallows /cart/, /checkout, /account, AJAX surfaces, filter/sort traps
XML Sitemapsitemap.xml index → products, collections, pages, blogs sub-maps; products include <image:image>
Canonical URLsSelf-referencing on all sampled templates
IndexationNo noindex found; all key pages in sitemap
URL structureDescriptive, hyphenated, keyword-rich (/products/5-niacinamide-serum-acne-prone-skin)
HTTPSEnforced; HSTS present (but weak — see §5)
Mobile-friendlyResponsive; viewport configured
Crawl traps⚠️robots.txt disallows /+, %2B*, filter combos — good; verify no internal links to those params

Lighthouse SEO = 100 (mobile & desktop) — the automated crawler sees a clean, indexable, mobile-friendly page. That score reflects the homepage only; it does not surface the content-level gaps below, which matter for ranking the long tail.

3.2 On-Page SEO Issues

Title tags — inconsistent.

PageTitleProblem
Home"Project Skin – Science-Backed Acne Skincare, Built for Indian Skin" (75 chars)✅ Strong, keyword-led
Product"5% Niacinamide Serum for Oily & Acne-Prone Skin | Project Skin"✅ Good
Collection"Home page – Project Skin"🔴 Wrong — collection falls back to default "Home page" title; no collection keyword
About / FAQ / Contact / Money-Back / News"About – Project Skin", "FAQ – Project Skin", "Contact Us – Project Skin", "Money-Back Guarantee – Project Skin", "News – Project Skin"🟡 Keyword-less; brand-only. Add target query (e.g. "About Project Skin – Science-Backed Acne Skincare")

Meta descriptions — missing on most templates (HIGH).

PageMeta description
Home✅ Present (259 chars)
Product✅ Present (449 chars)
Collection🔴 Missing
About / FAQ / Contact / Money-Back / Blog🔴 Missing

This is the single highest-leverage SEO fix: 6 of 8 template types ship no meta description, so Google either auto-generates a weak snippet or uses the generic homepage blurb (the og:description on inner pages is literally the homepage paragraph). Fixing this is a bulk Liquid edit — low effort, direct SERP-CTR gain.

Open Graph / Twitter Card — present on all templates (good), but every non-product page reuses the homepage og:description and a logo-only og:image. Product pages do get a product og:image. Recommend product/collection-specific OG images.

Internal linking / keywords — homepage links to all 6 products + collection; nav is shallow. No blog content yet to build topical depth (see §6).

3.3 Schema Markup

TypeHomeProductInner pagesVerdict
OrganizationPresent, but sameAs contains 5 empty-string entries (malformed — should omit blanks)
WebSite + SearchAction✅ Good (enables sitelinks search box)
ProductGroup / Product⚠️ brand.name: "My Store"Shopify default, not "Project Skin" (breaks entity consistency + rich-result brand signal)
AggregateRating / ReviewExpected empty (0 reviews) — see §6
BreadcrumbListMissing everywhere despite visual breadcrumbs
FAQPage❌ (FAQ page)Missing — high-value rich-result opportunity
Article❌ (blog)Missing — blocks Discover eligibility
LocalBusinessMissing (no physical store, but Dermatologist-led Indian brand could use MedicalOrganization/Brand)

Schema bugs to fix first: (1) brand.name = "My Store" → "Project Skin"; (2) remove empty sameAs strings; (3) add BreadcrumbList to all templates; (4) add FAQPage to /pages/faq (it already has Q&A content ripe for markup).

3.4 Image SEO

  • Filenames are non-descriptive (Screenshot_2026-07-23_014448.png, C3630762-96EB-4254-8CEF-1242DB403429_1.png, 1.jpg). These read as design mockups / screenshots / placeholders, not optimized product photography (see §6.1). Rename to keyword-rich files on upload.
  • alt missing on ~12 images/page (see §2.2).

4. International SEO

Not applicable — single locale. The store ships one language/region (content-language: en-IN, India-only pricing/shipping). No hreflang is therefore neither required nor expected. Recommended: keep a single clean en-IN locale; if a future en global storefront is added, implement reciprocal hreflang on all templates (Shopify only emits it on the homepage by default — a known pitfall). No action needed today.


5. Best Practices & Security

5.1 Security Headers (from curl -sI)

HeaderValue observedAssessment
Content-Security-Policyblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;🔴 No script-src or object-src — the CSP cannot mitigate XSS. Lighthouse penalizes this. Add at minimum script-src 'self' …; object-src 'none'.
Strict-Transport-Securitymax-age=7889238 (~91 days)🟡 Below the 1-year recommendation; missing includeSubDomains and preload. Raise to max-age=31536000; includeSubDomains; preload.
X-Frame-OptionsDENY
X-Content-Type-Optionsnosniff
X-Download-Optionsnoopen
X-XSS-Protection1; mode=block✅ (legacy, harmless)
Referrer-Policy(not set)🟡 Add strict-origin-when-cross-origin.
COOP / COEPabsent🟡 Add Cross-Origin-Opener-Policy: same-origin (cheap, defense-in-depth).
Permissions-Policyabsent🟢 Optional.

5.2 Modern Standards

  • No document.write, no synchronous XHR observed. Valid HTML5 + UTF-8. No mixed content (CSP enforces upgrade). ✅
  • The CSP's lack of a script-src directive is the primary driver of the 54 Best-Practices score; fixing it is a one-line header change with real XSS-defense value.

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • Product imagery looks like exported mockups/screenshots, not studio photography. Evidence: filenames Screenshot_2026-07-23_014448.png (the hero serum image), C3630762-96EB-4254-8CEF-1242DB403429_1.png (cleanser), and 1.jpg (moisturiser). For a clinical/skincare brand where visual trust drives conversion, placeholder-grade imagery is a brand-authenticity risk (mirrors the skill's "AI/image-mismatch for trust-sensitive brands" severity logic). Recommend real product + texture + in-use photography with descriptive filenames. (Note: filenames alone cannot prove AI-generation; this is flagged as "verify these are genuine product shots," not a confirmed AI-image finding.)
  • Mega-menu flyout graphics (shop_menu_slider*.png) are decorative duplicates — mark alt="" rather than leaving alt absent.

6.2 Trust Signals (strong baseline)

SignalPresent?
Email (support@theprojectskin.com)✅ Contact page
WhatsApp (+91 84465 44458)✅ Contact page
Money-back guarantee page/pages/money-back-guarantee
Corporate / payment / order-status / FAQ pages✅ All present
Business identity (Nureya Beauty, CIN on about)
Customer reviews🔴 0 reviews live (Judge.me installed, un-seeded)
Certifications / lab-test proof on PDP🟡 Claimed in copy ("lab-tested", "250+ beta testers") but no visible certificate/badge asset

6.3 Review / Social Proof

  • Judge.me is installed on all PDPs but shows "Be the first to write a review" with (0) counts across the catalog. No AggregateRating/Review schema can fire until reviews exist. Activating review collection is the top conversion + E-E-A-T lever (and a catalog gap already noted in the business analysis).

6.4 E-E-A-T

  • Experience/Expertise: Strong narrative — dermatologist-formulated, 250+ beta testers, concentration transparency. Lacks named formulator/expert and visible credentials.
  • Authoritativeness: No press/awards beyond a founder-investor platform feature; no external citations.
  • Trustworthiness: Good policy/contact layer; undermined by zero reviews and placeholder imagery.
  • Content depth: The blog (/blogs/news) exists in the sitemap but has 0 posts — a missed topical-authority and "acne skincare India" organic-discovery channel.

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Add meta descriptions to collection, about, FAQ, contact, money-back, blog templates (Liquid {% if page_description %}…)SERP CTR on long-tailLow
2Fix product brand.name from "My Store" → "Project Skin" in Product JSON-LDRich-result entity consistencyLow
3Add script-src/object-src 'none' to CSP; raise HSTS to 1y + includeSubDomains; preloadSecurity score (54→~90+) + XSS defenseLow
4Replace runtime Tailwind Play CDN with a compiled, purged stylesheetRemoves largest TBT/LCP dragsMedium
5Add alt to the ~12 missing images/page (mark decorative shop_menu_slider* as alt="")Accessibility + image SEOLow–Med

🟡 Short-Term (This Month)

#IssueImpactEffort
6Collapse homepage to a single <h1>; add a real <h1> to collection/contact/blog pagesA11y + topical clarityLow
7Keyword-rich title tags for collection + inner pages (drop "Home page – Project Skin")Ranking of inner pagesLow
8Add BreadcrumbList schema site-wide + FAQPage on /pages/faq + Article on blogRich resultsMedium
9Trim preconnect to 2–3 origins; defer Swiper/Judge.me; verify cache lifetimesPerformance (TBT ↓)Medium
10Clean empty sameAs strings in Organization schemaStructured-data validityLow
11Product/collection-specific og:image + og:descriptionSocial share qualityLow

🟢 Long-Term (This Quarter)

#IssueImpactEffort
12Replace mockup/screenshot product images with real studio/texture photography; keyword-rich filenamesBrand trust + conversionMedium
13Seed Judge.me reviews (post-purchase flow, beta-tester UGC)Social proof + E-E-A-T + review schemaLow–Med
14Launch the blog with "acne skincare India" educational contentTopical authority / organic discoveryMedium
15Add Referrer-Policy + COOP: same-origin; consider lang="en-IN"Hardening / regional correctnessLow
16Monitor CrUX LCP trend (currently regressing 2.18→2.42 s); set alert before it crosses 2.5 sProtect field CWVLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile)40/100🔴 Poor
Performance (Desktop)48/100🔴 Poor
Accessibility80/100🟡 Needs work
Best Practices54/100🔴 Poor
SEO (automated)100/100🟢 Good
Content Quality / E-E-A-T~65/100 (est.)🟡 Needs work
OverallMixed — strong SEO/trust foundation, weak perf + best-practices + on-page consistency🟡

Sources & Evidence

  • Security/headers/robots/sitemap: curl -sI https://theprojectskin.com/, curl …/robots.txt, curl …/sitemap*.xml (executed 2026-08-25). HSTS max-age=7889238; CSP block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests;; no COOP/COEP/Referrer-Policy.
  • CrUX field data: CrUX Vis (cruxvis.withgoogle.com), origin theprojectskin.com, "as of 2026-08-22": LCP p75 2,421 ms (regressing from 2,180 ms); CLS 0.00 ("good and stable"); INP "missing data"; form factors unavailable.
  • Lighthouse lab data: PageSpeed Insights UI (pagespeed.web.dev), Lighthouse 13.4.1, report 2026-08-25 05:53 UTC. Mobile: Perf 40 / A11y 80 / BP 54 / SEO 100; FCP 5.5 s, LCP 18.2 s, TBT 630 ms, CLS 0, SI 11.3 s. Desktop: Perf 48 / A11y 82 / BP 54 / SEO 100; FCP 0.9 s, LCP 2.4 s, TBT 1,220 ms, CLS 0.004, SI 4.3 s. Est. savings: render-blocking 2,530 ms (mobile)/360 ms (desktop); cache lifetimes 287/384 KiB; image delivery 93 KiB; legacy JS 36 KiB; ">4 preconnect" warning. (PSI REST API returned HTTP 429 quota-exceeded — lab data sourced from the browser UI only.)
  • SEO/schema/DOM (server-rendered): Python fetches of home, product, collection, about, FAQ, contact, money-back, blog HTML — title/meta/canonical/lang/viewport/OG/Twitter/JSON-LD/H1/image-alt extracted. Key: inner-page meta descriptions missing; collection title "Home page – Project Skin"; product brand.name:"My Store"; Organization sameAs has 5 empty strings; only Organization (+WebSite on home, +ProductGroup on product) schema present.
  • Live DOM/a11y: Browser console eval on https://theprojectskin.com/ — 72 images, 12 no-alt, 1 empty-alt, 6 <h1>, 20 <h2>, 34 <h3>; skip-link present; lang="en".
  • Business context: business-analysis.md (Nureya Beauty; 7 SKUs + kit; INR; Judge.me 0 reviews; India-only; no marketplace).
  • Image authenticity: product-sitemap <image:image> + page <img src> filenames (Screenshot_2026-07-23_014448.png, C3630762-…_1.png, 1.jpg) indicate mockup/screenshot exports rather than descriptive product photography.

Caveat: Lighthouse mobile LCP (18.2 s) is a Slow-4G/CPU-throttle artifact and is not the real-user metric — use CrUX LCP (2.4 s) for field assessment. Lighthouse SEO=100 reflects the homepage only and does not capture the inner-page meta-description/title gaps documented above.