Multiple shipping methods are available and properly configured
Why it matters
Single-option shipping forces every customer into the same cost-speed tradeoff, driving cart abandonment when buyers need faster delivery or want to avoid paying for speed they don't need. Baymard research attributes roughly half of all checkout abandonment to shipping friction. Missing express or economy tiers also hides revenue: urgent buyers will pay a premium for overnight, and price-sensitive buyers require a cheap ground option to convert at all. From a user-experience (UX) perspective, the absence of choice signals an unfinished store.
Severity rationale
High because it directly suppresses conversion across the entire purchase funnel and caps achievable revenue.
Remediation
Define at least two shipping methods with distinct rates and timeframes (for example standard ground and express), persist them as a configuration or database table, and render them as a radio or dropdown control inside the checkout flow. Wire the selected method into the order total before payment. See components/ShippingMethodSelector.tsx:
const methods = [
{ id: 'std', label: 'Standard', cost: 599, days: 5 },
{ id: 'exp', label: 'Express', cost: 1499, days: 2 },
]
Detection
-
ID:
multiple-methods -
Severity:
high -
What to look for: Enumerate all shipping methods defined in the codebase (configuration files, database seeds, or constants). For each method, count whether it has: (1) a distinct label, (2) a distinct rate or rate calculation, (3) a distinct delivery timeframe. Report: X methods found with Y complete configurations.
-
Pass criteria: At least 2 distinct shipping methods are available for customer selection, each with a unique rate and delivery timeframe. Methods must be selectable in the checkout UI via radio buttons, dropdown, or similar control.
-
Fail criteria: Fewer than 2 shipping methods exist, or the shipping method selector UI is missing/non-functional, or methods exist but share identical rates and timeframes.
-
Skip (N/A) when: The store is digital-only or uses a managed fulfillment service with a single pre-determined shipping method (no in-house method configuration).
-
Detail on fail:
"1 shipping method found: 'Standard ($9.99, 5-7 days)'. No express, overnight, or alternative options configured."or"Shipping method selector renders 3 options but all share the same $5.00 rate." -
Remediation: Add multiple shipping methods to your checkout flow in
components/ShippingMethodSelector.tsx:// components/ShippingMethodSelector.tsx export function ShippingMethodSelector({ methods, selected, onChange }) { return ( <div className="space-y-3"> {methods.map(method => ( <label key={method.id} className="flex items-center gap-2"> <input type="radio" value={method.id} checked={selected === method.id} onChange={(e) => onChange(e.target.value)} /> <span>{method.label} — {method.days} days (${(method.cost / 100).toFixed(2)})</span> </label> ))} </div> ) }
Taxons
History
- 2026-04-18·v1.0.0·Initial import from ecommerce-shipping-tax·automated