E-commerce

How to display free shipping thresholds to limit customer questions?

How to display free shipping thresholds to limit customer questions?

June 30, 2026

"Free delivery from €59" in the header, nothing on the product page, a gray line at checkout. The customer adds €54 worth of items, discovers €5.90 in shipping costs, and opens the chat: "You are lying about free shipping." The threshold exists. It is not shown at the right place, at the right moment, with the right level of detail.

DataFirefly observes that a real-time progress bar doubles the effectiveness of the free shipping incentive compared to simple static text, with an increase in average basket value of 8 to 18% depending on the stores tested (DataFirefly, free shipping bar 2026). Sendcloud points out that 74.3% of French consumers add an item to reach the threshold when it is visible and achievable (Sendcloud, Delivery Compass 2025).

This guide #304 covers the UX display of free shipping thresholds: placements, copy, progress bar, exceptions. It complements free shipping support (#303) (customer service and disputes) from the angle of reducing pre-purchase friction and increasing AOV.

Summary

Why does an incorrectly displayed threshold generate so many questions and drop-offs?

The customer remembers a vague promise ("free shipping") without the amount, the calculation basis, or the exclusions. At checkout, the surprise shipping cost becomes a support query, or even an abandonment.

Three common UX failures

  • Threshold invisible until checkout: no basket gauge, no quantified gap

  • Contradictory messages: €49 banner, €65 shipping profile, -20% popup without clarification

  • Hidden exceptions: Corsica, express, heavy products only mentioned in the T&C

Measurable impact

Baymard estimates that 48% of cart abandonments come from extra costs including shipping (Baymard, PDP fees 2025). Cartylabs notes that a threshold that is too high increases abandonment even if the AOV increases (Cartylabs, free shipping bar 2026). 72Technologies, across 14 tested stores, puts the sweet spot threshold at 1.5× average basket value to maximize revenue per session (72Technologies, A/B bars 2026).

Principle #304

Display early, quantify the gap, update in real-time, document exceptions in a single clickable line. Fewer questions, more baskets crossing the threshold.

How does it differ from support #303, cart page #159 and the glossary?

Five neighboring content pieces, five layers of the free shipping customer journey.

