Ongoing CRO & Development Partnership

Factory Direct Blinds

6-sprint CRO and development partnership for a US-based custom window blinds store. Mobile PageSpeed 38 to 81, 62% ATC gap diagnosis, measurement protection upsell system, structured data deployment, and GSC recovery audit.

62% Mobile ATC Gap Identified
38 to 81 Mobile PageSpeed
48 to 99 Desktop PageSpeed
-88% LCP Reduction

The Client

Factory Direct Blinds is a US-based ecommerce store selling custom-made window blinds and shades. Every product is made to measure, which creates conversion challenges that standard Shopify CRO advice does not address: customers need confidence in their measurements, the product builder must handle complex configurations without overwhelming users, and mobile experience matters because that is where most customers start browsing before committing to a purchase on desktop.

This engagement ran across 6 sprints over 4 months, covering CRO auditing, custom Liquid development, Core Web Vitals optimization, structured data implementation, and organic traffic recovery.

Sprint 1: Full-Funnel CRO Audit

The initial audit uncovered the problems driving the project scope.

62% mobile-to-desktop add-to-cart gap. Mobile shoppers were abandoning the product builder at dramatically higher rates than desktop users. The builder UI was designed for wide screens and became nearly unusable on mobile, with tiny touch targets, options stacked in confusing ways, and pricing information hidden behind extra taps.

22-second mobile LCP. The site took 22 seconds to render meaningful content on mobile. Google’s threshold for “good” LCP is 2.5 seconds. At 22 seconds, the majority of mobile visitors left before the page finished loading.

Mobile PageSpeed score of 38. Desktop scored 48. Both failed Core Web Vitals, which meant the site was not eligible for Google’s “good page experience” ranking signal.

Measurement anxiety as the primary conversion blocker. Unlike standard ecommerce where the product arrives as pictured, made-to-measure blinds require the customer to provide exact measurements. If they measure wrong, the product does not fit. This anxiety was not addressed anywhere in the purchase flow.

Missing structured data. Collection pages had no CollectionPage or BreadcrumbList schema. Blog posts (which drove 52,000+ organic clicks across 233 URLs) had zero Article or BlogPosting schema. Product schema existed but was incomplete.

I delivered an ICE-scored roadmap prioritizing fixes by revenue impact, implementation effort, and confidence level. The roadmap organized work into focused sprints rather than attempting everything at once.

Sprint 2-3: Measurement Protection System

The measurement anxiety problem was the highest-impact item on the roadmap. No amount of checkout optimization or speed improvement would matter if customers were too afraid to commit to measurements.

MeasureSafe Guarantee Upsell

I designed and built a measurement protection upsell system integrated directly into the product builder:

  • Checkbox integration at the point of highest friction. The upsell appears during the measurement input step, not as a cart add-on. This is where the anxiety peaks and where the guarantee has maximum impact.
  • Trust shield iconography with clear value proposition. The messaging reframes the cost from “additional fee” to “smart protection” by showing the cost of a full replacement without protection versus the small cost of the guarantee.
  • Tooltip with full policy summary. Customers can read the complete coverage details without leaving the builder flow. No modal, no page navigation, just an expandable tooltip.
  • Automatic cart line item showing which product is protected, with a link to the full guarantee page for customers who want more detail.
  • Mobile-responsive design that does not add clutter to the already complex builder interface on small screens.

The guarantee page itself was built as a dedicated landing page with sections covering how it works (3-step process), a cost comparison table (with vs without protection), coverage details in plain language, and an FAQ section targeting anxiety-driven search queries like “what happens if I measure my blinds wrong” and “can custom blinds be returned if wrong size.”

Visual Measurement Guide System

To reduce measurement errors at the source:

  • Product-type-specific instructions. Roller blinds, venetians, and cellular shades all have different measurement requirements. Each product type has its own guide with specific diagrams.
  • Width and height measurement icons with step-by-step instructions for each product category.
  • Modal-based PDF viewer so customers can reference guides without navigating away from the builder.
  • Mobile-optimized layout with tap-to-expand sections instead of trying to show everything at once.

Sprint 3: Structured Data Deployment

The blog was the store’s strongest content asset (52,000+ clicks, outperforming collection pages on CTR) but had zero structured data.

What Was Deployed

  • CollectionPage + ItemList schema on all collection pages, giving Google structured product lists with names, URLs, images, and positions.
  • BreadcrumbList schema on all page types, providing clear navigation hierarchy (Home > Collection > Product).
  • FAQPage schema on the FAQ page and relevant collection pages.
  • Organization schema with @id referencing for entity consistency across the site.

All schema used @id references to connect entities rather than duplicating data. The Organization entity defined once in the site header was referenced by every Article and Collection schema via @id, building a connected knowledge graph that Google can parse efficiently.

Schema Conflict Resolution

