Riajul Islam
← Back to blog
E-commerce

How Much of Shopify Checkout Can You Change?

Less than you want and more than you think. What is configurable, what needs Plus, what needs an extension, and what you should not touch at all.

Checkout is the one part of a Shopify store you cannot rewrite, and that is deliberate. It handles payment, fraud, tax, wallets and compliance, and Shopify has spent years optimising it across an enormous sample of transactions. Every constraint you run into there is protecting something.

That does not mean it is fixed. Between theme settings, checkout branding, Shopify Functions and checkout UI extensions, there is a real amount you can change — and a smaller amount you should. The trick is knowing which category a given request falls into before you promise anybody a timeline.

This is the map: what is available on every plan, what needs Plus, what needs code, and the things worth doing versus the things people ask for and regret.

Why is checkout locked down?#

Because it is the highest-consequence surface in commerce and it converts better than anything you would build.

A checkout handles card data, regional tax rules, address validation across dozens of formats, wallet integrations, fraud scoring and a long tail of payment methods. Getting any of those wrong costs money directly or creates a compliance problem. Shopify absorbs that entire surface, and the price of that is that you cannot restructure it.

The second reason is empirical. Shopify tests its checkout against a volume of transactions no individual store can approach, so the default arrangement is usually better than a bespoke alternative — which makes most of the customisation people want a request to make the funnel worse in a way that feels like control.

ChangeRequirement
Logo, colours, typographyAny plan — checkout branding
Guest checkout, required fieldsAny plan — settings
Order status page contentAny plan — additional scripts
Discount and shipping logicShopify Functions
Extra fields, banners, upsellsCheckout UI extensions
Custom layout or step orderPlus, within limits
Replacing checkout entirelyNot advisable
What you can change, and what it takes

Most requests land in the middle three rows, which is good news — those are supported paths rather than workarounds, and they survive platform updates.

The old script-based approach is gone#

If you find a tutorial about checkout.liquid, it is describing a deprecated approach. Extensibility replaced it, and anything still relying on the old mechanism is on borrowed time. Building new work on Functions and UI extensions is the only durable option.

What can you change on any plan?#

More than most stores bother with, and the branding is the part that actually matters.

Checkout branding#

Logo, colours, fonts, corner radii and button styles are configurable in the admin without code. This is the highest-value change available because the handoff from your storefront to a checkout that looks like a different company reads as a redirect gone wrong, at the least forgiving moment in the funnel.

Match it closely rather than approximately. The same accent colour, the same button shape, the same typeface if it is available. A customer should not be able to tell that the domain changed, and every point of visual discontinuity is a moment of doubt in a flow where doubt is expensive.

Guest checkout#

A setting, and forcing account creation is among the most expensive defaults available. Offer the account after the purchase, when the customer has a reason to want one. This is a checkbox and it is worth more than most design work.

Which fields are required#

Company name, second address line and phone number can each be optional, required or hidden. Every unnecessary required field is friction, and phone number in particular is one people resist giving. Require it only if the carrier genuinely needs it.

The order status page#

It accepts additional scripts, which is where post-purchase tracking belongs and where the completed order becomes visible to your analytics. Without this, every experiment result is missing its outcome, because the store sees people leave for checkout and never learns what happened.

What do Shopify Functions do?#

They let you change checkout logic — discounts, shipping, payment options, bundles — with code that runs on Shopify's infrastructure.

A Function is a small program, compiled to WebAssembly, that Shopify executes at a defined point in the checkout. It receives structured input and returns structured output, and because it runs server-side within the platform there is no script on the page and no latency added to the customer.

Discount logic beyond what the admin allows#

Tiered discounts, buy-one-get-one across specific collections, customer-segment pricing, quantity breaks. All of this used to require an app rewriting the cart; a Function expresses it directly and applies it consistently in checkout.

Hiding or reordering shipping and payment methods#

Hiding express shipping for addresses it cannot serve, hiding cash on delivery above an order value, promoting a method for a particular region. These are common requests and they are exactly what Functions are for.

They run everywhere, which is the point#

Cart logic implemented in the theme applies only where the theme runs. A Function applies in checkout, in draft orders and through the API — so a rule cannot be bypassed by a route you forgot about. That consistency is the real argument for moving logic into them.

They are code, with the usual obligations#

A Function is deployed software: it needs a repository, review, testing and somebody who understands it in a year. That is a step up from configuring an app, and it is why the decision to write one should be deliberate rather than incidental.

