Shipping in Magento 2 | Ultimate Guide

Table of Content


Everyone involved in e-commerce has a certain idea about the way delivery works. A very vague idea, to be honest. That is why most vendors feel bewildered when dealing with real-life situations.

In this article, we’re going to discuss real cases from our support experience. So if you are new to delivery issues or if you need a bit of advice on what module to choose, this article is right for you.

Please note that we explain shipping in modules. Nevertheless, the settings are also valid for vanilla Magento.

But first things first. To meet your goals, you need to know the peculiarities of Magento delivery, as well as native Magento shipping features and their limitations.

So there we go.


Magento shipping workflow: introduction

When you place an order in a webshop, you need to choose a delivery option. To ship an order, the store needs the following information from your side.

Cart content

These are products added to the cart. They may have a different weight or size that define the delivery cost. Sometimes, a product is not something you can touch. For example, it may be a virtual book. It can be stored as a downloadable product in Magento. If so, a customer can download it as a file in their account. Hence, assuming this product doesn’t have a hard copy, it cannot be shipped.

You can also use Magento 2 virtual product's shipping. Just record the file to a disk. In this case, the disk becomes a simple product in Magento. Obviously, this product is shippable, and you can send it in a parcel.

Conclusion: shipping is applicable to deliverable (physical) products. In case your cart contains virtual products only, there should be no Magento Shipping Options section on the checkout page.


In other words, it’s the address to which the order should arrive. The location is very important because the price and delivery options available depend on this. For example, shipping from Paris to London is cheaper than from Paris to Wellington. Note that the destination is not always covered by the delivery service.

As you can see, the delivery cost is always different. It can be estimated on the cart or the checkout page only. That is why it is not usually provided on catalog pages.

Magento shipping options

This feature defines how the order will be shipped. Here a customer is to choose a service provider (DHL, UPS, USPS, webshop delivery team, etc.) and the way to send the order (by air, ground, courier, dropshipping, etc.)

In Magento, service providers are called shipping carriers, and the ways to deliver an order – shipping methods.

The basics are explained, we move on to the actual shipping process in Magento.

Magento 2 shipping options available by default

Magento provides multiple shipping methods out of the box:

  • Free Shipping
  • Flat Rate
  • Table Rates
  • In-Store Delivery
  • Integrations with popular service providers like UPS, USPS, DHL, FedEx.
  • Multiple Address Checkout.

Let’s review how to set default shipping methods in Magento 2.

Free Shipping

This is quite simple. We are just to set a Magento 2 free shipping Minimum Order Amount (MOA) and specify the countries where the delivery is free of charge. We need to set a Minimum Order Amount and specify the zone of coverage. If the destination is in this zone and the subtotal is equal to or greater than MOA, you can set Magento 2 to hide shipping method if free, or show the new Free Shipping method on the storefront, as in the example below:


free shipping



In Magento, Free Shipping has its own carrier. It is not connected to any existing service provider. Still, as a store owner, you can send packages in any convenient way

Flat Rate

Read a complete guide to Flat Rate Shipping to learn what carriers provide the shipping, how long the shipping take and whether it can save you money.

This shipping method is a bit more complicated, as we have to set a fixed shipping rate for an order or for each purchase in the order. Additionally, you can specify an extra fee.

flat rate

Just like Free Shipping, Flat Rate is a default Magento setting. It is not assigned to any delivery service provider (e.g. UPS) allowing webstore owners to engage a delivery service they prefer.

Table Rates

This shipping method allows you to set a delivery price depending on a combination of conditions like price, destination, weight, and number of items.

This is the basic functionality that establishes the dependency between the shipping price and destination. Normally, shipping expenses for the nearby locations remain the same. So, the delivery to 221B Baker Street is very likely to cost just as much as to 221A or 210 Baker Street.

Hence, it is handy to group shipping costs into zones. Usually, a zone is specified by using postcodes.

For this method, you will need to create and import CSV files with detailed information.

→ Check the example of the CSV table in our guide

table rates

In-Store Delivery