A third-party SEO app (Booster SEO) was outputting its own Organization schema on every page, creating duplicate entities. The app used the older http://schema.org protocol and had empty sameAs arrays, while our implementation used https://schema.org with proper social links. The recommendation was to disable the Booster SEO schema in app settings and keep the custom implementation.

Sprint 4: Product Builder Overhaul and Mobile UX

This sprint directly addressed the 62% mobile ATC gap.

Product Builder Redesign

The core change was implementing progressive disclosure instead of showing all configuration options simultaneously:

  • Step-by-step flow. Options appear one at a time: material, color, size, mounting type, extras. Each step is focused and manageable.
  • Real-time price updates as customers configure options, so there are no surprises at the end.
  • Pricing tooltip showing the cost breakdown without opening a new view or modal.
  • Mobile-first layout with proper touch targets (minimum 44px per Apple HIG) and readable text at mobile font sizes.

Mobile Header Cleanup

The site’s header consumed significant above-fold space on mobile:

  • Reduced header height to reclaim vertical space for the product builder.
  • Simplified navigation for the mobile shopping context.
  • Implemented a sticky add-to-cart bar that appears when the main ATC button scrolls out of view.

Safety Lessons Learned

The product builder file (product-template-builder.liquid) was the highest-risk file in the entire theme. It contained 5+ layers of conflicting CSS for gallery images, inline JavaScript for Slick slider initialization, mobile reorder scripts, and CLS prevention code.

Over the course of this project, we documented 8 specific incidents where changes to this file broke the live or staging site:

  1. Moving sliderInit() out of a setTimeout broke all sliders because jQuery/Slick dependencies were not ready
  2. Changing Slick asNavFor configuration silently broke thumbnail navigation
  3. Adding aspect-ratio: 1/1 forced landscape room scene images into square boxes
  4. A pricing tooltip <div> inside a <p> tag caused invalid HTML that broke layout on both PDP and collection pages
  5. Header spacer doubling from a conflict between JavaScript-created spacers and CSS padding

Each incident was documented with the root cause and a “never do this” rule to prevent recurrence. The principle: additive changes (inserting a new {% include %} call) are safe. Modifying existing CSS or JavaScript in this file is not safe without full cross-browser testing on Chrome Desktop, Safari iOS, and Chrome Mobile.

Sprint 5: Core Web Vitals Optimization

Comprehensive performance optimization that transformed the site’s speed metrics.

Mobile Performance Results

Metric Before After Improvement
Performance Score 38 81 +113%
LCP (Largest Contentful Paint) 22.0s 2.7s -88%
TBT (Total Blocking Time) 2,290ms 480ms -79%
Speed Index 5.9s 3.5s -41%

Desktop Performance Results

Metric Before After Improvement
Performance Score 48 99 +106%
TBT 460ms 0-10ms Near-zero blocking

What Was Optimized

Image loading strategy. Above-fold images switched from lazy to eager loading. Proper srcset and sizes attributes added so browsers download the correct image size for each viewport. Hero images constrained to 1200px max instead of serving full 3000px originals.

Third-party script audit. Identified non-critical scripts (analytics, chat widgets, marketing pixels) and deferred them using defer and async attributes. Removed unused app code that was loading on every page type.

CSS render-blocking elimination. Inlined critical above-fold CSS directly in the <head>. Deferred non-critical stylesheets using the media="print" onload pattern with a <noscript> fallback.

Font loading optimization. Implemented font-display: swap with preconnect and preload hints for Google Fonts. Fonts now load asynchronously without blocking first paint.

Conditional asset loading. The product builder JavaScript and CSS were loading on every page type, including collection pages and blog posts where they were never used. Wrapped asset loading in template conditionals so they only load on product pages.

These improvements directly impact both SEO (Google uses Core Web Vitals as a ranking factor) and conversions. Research consistently shows that every 1-second improvement in mobile load time increases conversions by 5-7%.

Sprint 6: GSC Audit and Organic Traffic Recovery

The store’s organic traffic had declined 70%+ over 7 months. The GSC audit identified 5 compounding root causes:

Two core collection pages accidentally noindexed. A prior SEO decision to consolidate ranking power by noindexing two collection pages had the opposite effect. Both pages had significant impression volume. One has since been 301-redirected, the other had its noindex removed and has been re-indexed by Google.

Crawl budget waste. 28% of spot-checked redirect URLs were broken, including paths left behind when a third-party app was removed. Key trust pages (about-us, shipping-information) returned 404 errors. Google was spending crawl budget on dead URLs instead of indexing important content.

Thin pages launched during a core update. 40+ new pages with minimal content were published during Google’s December 2025 Core Update, which likely triggered quality signals.

186 keywords sitting on page 2. These keywords had 2.69 million combined impressions at positions 11-20. Moving even a fraction of these to page 1 would produce significant traffic gains.

No link building since ownership change. The domain had a DA of 38 with 1,500 backlinks while direct competitors had DA 39-44 with 6,000+ backlinks.

