TL;DR: The “shipping calculated at checkout” text is a theme translation string, not hardcoded. Change it in Online Store > Themes > Edit default theme content, search “shipping,” and rewrite it into something honest and specific like “Free shipping over $75.” You cannot show exact rates on the cart without an app, but you can kill the vague label that makes shoppers brace for a surprise.
“Shipping calculated at checkout” might be the most quietly expensive sentence in ecommerce. It tells the shopper exactly one thing: a cost is coming and you will not learn it until you have typed your address. On mobile, where the cart is a small screen and patience is thinner, plenty of shoppers close the tab instead of finding out.
Baymard Institute has tracked this for years: unexpected extra costs sit at the top of the reasons shoppers abandon checkout, cited by roughly 39 to 48% of abandoners depending on the study year. The vague label is the surprise, pre-announced.
Here is what that string actually is, how to change it in two minutes, and what to show instead.
Where does the “shipping calculated at checkout” text come from?
It is a translation string in your theme’s locale files, not a Shopify system message. In Dawn and most Online Store 2.0 themes the key is taxes_and_shipping_at_checkout (or a close variant like taxes_included_and_shipping_at_checkout) inside locales/en.default.json, rendered on the cart page and cart drawer near the subtotal.
Shopify shows it because it genuinely cannot price delivery yet. Shipping rates are zone-based: the price depends on the destination, and the cart has no address. Rather than guess, themes print the fallback string. The logic is sound. The wording is the problem, because “calculated at checkout” reads as “braced for bad news.”
The exact key name varies a little by theme. Dawn, Refresh, and the other free Online Store 2.0 themes use the taxes_and_shipping_at_checkout family; paid themes like Impulse or Focal sometimes word it “Shipping and taxes calculated at checkout” under their own cart keys. The search box in the language editor finds all of them, so you never need to know the key by name.
The string being a translation is good news: you can rewrite it without touching a line of Liquid.
The 2-minute fix: edit the theme string
- Open Online Store > Themes in admin.
- On your live theme, click the three-dot menu > Edit default theme content.
- Search for shipping in the search box.
- Find the entry containing “shipping calculated at checkout” (under Cart, the key mentions
taxes_and_shipping). - Replace it and save. The cart updates instantly, no deploy, no code.
What you type matters more than the deletion. Blank is worse than vague, because the shopper still discovers shipping at checkout, now with zero warning. Replace it with your actual policy, stated as a benefit:
- “Free shipping on orders over $75”
- “Flat $5.95 shipping, free over $60”
- “Free UK delivery, 2 to 3 working days”
One honest sentence converts the brace-for-impact moment into a reason to proceed. If you edit theme code anyway, the same string can be changed per-template by grepping your cart section for the translation key, but the language editor covers 95% of cases without risk.
Can you show the real rate on the cart?
Not with plain theme code, and it is worth being straight about this hard limit. Accurate rates need a destination, so genuine cart-page estimates require an app that geolocates the visitor or custom Storefront API work that asks for a postcode. For most stores that engineering is not worth it, because three native patterns remove the surprise without pricing every zone.
State the policy in text, as above. This is the two-minute version and it does most of the work.
Make shipping free above a threshold and show progress toward it. The free shipping bar (“You are $12 away from free shipping”) converts the shipping question into a game the shopper can win, and it nudges order value up at the same time. I published the full Liquid for it in the free shipping progress bar guide, no app needed.
Show tax-inclusive prices where your market expects it. UK and EU shoppers read a price as the price. If your store serves those markets, Shopify’s tax-inclusive pricing setting removes the second half of the “taxes and shipping” surprise.
The common thread: the cart page’s job is to remove doubts, not defer them. It is the same principle behind reducing checkout abandonment generally, and it bites hardest on mobile, where the mobile CRO basics already fight for every tap. A shopper who knows the total cost early treats checkout as confirmation instead of negotiation. That mindset shift is also why a sticky add-to-cart bar pairs well with an honest cart: both keep the decision moving without surprises.
How to verify in five minutes
- Open your store on a phone, add a product, and open the cart. Read the line under the subtotal: if it still says “shipping calculated at checkout,” the string edit has not taken effect on that template (check the cart drawer and the cart page separately, some themes use two strings).
- Confirm the replacement text states your real policy, and that it matches what checkout actually charges. A cart that promises free shipping over $75 while checkout charges $4.99 is worse than the vague label.
- If you added the progress bar, add items across the threshold and confirm the message flips to the unlocked state.
The mismatch check in step 2 is the one people skip. Your shipping settings live in Settings > Shipping and delivery; make the cart copy quote them exactly, and update the copy when the policy changes.
Change the string this week. It is the cheapest abandonment fix in your admin.
The takeaway
- Edit the string in Online Store > Themes > Edit default theme content; search “shipping.”
- Replace it with your real policy, stated as a benefit, never a blank.
- Add the free shipping progress bar if you run a threshold; it does double duty.
- Match the cart copy to Settings > Shipping and delivery exactly.
- Test the cart page and the cart drawer separately on a phone.