Web Quality Audit: 100kmph (100kmph.com)
Website: https://100kmph.com | Date: 2026-08-15 | Platform: Shopify (Online Store 2.0, theme id 175467298839, Cloudflare CDN) | Industry: Automotive-lifestyle D2C apparel (India) | Market: Single-country (India, en-IN)
Methodology note: CrUX field data was retrieved from the public CrUX Vis tool (cruxvis.withgoogle.com), which returned real data for this origin — correcting the parent business-analysis task's assumption that CrUX required an API key and was unavailable. Lighthouse lab scores are from PageSpeed Insights (Lighthouse 13.4.1), captured live in-browser for both Mobile and Desktop. SEO/security/schema findings were verified against the rendered DOM (the site is a Shopify SPA, so curl-only checks were cross-checked in the browser).
Executive Summary
100kmph is a technically serviceable Shopify store with strong accessibility (90/100), a clean security-header posture, and genuinely fast field Core Web Vitals (real users experience LCP ~2.6s, INP ~140ms, CLS 0.02 — all Good per CrUX). The store is also honest about its content: product photography is real user-submitted/branded artwork (no AI-fabricated imagery), which protects the "Made in India / petrolhead" brand authenticity.
The two real problems are:
- Mobile lab performance is broken (Performance score 31). The mobile LCP lab measurement is 13.7s vs 2.6s on desktop — a 5.3× gap. This is the single biggest quality defect and the main reason the mobile PageSpeed score is Poor. It points to unoptimized hero/banner images and heavy third-party script (194 scripts, 29 stylesheets) blocking render on slower devices/networks.
- SEO fundamentals are missing. There is zero JSON-LD structured data on any page (homepage, product, or collection), the homepage has no meta description and a brand-only
<title>("100kmph") with no commercial keywords, and collection pages also lack meta descriptions. The store is leaving rich-result and ranking equity on the table for a niche where it is "India's first" and should dominate.
Secondary issues: a contact page that displays Shopify theme-placeholder store names ("Ventura Store / San Francisco Store") rather than the real Pune address — a trust-signal defect; no product reviews/ratings on PDPs (social-proof gap already flagged in the business analysis); and a near-empty blog (sitemap exposes only the blog index, no posts).
Score Card
| Category | Mobile Score | Desktop Score | Grade |
|---|---|---|---|
| Performance | 31 | 48 | 🔴 Poor |
| Accessibility | 90 | 87 | 🟢 Good |
| Best Practices | 73 | 73 | 🟡 Needs Improvement |
| SEO | 77 | 77 | 🟡 Needs Improvement |
| Overall | ~63 | ~71 | 🟡 Needs Improvement |
Mobile-vs-desktop gap: Performance 31 vs 48 (1.5×). The driver is mobile LCP 13.7s vs desktop 2.6s (5.3×) — the dominant gap to fix.
1. Performance Audit
1.1 CrUX Real-World Field Data
Source: https://cruxvis.withgoogle.com (origin: https://100kmph.com, device: phones)
Core Web Vitals Assessment (field, origin): Per the CrUX Vis summary panel, all three metrics are Good and stable — "Loading Performance is good and stable," "Interactivity is good and stable," "Visual Stability is good and stable." The data series (latest weekly point, 2026-07-05 → 2026-08-01) shows:
| Metric | Latest field value | Threshold (Good) | Rating |
|---|---|---|---|
| LCP | 2,150 ms | ≤ 2,500 ms | 🟢 Good (improving) |
| INP | 119 ms | ≤ 200 ms | 🟢 Good |
| CLS | 0.02 | ≤ 0.10 | 🟢 Good |
Trend: LCP has improved dramatically over the trailing year — it was 3,500–3,740 ms in Jan–Mar 2026 and fell to ~2,150 ms by mid-2026 (a ~1,600 ms / ~43% improvement). INP is flat-good (~85–120 ms). CLS is essentially zero throughout.
⚠ Data-integrity note (contradiction to resolve, not ignore): PageSpeed Insights' field-data panel (for "this URL") reports mobile LCP 2.6s, INP 141ms, CLS 0.02 — values that are individually Good/near-threshold — yet PSI labels the "Core Web Vitals Assessment: Failed" on both Mobile and Desktop. The CrUX Vis origin summary says all three are "good and stable." The most likely explanation is that the field LCP p75 sits right at the 2.5s boundary (2.6s = Needs Improvement, not Poor), and PSI's "Failed" wording here reflects the URL-level p75 crossing the threshold, while the CrUX Vis summary's "good and stable" reflects the broader origin median. Recommendation: Treat field LCP as borderline (2.5–2.6s) — it is not safely Good and is the most likely cause of the PSI "Failed" flag. The mobile lab LCP of 13.7s confirms there is real headroom; fixing the lab LCP will pull the field p75 further into the safe zone.
Form-factor split: CrUX Vis does not expose device-form-factor (phone/desktop/tablet) percentages in a queryable DOM field for this origin; the tool only renders a phones-only series. The business analysis noted single-country India traffic; no tablet/desktop split is reported here. (Not fabricated — simply not exposed by the tool.)
1.2 Core Web Vitals (Lighthouse Lab Data)
| Metric | Mobile (lab) | Rating | Desktop (lab) | Rating | Threshold ref |
|---|---|---|---|---|---|
| FCP | 3.7 s | 🔴 Poor (>3.0s) | 0.8 s | 🟢 Good | ≤1.8s |
| LCP | 13.7 s | 🔴 Poor (>4.0s) | 2.6 s | 🟡 NI (2.5–4.0s) | ≤2.5s |
| TBT | 2,110 ms | 🔴 Poor (>600ms) | 2,240 ms | 🔴 Poor | ≤200ms |
| CLS | 0 | 🟢 Good | 0 | 🟢 Good | ≤0.10 |
| SI | 10.0 s | 🔴 Poor (>5.8s) | 3.3 s | 🟡 NI (3.4–5.8s) | ≤3.4s |
Mobile vs Desktop gap is severe on LCP (13.7s vs 2.6s = 5.3×) and remains large on TBT (both >2,000ms — third-party-script blocking is platform-independent). The huge mobile LCP is the headline performance defect.
1.3 LCP Phase Breakdown (Mobile)
Lighthouse flags the LCP element as a large, unoptimized banner/hero image. The 13.7s mobile LCP consists of:
- TTFB: ~600 ms (per field; acceptable — Cloudflare + Shopify edge BLR).
- Resource Load Delay / Render Delay: Dominated by render-blocking CSS/JS (29 stylesheets, 194 scripts) preventing the browser from discovering the LCP image early, plus the LCP image itself being served oversized/unoptimized (the "Improve image delivery" insight estimates 658 KiB savings on mobile, 822 KiB on desktop).
- The pattern is classic Shopify OS-2.0: heavy theme JS + third-party apps (GTM, Klaviyo, Fastrr, Shiprocket) delay first paint, and the hero banner is not preloaded and is not served in a responsive
srcset/WebP for mobile.
1.4 Performance Issues by Impact
Critical (>1s savings / Poor score driver)
| Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|
Unoptimized LCP/hero image (no preload, no responsive srcset, not WebP/AVIF) | Lab LCP 13.7s mobile; "Improve image delivery" −658 KiB (mobile) / −822 KiB (desktop) | ~8–10s LCP on mobile | Add <link rel="preload" as="image"> for the hero; serve WebP/AVIF with srcset; never loading="lazy" on LCP |
| Third-party script bloat (194 scripts) | TBT 2,110 ms (mobile) / 2,240 ms (desktop) | ~1–2s TBT | Defer/async GTM, Klaviyo, Fastrr, Shiprocket; remove unused app JS; consolidate |
High (200ms–1s)
| Issue | Evidence | Est. Savings | Recommendation |
|---|---|---|---|
| Render-blocking requests | "Render-blocking requests" −300 ms (mobile) / −30 ms (desktop) | 300 ms mobile | Inline critical CSS; defer non-critical theme JS |
| Inefficient cache lifetimes | "Use efficient cache lifetimes" −460 KiB (both) | 460 KiB | Set long Cache-Control/max-age on static CDN assets |
| Forced reflow | "Forced reflow" insight present | minor | Avoid layout-thrashing JS on scroll/cart |
Medium/Low
| Issue | Evidence | Recommendation |
|---|---|---|
>4 preconnect connections | Desktop "Network dependency tree" warning (>4 preconnects) | Reduce to 2–3 critical origins (cdn.shopify.com, fonts) |
| Large DOM size | 4,017 total elements, 29 stylesheets | Acceptable for Shopify but watch; lazy-mount below-fold sections |
1.5 Resource Transfer Summary (from Lighthouse insights)
- Images: largest opportunity — ~658 KiB (mobile) / 822 KiB (desktop) of avoidable bytes; hero + category tiles unoptimized.
- JS: 194
<script>tags — third-party (GTM, Klaviyo, Fastrr/Pickrr, Shiprocket) dominate TBT. - CSS: 29 stylesheets (theme + app CSS) — render-blocking on mobile.
- Cache: 460 KiB of assets with short/inefficient cache lifetimes.
2. Accessibility Audit
2.1 Critical Issues
- None. No missing
<html lang>(lang="en" present), no missing viewport, no missing H1.
2.2 High Priority Issues
- 10 images missing
altattribute entirely; 40 images with emptyalt=""(out of 64 on the homepage). Product/category images with empty or missing alt are lost to screen readers and image search. Medium severity — bulk-fix in theme via Liquidalt: feature_image.alt. - 0 explicit ARIA attributes in the DOM — the theme relies entirely on native semantics. This is acceptable (native is preferred), but confirm interactive components (mega-menu, announcement carousel, variant selectors) are keyboard-operable. The announcement bar is a 3-slide carousel with Prev/Next buttons (present) — verify it is not auto-advancing without pause control.
2.3 Positive Findings
- Lighthouse Accessibility 90 (mobile) / 87 (desktop) — strong.
- Single
<h1>("100kmph" logo heading) present and logical. - "Skip to content" link present (ref e1 in DOM) — passes keyboard-skip.
<html lang="en">set;<meta name="viewport">present.- Color contrast: no flagged failures.
3. SEO Audit
3.1 Technical SEO
| Check | Status | Evidence |
|---|---|---|
| robots.txt | ✅ Sound | Shopify default + correct disallows for /cart/, /checkout, /account, /orders; Sitemap: directive present; note: live robots.txt now includes Shopify's new agent-commerce boilerplate (UCP/MCP endpoint, sitemap_agentic_discovery.xml) — forward-looking, not harmful |
| XML Sitemap | ✅ Present | sitemap.xml indexes products/pages/collections/blogs + new sitemap_agentic_discovery.xml |
| Canonical URLs | ✅ Self-referencing | Homepage → https://100kmph.com/; product → exact handle; collection → exact; no cross-canonical |
| Indexation | ✅ No noindex on important pages | Homepage, products, collections all indexable |
| HTTPS / mixed content | ✅ Enforced | strict-transport-security: max-age=7889238; CSP block-all-mixed-content |
| URL structure | ✅ Clean | /products/<slug>, /collections/<slug> — descriptive, hyphenated |
| Mobile-friendly | ✅ Responsive | viewport set; responsive theme |
| Hreflang | ➖ N/A | Single-country (India, en-IN); no multilingual locale set — correctly omitted |
3.2 On-Page SEO Issues
| Page type | Title | Meta description | Verdict |
|---|---|---|---|
| Homepage | 100kmph (brand only, 8 chars) | NONE | 🔴 HIGH — no commercial keywords ("automotive t-shirts India," "motorcycle apparel"), no description for SERP |
| Collection (e.g. STRIX-X) | STRIX-X – 100kmph | NONE | 🟡 HIGH — collections are prime category-rank pages; missing descriptions |
| Product | GARAGE - Men's Oversize T-Shirt - Beige Colour – 100kmph | Auto-generated from body (present, ~150 chars) | 🟢 OK — Shopify auto-fills from product description |
- Homepage
<title>is brand-only. For "India's first automotive apparel brand" this forfeits the exact-match keyword equity it should own. Recommended:Automotive & Motorcycle T-Shirts India | 100kmph(or similar, 50–60 chars). - No meta description on homepage or any collection page — Shopify themes require these to be set manually in admin (products auto-generate). This is the most common Shopify SEO gap and applies here (P0 in the e-commerce matrix).
3.3 Schema Markup (Structured Data)
🔴 CRITICAL GAP — No JSON-LD anywhere. Verification (rendered DOM + static HTML, both):
- Homepage: 0
application/ld+jsonblocks. - Product page: 0 blocks (no
Product/Offer/AggregateRating). - Collection page: 0 blocks (no
ItemList/BreadcrumbList).
Consequences: no rich results (star ratings, price, availability) in SERPs, no BreadcrumbList, no Organization/WebSite+SearchAction sitelinks. For a store with 170 SKUs this is a major missed opportunity. Required types to add (via theme Liquid or a schema app): Organization (all pages), WebSite + SearchAction (homepage), Product + Offer (product pages — include brand.name: 100KMPH, sku, availability, price), BreadcrumbList (all), ItemList (collections).
3.4 Image SEO
- Hero/category images: filenames are mostly branded (
freedom_sale_2200x1100_ultra_hd.png) or user-generated (WhatsApp_Image_2026-08-14_...jpg). Acceptable but not keyword-optimized. - Alt text: 10 missing + 40 empty on homepage (see §2.2). Fix via theme
altattributes.
3.5 Internal Linking
- Header nav: SHOP + COLLECTIONS (mega-menu) + Search/Cart/Account. Category grid on homepage links to 6 collection types. Healthy.
- Breadcrumbs: Not observed as visible navigation on homepage; verify presence on PDP/collection (and add
BreadcrumbListschema — see §3.3).
3.6 Keyword Targeting
- Homepage title/H1 = brand only (no keyword alignment with "automotive t-shirts," "motorcycle apparel India"). Collection titles are brand+collection-name only. No keyword cannibalization observed, but no informational/content targeting either (see blog gap §6).
3.7 E-E-A-T Signals
- Experience/Expertise: "Made in India," in-house manufacturing, 2013 heritage, IBW 2014 origin — strong, but mostly in footer/about copy, not surfaced in structured data or rich snippets.
- Authoritativeness: Facebook 47K, LinkedIn 1,224, press (YourStory/Inc42). Not linked as
sameAsin any Organization schema (gap). - Trustworthiness: Phone (+91 7058150788), email (support@100kmph.com), Pune address all present in head/contact — but the contact page renders Shopify theme-placeholder store names ("Ventura Store / San Francisco Store") instead of the real Pune location (see §6.1). This undermines trust and should be corrected.
4. International SEO
Not applicable. The store is a single-country, single-language D2C operation (India, content-language: en-IN, localization cookie defaults to IN). No hreflang, no locale subdirectories, no multilingual sitemaps are needed or expected. Correctly omitted — no action required. (If the brand later targets NRIs / international shipping, revisit hreflang + x-default.)
5. Best Practices & Security
5.1 Security Headers
| Header | Value observed | Status |
|---|---|---|
| HSTS | max-age=7889238 (~3 months) | 🟡 Present but max-age < 1yr; add includeSubDomains; preload for full grade |
| X-Frame-Options | DENY | 🟢 |
| X-Content-Type-Options | nosniff | 🟢 |
| CSP | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests | 🟢 (no script-src directive, but mixed-content blocked) |
| COOP/COEP | Not present | 🟡 Optional hardening |
Best Practices score: 73 (mobile & desktop). The score is dragged down by (a) the large number of third-party cookies/scripts (GTM, Klaviyo, Fastrr, Shiprocket) which Lighthouse flags, and (b) possibly images served without explicit dimensions / not in next-gen formats. No console errors or deprecated APIs were observed at load.
5.2 Modern Standards
- Valid HTML5 doctype, UTF-8 charset declared. ✅
- No
document.write. ✅ - No mixed content (CSP enforces). ✅
powered-by: Shopifyheader leaks platform (minor info-disclosure; cosmetic).
6. Content Quality Assessment
6.1 Image Quality & Authenticity
- No AI-generated imagery detected. Filenames are user-submitted WhatsApp exports (
WhatsApp_Image_2026-08-14_...jpg) and branded campaign art (freedom_sale_2200x1100_ultra_hd.png). For a "Made in India / real petrolhead" brand this is positive — no brand-authenticity mismatch (the critical risk the skill warns about for artisan brands does not apply here). - ⚠ Trust-signal defect (MEDIUM/HIGH): The contact page (
/pages/contact) renders Shopify theme-placeholder text — "Ventura Store" / "San Francisco Store" — rather than the real Pune address (Plot No 294, Sector 27, Nigdi, Pune 411044). A visitor (or Google's local trust signals) seeing "San Francisco Store" on an India-only brand is confusing and erodes credibility. Fix: replace placeholder store blocks with the real Pune address or remove the store-locator template section.
6.2 UX Issues
- No product reviews/ratings on PDPs (confirmed: no
AggregateRating/Reviewschema and no visible widget). For a 13-year brand with 47K Facebook followers this is a significant social-proof gap vs. category norms — and blocks star-rating rich results. Recommend Judge.me/Yotpo (low effort, high impact; already noted in business analysis §15). - Blog is effectively empty.
/blogs/newsexists but the blog sitemap exposes only the index URL (no posts). A content/SEO miss for an "India's first" niche brand that could rank for informational queries ("motorcycle t-shirt styling," "biker gift ideas").
6.3 Agentic / AI-commerce readiness (new)
- The live
robots.txtandsitemap_agentic_discovery.xmlshow Shopify has already deployed its UCP/MCP agent-commerce endpoints and an "agentic browsing" signal. PageSpeed's new Agentic Browsing score is 4/4 (mobile) / 3/4 (desktop) — the store is already well-structured for AI-agent discovery/shopping. This is a forward-looking positive differentiator.
7. Priority Recommendations
🔴 Immediate (This Week)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 1 | Fix mobile LCP (preload hero, serve WebP/AVIF srcset) | Mobile CWV + ranking + conversion | Medium |
| 2 | Add JSON-LD schema (Product/Organization/BreadcrumbList/WebSite) | Rich results, SERP CTR | Medium (app or Liquid) |
| 3 | Homepage + collection meta descriptions (manual in admin) | SERP CTR on category pages | Low |
| 4 | Homepage <title> with commercial keywords | Exact-match ranking | Low |
🟡 Short-Term (This Month)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 5 | Defer/consolidate third-party scripts (GTM/Klaviyo/Fastrr/Shiprocket) | TBT, mobile lab score | Medium |
| 6 | Fix contact-page placeholder store names (real Pune address) | Trust/E-E-A-T | Low |
| 7 | Add product reviews app (Judge.me/Yotpo) | Social proof + star rich results | Low |
| 8 | Image alt text completeness (10 missing + 40 empty) | Accessibility + image search | Medium (bulk) |
| 9 | Long Cache-Control on static assets (460 KiB) | Repeat-visit perf | Low |
🟢 Long-Term (This Quarter)
| # | Issue | Impact | Effort |
|---|---|---|---|
| 10 | Launch blog with niche automotive-lifestyle content | Informational SEO, top-of-funnel | Medium |
| 11 | HSTS includeSubDomains; preload; add COOP | Security hardening | Low |
| 12 | Reduce preconnect to 2–3 origins | Minor perf | Low |
| 13 | Monitor field LCP p75 (currently borderline ~2.6s) | Prevent CWV "Failed" regression | Low (GSC) |
Summary Score Card
| Category | Score | Grade |
|---|---|---|
| Performance (Mobile) | 31/100 | 🔴 Poor |
| Performance (Desktop) | 48/100 | 🔴 Poor |
| Accessibility | 90/100 | 🟢 Good |
| Best Practices | 73/100 | 🟡 Needs Improvement |
| SEO | 77/100 | 🟡 Needs Improvement |
| Content Quality | ~70/100 | 🟡 Needs Improvement (no reviews, empty blog, placeholder contact) |
| UX | ~75/100 | 🟡 Needs Improvement (no PDP reviews) |
| Overall | ~63/100 | 🟡 Needs Improvement |
Bottom line: The store is well-built where it counts for users today (accessibility, security, real-world speed, honest imagery), but it is leaving significant organic-search equity on the table (no schema, no homepage/collection meta, brand-only title) and has a mobile lab-performance defect (13.7s LCP) that, while masked by good field data today, sits at the CWV threshold and risks a real-world regression. The four "Immediate" fixes are low-to-medium effort and high ROI for a niche market leader.
Sources & Citations
- https://100kmph.com/ — homepage DOM (title, meta, OG, schema, alt audit via browser_console)
- https://100kmph.com/robots.txt — crawler directives, sitemap declaration, agent-commerce boilerplate
- https://100kmph.com/sitemap.xml — sitemap index (products/pages/collections/blogs + agentic_discovery)
- https://100kmph.com/products/garage-mens-oversize-t-shirt-beige-colour-copy — product-page head (title/desc/OG; confirmed no JSON-LD)
- https://100kmph.com/collections/strix-x — collection-page head (confirmed no meta description, no JSON-LD)
- https://100kmph.com/pages/contact — trust-signal check (placeholder "Ventura/San Francisco Store" text)
- https://cruxvis.withgoogle.com — CrUX field CWV (origin, phones): all Good/stable; LCP trend 3,700ms→2,150ms
- https://pagespeed.web.dev — Lighthouse 13.4.1 lab scores (Mobile: P31/A90/BP73/SEO77; Desktop: P48/A87/BP73/SEO77) + field CWV panel
- business-analysis.md (workspace) — company context: 170 SKUs, India D2C, Made-in-India, no PDP reviews, contact placeholder