What are checkout UI extensions?#

Small components you can place at defined points in the checkout to show information or collect input.

An extension renders in a sandboxed frame using Shopify's own components, so it inherits the checkout's styling and accessibility rather than fighting it. You get placement, not layout control — which is the constraint that keeps a hundred thousand checkouts from degrading individually.

Collect the thing you actually need#

A delivery instruction, a gift message, a VAT number, a purchase order reference. These are genuine requirements and the extension point exists precisely so they do not have to become a note in the order comments.

Show trust and delivery information#

A returns statement or a delivery estimate at the payment step addresses the hesitation that occurs there. It is the same content as on the product page, repeated at the moment of commitment where it does the most work.

Post-purchase upsells convert well#

An offer after payment and before the thank-you page is the one upsell placement that does not risk the original order, because the money is already taken. On stores with a natural add-on it is a genuine revenue increase for modest effort.

Every extension is a decision point#

Each addition is something else for a customer to read while deciding whether to pay. Two well-chosen extensions help; five turn a fast flow into a page of components. The default answer to "can we add a field" should be no unless somebody can say what happens to the data.

One caution about extension points: they are versioned, and Shopify deprecates targets as the checkout evolves. An extension written against a placement that later disappears stops rendering, usually without an obvious failure — which is an argument for keeping the number of them small and knowing who owns each one.

What needs Shopify Plus?#

The deeper layout control, and a few things that matter at scale.

More branding control#

Plus exposes more of the checkout's appearance — layout variants, more granular styling, and the ability to depart further from the default arrangement. For a brand where the checkout visibly not matching is a genuine problem, this is the main reason it is on the list.

Checkout on your own domain#

Reducing the visible discontinuity of the handoff. It is a real improvement in perceived continuity and it is one of the more concrete things the plan buys.

Scripts and B2B features#

Wholesale pricing, customer-specific catalogues and payment terms are Plus features and they are what usually justifies it for a business selling to other businesses — much more than the checkout styling does.

Do not upgrade for the checkout alone#

The cost difference is substantial and the checkout gains are incremental. Plus makes sense when the volume, the B2B requirements or the multi-store needs justify it; upgrading to change a layout is an expensive way to buy a small visual improvement.

What should you not do?#

Four things people ask for that make the funnel worse.

Do not build your own checkout#

The Storefront API can drive one, and doing so takes on PCI scope, fraud handling, tax calculation, wallet support, address validation and every regional edge case Shopify has already solved. The number of stores for which this is correct is very small, and it is a decision that should survive a serious conversation about liability. It applies equally when going headless — the storefront moves, the checkout stays.

Do not add steps#

Every additional screen loses people. A survey, an upsell interstitial or a confirmation step inserted before payment costs orders, and the data collected is worth less than the orders lost. If you need the information, ask afterwards.

Do not advertise the discount field#

A prominent empty promo box tells a shopper that a better price exists and they do not have it. Some leave to hunt for a code and do not return. Collapsed behind a small link, it stays available to those who have one — one of the cheapest fixes in the whole funnel.

Do not collect data you have nowhere to put#

A custom field added at checkout has to arrive somewhere a human or a system will read it. A delivery instruction that lands in an order note nobody opens is worse than not asking, because the customer believes it was received. Decide the destination before adding the field.

Do not put wallets below the form#

Express payment buttons convert well specifically because they remove typing an address on a phone. Placed underneath the form, they are only reached by people who have already done the typing, which defeats the purpose entirely.

How do you test checkout changes?#

Carefully, with real transactions, because the failure mode is lost orders rather than a bug report.

Use a test payment gateway first#

Shopify provides a test mode that lets you complete orders without charging anything, which is the right place to walk the whole flow — including the failure paths, a declined card and an invalid address.

Then do one real transaction#

Test mode does not exercise every path, and a small real order on the live store catches the things it misses: the actual payment provider, the real confirmation email, the order status page scripts. Refund it afterwards.

Test on a phone, on mobile data#

Most checkouts happen on phones, frequently on a connection worse than your office wifi. A wallet flow that works on desktop and stalls on a cellular connection is a common and invisible failure.

Check the emails as well as the pages#

The order confirmation, shipping notification and refund emails are part of checkout as customers experience it, and they are edited in a different place than everything else — which is why they are the part most often left on the default template with a mismatched logo.

What actually moves the number?#

