SEO & Quality Audit: The Pink Moon (thepinkmoon.in)

Website: https://thepinkmoon.in | Date: June 14, 2026 | Platform: Shopify | Industry: Plus-size women's fashion (D2C)

Executive Summary

The Pink Moon is an unfunded D2C plus-size fashion brand doing ₹7.98Cr revenue with 373 products across 137 collections. The site has solid desktop performance (LCP 2.7s) but severe mobile performance issues (LCP 22.6s — 9x slower than desktop), which is critical given 93% of traffic is mobile. Accessibility needs attention with 30 images missing alt text. SEO foundation is partially built — schema exists but is incomplete, Open Graph tags are missing from product pages, and the H1 on the homepage is logo-only text rather than keyword-targeted. Security headers are Shopify-managed and generally adequate but CSP is weak.

CategoryMobile ScoreDesktop ScoreGrade
Performance5173Mobile: 🔴 / Desktop: 🟡
Accessibility7878🟡
Best Practices9292🟢
SEO8585🟡
Content Quality🟡
Overall~75~80🟡
Mobile:Desktop LCP gap is 8.4x — this single metric should be the #1 priority.

1. Performance Audit

1.1 CrUX Real-World Field Data

CrUX Vis returned data indicating the site is below the reporting threshold for real-world field data in the CrUX dataset. All performance findings below are from Lighthouse lab tests.

1.2 Core Web Vitals (Lighthouse Lab Data)

MetricMobileStatusDesktopStatusThreshold
FCP5.1s🔴 Poor0.8s🟢 Good≤1.8s good, ≤3s NI
LCP22.6s🔴 Poor2.7s🟡 NI≤2.5s good, ≤4s NI
TBT270ms🟡 NI260ms🟡 NI≤200ms good, ≤600ms NI
CLS0🟢 Good0🟢 Good≤0.1 good
SI10.7s🔴 Poor2.1s🟢 Good≤3.4s good, ≤5.8s NI
TTFB0.7s🟢 Acceptable≤800ms good
Key takeaway: Mobile LCP of 22.6s vs Desktop LCP of 2.7s = 8.4x gap. This is the defining performance issue. The mobile FCP of 5.1s means users see a blank screen for over 5 seconds on typical 4G.

1.3 LCP Phase Breakdown

Mobile LCP (22.6s total):
  • TTFB: 0ms (from CrUX "this URL" view — server responds fast)
  • Resource Load Delay: 180ms
  • Resource Load Duration: 70ms
  • Element Render Delay: 2,070ms
  • Pre-resource delay: ~20.4s (preventing LCP discovery)
Interpretation: The LCP element IS using fetchpriority="high" and loading="eager" correctly — but there are 20.4 seconds of pre-resource-delay. This is almost certainly caused by render-blocking JavaScript (Swiper bundle, theme.js, Shopify analytics) preventing the browser from even discovering the hero image. The LCP <img> tag exists in the HTML but the parser can't reach it due to blocking scripts earlier in the document. Desktop LCP (2.7s total):
  • TTFB: 0ms
  • Resource Load Delay: 210ms
  • Resource Load Duration: 110ms
  • Element Render Delay: 470ms
  • Pre-resource delay: ~1.9s

1.4 Performance Issues by Impact

🔴 Critical (> 1s estimated savings)

#IssueEvidenceSavingsRecommendation
1Render-blocking Swiper JSswiper-bundle.min.js (40.5KB) blocks 1,950ms — included even on pages without carousels~2s mobileConditionally load Swiper only where needed, or defer with defer attribute
2Render-blocking CSStheme.css (29.5KB) blocks 1,500ms, custom.css (15.1KB) blocks 1,050ms~1.5s mobileInline critical CSS in <head>, defer non-critical stylesheets with media="print" onload="this.media='all'"
320.4s pre-resource delay on mobileLCP element not discoverable for 20+ seconds due to blocking scripts before the <img>~18s mobileMove all non-critical scripts (Swiper, Perf Kit, shop-cart-sync) to defer or load after DOMContentLoaded
4Shopify Perf Kitb032da393w19368061p0cc732e2m671615c3m.js (970KB!) — enormous script from Shopify app~672KB transferAudit which app injects this script; consider removing if not essential
5Unused CSStheme.css offers 23.9KB savings, custom.css offers 13.9KB savings via minification/compression~42KB totalPurge unused CSS (Shopify themes ship CSS for all sections)