Finally, you can let your customers pick their order in your offline store. You can make this shipping method free or charge a fee. If you have multiple sales points, customers will be able to choose which one is more convenient for them.

in store delivery

Multiple Address Checkout

By default, Magento allows you to choose one method and one address per order only. The whole order (even if it comprises several products) is treated as one physical unit, which cannot be split. So, you can’t send a part of the order by sea, say, to Madagascar, and the other part by air to Japan. However, in some cases splitting an order is the only reasonable solution, and to set up Magento 2 split shipping, you can use Multiple Address Checkout.

To enable Magento 2 multiple shipping addresses, go to Admin panel > Stores > Configuration > Sales> Multishipping Settings:


After you configure the settings, users will see the additional checkout option on the frontend. If the Magento 2 shipping method not showing on frontend, double-check all settings, maybe there was a mistake somewhere.

To add a custom attribute to the shipping address in Magento 2, you need to develop a custom checkout field. For this, install our extension and do the following:

  • Go to the Manage Order Attributes grid and click Add New Order Attribute
  • Fill in Attribute Properties.
  • To make your field visible, set Show On Checkout Step to Shipping.
  • Save the attribute, navigate to the frontend and test your new field.

Delete or hide one of the Magento 2 shipping methods in frontend if you need less of them in the same way. 

Syncing Magento 2 with popular shipping carriers

Magento 2 offers out-of-the-box integrations with the popular service providers (UPS, USPS, DHL, FedEx and more).

Here’s how it works: (a) the webstore sends API queries to the carrier and (b) fetches the available shipping options and their cost. When an order is submitted, the carrier will take care of the shipment: they assign tracking number, hire a courier, etc.

These shipping carriers usually deliver parcels according to the pre-set schedule, so your customers are very unlikely to experience a “lost-at-the-post” situation. And this, in its turn, contributes to positive customer relationships with your store.

In offline delivery, the orders are processed and shipped by the store staff independently, and they don’t usually take measures to validate the address. On the contrary, delivery service integrations require a validated address for cost estimation. If the postcode-and-city combination is incorrect, the service provider will not find the destination. Hence, Magento will not show any available shipping methods.

Using these options is quite easy. You only need to connect your webshop with your account. To learn more, please check the relevant user guide.

All in all, it looks like Magento specialists have all the shipping bases covered. But why then users complain about scarce options, limited features, etc.?

In fact, the platform provides basic functionality, but its realization for every store depends on a particular store owner’s needs, which may vary greatly. For instance, you may need Magento 2 default count of the customer group functionality or set a minimum order amount for the customer group in Magento 2. That’s why it makes sense to develop additional modules to cover the issues owners can’t solve with native tools.

Amasty shipping extensions

Below we provide a set of extensions we developed to help our customers ensure seamless deliveries.

Shipping Table Rates

This extension is an advanced version of default Magento table rates.

The module creates an additional shipping carrier in Magento. The standard title is Shipping Table Rates, but you can easily change it.

A webshop admin can create an unlimited number of custom shipping methods associated with the carrier:


The rate depends on the destination, weight, size, price, and number of items, or the combination of all these parameters.

Please, check the user guide to see the examples.

Besides, this extension supports alphanumeric postcodes. Our leading support manager provides some advice on configuring shipping table rates in this case.

→ Check the most popular Q&A on our FAQ about Shipping Table Rates

Shipping Rules

This module is totally different. It doesn’t add new shipping methods to your Magento store. Instead, it modifies the delivery cost calculated by both Magento 2 and Amasty Shipping Table Rates.

For example, you want to offer free shipping for particular products. This means that the delivery charges will remain unchanged when you add or remove items in question from the cart.

To achieve this, a shipping rule with the following configuration is required.

To activate this rule with a coupon code you need to link the Shipping Rule with a Shopping Cart Rule:

→ Check the most popular Q&A on our FAQ about Shipping Rules

Shipping Restrictions

This module offers more flexible restriction options than the previous one. It works in the following way. You set a condition by using the Magento rules interface. When the condition is satisfied, the selected shipping method is not available anymore.

For example, your delivery area is Canada only. If the destination is out of Canada, the purchase can’t be shipped. In this case, you need the following configuration.