Three things, and none of them are visual.

  1. Guest checkout enabled — a setting, and one of the largest single effects available.
  2. Express wallets placed above the form — removes address typing on the device where most orders happen.
  3. The discount field collapsed — stops sending price-sensitive shoppers away to search for a code.

All three are configuration rather than development, and a store that has not done them is leaving more on the table than any extension will recover. Do these before commissioning anything.

Then match the branding#

Once the mechanics are right, visual continuity across the handoff is the next most valuable change, and it is also free. It is worth an hour of careful matching rather than fifteen minutes of approximate matching.

Then check the abandoned-checkout data#

Shopify records checkouts that were started and not completed, including where the customer stopped. That is a free diagnostic most stores never open, and it points at the specific step losing people rather than requiring a hypothesis about it.

Then measure before adding anything#

An extension that adds a field or a message should be justified by a number, not by a preference. Checkout is the part of the funnel where changes are most likely to do harm, so the burden of proof is higher here than anywhere else.

What does it cost?#

An afternoon for the settings and branding, and a few days per Function or extension.

The configuration work — guest checkout, required fields, wallet placement, branding, order status scripts — is an afternoon and it captures most of the available benefit. A Function is a couple of days including testing and deployment. A UI extension is similar, plus whatever it takes to decide the data has somewhere to go.

The honest counterweight: the strongest advice in this whole area is to change very little. Shopify's checkout converts well because it has been tested against a volume of transactions no store can match, and most requests to customise it are attempts to make it feel more like the brand at the cost of making it work slightly less well. Do the three configuration changes, match the branding, and then require a genuine number before touching anything else — the checkout you did not build is usually the one that performs best.

Every constraint in Shopify checkout is protecting something. Most customisation requests are asking to make the funnel worse in a way that feels like control.

Conclusion#

Checkout is deliberately constrained because it carries payment, tax, fraud and compliance, and because Shopify has optimised it against a volume of transactions no individual store can approach. The extension points — branding settings, Shopify Functions, checkout UI extensions — are the supported way in, and anything relying on the old checkout.liquid approach is on borrowed time.

Start with what every plan allows, because that is where the value is. Enable guest checkout, make unnecessary fields optional, put express wallets above the form rather than below it, and collapse the discount field behind a link. Those are settings, they cost an afternoon, and they beat anything you could commission.

Match the checkout branding closely rather than approximately — same accent, same button shape, same typeface. A customer noticing the domain changed is a moment of doubt at the least forgiving point in the funnel, and closing that gap is free.

Use Functions for logic that must apply everywhere — tiered discounts, hiding shipping methods by region, quantity breaks — because they run server-side and cannot be bypassed by a route you forgot. Use UI extensions sparingly for information you genuinely need, and remember post-purchase upsells are the one placement that cannot cost you the original order.

Then test properly: the whole flow in test mode including declines and invalid addresses, one real transaction on the live store, on a phone over mobile data, and check the emails as well as the pages. And keep the bar high — this is the part of the funnel where a change is most likely to do harm. If you want a checkout review as part of a wider audit, that is part of the CRO work.

Frequently asked questions

Can I fully customise Shopify checkout?

No, and that is deliberate — it handles payment, tax, fraud and compliance. You can change branding on any plan, alter logic with Shopify Functions, and add components at defined points with checkout UI extensions. Layout control is limited and largely reserved for Plus.

What is the single best checkout change I can make?

Enable guest checkout if you have not. Forcing account creation before purchase is among the most expensive defaults available and it is a setting rather than a project. Moving express wallet buttons above the form is a close second, since most orders happen on phones.

Do I need Shopify Plus to customise checkout?

Not for branding, guest checkout, required fields, Functions or UI extensions — all available on standard plans. Plus adds deeper layout control, checkout on your own domain, and B2B features. Upgrading purely for checkout styling is an expensive way to buy a small improvement.

Should I remove the discount code field?

Collapse it behind a small link rather than removing it. A prominent empty promo box signals that a better price exists which the shopper does not have, and some leave to search for a code and never return. Behind a link, it stays available to anyone who actually has one.

Can I build my own checkout with the Storefront API?

Technically yes, and almost no store should. You take on PCI scope, fraud handling, tax calculation, wallet support, address validation and every regional edge case Shopify already solves. This holds even when going headless — the storefront moves and the checkout stays.

Read next Reading an Experiment Result Without Fooling Yourself

Got a project worth
writing about?