🟡 High (200ms–1s savings)

#IssueEvidenceSavingsRecommendation
6Google Tag Manager bloatGTM loads 613.7KB across 4 scripts (G-XNEJYP8X2K, AW-108.., GTM-WBZC8KBZ, plus gtag/js), consuming 529ms main thread time~306KB transferConsolidate GA4 + Google Ads into single gtag.js call; load GTM with defer instead of synchronous <head> injection
7Facebook Pixel102KB main script + 61KB config, 109ms main thread — particularly impactful on mobile~164KB totalLoad FB Pixel after user interaction or on requestIdleCallback
8Gokwik scripts42KB + 8KB scripts from pdp.gokwik.co~50KBDefer loading until checkout or product page interaction
9Large product imagesProduct images averaging 700-800KB each; up to 1,338KB estimated savings per product image~1.3MB potentialServe WebP/AVIF, use proper srcset widths, compress to <200KB per image
10Video element on homepagefec8fc3...HD-720p-3.0Mbps.mp4 (1,995.6KB!) — autoplay video consuming 2MB of data~2MBConvert to compressed WebM, reduce resolution, or remove autoplay; use poster image only
11Video poster imagepreview_images/fec8fc35eeab4e2e90b55579354...jpg (1.8MB!) serving as <video poster>~1.3MBCompress poster image to <50KB, serve WebP
12Hero banner image (mobile)Pink_Moon_Banner-March_Mob.jpg — oversized for mobile~24KBServe properly sized mobile image via srcset
13More than 4 preconnect connections5 preconnect links found (Shopify CDN x2, Cloudflare CDN, Google Fonts, etc.)Reduce to 2-3 most important origins (Shopify CDN + Google Fonts)

🟡 Medium

#IssueEvidenceSavingsRecommendation
14Inefficient cache lifetimes259KB of resources have short cache TTLs~259KB re-downloadSet long Cache-Control: max-age=31536000 for versioned static assets
15DOM size: 3,977 elementsDeep DOM tree with complex navigation mega-menuSimplify mega-menu markup; reduce nested <group> elements

1.5 Resource Transfer Summary

Mobile Total: ~152KB HTML + ~2,100KB images + ~970KB JS + ~56KB CSS + ~300KB 3rd-party = ~3.6MB
CategoryTransfer SizeRequest Count
Images (1st party)~2,100KB~20
JavaScript (1st party)~1,130KB~15
CSS (1st party)~50KB~5
3rd-party (GTM, FB, Gokwik, Clarity, Fonts)~370KB~12
Video~2,000KB1 (poster ~1.8MB)
Total~3,650KB~63 requests

2. Accessibility Audit

2.1 Critical Issues

#IssueElementsWCAG
129 images missing alt attributeCollection thumbnails (sub_category_image_*.png, TOP_CROP_BLK_1.jpg, 64.jpg, etc.) have no altA — Screen readers announce "image" with no context

2.2 High Priority Issues

#IssueElementsWCAG
21 image with empty alt=""17_3_1.png — unclear if decorative; if content, needs descriptionA
3H1 is logo text on homepage<h1>The Pink Moon</h1> — no keyword content for search enginesBest Practice
4src="" on editorial images"THE CASUAL EDIT", "THE VACATION EDIT", "THE OFFICE EDIT", "THE PARTY EDIT" have empty srcA — Broken image references