I delivered a 30-day prioritized action plan with specific deadlines, owner assignments, and linked spreadsheets for the 404 URL audit (348 URLs), the Crawled-Not-Indexed audit (232 pages that should be indexed), and a full keyword-to-landing-page map (207 commercial + 14 informational keywords).

What Was Already Working

The blog was the site’s strongest content asset: 52,000+ clicks across 233 URLs, outperforming collection pages on CTR (0.73% vs 0.37%). Product schema was driving 45,000+ clicks from 8.6 million impressions via merchant listings. Server performance was excellent (TTFB under 100ms). The foundation was solid. The technical issues on top of it were fixable.

Results Summary

What Outcome
Mobile PageSpeed 38 to 81 (+113%)
Desktop PageSpeed 48 to 99 (+106%)
Mobile LCP 22.0s to 2.7s (-88%)
Mobile ATC Gap 62% gap diagnosed and addressed
Structured Data CollectionPage, BreadcrumbList, FAQPage, Organization deployed
Schema on Blog 233 blog URLs now eligible for Article rich results
GSC Recovery 5 root causes identified, 30-day action plan delivered
Page 2 Keywords 186 keywords with 2.69M impressions mapped to landing pages

Key Takeaway

Made-to-measure products have unique CRO challenges that generic optimization advice does not address. The combination of reducing measurement anxiety (MeasureSafe guarantee), simplifying complex configuration (product builder progressive disclosure), eliminating performance bottlenecks (Core Web Vitals sprint), and fixing technical SEO foundations (structured data + GSC recovery) created compounding improvements across the entire funnel.

Each sprint built on the previous one. The CRO audit informed the builder redesign. The builder redesign exposed the performance problem. The performance fix made the structured data more impactful because Google could now crawl pages efficiently. And the GSC audit ensured the improved pages were actually being indexed and ranking.

For the technical approach behind the structured data implementation, the mobile sticky ATC pattern, and the performance optimization techniques, see the linked blog posts.


Dealing with similar challenges on your Shopify store? Book a free strategy call and I’ll walk through your biggest conversion opportunities.

Frequently Asked Questions

How do you optimize a made-to-measure product builder for conversions?

By reducing cognitive load through progressive disclosure, showing options step-by-step instead of all at once. Add visual measurement guides with product-specific instructions, implement a measurement protection guarantee to address the biggest anxiety, and redesign the mobile layout with proper touch targets. The key insight is that made-to-measure products have a unique friction point that standard CRO advice does not address: customers are afraid of ordering the wrong size.

What causes poor mobile PageSpeed scores on Shopify?

The most common causes are unoptimized image loading strategies (lazy loading above-fold images, serving 3000px images to 400px screens), render-blocking CSS and JavaScript, excessive third-party app scripts loading on every page type, font loading without display swap or preconnect hints, and loading page-specific assets globally. A systematic audit targeting LCP, TBT, and CLS typically yields 50-80% improvement in 2-3 weeks.

How do you diagnose a mobile-to-desktop conversion gap?

Start with GA4 device segmentation to quantify the gap. Then use heatmap tools like Microsoft Clarity or Hotjar to compare mobile vs desktop scroll depth, tap patterns, and rage clicks. Common culprits include ATC buttons buried below multiple scrolls on mobile, product configurators that do not adapt to small screens, and missing accelerated payment methods. A 62% gap like the one we found at Factory Direct Blinds almost always points to a mobile UX problem, not a traffic quality problem.

What is a measurement protection guarantee and how does it help conversions?

A measurement protection guarantee offers customers a free remake if they measure their windows incorrectly when ordering custom blinds. It directly addresses the biggest purchase anxiety for made-to-measure products. We implemented this as a checkbox upsell within the product builder at the point of highest friction, with tooltip explanations and clear value messaging. The concept is backed by conversion research showing guarantee badges produce 32% more sales in controlled tests.

How long does a Shopify Core Web Vitals optimization take?

A comprehensive Core Web Vitals optimization for a Shopify store typically takes 2-4 weeks depending on the severity of the issues. Quick wins like image optimization and font preloading can improve LCP by 40-50% in 2-3 days. Deeper work like third-party script auditing, critical CSS extraction, and conditional asset loading takes 1-2 additional weeks. The Factory Direct Blinds optimization went from 38 to 81 mobile PageSpeed across a focused performance sprint.

Can you fix a 70% organic traffic decline on Shopify?

A traffic decline of that scale is almost never caused by a single issue. In our GSC audit for this client, we identified 5 compounding root causes: two core collection pages that were accidentally noindexed, crawl budget waste from hundreds of 404 errors, thin pages launched during a Google core update, topical authority gaps on commercial keywords, and no link building since an ownership change. Recovery requires addressing all root causes systematically, not just fixing one thing. The 30-day action plan we delivered prioritized fixes by impact and assigned clear ownership for each item.