So, the restricted shipping method won’t be available.

By contrast, if the order is to be shipped to Canada, this delivery option will appear in the cart and at the checkout again.

There’s another possibility. Some products are banned in, say, California. If this product is in the cart and the destination is in California, there should be no shipping options available.

It’s also possible to disable particular payment methods by using Magento 2 Payment Restrictions.

→ Check the most popular Q&A on our FAQ about Shipping Restrictions

 Shipping Suite

This plugin combines the 3 plugins we’ve described above: shipping table rates, rules, and restrictions in one solution. You can not only save money but also benefit from the synergetic effect of these modules.

Shipping & Payment by Customer Groups

This module disables certain shipping and payment options for customers altering Magento 2 default count of the customer group.

Suppose you have individual and business customers shopping in your webstore, and the latter enjoy free shipping. Meanwhile, individual customers shouldn’t be eligible for that.

With this extension, you’ll easily assign a delivery method to each allowed or banned group. As well as set Magento 2 minimum order amount for the customer group.

Delivery Date

This module enables customers to select days and time of delivery. As a store owner, you can improve the delivery schedule by disabling all the unavailable periods from the calendar. All your customers will be notified immediately.

A customer can specify the comfortable schedule: weekday morning (before going to the office), Sunday afternoon, etc. There’s no need to call anyone if you need to schedule an immediate or postponed delivery:

→ Check the most popular Q&A on our FAQ about Delivery Date

Dimensional Shipping Weight

Sometimes you need to calculate the shipping rate considering not only the weight but also the volume of a package. For this, you can calculate the dimensional weight like package length added to its width and height (volume) and then divided by a DIM factor (or rate).

This method allows you to set a very flexible shipping system and minimize costs.

Check out answers on top 3 questions about Dimensional Shipping Weight:

→ This isn’t working out. What do I do?

→ How to set up dimensional weight for configurable product?

→ How will the total shipping rate be calculated if one of the products in the cart has a dimensional weight, and the other has a usual weight?

Magento 2 Store Pickup with Locator

To extend the default Magento in-store delivery method, you can use our extension. It offers advanced features like a store locator widget that you can place on any page of your website.

store pickup

Improve user experience by allowing them to choose the needed store on the map, specify day and time when they want to pick up the order, check product availability at specific stores.

Free Shipping Bar

The plugin helps you make a free shipping option notable, inform users about the amount left until free shipping, and increase the average cheque.

free shipping bar


Moreover, you can set different shipping bars for different customer groups and store views, customize the bar design and position on the page.

Shipping Cost Calculator

High shipping costs can lead to an abandonment rate increase. This extension allows your customers to check how much delivery to their destination point will cost before making a purchase, right on the product page:

shipping cost calculator

Also, you can notify users if you don’t ship to the needed area, which in turn will improve customer loyalty.

Default Shipping Method

This functionality is included in our Magento 2 One Step Checkout extension. It allows determining a visitor’s location and suggests the shipping method allowed for this location.

If geo information is not available, the module will use default values. As a result, your customers will see the pre-calculated delivery price and proceed to the checkout immediately. For more information on setting up this extension please check the user guide.

Real-life examples from support team

In this section, I will discuss common use cases reported by our clients as well as our recommendations on addressing them.

The core extension in these examples is Shipping Table Rates. This module offers solutions for a number of cases, and it gets more effective when mixed with other modules. Before you dive in, please read about the most essential patterns of this product.

How to set free delivery for any shipping method?

For this, You can use Magento default Cart Price Rules. This is a default functionality, so please refer to Magento 2 user guide to learn more.

Every rule has a Free Shipping field. It allows shipping the order either with a discount or for free.

Suppose we have a simple shipping method – $10 per kg:

Now we can create a coupon-based cart price rule. In this example, we offer a 70% discount.

When it is set to “For shipment with matching items”, there will be a discount equal to the shipping charge. The order will be sent for free.

If you choose “For matching items only”, it will work as if products from “Actions” tab were absent from the cart.

How to set free shipping for the cheapest delivery only?