2.3 Positive Findings

  • <html lang="en"> declared — screen reader pronunciation works
  • <meta name="viewport"> present — mobile-friendly, though maximum-scale=1.0 prevents user zoom
  • ✅ Skip to content link present
  • ✅ Breadcrumb navigation visible on product pages
  • ✅ BreadcrumbList schema on homepage
  • ✅ Logical heading hierarchy on product page (H1 → H4 → H6)
  • ✅ ARIA attributes used appropriately (aria-label, aria-modal, role="dialog" on quick-buy/newsletter)
  • ✅ Form inputs have associated labels (newsletter email)
  • ✅ Button elements used for interactive controls (not <div>)

2.4 Accessibility Issues Summary

SeverityCount
Critical (missing alt)29 images
High (empty alt + empty src)2 images + 4 empty src
Medium (H1 content, viewport scale)2 items
Positive findings10+ items

3. SEO Audit

3.1 Technical SEO

CheckStatusDetail
robots.txt✅ GoodProperly disallows /admin, /cart, /orders, /accounts, /search, sort params, filter params; includes Sitemap directive (listed twice — minor issue)
XML Sitemap✅ PresentShopify-generated: 373 products, 137 collections, 22 pages, 98 blog posts
Canonical URLs✅ GoodProduct page has proper self-referencing canonical
HTTPS✅ EnforcedCloudflare serves HTTPS; HSTS with long max-age
Indexation✅ LikelyNo noindex tags detected; sitemap properly referenced
URL Structure✅ Good/products/slug, /collections/slug, /blogs/news/slug — clean and descriptive
Page Speed🔴 Poor (mobile)LCP 22.6s on mobile — direct ranking signal failure
Mobile-Friendly🟡 PartialViewport configured, but maximum-scale=1.0 limits pinch-to-zoom
Mixed Content✅ NoneAll resources load over HTTPS
Redirect chains✅ CleanNo redirect chains detected
Sitemap in HTML head❌ Missing<link rel="sitemap"> not present in HTML <head>

3.2 On-Page SEO

Homepage:
  • Title: "Plus Size Clothing for Women Online - XXL Size | The Pink Moon" — 62 chars ✅ good length, keyword near start ✅
  • Meta Description: "Embrace your curves with The Pink Moon, a dedicated online store for trendy plus clothing for women. From trendy dresses, tops to pants, we have all sizes starting from L to 10 XL." — 189 chars ⚠️ slightly over 160 recommended, but acceptable
  • H1: "The Pink Moon" — logo text only ⚠️ no keyword targeting; Google may discount
  • Content below the fold: Homepage is primarily visual (sliders, carousels) with minimal text content above the fold
Product Pages:
  • H1: Product name with size — "Pure Cotton Thread Embroidered Top" ✅ keyword-rich
  • Meta Description: Auto-generated from product description ✅
  • Structured Data: Product schema present but minimal (see schema section below)
  • Internal Links: Related products not visible on product page template
Collection Pages:
  • Carousel imagery with only category names (TOPS, BOTTOM WEAR, DRESSES, CO-ORDS, HUG ME) — no text content blocks for SEO
  • Editorial section names (THE CASUAL EDIT, THE VACATION EDIT) are image-only with src="" — broken rendering

3.3 Structured Data (JSON-LD)

Schema Present on Homepage:

SchemaStatusNotes
BreadcrumbList✅ PresentHome > current page
WebSite✅ PresentWith SearchAction for sitelinks

Schema Present on Product Pages:

SchemaStatusNotes
ProductGroup⚠️ Wrong typeUses ProductGroup instead of Product — this is a known Shopify issue since new structured data rollout
Brand: "Tops"⚠️ Wrong valueBrand name is "Tops" instead of "The Pink Moon" — entity mismatch
Category field✅ Present"Clothing"
Description✅ Present
Price/Offer❌ MissingNo offers in Product schema — no rich price in SERPs
AggregateRating/Review❌ MissingNo review schema despite customer reviews showing in page (review names like "Deepika" visible)
SKU❌ MissingNo SKU in schema
Gtin/MPN❌ Missing

