Shipping cost revealed late ends more carts than anything else
Unexpected cost at checkout is consistently the largest single reason people abandon, and it is largely self-inflicted.
A customer builds a cart with one number in mind and meets a different one at checkout. The gap feels like a bait rather than a fee, and they leave.
The damage is not the cost itself but the timing. Somebody who knew the shipping charge from the start factors it in; somebody who discovers it at the final step feels misled.
Showing it early is the fix. On the product page, in the cart, or as a threshold clearly stated, so nothing at checkout is a surprise.
Free shipping thresholds work and only when they are visible while somebody is shopping. A threshold discovered at checkout is an obstacle; one shown in the cart is a reason to add another item.
Where shipping is genuinely expensive, saying so plainly costs some conversions and prevents the abandonment that comes from concealment. It also reduces the support contacts and the complaints.