← Back to all work
Screwfix Optimizely Edge Large UK home improvement retailer

Most-relevant USPs

Surface the fulfilment promises that actually reduce hesitation, Click & Collect, Next Day Delivery, and 20-minute Sprint, high on the page where users decide whether to commit. Injected client-side, SPA-aware, with per-position tracking.

The problem

The strongest reasons to buy from Screwfix, the speed and certainty of getting the product, weren't surfaced clearly near the top of the journey. Reassurance that lands at the right moment lifts intent; here it was buried or inconsistent, so users were deciding without the value props that close the gap.

The hypothesis

If we surface the most relevant fulfilment USPs prominently below the header, then add-to-bag and conversion will rise, because users see the speed-of-fulfilment promises that reduce hesitation before they commit.

The solution

A compact, scannable USP strip injected directly under the header on the Next.js storefront. Three value-led, linkable items, each one a route into the relevant help or landing page, with the click position tracked so the team can see which promise carries the weight.

Control versus Variant on mobile: the variant fixes the fulfilment USPs (Click and Collect, Next Day, Sprint) as an always-visible strip below the header instead of a scrolling band.
Control (left) and Variant (right) on mobile. The variant surfaces the fulfilment promises as a fixed, always-visible strip below the header, rather than a scrolling band a user might miss.

// The injected USP strip

const html = `<div class="${ID}__usps-container">
  <div class="inner-wrapper">
    <a class="usp-item usp-item-1" href="/help/clickandcollect">
      <strong>Click & Collect</strong><span>in as little as 1 minute</span>
    </a>
    <a class="usp-item usp-item-2" href="/help/delivery">
      <strong>Next Day Delivery</strong><span>7 days a week</span>
    </a>
    <a class="usp-item usp-item-3" href="/landingpage/screwfixsprint">
      <strong>20 Minute Delivery</strong><span>with Sprint</span>
    </a>
  </div>
</div>`;

Idempotent injection

On a SPA, the same code runs many times as the user navigates. The build is written to be safe to re-run: it clears any prior instance of its own container before inserting, so there's never a duplicate strip, and it only mounts where its attach point exists.

const attachpoint = document.querySelector('.header-fuds');

// remove any existing instance first, then insert once
document.querySelectorAll(`.${ID}__usps-container`).forEach((el) => el.remove());
attachpoint.insertAdjacentHTML('afterend', html);

SPA-aware re-render

Client-side route changes don't reload the page, so the strip is re-asserted on every navigation once the attach point and the Tealium / Next.js data layers are present. The trigger itself polls for the same conditions before first activation, so nothing fires against a half-hydrated DOM.

onUrlChange(() => {
  pollerLite([
    '.header-fuds',
    () => typeof window.tealiumDataLayer === 'object',
    () => window.utag !== undefined,
    () => window.__NEXT_DATA__ !== undefined,
  ], () => {
    setTimeout(init, DOM_RENDER_DELAY);
  });
});

Per-position click tracking

Each USP reports which slot was clicked, so the analysis can attribute engagement to a specific promise rather than the strip as a whole.

const uspItem = target.closest('.usp-item');
if (uspItem) {
  const position = uspItem.classList[1].split('-')[2]; // usp-item-2 -> "2"
  fireEvent(`USP Clicked, at position: ${position}`);
}

Success metrics

Primary: conversion rate and add-to-bag rate. Secondary: USP engagement by position, and progression of users who clicked a USP.

Post-test analysis

Winning variant, rolled out to 100%. Across 19 days and roughly 890,000 sessions, the USP strip lifted conversion rate +4.15% (8.83% → 9.20%) and add-to-basket +5.03%, with revenue per session up +4.13%. In-test contribution was £23,614, an annualised potential of £11.13m.

MetricControlVariantUplift
Conversion rate8.83%9.20%+4.15%
Add-to-basket rate16.37%17.19%+5.03%
Revenue per session£3.83£3.99+4.13%
Average order value£43.39£43.37-0.04%

The device split told the real story. Desktop carried the conversion lift: +3% CVR at 99% confidence, revenue per session +3.24%. Mobile carried the engagement: add-to-basket +4.8% as the always-visible fulfilment options eased the decision, though that early lift didn't fully flow through to mobile conversion. Two devices, two halves of the same win.

The per-position tracking made the mechanism visible. Engagement with the USPs jumped +400%, and users who interacted with them were +14.6% more likely to convert. Drop-off fell at nearly every funnel stage, session-to-PDP and add-to-basket-to-checkout both improved with statistical significance, and downstream signals moved with it: continue-to-payment clicks +7%, postcode submissions +10%.

The recommendation was to roll out to 100% and carry the same fulfilment-and-urgency messaging onto PLP and PDP next. Position one drew the most engagement, the primacy effect, so the most compelling promise belongs at the front of the strip.

← Back to all work