In the previous example, we had two delivery options available – $5 and $10. We reduced the delivery charge to zero. In this case, the cost is the same, so the customer can choose the option they like.

When the delivery is free for a customer, the store owner still has to pay for it. Hence, it makes sense to limit the offer by applying the discount to particular methods only.

We will extend the previous example by creating a shipping rule. Flat Rate is cheaper, so our goal is to make only flat rate delivery free.

To achieve this, you have to disable free shipping in the cart price rule and put 0 in the Delivery Cost field:

How to enable different delivery methods with and with no coupons?

In the case above, we reduced the delivery charge for one method. We can also disable all the other options and make this price the only one available.

To achieve this, we use Amasty Shipping Restrictions.

How to allow free shipping for particular products only?

Let’s discuss this with the help of an example.

At Amasty, we like the orange color. So, I will offer free shipping for orange clothes only. To achieve this in Magento 2 please specify a shipping method. To make this, I need to specify the condition in the Products tab:

Now, if I remove orange products from the cart, the shipping cost will remain the same.

To inform clients about promotions of the kind, you can use

How to set an extra charge for fragile products?

Some products are fragile and they need to be treated gently. For a store manager, this means that there are additional delivery expenses. Shipping Rules allows making the shipping cost higher to cover these fees.

Magento 2 Product Labels can help you with informing the customer about the increased shipping cost.

How to create rules for particular customers?

Customer Groups is a built-in Magento functionality that classifies customers. Here is the respective user guide.

Magento extensions help to combine this classification with a particular task, for example, setting Cart Price Rules:

It’s possible to define the scope for Shipping Table Rates, Shipping Rules and Restriction Rules in the same way.

How to set Customer Group functionality in Magento 2 Customer Segmentation?

Customer Group is a static entity. Every customer can be assigned to a single group, and a webshop manager can change the group only manually. In its turn, a segment is a dynamic unit: people who have a birthday soon, people who have more than 3 completed orders, people who spent more than $1000, etc.

When we set a rule (whatever the type) in Magento 2 Customer Segmentation, customer attributes and customer segments can be a condition:


conditions-all-true edit-shipping-restriction

What is Magento 2 multishipping?

Multishipping is a form of shipping that involves making shipments from multiple locations. For example, your inventory is stored in multiple locations/warehouses. You receive an order from a customer consisting of several products that are stored in different warehouses. Usually the goods are shipped from the warehouse closest to the customer. However, such orders may contain items that are in different warehouses and will therefore be shipped separately.


Can I enable multi-shipping functionality in Magento 2 for customers to ship items to multiple addresses in a single order?

Yes, Magento 2 supports multi-shipping functionality, allowing customers to ship items to multiple addresses in a single order. Customers can specify different shipping addresses for each item during the checkout process, making it convenient for them to send products to multiple recipients in a single transaction. This feature can be enabled in the Magento 2 admin panel and provides a seamless and flexible shipping experience for customers with multiple shipping needs.

Summing up

Shipping is a critical Magento function. Seemingly simple, it grows more and more complex when applied to a particular store. We hope this comprehensive guide will clear the fog for you, and you’ll be able to resolve the issues you deal with and manage your store efficiently.

If you still have troubles, please contact the support team for further assistance.

Have a few thoughts to share? Drop us a line below!

How to save on product shipping?

How to configure Shipping Methods for M2 and deal with Magento 2 shipping methods not updating?

How to introduce no-contact delivery to Magento 2 store?

Shipping zone rules in Magento 2

September 2, 2020
September 18, 2020
August 21, 2020
February 21, 2020
Really informative blog article. Fantastic.
Polina Litreyeva
February 24, 2020
Hi! Thanks for your feedback. We are glad to be helpful.
The qualityproduct
September 28, 2020
very useful information...Really all blog are great and provide useful information
Alina Bragina
September 28, 2020
Hi there, thanks for sharing your opinion!
Leave your comment

Your email address will not be published

This blog was created with Amasty Blog Pro

This blog was created with Amasty Blog Pro

© 2009-2024 Amasty. All Rights Reserved.