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.
Result Conversion rate +4.15%, add-to-bag +5.03%, and a £11.13m annualised revenue potential. Rolled out to 100% of traffic.
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.
// 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.
| Metric | Control | Variant | Uplift |
|---|---|---|---|
| Conversion rate | 8.83% | 9.20% | +4.15% |
| Add-to-basket rate | 16.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.