Missing Schema Types:

SchemaImpactPriority
OrganizationNo entity panel, no logo/searchbox signalHigh
WebSite + SearchActionPresent on homepage only — good
Product (offers)No price rich resultHigh
AggregateRatingNo star ratings in SERPsHigh
Article (blog posts)No Google Discover eligibilityMedium
LocalBusinessMissed local SEO signal (they have a physical store)Medium
ItemList (collections)No carousel rich resultMedium
FAQPageNo FAQ rich resultLow

3.4 Image SEO

CheckStatus
Alt text on product images✅ Present (descriptive filenames used as alt)
Alt text on collection images❌ 29 images missing alt entirely
Descriptive filenames✅ Good (Pure_Cotton_Thread_Embroidered_Top1.jpg)
WebP/AVIF formats❌ Not used — all JPEG/PNG
srcset responsiveness✅ Present on product images
Lazy loading on below-foldloading="lazy" used
LCP image not lazyloading="eager" + fetchpriority="high" on hero
Product image sitemap❌ Not present in XML sitemap

4. International SEO

The site operates in English only (India), with content-language: en-IN header. No hreflang implementation needed for single-language operation.


5. Best Practices & Security

5.1 Security Headers

HeaderValueStatus
HSTSmax-age=7889238 (~91 days)🟡 OK, but short; recommend max-age=31536000; includeSubDomains; preload
X-Frame-OptionsDENY✅ Good
X-Content-Type-Optionsnosniff✅ Good
CSPblock-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests🟡 Weak — missing script-src, no object-src 'none', no Trusted Types
COOPMissing❌ High priority fix — add Cross-Origin-Opener-Policy: same-origin
X-XSS-Protection1; mode=block✅ Present
X-Download-Optionsnoopen✅ Good
Referrer-PolicyNot set🟡 Add strict-origin-when-cross-origin
Permissions-PolicyNot set🟡 Consider adding

5.2 Modern Standards

CheckStatus
HTML5 DOCTYPE✅ Present
UTF-8 charset✅ Declared
No document.write✅ None detected
No .map files in production.js.map files accessiblev2/loader.init-shop-cart-sync.en.esm.js.map returns HTML 404 (JSON parse errors in console), but the mapping URLs are in JS source
jQuery version3.7.0 (current) ✅
Source map errors❌ Console shows SyntaxError on .js.map files returning HTML — minor, but noisy
CSP frame-ancestors conflict❌ Console errors: "Framing 'https://shop.app/' violates CSP directive: frame-ancestors 'self' https://shop.app https://admin.shopify.com" — actual CSP has 'none' which conflicts with the more permissive frame-ancestors mentioned in the error

5.3 Lighthouse Best Practices — Issues

IssueSeverityRecommendation
CSP: script-src directive missingHighAdd script-src 'self' or appropriate directives
CSP: object-src not set to 'none'HighAdd object-src 'none'
HSTS max-age too lowHighIncrease to 31536000
No includeSubDomains on HSTSMediumAdd directive
No preload directive on HSTSMediumAdd if submitting to HSTS preload list
No COOP headerHighAdd Cross-Origin-Opener-Policy: same-origin
Trusted Types not in CSPHighConsider adding
.js.map files returning HTMLLowFix source map serving or remove references

6. Content Quality Assessment

6.1 Image Quality & Authenticity

  • 150 total images on homepage — rich visual content
  • Product images: Real photography with descriptive alt text — good for a fashion brand
  • Collection images: Functional but 29 missing alt attributes
  • Video on homepage: Auto-playing store visit video (2MB) — high data cost without user consent
  • AI-generated images: None detected by filename pattern
  • Editorial images with src="": 4 collection card images (THE CASUAL EDIT etc.) have empty src — broken rendering