Free shipping support (#303)

Free shipping delivery support (#303): FSHP-MAP, FRSH macros, shipping disputes. Ticket #304 acts upstream to prevent these tickets from being created in the first place.

Cart page (#159)

Cart page (#159) covers global reassurance. Ticket #304 goes into detail on the free shipping threshold gauge and copy on the drawer, /cart, and checkout.

Fee communication (#204)

Explaining fees (#204): psychology and micro-copy. Ticket #304: concrete implementation of the bar + 3 message states.

Free shipping glossary

The glossary defines the concept. Ticket #304: where and how to display it on Shopify DTC.

Shipping bot (#203)

Shipping bot (#203) answers ship_free_threshold. Ticket #304 feeds the bot with the same figures visible on screen to ensure zero contradiction.

Promise #304

FREE SHIPPING-UX mapping, 3-state copy, bar specs, visible exceptions, nudge gap, A/B testing, friction KPIs.

What FRANCO-UX mapping to cover the entire journey?

The FRANCO-UX mapping lists every touchpoint where the threshold must appear, with the same VAT-inclusive amount and the same calculation method.

7 priority locations

  1. Site announcement bar: "Free shipping from {{seuil}} € incl. VAT (metropolitan FR)"

  2. PDP under cart button: threshold + exceptions link

  3. Cart drawer: gauge + live gap (mobile king location)

  4. Page /cart: full-width bar + shipping estimate if < threshold

  5. Checkout step shipping: threshold reminder + applied shipping cost or €0

  6. Pop-up add-to-cart: "Only {{gap}} € left for free shipping"

  7. Hub /pages/livraison: complete rule aligned with FRANCO-POLICY (#303)

Consistency rule

A single franco_threshold_ttc variable injected everywhere (Liquid, app bar, shop metafield). Black Friday threshold change: single update, banner + shipping profile + bot sync in < 1 hour.

Quick audit

Mobile guest journey: note each screen where the threshold appears or disappears. Goal: zero cart/checkout screens without free shipping information.

Which three message states and what copy should be used?

Fudge.ai recommends three dynamic messages rather than a fixed text: empty, progress, unlocked (Fudge, Shopify Bar 2026).

State 1: empty cart or far from Threshold

COPY-FRANCO-EMPTY: "Free standard shipping on orders over {{seuil}} € incl. VAT in metropolitan France." PDP variant: "Add to cart: you will need {{seuil}} € more for free shipping."

State 2: in progress (goal gradient)

COPY-FRANCO-GAP: "Only {{gap}} € more for free shipping." Cartylabs: a bar at 80% converts twice as well as at 20% for an identical gap (Cartylabs 2026). Under €8 remaining: "Almost there! {{gap}} € and it's free."

State 3: threshold reached

COPY-FRANCO-UNLOCK: "Free standard shipping on this order." Visual change: green bar, check icon. Do not animate intrusively (blocking modal = checkout friction).

Copy prohibitions

  • "Free shipping" without specifying standard vs express

  • "Postage included" without including VAT or zone

  • Percentage alone ("65% of the threshold") without remaining € amount

How to calibrate the displayed threshold without killing conversion?

The displayed threshold must be calculated before being communicated. A highly visible incorrect figure aggravates disputes.

Starting Formula

Sendcloud: threshold 20 to 25% above the average order value (Sendcloud, Shopify shipping costs). Eightx: optimal range 15 to 25% above AOV to maximize contribution margin (Eightx, free shipping margin 2026). Example: AOV €52 → display €62 to €65, not €89 "because of the competitor".

Psychological Rounding

Prefer ending in 9 or 5 (€59, €65) if consistent with catalog pricing. Speed-ecom reminds: Shopify stores in cents, check sync of bar app and shipping profile (Speed-ecom, bar tutorial 2026).

Thresholds by Market

Sendcloud: free shipping expectation France ~€33.50 vs Spain ~€24 (Sendcloud 2025). Display geolocated threshold if Markets are active. Do not promise €59 FR on a BE store without recalculating.

Adjustment Signal

If < 55% of orders reach free shipping: threshold too high, bar ignored. If > 85%: threshold too low, shipping margin eroded. Target: 60 to 75% free shipping orders.

What technical specs are needed for an effective progress bar?

The free shipping progress bar is not a decorative banner: precise specs for mobile and desktop.

Mandatory Behavior

  • AJAX update at each +/- quantity, without reloading

  • Visual fill proportional to subtotal / threshold, not just text

  • Drawer placement above checkout button (Cartylabs)

  • Mobile truncation: 2-line wrap is OK, horizontal scrolling is prohibited

  • Accessibility: aria-label "Only X euros more out of Y for free shipping"

Typical Shopify Stack

Bar app (EA Bar, Fudge, theme section) + metafield shop.franco_threshold + identical shipping profile "free over X". Test cart at €0, 50%, 95%, 100%, 110% of threshold.

Checkout Consistency

If the bar says "free" but checkout displays €4.90: critical bug. Weekly QA: 3 test runs with zip codes for Lyon, Ajaccio, Belgium. See hidden fees (#291).

How to display exceptions without drowning out the main message?

The french exceptions visible reduce the fshp_zone_excl and fshp_heavy_excl tickets from guide #303.

Clickable footnote pattern

Under the line: "* Standard delivery metropolitan France. Exceptions: Corsica, express, heavy parcels." One line, hub link, not 200 words under the cart button.

Contextual display triggers

  • Corsica post code entered: "Standard free shipping not applicable. Corsica rate: {{rate}} € or threshold {{seuil_corse}} €."

  • Heavy SKU in cart: "{{sku}}: heavy delivery, standard free shipping suspended for this item."

  • Express selected: "Free shipping = standard Colissimo. Express: +{{express}} €."

Distinction between delivery / return

Never merge "free return" and "free delivery" on the same line without clarification. Two icons, two sentences. Reduces confusion documented by Afineo regarding returns vs outbound shipping.

How do you nudge the gap with cross-selling without spamming?

The french shipping gap nudge transforms the shipping bar into an AOV lever when the customer is €5 to €15 away from the threshold.

Suggestion Rules

  • Activate if 0 < gap ≤ €15

  • Suggest 1 to 2 SKUs between gap and gap + €12, positive margin

  • Exclude SKUs already in the cart and heavy products

  • Display net savings: "Add {{sku}} {{price}} € → shipping {{saved}} € avoided"

Placement

Below the cart drawer bar, above the cart items. Cart drawer = max intent (EasyAppSecom: +15 to 30% AOV on well-configured bars, EasyAppSecom 2026). Cross-reference with contextual recommendations and threshold cross-sell bot.

DTC Accessories Example

Cart €57, threshold €65, gap €8. Module suggests mini maintenance kit for €9: "+€9 to cart, free shipping, you save €5.90 net." One click add-to-cart, bar turns green.

What A/B tests should you run on the threshold, placement, and copy?

The French-style A/B free shipping protocol avoids locking in a threshold copied directly from a competitor.

Variables to test (one at a time)

  1. Threshold: 1.3× vs 1.5× vs 1.8× AOV (72Technologies: 1.5× wins revenue/session)

  2. Placement: header only vs drawer only vs both

  3. Format: static text vs progress bar (DataFirefly: +8 to 18% cart size)

  4. Gap copy: "Only $X more" vs "Add $X more"

Duration and metrics

14 to 28 days, minimum traffic 5,000 cart sessions. Primary: revenue per session. Secondaries: AOV, free shipping unlock rate, cart-to-checkout, fshp_threshold tickets. Do not optimize AOV on its own if conversion drops (Eightx).

Result documentation

Notion: winning variant, chosen threshold, date, owner. Update FRANCO-POLICY #303 and all FRANCO-UX section 3 placements.

Which KPIs should be tracked to measure friction from a UX perspective?

Measure whether the threshold display reduces questions and increases qualified baskets.

Monthly KPIs

  • franco_unlock_rate: free shipping orders / total orders

  • franco_gap_add_rate: sessions with gap < €15 with SKU nudge added / gap sessions

  • fshp_pre_purchase_tickets: threshold tickets before purchase (must decrease post-UX)

  • bar_engagement: clicks on exceptions link, scroll bar drawer

  • checkout_shipping_surprise: shipping step drop-offs with fee tag

  • aov_franco_lift: AOV vs pre-bar baseline

Bi-weekly review

Cross-reference pre-checkout tickets (#24) and chat verbatims regarding "unclear threshold". If fshp_pre_purchase remains stable despite the bar: checkout inconsistency or exception not displayed.

How does Qstomy display the threshold and answer gap questions?

Qstomy uses the same free shipping variables as the site bar, calculates the live gap, and responds before the customer opens a ticket.

Capabilities

  • Syncs franco_threshold_ttc shop + shipping profile

  • COPY-FRANCO-GAP responses with current basket

  • Gap SKU suggestions (same rules as section 7)

  • Zip code zone and heavy SKU exceptions

  • Hub link /pages/livraison + handoff if checkout contradiction occurs

Quantified DTC Scenario

FR in-house brand, AOV €48, displayed threshold €59, drawer bar + PDP. Before: 142 questions/month "free shipping?", cart-to-checkout 46%. After deploying FRANCO-UX + Qstomy sync: free shipping questions −47%, unlock rate 68%, AOV €48 → €54.20, cart-to-checkout 46 → 52% over 10 weeks.

See Shopify, AI sales, demo.

Which playbooks can be used to deploy the threshold display in one week?

Playbook 1: FRANCO-UX audit (2 h)

Guest mobile journey. Check 7 locations in section 3. Note number inconsistencies.

Playbook 2: calibrate threshold (3 h)

Export AOV 90 d, apply formula in section 5. Validate with finance. Configure identical Shopify shipping profile.

Playbook 3: bar + 3 copy (1 d)

Install drawer bar. Implement COPY-FRANCO-EMPTY, GAP, UNLOCK. Test 5 cart scenarios.

Playbook 4: exceptions + hub (2 h)

Footnote section 6. Page /pages/livraison aligned with FRANCO-POLICY #303. Footer link.

Playbook 5: gap nudge + A/B (3 d setup)

Activate section 7 suggestions if gap < €15. Launch threshold test 1.3× vs 1.5× AOV, 21 d.

Useful linking

This week: open your store in mobile private browsing. Do you see the gap in euros before checkout? If not, playbook 3 is your number one priority.

Enzo

June 30, 2026

Convert over 2,000 customers on average per month with Qstomy.

The world’s 1st Shopify AI dedicated to customer conversion

Empowering 200+ e-commerce merchants

Subscribe to the newsletter and get a personalized e-book!

No-code solution, no technical knowledge required. AI trained on your e-shop and non-intrusive.

*Unsubscribe at any time. We do not send spam.

Subscribe to the newsletter and get a personalized e-book!

No-code solution, no technical knowledge required. AI trained on your e-shop and non-intrusive.

*Unsubscribe at any time. We do not send spam.