6.2 UX Issues

IssueDetail
Newsletter popup blocking contentFull-screen modal newsletter drawer auto-opens after 5 seconds — aggressive for mobile
Empty src on editorial images"THE CASUAL EDIT", "THE VACATION EDIT", "THE OFFICE EDIT", "THE PARTY EDIT" appear as broken images
No cross-sell/upsell on product pageNo "You may also like" or "Complete the look" section
Social proofCustomer reviews visible but not linked to structured data
Return policy"All refunds will be processed as store credit only" — clearly stated, positive for trust
Trust badges on product pageFree Shipping, Easy Exchange, COD Available icons present ✅

6.3 Content Depth

  • Product descriptions: Detailed with fabric info, measurements, fit notes, and care instructions ✅
  • Blog: 98 blog posts — good content depth for SEO
  • Collection pages: Primarily image-based carousels with minimal text content ⚠️
  • About/brand story: Not audited in scope (business analysis covers this)

7. Priority Recommendations

🔴 Immediate (This Week)

#IssueImpactEffort
1Fix render-blocking JS causing 20.4s mobile pre-resource delayLCP from 22.6s to potentially <4sMedium — defer Swiper, Perf Kit, shop-cart-sync
2Inline critical CSS + defer non-criticalReduce FCP by ~1.5s on mobileMedium — Shopify theme modification
3Remove/replace 2MB video on homepageSave 2MB mobile data, improve SILow — replace with poster image only
4Compress/Fix product images (700KB+ each)Save ~1.3MB per product pageMedium — bulk WebP conversion
5Add alt text to 29 images missing itAccessibility + image searchLow — bulk Shopify admin update
6Fix 4 editorial images with src=""Broken visual contentLow — replace with proper images

🟡 Short-Term (This Month)

#IssueImpactEffort
7Add Product offers (price) to structured dataPrice rich results in SERPsMedium — Shopify themeLiquid edit
8Fix Product schema type (Product → correct implementation)Proper rich result eligibilityMedium
9Fix Brand name in schema ("Tops" → "The Pink Moon")Entity consistencyLow
10Add Organization + LocalBusiness schemaLocal SEO for Bangalore storeMedium
11Add AggregateRating/Review schema to product pagesStar ratings in SERPsMedium — Shopify app or theme edit
12Consolidate GTM scripts (4 → 1) and deferReduce 614KB GTM to ~180KBLow
13Load Facebook Pixel on interaction, not onloadImprove mobile performanceLow
14Reduce header maximum-scale=1.0 to allow zoomAccessibilityLow
15Add link rel="sitemap" to HTML headSitemap discoveryLow
16Fix robots.txt duplicate Sitemap entriesClean robots.txtLow

🟢 Long-Term (This Quarter)

#IssueImpactEffort
17Strengthen CSP with script-src and object-srcSecurityMedium
18Add COOP headerSecurityLow
19Add hreflang for Hindi/regional languagesIf expanding to multilingualMedium
20Add FAQPage schema to key pagesRich resultsMedium
21Add Article schema to blog postsGoogle DiscoverMedium
22Implement breadcrumbList on collection pagesSERP navigationMedium
23Reduce DOM depth (3,977 elements → target <2,000)parse performanceHigh — redesign navigation
24Upgrade HSTS to 1 year + preloadSecurityLow
25Add Referrer-Policy and Permissions-Policy headersSecurityLow

Summary Score Card

CategoryScoreGrade
Performance (Mobile)35/100🔴 F
Performance (Desktop)73/100🟡 C
Accessibility70/100🟡 C
Best Practices78/100🟡 C
SEO72/100🟡 C
Content Quality75/100🟡 C
Security65/100🟡 D
Mobile:Desktop Gap8.4x LCP🔴 Critical
Overall~68/100🟡 D+

Data sources: Lighthouse v13 (PageSpeed Insights), browser DOM inspection, curl header analysis, Shopify sitemap analysis